This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/man/doc2tex

180 lines
3.7 KiB
Perl

#!/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;
}