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