package Apache::lonxml;
use strict;
use HTML::TokeParser;
use Safe;
use Apache::Constants qw(:common);
use Apache::lontexconvert;
#======================================================= Main subroutine: xmlparse
sub xmlparse {
my ($target,$content_file_string,%style_for_target) = @_;
my $pars = HTML::TokeParser->new(\$content_file_string);
my $currentstring = '';
my $finaloutput = '';
my $newarg = '';
my $tempostring = '';
my $tempocont = '';
my $safeeval = new Safe;
#------------------------- Redefinition of the target in the case of compound target
($target, my @tenta) = split('&&',$target);
#------------------------------ Stack definition (in stack we have all current tags)
my @stack = ();
my @parstack = ();
#------------------------------------------ Parse input string (content_file_string)
my $token;
while ($token = $pars->get_token) {
if ($token->[0] eq 'T') {
$finaloutput .= $token->[1];
$tempocont .= $token->[1];
} elsif ($token->[0] eq 'S') {
#------------------------------------------------------------------ add tag to stack
push (@stack,$token->[1]);
#---------------------------------------------- add parameters list to another stack
map {$tempostring .= "$_=$token->[2]->{$_},"} @{$token->[3]};
push (@parstack,$tempostring);
$tempostring = '';
$tempocont = '';
if (exists $style_for_target{$token->[1]}) {
#--------------------------------------------------------- use style file definition
$newarg = $style_for_target{$token->[1]};
if (index($newarg,'script') != -1 ) {
my $pat = HTML::TokeParser->new(\$newarg);
my $tokenpat;
my $partstring = '';
my $oustring = '';
my $outputstring;
while ($tokenpat = $pat->get_token) {
if ($tokenpat->[0] eq 'T') {
$oustring .= $tokenpat->[1];
} elsif ($tokenpat->[0] eq 'S') {
if ($tokenpat->[1] eq 'script') {
while ($tokenpat = $pat->get_token and $tokenpat->[1] ne 'script') {
if ($tokenpat->[0] eq 'S') {
$partstring .= $tokenpat->[4];
} elsif ($tokenpat->[0] eq 'T') {
$partstring .= $tokenpat->[1];
} elsif ($tokenpat->[0] eq 'E') {
$partstring .= $tokenpat->[2];
}
}
map {$partstring =~ s/\$$_/$token->[2]->{$_}/g; } @{$token->[3]};
&run($partstring,$safeeval);
$partstring = '';
} elsif ($tokenpat->[1] eq 'evaluate') {
$outputstring = &evaluate($tokenpat->[2]{expression},$safeeval);
$oustring .= $outputstring;
} else {
$oustring .= $tokenpat->[4];
}
} elsif ($tokenpat->[0] eq 'E' and $tokenpat->[1] ne 'evaluate') {
$oustring .= $tokenpat->[1];
}
}
$newarg = $oustring;
} else {
map {$newarg =~ s/\$$_/$token->[2]->{$_}/g; } @{$token->[3]};
}
$finaloutput .= $newarg;
} else {
#----------------------------------------------------- use default definition of tag
my $sub="start_$token->[1]";
{
no strict 'refs';
if (defined (&$sub)) {
$currentstring = &$sub($target,$token,\@parstack);
$finaloutput .= $currentstring;
$currentstring = '';
} else {
$finaloutput .= $token->[4];
}
use strict 'refs';
}
}
} elsif ($token->[0] eq 'E') {
pop @stack;
unless (exists $style_for_target{$token->[1]}) {
my $sub="end_$token->[1]";
{
no strict 'refs';
if (defined (&$sub)) {
$currentstring = &$sub($target,$token,\@parstack);
$finaloutput .= $currentstring;
$currentstring = '';
} else {
$finaloutput .= $token->[4];
}
use strict 'refs';
}
}
#------------------------------------------------------- end tag from the style file
if (exists $style_for_target{'/'."$token->[1]"}) {
$newarg = $style_for_target{'/'."$token->[1]"};
my @very_temp = split(',',@parstack[$#parstack]);
map {my @ret= split('=',$_); $newarg =~ s/\$$ret[0]/$ret[1]/g; } @very_temp;
$finaloutput .= $newarg;
}
pop @parstack;
}
}
return $finaloutput;
}
#================================================================== style subroutine
sub styleparser {
my ($target,$content_style_string) = @_;
#------------------------------------------------ target redefinition (if necessary)
my @target_string = '';
my $element;
($element,@target_string) = split ('&&',$target);
map {$content_style_string =~ s/\<(.*)$_\>/\<$1$element\>/g; } @target_string;
$target = $element;
#------------------------------------------------- create a table for defined target
#---------------------------------------------- from the information from Style File
my @value_style = ();
my $current_key = '';
my $current_value = '';
my $pstyle = HTML::TokeParser->new(\$content_style_string);
my $stoken;
while ($stoken = $pstyle->get_token) {
#---------------------------------------------------------- start for tag definition
if ($stoken->[0] eq 'S' and $stoken->[1] eq 'definetag') {
#------------------------------------------------------------------- new key in hash
$current_key = $stoken->[2]{name};
if ($target eq 'meta') {
#-------------------------------------------------- reserved for the metadate output
} else {
#-------------------------------------------------------------------- outtext output
while ($stoken = $pstyle->get_token and $stoken->[1] ne 'outtext') {
}
while ($stoken = $pstyle->get_token and $stoken->[0] ne 'S') {
$current_value .= $stoken->[1];
}
while ($stoken->[1] ne 'definetag') {
if ($stoken->[0] eq 'S' and $stoken->[1] eq $target) {
while ($stoken = $pstyle->get_token) {
if ($stoken->[1] ne $target) {
if ($stoken->[0] eq 'S') {
$current_value .= $stoken->[4];
}
if ($stoken->[0] eq 'E') {
$current_value .= $stoken->[2];
}
if ($stoken->[0] eq 'T') {
$current_value .= $stoken->[1];
}
} else {
last;
}
}
} elsif ($stoken->[0] eq 'S' and $stoken->[1] ne $target) {
while ($stoken = $pstyle->get_token and $stoken->[0] ne 'E') {
}
}
while ($stoken = $pstyle->get_token) {
if ($stoken->[0] eq 'T') {
$current_value .= $stoken->[1];
}
if ($stoken->[0] eq 'E') {
last;
}
if ($stoken->[0] eq 'S') {
last;
}
}
}
}
}
push (@value_style,lc $current_key,$current_value);
$current_key = '';
$current_value = '';
}
my %style_for_target = @value_style;
#-------------------------------------------------------------------- check printing
# while (($current_key,$current_value) = each %style_for_target) {
# print "$current_key => $current_value\n";
# }
return %style_for_target;
}
#=============================================================== Subroutine definition
#--------------------------------------------------------------------------------- Run
sub evaluate {
my ($expression,$safeeval) = @_;
return $safeeval->reval($expression);
}
sub run {
my ($code,$safeeval) = @_;
$safeeval->reval($code);
}
#===================================================================== TAG SUBROUTINES
#----------------------------------------------------------------------------- <m> tag
sub start_m {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = "\$out = lontexconvert::converted(\$in = '\$'.\"";
} elsif ($target eq 'tex') {
$currentstring = "\$";
}
return $currentstring;
}
sub end_m {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = "\".'\$') ";
} elsif ($target eq 'tex') {
$currentstring = "\$";
}
return $currentstring;
}
#-------------------------------------------------------------------------- <html> tag
sub start_html {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
}
return $currentstring;
}
sub end_html {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
}
return $currentstring;
}
#-------------------------------------------------------------------------- <head> tag
sub start_head {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
}
return $currentstring;
}
sub end_head {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
}
return $currentstring;
}
#--------------------------------------------------------------------------- <map> tag
sub start_map {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
}
return $currentstring;
}
sub end_map {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
}
return $currentstring;
}
#------------------------------------------------------------------------ <applet> tag
sub start_applet {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
}
return $currentstring;
}
sub end_applet {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
}
return $currentstring;
}
#------------------------------------------------------------------------ <select> tag
sub start_select {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
}
return $currentstring;
}
sub end_select {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
}
return $currentstring;
}
#------------------------------------------------------------------------ <option> tag
sub start_option {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
}
return $currentstring;
}
sub end_option {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
}
return $currentstring;
}
#------------------------------------------------------------------------- <input> tag
sub start_input {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
}
return $currentstring;
}
sub end_input {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
}
return $currentstring;
}
#---------------------------------------------------------------------- <textarea> tag
sub start_textarea {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
}
return $currentstring;
}
sub end_textarea {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
}
return $currentstring;
}
#-------------------------------------------------------------------------- <form> tag
sub start_form {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
}
return $currentstring;
}
sub end_form {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
}
return $currentstring;
}
#------------------------------------------------------------------------- <title> tag
sub start_title {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
}
return $currentstring;
}
sub end_title {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
}
return $currentstring;
}
#-------------------------------------------------------------------------- <meta> tag
sub start_meta {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
}
return $currentstring;
}
sub end_meta {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
}
return $currentstring;
}
#-------------------------------------------------------------------------- <body> tag
sub start_body {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
$currentstring = " \\begin{document} ";
}
return $currentstring;
}
sub end_body {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
$currentstring = " \\end{document}";
}
return $currentstring;
}
#------------------------------------------------------------------------ <center> tag
sub start_center {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
$currentstring = " \\begin{center} ";
}
return $currentstring;
}
sub end_center {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
$currentstring = " \\end{center}";
}
return $currentstring;
}
#----------------------------------------------------------------------------- <b> tag
sub start_b {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
$currentstring = " {\\bf ";
}
return $currentstring;
}
sub end_b {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
$currentstring = "}";
}
return $currentstring;
}
#------------------------------------------------------------------------ <strong> tag
sub start_strong {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
$currentstring = " {\\bf ";
}
return $currentstring;
}
sub end_strong {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
$currentstring = "}";
}
return $currentstring;
}
#---------------------------------------------------------------------------- <h1> tag
sub start_h1 {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "\\chapter{ ";
}
return $currentstring;
}
sub end_h1 {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= "}";
}
return $currentstring;
}
#---------------------------------------------------------------------------- <h2> tag
sub start_h2 {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "\\section{ ";
}
return $currentstring;
}
sub end_h2 {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= "}";
}
return $currentstring;
}
#---------------------------------------------------------------------------- <h3> tag
sub start_h3 {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "\\subsection{ ";
}
return $currentstring;
}
sub end_h3 {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= "}";
}
return $currentstring;
}
#---------------------------------------------------------------------------- <h4> tag
sub start_h4 {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "\\subsubsection{ ";
}
return $currentstring;
}
sub end_h4 {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= "}";
}
return $currentstring;
}
#---------------------------------------------------------------------------- <h5> tag
sub start_h5 {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "\\paragraph{ ";
}
return $currentstring;
}
sub end_h5 {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= "}";
}
return $currentstring;
}
#---------------------------------------------------------------------------- <h6> tag
sub start_h6 {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "\\subparagraph{ ";
}
return $currentstring;
}
sub end_h6 {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= "}";
}
return $currentstring;
}
#-------------------------------------------------------------------------- <cite> tag
sub start_cite {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "{ \\it ";
}
return $currentstring;
}
sub end_cite {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= "}";
}
return $currentstring;
}
#----------------------------------------------------------------------------- <i> tag
sub start_i {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "{ \\it ";
}
return $currentstring;
}
sub end_i {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= "}";
}
return $currentstring;
}
#----------------------------------------------------------------------- <address> tag
sub start_address {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "{ \\it ";
}
return $currentstring;
}
sub end_address {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= "}";
}
return $currentstring;
}
#--------------------------------------------------------------------------- <dfn> tag
sub start_dfn {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "{ \\it ";
}
return $currentstring;
}
sub end_dfn {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= "}";
}
return $currentstring;
}
#---------------------------------------------------------------------------- <tt> tag
sub start_tt {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "{ \\tt ";
}
return $currentstring;
}
sub end_tt {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= "}";
}
return $currentstring;
}
#---------------------------------------------------------------------------- <kbd> tag
sub start_kbd {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "{ \\tt ";
}
return $currentstring;
}
sub end_kbd {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= "}";
}
return $currentstring;
}
#-------------------------------------------------------------------------- <code> tag
sub start_code {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "{ \\tt ";
}
return $currentstring;
}
sub end_code {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= "}";
}
return $currentstring;
}
#---------------------------------------------------------------------------- <em> tag
sub start_em {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "{ \\emph ";
}
return $currentstring;
}
sub end_em {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= "}";
}
return $currentstring;
}
#----------------------------------------------------------------------------- <q> tag
sub start_q {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "{ \\emph ";
}
return $currentstring;
}
sub end_q {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= "}";
}
return $currentstring;
}
#----------------------------------------------------------------------------- <p> tag
sub start_p {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "{\\par ";
}
return $currentstring;
}
sub end_p {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= " }";
}
return $currentstring;
}
#---------------------------------------------------------------------------- <br> tag
sub start_br {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "\\\\";
}
return $currentstring;
}
sub end_br {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
}
return $currentstring;
}
#--------------------------------------------------------------------------- <big> tag
sub start_big {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "{\\large ";
}
return $currentstring;
}
sub end_big {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= " }";
}
return $currentstring;
}
#------------------------------------------------------------------------- <small> tag
sub start_small {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "{\\footnotesize ";
}
return $currentstring;
}
sub end_small {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= " }";
}
return $currentstring;
}
#---------------------------------------------------------------------- <basefont> tag
sub start_basefont {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
}
return $currentstring;
}
#-------------------------------------------------------------------------- <font> tag
sub start_font {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
}
return $currentstring;
}
sub end_font {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
}
return $currentstring;
}
#------------------------------------------------------------------------ <strike> tag
sub start_strike {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "{\\underline ";
}
return $currentstring;
}
sub end_strike {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= " }";
}
return $currentstring;
}
#----------------------------------------------------------------------------- <s> tag
sub start_s {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "{\\underline ";
}
return $currentstring;
}
sub end_s {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= " }";
}
return $currentstring;
}
#--------------------------------------------------------------------------- <sub> tag
sub start_sub {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "\$_{ ";
}
return $currentstring;
}
sub end_sub {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= " }\$";
}
return $currentstring;
}
#--------------------------------------------------------------------------- <sup> tag
sub start_sup {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "\$^{ ";
}
return $currentstring;
}
sub end_sup {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= " }\$";
}
return $currentstring;
}
#---------------------------------------------------------------------------- <hr> tag
sub start_hr {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "\\hline ";
}
return $currentstring;
}
#----------------------------------------------------------------------------- <a> tag
sub start_a {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
}
return $currentstring;
}
sub end_a {
my ($target,$token,$stackref) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
my $tempor_var = $stackref->[$#$stackref];
if (index($tempor_var,'name') != -1 ) {
$tempor_var =~ s/name=([^,]*),/$1/g;
$currentstring .= " \\label{$tempor_var}";
} elsif (index($tempor_var,'href') != -1 ) {
$tempor_var =~ s/href=([^,]*),/$1/g;
$currentstring .= " \\ref{$tempor_var}";
}
}
return $currentstring;
}
#---------------------------------------------------------------------------- <li> tag
sub start_li {
my ($target,$token,$stackref) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
my $tempor_var = $stackref->[$#$stackref-1];
if (index($tempor_var,'circle') != -1 ) {
$currentstring .= " \\item[o] ";
} elsif (index($tempor_var,'square') != -1 ) {
$currentstring .= " \\item[$\Box$] ";
} else {
$currentstring .= " \\item ";
}
}
return $currentstring;
}
sub end_li {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
}
return $currentstring;
}
#----------------------------------------------------------------------------- <u> tag
sub start_u {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= "{\\underline ";
}
return $currentstring;
}
sub end_u {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= " }";
}
return $currentstring;
}
#---------------------------------------------------------------------------- <ul> tag
sub start_ul {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
$currentstring = " \\begin{itemize} ";
}
return $currentstring;
}
sub end_ul {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
$currentstring = " \\end{itemize}";
}
return $currentstring;
}
#-------------------------------------------------------------------------- <menu> tag
sub start_menu {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
$currentstring = " \\begin{itemize} ";
}
return $currentstring;
}
sub end_menu {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
$currentstring = " \\end{itemize}";
}
return $currentstring;
}
#--------------------------------------------------------------------------- <dir> tag
sub start_dir {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
$currentstring = " \\begin{itemize} ";
}
return $currentstring;
}
sub end_dir {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
$currentstring = " \\end{itemize}";
}
return $currentstring;
}
#---------------------------------------------------------------------------- <ol> tag
sub start_ol {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
$currentstring = " \\begin{enumerate} ";
}
return $currentstring;
}
sub end_ol {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
$currentstring = " \\end{enumerate}";
}
return $currentstring;
}
#---------------------------------------------------------------------------- <dl> tag
sub start_dl {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
$currentstring = " \\begin{description} ";
}
return $currentstring;
}
sub end_dl {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
$currentstring = " \\end{description}";
}
return $currentstring;
}
#---------------------------------------------------------------------------- <dt> tag
sub start_dt {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
$currentstring = "\\item[ ";
}
return $currentstring;
}
sub end_dt {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
$currentstring = "]";
}
return $currentstring;
}
#---------------------------------------------------------------------------- <dd> tag
sub start_dd {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
}
return $currentstring;
}
sub end_dd {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
}
return $currentstring;
}
#------------------------------------------------------------------------- <table> tag
sub start_table {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
$currentstring = " \\begin{tabular} ";
}
return $currentstring;
}
sub end_table {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
$currentstring = " \\end{tabular}";
}
return $currentstring;
}
1;
__END__
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>