source: use-cases/wiki/convert-to-latex.pl @ c06475da018d2cb3d508157910e071e61aec956a

Revision c06475da018d2cb3d508157910e071e61aec956a, 2.1 KB checked in by Stanislaw Klekot <stanislaw.klekot@…>, 7 years ago (diff)

Changed "DashWiki" in LaTeX to \dashwiki.

  • Property mode set to 100755
Line 
1#!/usr/bin/perl
2
3#-----------------------------------------------------------------------------
4
5my $wiki = do { local $/ = undef; <> };
6$wiki =~ s/\r\n/\n/g;
7my $latex = $wiki;
8$latex .= "\n\n"; # some formatting is anchored to double line ending
9
10#-----------------------------------------------------------------------------
11
12$latex =~ s/^= (?:.*? +- +)(.*) =$/\\subsection{$1}/mg;
13$latex =~ s/^== (.*) ==$/\\subsubsection{$1}/mg;
14$latex =~ s/^=== (.*) ===$/\\paragraph{$1}/mg;
15do { # convert lists
16  my $indent = 0;
17  my @latex = split /\n/, $latex, -1;
18  my @outcome;
19  for my $line (@latex) {
20    if ($line =~ s/^( +)\* //) {
21      my $i = length $1;
22      if ($i > $indent) {
23        push @outcome, (" " x $indent) . "\\begin{itemize}";
24        $indent = $i;
25      } elsif ($i < $indent) {
26        $indent = $i;
27        push @outcome, (" " x $indent) . "\\end{itemize}";
28      }
29      push @outcome, (" " x $indent) . "\\item " . $line;
30    } elsif ($line eq '') {
31      while ($indent > 0) {
32        $indent -= 2;
33        push @outcome, (" " x $indent) . "\\end{itemize}";
34      }
35      $indent = 0;
36      push @outcome, "";
37    } else {
38      push @outcome, $line;
39    }
40  }
41  $latex = join "\n", @outcome;
42};
43do { # convert tables
44  # table header
45  $latex =~ s/\n\n\|\|/\n\n\\begin{tabular}[H]{l|p{6cm}|p{6cm}}\n||/g;
46
47  # table footer (it chomps "||" in the last table row, so it goes before
48  # table body)
49  $latex =~ s/\|\| *\n\n/\\\\\n\\end{tabular}\n\n/g;
50
51  $latex =~ s/\|\| *$/\\\\ \\hline/mg;
52  $latex =~ s/^\|\| */  /mg;
53  $latex =~ s/ *\|\| */ & /mg;
54};
55$latex =~ s/^----\n\n//mg;
56$latex =~ s/'''(.*?)'''/\\textbf{$1}/g;
57$latex =~ s/''(.*?)''/\\textit{$1}/g;
58$latex =~ s/\[wiki:(UseCases\/\w+)\]/$1/g;
59$latex =~ s/DashWiki/\\dashwiki{}/g;
60
61print $latex;
62
63#-----------------------------------------------------------------------------
64
65sub itemize {
66  my ($items) = @_;
67
68  $items =~ s/^ +\* //;
69  my @items = split /\n +\* /, $items;
70
71  my $latex_items = join "\n", map { "  \\item $_" } @items;
72
73  return sprintf "\\begin{itemize}\n%s\n\\end{itemize}", $latex_items;
74}
75
76#-----------------------------------------------------------------------------
77# vim:ft=perl
Note: See TracBrowser for help on using the repository browser.