180 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			180 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | #!/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; | ||
|  | } |