summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-x.ikiwiki/IkiWiki/Plugin/pandoc.pm185
-rw-r--r--events/2013/arg-for-fripost-2.mdwn19
-rw-r--r--events/2013/arg-for-fripost.mdwn145
-rw-r--r--events/2013/may-first.mdwn21
-rw-r--r--events/2019/summerparty.mdwn30
-rw-r--r--events/done.mdwn6
-rw-r--r--someevent.mdwn116
7 files changed, 519 insertions, 3 deletions
diff --git a/.ikiwiki/IkiWiki/Plugin/pandoc.pm b/.ikiwiki/IkiWiki/Plugin/pandoc.pm
index da13763..9f3e0c2 100755
--- a/.ikiwiki/IkiWiki/Plugin/pandoc.pm
+++ b/.ikiwiki/IkiWiki/Plugin/pandoc.pm
@@ -9,6 +9,60 @@ use FileHandle;
use IPC::Open2;
use File::Path qw/make_path/;
use JSON;
+use Data::Dumper;
+
+$Data::Dumper::Indent = 3;
+
+my $fh = undef;
+my $dh = undef;
+my $fnm = undef;
+my $f = undef;
+my $next = 0;
+my $base = '/tmp/pandoc';
+
+mkdir($base);
+
+# activate with 'generate_$format' in meta; turn on all with 'generate_all_formats'.
+my %extra_formats = (
+ pdf => { ext=>'pdf', label=>'PDF', format=>'latex', extra=>[], order=>1 },
+ docx => { ext=>'docx', label=>'DOCX', format=>'docx', extra=>[], order=>2 },
+ odt => { ext=>'odt', label=>'ODT', format=>'odt', extra=>[], order=>3 },
+ beamer => { ext=>'beamer.pdf', label=>'Beamer', format=>'beamer', extra=>[], order=>4 },
+ revealjs => { ext=>'revealjs.html', label=>'RevealJS', format=>'revealjs', extra=>['--self-contained'], order=>5 },
+ epub => { ext=>'epub', label=>'EPUB', format=>'epub3', extra=>[], order=>6 },
+ latex => { ext=>'tex', label=>'LaTeX', format=>'latex', extra=>['--standalone'], order=>7 },
+);
+
+sub debug_get_filename_prefix {
+
+ my $place = shift;
+ my $page = shift;
+ my $fnm_pfx = undef;
+
+ opendir($dh, $base) || die "Can't open $base: $!";
+ foreach $f (grep(/^[0-9][0-9]*/, readdir($dh))) {
+ $f =~ /^([0-9][0-9]*)\.(.*)$/;
+ $next = $1 + 1 if ($1 >= $next);
+ }
+ close($dh);
+ if ($page) {
+ $fnm_pfx = sprintf "%s/%.3d.%s.%s", $base, $next, $place,
+ $page =~ s/\//-/rg;
+ } else {
+ $fnm_pfx = sprintf "%s/%.3d.%s", $base, $next, $place;
+ }
+ return $fnm_pfx;
+}
+
+# DEBUG Print
+print "D: First file read.\n";
+$fnm = debug_get_filename_prefix ("verify");
+open($fh, '>', $fnm) or die "Could not";
+print $fh "Hej du glade på fil\n";
+print $fh "Detta är filen i '/home/gustav/git/fripost/wiki/.ikiwiki/IkiWiki/Plugin'\n";
+close $fh;
+# END
+
# activate with 'generate_$format' in meta; turn on all with 'generate_all_formats'.
my %extra_formats = (
@@ -22,6 +76,16 @@ my %extra_formats = (
);
sub import {
+
+ # DEBUG Print
+ print "D: Run import.\n";
+ my $fnm_pfx = debug_get_filename_prefix ("import","");
+ my $fnm = $fnm_pfx;
+ open($fh, '>', $fnm) or die "Could not open $fnm .";
+ print $fh "Import.\n";
+ close $fh;
+ # END
+
my $markdown_ext = $config{pandoc_markdown_ext} || "mdwn";
# May be both a string with a single value, a string containing commas or an arrayref
@@ -70,6 +134,11 @@ sub import {
sub getsetup () {
+
+ # DEBUG
+ print "D: Run getsetup.\n";
+ # END
+
return
plugin => {
safe => 1,
@@ -345,6 +414,7 @@ sub getsetup () {
sub htmlize ($@) {
+
my $format = shift;
my %params = @_;
my $page = $params{page};
@@ -353,6 +423,27 @@ sub htmlize ($@) {
local(*PANDOC_IN, *JSON_IN, *JSON_OUT, *PANDOC_OUT);
my @args = ();
+ # DEBUG Print params
+ print "D: Run htmlize for ", $page, "\n";
+ my $fnm_pfx = debug_get_filename_prefix ("htmlize", $page);
+ my $m = 0;
+ $fnm = sprintf "%s.%.1d.%s", $fnm_pfx, $m++, "params";
+ open($fh, '>', $fnm) or die "Could not";
+ $Data::Dumper::Indent = 2;
+ print $fh Dumper(%params), "\n";
+ close $fh;
+ # END
+
+ # DEBUG Print half way pagestate pagestate
+ $fnm = sprintf "%s.%.1d.%s", $fnm_pfx, $m++, "early-pagestate";
+ open($fh, '>>', $fnm);
+ my %pagestate_dumper = (
+ $page => $pagestate{$page},
+ );
+ print $fh Data::Dumper->Dump([\%pagestate_dumper], [qw("pagestate")]), "\n";
+ close $fh;
+ # END
+
# The default assumes pandoc is in PATH
my $command = $config{pandoc_command} || "pandoc";
@@ -452,6 +543,20 @@ sub htmlize ($@) {
warn "WARNING: Unexpected format for meta block. Incompatible version of Pandoc?\n";
}
+ # DEBUG Half way content which is plenty data
+ print "D: Pandoc command: ", " ", $command, " ", '-f', " ",
+ $markdown_fmt, " ", '-t', " ", 'json', " ", @args,
+ "\n";
+
+ $fnm = sprintf "%s.%.1d.%s", $fnm_pfx, $m++, "early-content";
+ open($fh, '>>', $fnm);
+ print $fh Data::Dumper->Dump([$content], [qw(content)]), "\n";
+ print $fh Data::Dumper->Dump([$json_content], [qw(json_content)]), "\n";
+ print $fh Data::Dumper->Dump([$decoded_json], [qw(decoded_json)]), "\n";
+ print $fh Data::Dumper->Dump([$meta], [qw(meta)]), "\n";
+ close $fh;
+ # END
+
# Get some selected meta attributes, more specifically:
# (title date bibliography csl subtitle abstract summary description
# version lang locale references author [+ num_authors primary_author]),
@@ -460,11 +565,15 @@ sub htmlize ($@) {
my @format_keys = grep { $_ ne 'pdf' } keys %extra_formats;
my %scalar_meta = map { ($_=>undef) } qw(
title date bibliography csl subtitle abstract summary
- description version lang locale);
+ description version lang locale
+ titlesort tag tags
+ );
+
$scalar_meta{$_.'_template'} = undef for @format_keys;
my %bool_meta = map { ("generate_$_"=>0) } keys %extra_formats;
- my %list_meta = map { ($_=>[]) } qw/author references/;
+ my %list_meta = map { ($_=>[]) } qw/author references tags/;
$list_meta{$_.'_extra_options'} = [] for @format_keys;
+
my $have_bibl = 0;
foreach my $k (keys %scalar_meta) {
next unless $meta->{$k};
@@ -585,16 +694,51 @@ sub htmlize ($@) {
close JSON_IN;
my @html = <PANDOC_IN>;
+
close PANDOC_IN;
waitpid $to_html_pid, 0;
+ print "D: Pandoc command: ", " ", $command, " ", '-f', " ",
+ 'json', " ", '-t', $htmlformat, " ", @html_args, "\n";
+
$content = Encode::decode_utf8(join('', @html));
# Reinstate placeholders for inline plugin:
$content =~ s{::INLINE::PLACEHOLDER::(\d+)::}
{<div class="inline" id="$1"></div>}g;
+ # DEBUG Print meta
+ $fnm = sprintf "%s.%.1d.%s", $fnm_pfx, $m++, "meta";
+ open($fh, '>>', $fnm) or die "Could not";
+ print $fh "\n";
+ print $fh Data::Dumper->Dump([\%scalar_meta], [qw(scalar_meta)]), "\n";
+ print $fh Data::Dumper->Dump([\%bool_meta], [qw(bool_meta)]), "\n";
+ print $fh Data::Dumper->Dump([\%list_meta], [qw(list_meta)]), "\n";
+ close $fh;
+ # END
+
+ # DEBUG Print pagestate again
+ $fnm = sprintf "%s.%.1d.%s", $fnm_pfx, $m++, "return-pagestate";
+ open($fh, '>>', $fnm);
+ my %pagestate_dumper = (
+ $page => $pagestate{$page},
+ );
+ print $fh Data::Dumper->Dump([\%pagestate_dumper], [qw("pagestate")]), "\n";
+ close $fh;
+ # END
+
+ # DEBUG Print return content
+ $fnm = sprintf "%s.%.1d.%s", $fnm_pfx, $m++, "return-content";
+ open($fh, '>>', $fnm);
+ print $fh Dumper($content), "\n";
+ close $fh;
+ # END
+
+ # DEBUG
+ print "D: Return htmlize.\n";
+ # END
+
return $content;
}
@@ -602,16 +746,36 @@ sub htmlize ($@) {
sub pagetemplate (@) {
my %params = @_;
my $page = $params{page};
+
+ # DEBUG
+ print "D: Run pagetemplate for $page\n";
+ # END
+
my $template = $params{template};
foreach my $k (keys %{$pagestate{$page}{meta}}) {
next unless $k =~ /^pandoc_/;
$template->param($k => $pagestate{$page}{meta}{$k});
}
+
+ # DEBUG Print pagetemplate data
+ my $fnm_pfx = debug_get_filename_prefix ("pagetemplate", $page);
+ my $m = 0;
+ my $fnm = sprintf "%s.%.1d.%s", $fnm_pfx, $m++, "data";
+ open($fh, '>', $fnm) or die "Could not";
+ print $fh Data::Dumper->Dump([%params], [qw(params)]), "\n";
+ print $fh Data::Dumper->Dump([$template], [qw(teplate)]), "\n";
+ close $fh;
+ # END
+
+ return $template;
}
sub pageactions {
my %args = @_;
my $page = $args{page};
+
+ print "D: Run pageactions for ", $page, "\n";
+
my @links = ();
return unless $pagestate{$page}{pandoc_extra_formats};
my @exts = sort {
@@ -633,6 +797,11 @@ sub pageactions {
sub export_file {
my ($page, $ext, $json_content, $command, @args) = @_;
+
+ # DEBUG
+ print "D: Run export_file for $page.\n";
+ # END
+
my ($export_path, $export_url) = _export_file_path_and_url($page, $ext);
my $subdir = $1 if $export_path =~ /(.*)\//;
my @extra_args = @{ $extra_formats{$ext}->{extra} };
@@ -684,6 +853,11 @@ sub export_file {
@args, @extra_args) or die "Could not open pipe for $ext: $!";
print EXPORT $json_content;
close EXPORT or die "Could not close pipe for $ext: $!";
+
+ print "D: Pandoc command: ", " ", $command, " ", '-f' =>
+ 'json', " ", '-t' => $to_format, " ", '-o' =>
+ $tmp_export_path, " ", @args, " ", @extra_args;
+
if ($indirect_pdf && $tmp_export_path ne $export_path) {
my @latexmk_args = qw(-quiet -silent);
if (grep { /xelatex/ } @extra_args) {
@@ -723,6 +897,12 @@ sub remove_exported_file {
if ($@) {
warn "WARNING: remove_exported_file; page=$page, ext=$ext: $@\n";
}
+
+ # DEBUG
+ print "D: remove_exported_file: ",
+ "file removed for $page and $ext: $export_path.\n";
+ # END
+
}
}
@@ -741,7 +921,6 @@ sub _export_file_path_and_url {
return ($export_path, $export_url);
}
-
## compile_string and unwrap_c are used to make the meta data structures
## easier to work with for perl.
diff --git a/events/2013/arg-for-fripost-2.mdwn b/events/2013/arg-for-fripost-2.mdwn
new file mode 100644
index 0000000..5137e98
--- /dev/null
+++ b/events/2013/arg-for-fripost-2.mdwn
@@ -0,0 +1,19 @@
+---
+title: Argumentera för Fripost 2
+author:
+ - Fripost genom arrangörer
+ - Fler
+date: måndag 19 maj 2013
+titlesort: 2013-05-19
+abstract: |
+ hej du glade
+ ta en spade
+...
+
+Tid och plats
+ : Söndag 19 maj, kl 16, Slottsskogen
+
+*TODO: Lägg till beskrivning*
+
+
+Test
diff --git a/events/2013/arg-for-fripost.mdwn b/events/2013/arg-for-fripost.mdwn
new file mode 100644
index 0000000..8c7a41c
--- /dev/null
+++ b/events/2013/arg-for-fripost.mdwn
@@ -0,0 +1,145 @@
+---
+title: Argumentera för Fripost
+date: 20 februari 2013
+tag: done
+titlesort: 2013-02-20
+...
+
+[[!tag /events/done]]
+
+[[!meta title="_" sortas=2013-02-20]]
+[[!meta date="Datum"]]
+
+
+
+ Tid och plats
+
+ : Onsdag 20 februari kl 18:00 på Språkbanken.
+
+ Deltagare
+
+ : Leif-Jöran, Stian, Guilhem, Anna, och Gustav
+
+Aktivitetsdagen annonserades med
+
+> Funderar du på hur du ska övertyga dina grannar att det är värt att gå med i
+> Fripost?
+>
+> År du trött på argumentet "Min integritet är inte viktig; jag har inget att
+> dölja; dessutom ger Google mig allt som jag behöver"?
+>
+> Vill du förbättra din argumentation för Friposts sak?
+>
+> […]
+>
+> Vi ska arbeta med rollspel och forumteater för att tillsammans
+> utveckla hur man kan diskutera de frågor som engagerar Friposts medlemmar.
+
+Tyvärr var det inte så många som dök upp, men vi som kom lyckades ändå skissa
+lite på förutsättningarna för argumentation för fripost.
+
+# Ämnesområden #
+
+Till att börja med identifierades ett antal ämnesområden:
+
+ * Reklam kontra komfort
+ * Moral och ersättning
+ * Livsstilsval
+ * Integritet, personlig (min) och som samhällsansvar
+ * Storlek på tillhandahållaren (Google kontra Fripost)
+ * Konsument eller Medborgare
+ * Pålitlighet
+ * Fri programvara och öppna standarder
+
+Att sortera dem är en fråga för framtida aktivitetsdagar.
+
+Det finns flera kopplingar att göra mellan ämnesområdena, och vissa
+ämnesområden kan behöva en kommentar. De två första ämnena "Reklam kontra
+komfort" och "Moral och ersättning" kontrasterar flera olika inställningar:
+
+ * De som tar del av reklamfinansierade produkterna har ett moraliskt ansvar att låta sig utsättas för reklam.
+ * De som förespråkar en reklamfri värld har ett moraliskt ansvar att med hjälp av tekniska lösningar, till exempel Adblock, filtrera bort reklamen trots att de tar del av reklamfinansierade produkter.
+
+Att inte behöva utsättas för reklam har högre komfort. Fripost kan utgöra ett
+bekvämt och moraliskt korrekt sätt att få reklamfri e-post.
+
+Kommersialistiska elektroniska kommunikationslösningar, som till exempel
+Facebook, ingår i mångas livsstilsval. Det är viktigt att inte kritisera hur
+folk väljer att leva sina liv.
+
+Distinktionen mellan konsument och medborgare har kopplingar till
+integritetsfrågan. Betrakta följande illustration:
+
+ Konsument Medborgare
+ ------------------------ -------------------------------
+ | |
+ Eget dåligt samvete Ansvar för samhället
+ | |
+ Använda Friposts lösning Gå med i föreningen
+ | |
+ Personlig integritet Minska stora aktörers påverkan
+ ------------------------ -------------------------------
+
+Denna diskussion kan uttömmas ännu mer.
+
+
+# Kategorier av personer att bemöta #
+
+Vi identifierade också flera motsatspar av personligheter
+
+ 1. Gällande elektronisk kommunikation
+ 1. Nybörjare
+ 2. Erfarna
+ 2. Gällande inställning till fria lösningar
+ 1. Vänligt inställda
+ 2. De som inte bryr sig
+ 3. Gällande om man är personligt noga
+ 1. De som bryr sig
+ 2. De som inte bryr sig
+
+Vi frågade oss vilka som är lättövertygade, gärna går med, och vilka som
+använder lösningen.
+
+Svårast att övertyga är de som inte bryr sig men är erfarna av
+kommunikationslösningar. Lättast att övertyga är de som är erfarna, bryr sig
+och är intresserade av fria lösningar. Det kan hända att nybörjare enklare
+värvas.
+
+
+# Konkurrenter #
+
+De två främsta konkurrenterna, som används i argumentationen, är Google och
+Facebook. Poängtera igen vikten av att inte anklaga personers val av
+livsstil; om Facebook utgör en viktig kommunikationskälla, så ska den
+erkännas. Facebook och Fripost kan användas parallellt.
+
+Lyft fram problematiken att tjänster upphör. Google har till exempel upphört
+med stödet för Google wave.
+
+# Argument för och emot Fripost och hur dessa bemöts #
+
+Till argumenten för Fripost räknas
+
+ * Vi ar vänliga och trevliga
+ * Ingen reklam
+
+Bland argumenten mot ser vi
+
+ * Att fri programvara saknar investerade intressen gör den oförutsägbar
+ * Gmail har bra sökningsfunktion
+ * Pålitligheten hos Fripost: "Hur länge orkar folk driva?" (ironi)
+
+Argumenten mot Fripost kan bemötas med till exempel följande. Stora aktörer
+står slätt, med avseende på historien. Microsoft har till exempel släppt
+bakåtkompatibiliteten för Worddokumentformatet två gånger. Man kan alltså inte öppna
+sina gamla filer längre. Det har aldrig hänt med Open Doument Format. Även
+om Roundcubes sökning lämnar saker att önska, så finns bra
+sökningsfunktionalitet i lokala klienter. Och slutligen, hållbarhet är ett
+kärnvärde för Fripost, och att de som arbetar i föreningen ska orka med
+arbetet är lika viktigt som föreningens demokratiska principer.
+
+Hållbarhetsvärdet är också viktigt i argumentationen. Det är ingen idé att
+slösa energi på att övertyga sarkastiska
+personer. När man stöter på Googlesökfunktionsargumentet rör det sig
+förmodligen om en sådan person. Med såddana gör det större nytta att
+diskutera vädret (inte klimatet då, för de är säkert klimetskeptiker också).
diff --git a/events/2013/may-first.mdwn b/events/2013/may-first.mdwn
new file mode 100644
index 0000000..d656fbc
--- /dev/null
+++ b/events/2013/may-first.mdwn
@@ -0,0 +1,21 @@
+---
+title: Första maj-demonstration
+date: Onsdag 1 Maj 2013
+tag: /events/done
+...
+
+ Tid och plats
+ : Den 1 maj 2013 kl 11 på Järntorget
+
+Aktiviteten annonserades med
+
+> Vi identifierar första-majfirarna som en viktig rekryteringsgrupp.
+> Därför träffas vi och delar ut flygblad. Som förening deltar Fripost
+> inte i något första-majtåg, men flera av Friposts medlemmar kommer gå
+> i olika tåg för den som vill slå följe.
+>
+> * Samling kl 11 på Järntorget
+>
+> * Rutten är Järntorget--Linnégatan--Andra
+> Långgatan--Masthuggstorget--Gustav Adolfs Torg
+
diff --git a/events/2019/summerparty.mdwn b/events/2019/summerparty.mdwn
new file mode 100644
index 0000000..b4c27ac
--- /dev/null
+++ b/events/2019/summerparty.mdwn
@@ -0,0 +1,30 @@
+---
+title: Sensommarfest
+date: Lördag 31 aug, 2019
+...
+
+Välkomna äntligen till Friposts sensommarfest!
+
+ Tid
+ : Lördag 31 aug, kl 13--21
+
+ Plats
+ : Keillers park, Rambergsvägen, Hisingen, Göteborg (om vädret
+ tillåter)
+
+ Anmäl intresse
+ : Fripost info <info@fripost.org>
+
+Vi träffas i Keillers park för att fira sommaren och för att se fram
+emot september och hösten. Det blir lek och spel och klurig
+tävlan. Några vill säkert också beundra Ättestupan eller annan utsikt.
+
+Alla är välkomna, medlem eller inte. Anmäl dock gärna intresse så att
+vi som arrangerar vet hur många som kan väntas.
+
+[Keillers park][1] är väsentligen Ramberget, vi träffas vid den öppna
+parken med dam på Rambersgvägen, hållplats Vågmästareplatsen eller
+Wiselgrensplatsen. Vid dåligt väder flyr vi in till en Fripost medlem
+i närheten.
+
+[1]: https://www.openstreetmap.org/relation/7518805
diff --git a/events/done.mdwn b/events/done.mdwn
new file mode 100644
index 0000000..e528418
--- /dev/null
+++ b/events/done.mdwn
@@ -0,0 +1,6 @@
+---
+title: Genomförda evenemang och aktiviteter
+...
+
+[[!inline pages="events/* and link(events/done)" archive=yes]]
+
diff --git a/someevent.mdwn b/someevent.mdwn
new file mode 100644
index 0000000..23d108b
--- /dev/null
+++ b/someevent.mdwn
@@ -0,0 +1,116 @@
+---
+title: Evenemang några stycken
+author: Fripost genom Gustav Eek
+date: Augusti 2019
+...
+
+Här följer en lista på evenemang. Listan skapad med
+ikiwikis [inline][inl_dr]-direktiv vilket tillhandahålls
+av [inline][inl_pl]-insticksmodulen.
+
+**Innehåll**
+
+[[!toc levels=10]]
+
+
+# Filtrering
+
+Passerde aktiviteter filtreras på en absolut wikietikett
+([wikitag][tag]) `[[/events/done]]`. Kommande aktiviteter är således
+alla övriga aktiviteter.
+
+Gällande etiketterna funkar wikilänkar ([wikilink][link]) med
+godtycklig länktext, `[[Genomförd|/events/done]]`, men inte
+Pandoc-länkar, `[genomförd](done)`. Ettiketter är väsentligen dolda
+wikilänkar.
+
+Anledningen till att använda absoluta länkar är att mönstren (glob)
+for filtreringen inte verkar fungera för relativa länkar.
+
+[inl_dr]: https://ikiwiki.info/ikiwiki/directive/inline/
+[inl_pl]: https://ikiwiki.info/plugins/inline/
+[link]: https://ikiwiki.info/ikiwiki/wikilink/
+[tag]: https://ikiwiki.info/ikiwiki/directive/tag/
+
+# Sortering
+
+Visningsordning ska vara omvänt per datum. Tekniskt hur sidorna ska
+sorteras är dock inte trivialt. Läs
+till [sorting (pagespec)][sorting]. Idealt vore om YAML-metadatafältet
+*date* kunde snappats upp (se avsnitt [Metadata och Pandoc]) nedan).
+
+Förmodligen blir det ikiwiki-direktivet [meta][meta] med parameter
+*sortas* som gäller.
+
+[sorting]: https://ikiwiki.info/ikiwiki/pagespec/sorting/
+[meta]: https://ikiwiki.info/ikiwiki/directive/meta/
+
+
+# Mallar
+
+Inkluderingen kontrolleras genom ikiwikis mallar
+([templates][templ]). Undertecknade identifierar två fall
+
+ 1. Fullständig visning
+ 2. Kort översiktslista, typ innehållsförteckning
+
+Den förra har standardmall *inlinepage.tmpl*
+(`template=inlinepage`). Den senare visar inget innehåll, bara
+meta-data, varför parametern `archive=yes` ska sättas, och har
+standardmall *archivepage.tmpl* (`template=archivepage`).
+
+Rubriker i de inkluderande dokumenten orsakar såklart
+problem. Förmodligen skulle man bara inkludera fram till första
+rubriken.
+
+[templ]: https://ikiwiki.info/ikiwiki/directive/template/
+
+# Metadata och Pandoc {#meta}
+
+En utmaning är att konstruera mallar utifrån Pandoc YAML metadata. För
+det behöver insticksmodulen skrven i Perl kompletteras och eventuellt
+något mer. I skrivande stund (sep 2019) har undertecknade inte
+lyckats. En modifierad version finns i detta förråd,
+*/.ikiwiki/IkiWiki/Plugin/pandoc.pm*. Dock är det versionen i
+hemkatalogen, *~/.ikiwiki/IkiWiki/Plugin/pandoc.pm* som exekveras.
+
+Processen har flera steg:
+
+ 1. Pandoc
+ 1. Extrahera YAML metadata från Markdown-filen
+ 2. Exportera den som JSON (mellanlagring)
+ 2. Ikiwiki
+ 3. Gör tillgänglig som HTML mallvariabel
+ 4. Placera i mallen: `<TMPL_VAR DATE>`
+
+# Kommande
+
+[[!inline pages="events/* and !*/done and !link(*/done)" archive=yes]]
+
+# Genomförda 2013 -- empty
+
+[[!inline
+ pages="events/2013/* and !*/done and link(*/done)"
+ sort="meta(title)"
+ reverse=yes
+ archive=yes
+ template=empty
+]]
+
+# Genomförda 2013 -- nonempty
+
+[[!inline
+ pages="events/2013/* and !*/done and link(*/done)"
+ sort="meta(title)"
+ reverse=yes
+ archive=yes
+ template=nonempty
+]]
+
+# Genomförda 2013 -- fullständig
+
+[[!inline
+ pages="events/2013/* and !*/done and link(*/done)"
+ sort="meta(title)"
+ reverse=yes
+]]