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;
 | |
| }
 |