| 1 |
wakaba |
1.1 |
Name: |
| 2 |
|
|
SW09toTeX |
| 3 |
|
|
FullName: |
| 4 |
|
|
SuikaWiki/0.9 to TeX converter |
| 5 |
|
|
URI: |
| 6 |
|
|
IW:SuikaWiki:SuikaWiki |
| 7 |
|
|
Require: |
| 8 |
|
|
SuikaWiki::Plugin::SuikaWiki09XML |
| 9 |
|
|
Initialize: |
| 10 |
|
|
my $NS_XHTML1 = 'http://www.w3.org/1999/xhtml'; |
| 11 |
|
|
my $NS_SW09 = 'urn:x-suika-fam-cx:markup:suikawiki:0:9:'; |
| 12 |
|
|
|
| 13 |
|
|
{ |
| 14 |
|
|
Name: |
| 15 |
|
|
wikiformat/SuikaWiki/0.9-to-TeX |
| 16 |
|
|
FullName: |
| 17 |
|
|
SuikaWiki/0.9 wiki syntax -> TeX |
| 18 |
|
|
URI: |
| 19 |
|
|
IW:SuikaWiki:SuikaWiki |
| 20 |
|
|
Format: |
| 21 |
|
|
$r = xml2tex (SuikaWiki::Plugin::SuikaWiki09XML::wiki2xml ($o->{content}, %$o), $o); |
| 22 |
|
|
} |
| 23 |
|
|
|
| 24 |
|
|
MODULE: |
| 25 |
|
|
my %_x2t; |
| 26 |
|
|
%_x2t = ( |
| 27 |
|
|
$NS_SW09.'anchor-end' => sub { |
| 28 |
|
|
my $x = shift; |
| 29 |
|
|
&{$_x2t{_escape}} (q( [).$x->inner_text . q(] )); |
| 30 |
|
|
}, |
| 31 |
|
|
$NS_SW09.'body' => sub { |
| 32 |
|
|
my ($x, $opt) = @_; |
| 33 |
|
|
qq(\\documentclass{jarticle} |
| 34 |
|
|
\\usepackage{txfonts} |
| 35 |
|
|
\\title{@{[&{$_x2t{_escape}} ($opt->{page})]}} |
| 36 |
|
|
\\author{SuikaWiki} |
| 37 |
|
|
\\date{@{[do {#my $d = $opt->get_data (lastmodified |
| 38 |
|
|
# => split (m#//#, $opt->{page})); |
| 39 |
|
|
my $d = $opt->_database->mtime ($opt->{page}); |
| 40 |
|
|
sprintf '%d-%02d-%02d', (gmtime $d)[5]+1900, |
| 41 |
|
|
(gmtime $d)[4] + 1, |
| 42 |
|
|
(gmtime $d)[3]}]}} |
| 43 |
|
|
\\begin{document} |
| 44 |
|
|
\\maketitle\n) |
| 45 |
|
|
.&{$_x2t{_children}} ($x, $opt) |
| 46 |
|
|
.qq(\\end{document}\n); |
| 47 |
|
|
}, |
| 48 |
|
|
$NS_XHTML1.'h1' => sub { |
| 49 |
|
|
my ($x, $opt) = @_; |
| 50 |
|
|
qq(\\section{).&{$_x2t{_escape}} ($x->inner_text).qq(}\n); |
| 51 |
|
|
}, |
| 52 |
|
|
$NS_XHTML1.'h2' => sub { |
| 53 |
|
|
my ($x, $opt) = @_; |
| 54 |
|
|
qq(\\subsection{).&{$_x2t{_escape}} ($x->inner_text).qq(}\n); |
| 55 |
|
|
}, |
| 56 |
|
|
$NS_XHTML1.'h3' => sub { |
| 57 |
|
|
my ($x, $opt) = @_; |
| 58 |
|
|
qq(\\subsubsection{).&{$_x2t{_escape}} ($x->inner_text).qq(}\n); |
| 59 |
|
|
}, |
| 60 |
|
|
$NS_XHTML1.'h4' => sub { |
| 61 |
|
|
my ($x, $opt) = @_; |
| 62 |
|
|
qq(\\subsubsubsection{).&{$_x2t{_escape}} ($x->inner_text).qq(}\n); |
| 63 |
|
|
}, |
| 64 |
|
|
$NS_XHTML1.'h5' => sub { |
| 65 |
|
|
my ($x, $opt) = @_; |
| 66 |
|
|
qq(\\subsubsubsubsection{).&{$_x2t{_escape}} ($x->inner_text).qq(}\n); |
| 67 |
|
|
}, |
| 68 |
|
|
$NS_XHTML1.'p' => sub { |
| 69 |
|
|
my ($x, $opt) = @_; |
| 70 |
|
|
qq(\n) |
| 71 |
|
|
.&{$_x2t{_children}} ($x, $opt) |
| 72 |
|
|
.qq(\n); |
| 73 |
|
|
}, |
| 74 |
|
|
$NS_XHTML1.'pre' => sub { |
| 75 |
|
|
my ($x, $opt) = @_; |
| 76 |
|
|
qq(\\begin{verbatim}\n) |
| 77 |
|
|
#.&{$_x2t{_children}} ($x, $opt) |
| 78 |
|
|
.$x->inner_text |
| 79 |
|
|
.qq(\\end{verbatim}\n); |
| 80 |
|
|
}, |
| 81 |
|
|
$NS_XHTML1.'ul' => sub { |
| 82 |
|
|
my ($x, $opt) = @_; |
| 83 |
|
|
qq(\\begin{itemize}\n) |
| 84 |
|
|
.&{$_x2t{_children}} ($x, $opt) |
| 85 |
|
|
.qq(\\end{itemize}\n); |
| 86 |
|
|
}, |
| 87 |
|
|
$NS_XHTML1.'li' => sub { |
| 88 |
|
|
my ($x, $opt) = @_; |
| 89 |
|
|
qq(\\item ).&{$_x2t{_children}} ($x, $opt) . qq(\n); |
| 90 |
|
|
}, |
| 91 |
|
|
$NS_SW09.'dr' => sub { |
| 92 |
|
|
my ($x, $opt) = @_; |
| 93 |
|
|
qq(\\item ).&{$_x2t{_children}} ($x, $opt) . qq(\n); |
| 94 |
|
|
}, |
| 95 |
|
|
$NS_XHTML1.'dt' => sub { |
| 96 |
|
|
my ($x, $opt) = @_; |
| 97 |
|
|
qq([).&{$_x2t{_children}} ($x, $opt).qq(] ); |
| 98 |
|
|
}, |
| 99 |
|
|
$NS_XHTML1.'em' => sub { |
| 100 |
|
|
my ($x, $opt) = @_; |
| 101 |
|
|
qq(\\sf{).&{$_x2t{_children}} ($x, $opt).qq(}); |
| 102 |
|
|
}, |
| 103 |
|
|
$NS_XHTML1.'strong' => sub { |
| 104 |
|
|
my ($x, $opt) = @_; |
| 105 |
|
|
qq(\\bf{\\sf{).&{$_x2t{_children}} ($x, $opt).qq(}}); |
| 106 |
|
|
}, |
| 107 |
|
|
$NS_SW09.'uri' => sub { |
| 108 |
|
|
my ($x, $opt) = @_; |
| 109 |
|
|
q($<$).&{$_x2t{_children}} ($x, $opt).q($>$); |
| 110 |
|
|
}, |
| 111 |
|
|
$NS_SW09.'fragment' => sub { |
| 112 |
|
|
my ($x, $opt) = @_; |
| 113 |
|
|
q($ >>$).&{$_x2t{_children}} ($x, $opt).q( ); |
| 114 |
|
|
}, |
| 115 |
|
|
_children => sub { |
| 116 |
|
|
my ($x, $opt) = @_; |
| 117 |
|
|
my $r = ''; |
| 118 |
|
|
for (@{$x->child_nodes}) { |
| 119 |
|
|
my $en = $_->expanded_name; |
| 120 |
|
|
if ($_x2t{$en}) { |
| 121 |
|
|
$r .= &{$_x2t{$en}} ($_, $opt); |
| 122 |
|
|
} elsif ($_->node_type eq '#element') { |
| 123 |
|
|
$r .= &{$_x2t{_children}} ($_, $opt); |
| 124 |
|
|
} elsif ($_->node_type ne '#attribute') { |
| 125 |
|
|
$r .= &{$_x2t{_escape}} ($_->inner_text); |
| 126 |
|
|
} |
| 127 |
|
|
} |
| 128 |
|
|
$r; |
| 129 |
|
|
}, |
| 130 |
|
|
_escape => sub { |
| 131 |
|
|
my $s = shift; |
| 132 |
|
|
$s =~ s{([\\{}\@!?\[\]<>%_\#\$])}{ |
| 133 |
|
|
{'','', |
| 134 |
|
|
qw{\\ $\\$ ! $!$ ? $?$ [ $[$ ] $]$ |
| 135 |
|
|
< $<$ > $>$ % \\% _ \\_ # \\# $ \\$ & \\& |
| 136 |
|
|
@ \\verb,@, ^ \\verb,^, ~ \\verb,~, |
| 137 |
|
|
{ \{ } \}} |
| 138 |
|
|
}->{$1} |
| 139 |
|
|
}ge; |
| 140 |
|
|
$s; |
| 141 |
|
|
}, |
| 142 |
|
|
); |
| 143 |
|
|
sub xml2tex ($$) { |
| 144 |
|
|
my ($x, $opt) = @_; |
| 145 |
|
|
&{$_x2t{_children}} ($x, $opt); |
| 146 |
|
|
} |
| 147 |
|
|
|
| 148 |
|
|
SuikaWiki::View->definition (sw09t__tex => { |
| 149 |
|
|
media => {type => 'text/plain', expires => 240*3600, |
| 150 |
|
|
charset => 1}, |
| 151 |
|
|
check => sub { ($_->[0]->{magic}||'SuikaWiki/0.9') =~ m!SuikaWiki/0\.9! ? 1 : 0 }, |
| 152 |
|
|
template => '%read(to=>TeX);'}); |
| 153 |
|
|
|
| 154 |
|
|
|
| 155 |
|
|
POD:LICENSE: |
| 156 |
|
|
Copyright 2003 Wakaba <w@suika.fam.cx> |
| 157 |
|
|
|
| 158 |
|
|
%%GNUGPL2%% |