Name: SW09toTeX FullName: SuikaWiki/0.9 to TeX converter URI: IW:SuikaWiki:SuikaWiki Require: SuikaWiki::Plugin::SuikaWiki09XML Initialize: my $NS_XHTML1 = 'http://www.w3.org/1999/xhtml'; my $NS_SW09 = 'urn:x-suika-fam-cx:markup:suikawiki:0:9:'; { Name: wikiformat/SuikaWiki/0.9-to-TeX FullName: SuikaWiki/0.9 wiki syntax -> TeX URI: IW:SuikaWiki:SuikaWiki Format: $r = xml2tex (SuikaWiki::Plugin::SuikaWiki09XML::wiki2xml ($o->{content}, %$o), $o); } MODULE: my %_x2t; %_x2t = ( $NS_SW09.'anchor-end' => sub { my $x = shift; &{$_x2t{_escape}} (q( [).$x->inner_text . q(] )); }, $NS_SW09.'body' => sub { my ($x, $opt) = @_; qq(\\documentclass{jarticle} \\usepackage{txfonts} \\title{@{[&{$_x2t{_escape}} ($opt->{page})]}} \\author{SuikaWiki} \\date{@{[do {#my $d = $opt->get_data (lastmodified # => split (m#//#, $opt->{page})); my $d = $opt->_database->mtime ($opt->{page}); sprintf '%d-%02d-%02d', (gmtime $d)[5]+1900, (gmtime $d)[4] + 1, (gmtime $d)[3]}]}} \\begin{document} \\maketitle\n) .&{$_x2t{_children}} ($x, $opt) .qq(\\end{document}\n); }, $NS_XHTML1.'h1' => sub { my ($x, $opt) = @_; qq(\\section{).&{$_x2t{_escape}} ($x->inner_text).qq(}\n); }, $NS_XHTML1.'h2' => sub { my ($x, $opt) = @_; qq(\\subsection{).&{$_x2t{_escape}} ($x->inner_text).qq(}\n); }, $NS_XHTML1.'h3' => sub { my ($x, $opt) = @_; qq(\\subsubsection{).&{$_x2t{_escape}} ($x->inner_text).qq(}\n); }, $NS_XHTML1.'h4' => sub { my ($x, $opt) = @_; qq(\\subsubsubsection{).&{$_x2t{_escape}} ($x->inner_text).qq(}\n); }, $NS_XHTML1.'h5' => sub { my ($x, $opt) = @_; qq(\\subsubsubsubsection{).&{$_x2t{_escape}} ($x->inner_text).qq(}\n); }, $NS_XHTML1.'p' => sub { my ($x, $opt) = @_; qq(\n) .&{$_x2t{_children}} ($x, $opt) .qq(\n); }, $NS_XHTML1.'pre' => sub { my ($x, $opt) = @_; qq(\\begin{verbatim}\n) #.&{$_x2t{_children}} ($x, $opt) .$x->inner_text .qq(\\end{verbatim}\n); }, $NS_XHTML1.'ul' => sub { my ($x, $opt) = @_; qq(\\begin{itemize}\n) .&{$_x2t{_children}} ($x, $opt) .qq(\\end{itemize}\n); }, $NS_XHTML1.'li' => sub { my ($x, $opt) = @_; qq(\\item ).&{$_x2t{_children}} ($x, $opt) . qq(\n); }, $NS_SW09.'dr' => sub { my ($x, $opt) = @_; qq(\\item ).&{$_x2t{_children}} ($x, $opt) . qq(\n); }, $NS_XHTML1.'dt' => sub { my ($x, $opt) = @_; qq([).&{$_x2t{_children}} ($x, $opt).qq(] ); }, $NS_XHTML1.'em' => sub { my ($x, $opt) = @_; qq(\\sf{).&{$_x2t{_children}} ($x, $opt).qq(}); }, $NS_XHTML1.'strong' => sub { my ($x, $opt) = @_; qq(\\bf{\\sf{).&{$_x2t{_children}} ($x, $opt).qq(}}); }, $NS_SW09.'uri' => sub { my ($x, $opt) = @_; q($<$).&{$_x2t{_children}} ($x, $opt).q($>$); }, $NS_SW09.'fragment' => sub { my ($x, $opt) = @_; q($ >>$).&{$_x2t{_children}} ($x, $opt).q( ); }, _children => sub { my ($x, $opt) = @_; my $r = ''; for (@{$x->child_nodes}) { my $en = $_->expanded_name; if ($_x2t{$en}) { $r .= &{$_x2t{$en}} ($_, $opt); } elsif ($_->node_type eq '#element') { $r .= &{$_x2t{_children}} ($_, $opt); } elsif ($_->node_type ne '#attribute') { $r .= &{$_x2t{_escape}} ($_->inner_text); } } $r; }, _escape => sub { my $s = shift; $s =~ s{([\\{}\@!?\[\]<>%_\#\$])}{ {'','', qw{\\ $\\$ ! $!$ ? $?$ [ $[$ ] $]$ < $<$ > $>$ % \\% _ \\_ # \\# $ \\$ & \\& @ \\verb,@, ^ \\verb,^, ~ \\verb,~, { \{ } \}} }->{$1} }ge; $s; }, ); sub xml2tex ($$) { my ($x, $opt) = @_; &{$_x2t{_children}} ($x, $opt); } SuikaWiki::View->definition (sw09t__tex => { media => {type => 'text/plain', expires => 240*3600, charset => 1}, check => sub { ($_->[0]->{magic}||'SuikaWiki/0.9') =~ m!SuikaWiki/0\.9! ? 1 : 0 }, template => '%read(to=>TeX);'}); POD:LICENSE: Copyright 2003 Wakaba %%GNUGPL2%%