180 lines
3.7 KiB
Perl
Executable File
180 lines
3.7 KiB
Perl
Executable File
#!/usr/bin/env perl
|
|
|
|
sub printTeX
|
|
{ s/`([@\w]+)\s*<->([a-z]\w*)/\\index{\l\1,\\both{\2}}`\\classboth{\1}{\2}/g;
|
|
s/`([@\w]+)\s*<-([a-z]\w*)/\\index{\l\1,\\get{\2}}`\\classget{\1}{\2}/g;
|
|
s/`([@\w]+)\s*->([a-z]\w*)/\\index{\l\1,\\send{\2}}`\\classsend{\1}{\2}/g;
|
|
s/<->([a-z]\w*)/\\both{\1}/g;
|
|
s/<-([a-z]\w*)/\\get{\1}/g;
|
|
s/->([a-z]\w*)/\\send{\1}/g;
|
|
s/(^|\s|\()([a-z]\w+)\/((\d+|\[\d+(-|,)\d+\]))/\1\\index{\2\/\3}\\predref{\2}{\3}/g;
|
|
s/(\s+|^)([a-z]\w+)\/\/((\d+|\[\d+(-|,)\d+\]))/\1\\index{\2\/\/\3}\\dcgref{\2}{\3}/g;
|
|
s/(\w\.\w)\.(\s+[a-z])/\1.\\\2/g;
|
|
s/(^|[^\w}\\])@([a-z]\w*)/\1\\index{@\2}\\objectname{\2}/g;
|
|
s/(^|[^'])<(\w[-~\w]*)>/\1\\bnfmeta{\2}/g;
|
|
s/\\class{([<\\=>]*)}/\\verb!\1!/g;
|
|
s/==>/\$\\longrightarrow\$/g;
|
|
s/^((\\index{[^}]+})+) *$/\1%/;
|
|
s/(\\index{[^}]*)\\index{[^}]*}([^}]*})/\1\2/g;
|
|
s/(\\class(get|send|both){)\\index{[^}]*}/\1/g;
|
|
s/(PL_[a-z_]*)\(([^\)]*)\)/\\funcref{\1}{\2}/g;
|
|
|
|
# Prolog special arguments ...
|
|
# TBD: pick these up automatically from pl.sty
|
|
|
|
s/\\file{([^}]*\\bnfmeta[^}]*)}/\\metafile{\1}/g;
|
|
s/\\file{([^}]*\\arg[^}]*)}/\\metafile{\1}/g;
|
|
s/\\file{([^}]+)}/\\file@\1@/g;
|
|
s/\\htmloutput{([^}]+)}/\\htmloutput@\1@/g;
|
|
|
|
s/{#!}/{\\Sexe}/g;
|
|
s/{#>}/{\\Scgt}/g;
|
|
s/{#>=}/{\\Scge}/g;
|
|
s/{#<}/{\\Sclt}/g;
|
|
s/{#=<}/{\\Scle}/g;
|
|
s/{#=}/{\\Sceq}/g;
|
|
s/{#\\=}/{\\Scne}/g;
|
|
s/{#\\}/{\\Snot}/g;
|
|
s/{#\\\/}/{\\Sor}/g;
|
|
s/{#\/\\}/{\\Sand}/g;
|
|
s/{#<=>}/{\\Sequiv}/g;
|
|
s/{#<=}/{\\Slimpl}/g;
|
|
s/{#=>}/{\\Srimpl}/g;
|
|
s/{#<==}/{\\Slimplies}/g;
|
|
s/{#==>}/{\\Srimplies}/g;
|
|
s/{#<==>}/{\\Scequal}/g;
|
|
s/{#=\\=}/{\\Scine}/g;
|
|
s/{#=:=}/{\\Scieq}/g;
|
|
s/{!}/{\\Scut}/g;
|
|
s/{,}/{\\Scomma}/g;
|
|
s/{->}/{\\Sifthen}/g;
|
|
s/{\*->}/{\\Ssoftcut}/g;
|
|
s/{\.}/{\\Sdot}/g;
|
|
s/{;}/{\\Ssemicolon}/g;
|
|
s/{<}/{\\Slt}/g;
|
|
s/{><}/{\\Sxor}/g;
|
|
s/{=}/{\\Seq}/g;
|
|
s/{=\.\.}/{\\Suniv}/g;
|
|
s/{=:=}/{\\Saeq}/g;
|
|
s/{=<}/{\\Sle}/g;
|
|
s/{<=}/{\\Sel}/g;
|
|
s/{==}/{\\Sequal}/g;
|
|
s/{=@=}/{\\Sstructeq}/g;
|
|
s/{\\=@=}/{\\Sstructneq}/g;
|
|
s/{=\\=}/{\\Sane}/g;
|
|
s/{>}/{\\Sgt}/g;
|
|
s/{>=}/{\\Sge}/g;
|
|
s/{@<}/{\\Stlt}/g;
|
|
s/{@=<}/{\\Stle}/g;
|
|
s/{@>}/{\\Stgt}/g;
|
|
s/{@>=}/{\\Stge}/g;
|
|
s/{\\\+}/{\\Snot}/g;
|
|
s/{\\=}/{\\Sne}/g;
|
|
s/{\\==}/{\\Snequal}/g;
|
|
s/{\^}/{\\Shat}/g;
|
|
s/{\|}/{\\Sbar}/g;
|
|
s/{\*}/{\\Stimes}/g;
|
|
s/{\*\*}/{\\Spow}/g;
|
|
s/{\+}/{\\Splus}/g;
|
|
s/{-}/{\\Sminus}/g;
|
|
s/{\/}/{\\Sdiv}/g;
|
|
s/{\/\/}/{\\Sidiv}/g;
|
|
s/{\/\\}/{\\Sand}/g;
|
|
s/{<<}/{\\Slshift}/g;
|
|
s/{>>}/{\\Srshift}/g;
|
|
s/{\\}/{\\Sneg}/g;
|
|
s/{\\\/}/{\\Sor}/g;
|
|
s/{\$}/{\\Sdollar}/g;
|
|
s/{\?}/{\\Squest}/g;
|
|
s/{:}/{\\Smodule}/g;
|
|
s/{:-}/{\\Sneck}/g;
|
|
s/{\?-}/{\\Sdirective}/g;
|
|
s/{-->}/{\\Sdcg}/g;
|
|
s/{~}/{\\Stilde}/g;
|
|
s/{%}/{\\Spercent}/g;
|
|
s/{{}}/{\\Scurl}/g;
|
|
s/{xXX..\\}/{\\SxXX}/g;
|
|
|
|
s/\\file@([^@]+)@/\\file{\1}/g;
|
|
s/\\htmloutput@([^@]+)@/\\htmloutput{\1}/g;
|
|
|
|
print;
|
|
}
|
|
|
|
|
|
sub expandTabs
|
|
{ while ( ($i = index($_, "\t")) != $[-1 )
|
|
{ $nspaces = 8 - $i % 8;
|
|
for( $spaces="", $i=0; $i<$nspaces; $i++ )
|
|
{ $spaces .= " ";
|
|
}
|
|
s/\t/$spaces/;
|
|
}
|
|
}
|
|
|
|
|
|
sub
|
|
expandSpecials
|
|
{ s/\^/\\verb!^!/g;
|
|
s/\|/\\verb!|!/g;
|
|
}
|
|
|
|
|
|
sub printCode
|
|
{ print;
|
|
while (<ARGV> )
|
|
{ &expandTabs;
|
|
print;
|
|
if ( /\\end{(code|verbatim)}/ )
|
|
{ return;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
sub printPceCode
|
|
{ $line = 0;
|
|
print;
|
|
while (<ARGV> )
|
|
{ $line++;
|
|
&expandTabs;
|
|
if ( /\\end{pcecode}/ )
|
|
{ print;
|
|
return;
|
|
}
|
|
chomp;
|
|
print "\\lineno{$line}\\verb`$_`\n";
|
|
}
|
|
}
|
|
|
|
|
|
sub skiptonext
|
|
{ while (<ARGV>)
|
|
{ if ( ! /^\s*$/ )
|
|
{ return;
|
|
}
|
|
last;
|
|
}
|
|
while (<ARGV>)
|
|
{ if ( ! /^\s*$/ )
|
|
{ return;
|
|
}
|
|
}
|
|
}
|
|
|
|
# MAIN PROGRAM
|
|
|
|
while (<>)
|
|
{ while ( /\\begin{pcecode}/ )
|
|
{ &printPceCode;
|
|
print "\n\\noindent\n";
|
|
&skiptonext;
|
|
}
|
|
while ( /\\begin{(code|verbatim)}/ )
|
|
{ &printCode;
|
|
print "\n\\noindent\n";
|
|
&skiptonext;
|
|
}
|
|
&printTeX;
|
|
}
|