#!/usr/common/bin/perl
do "TeXthings";
do "getopts.pl" || die "$!";
do Getopts('n:idf:hqst');
if($opt_h)
{
print STDERR <<ENDOFHELP;
Usage: mx2tex [options]
mx2tex takes a file created by mm2mx and converts it into TeX.
Options: d debugging information
f <name> use this file for the job (from <name>.mx to <name>.tex/texnique)
h this help text
i create the indexes
n <name> use this as the name for the output files
default: woven
q operate quietly (no output)
s only have full list of defines for first chunk
ENDOFHELP
exit;
}
unless($opt_q)
{
print STDERR "mx2tex version 3, 1994 by Rob Partington\n";
if($opt_d) { push(@options,"debugging"); }
if($opt_f) { push(@options,"file:$opt_f"); }
if($opt_i) { push(@options,"indexes"); }
if($opt_n) { push(@options,"name:$opt_n"); }
if($opt_s) { push(@options,"first define"); }
if($opt_t) { push(@options,"force write"); }
print STDERR "Options:",sort(join(' + ',@options)),"\n";
undef @options;
}
$macrofile="nwindex"; if($opt_d) { $macrofile="nwidxmac"; }
$filename=$opt_f; if($opt_n) { $filename=$opt_n; }
open(TEX,">$filename.texnique") || die "$!";
if($opt_f) { push(@ARGV,"$filename.markup"); }
unless(-e "$filename.tex" && !$opt_t)
{
open(TEXCNTL,">$filename.tex") || die "$!";
print TEXCNTL <<EOTEX;
\\input $macrofile
\\def\\defined{}\\init\\output={\\plainoutput\\global\\subpageref=97}
{\\def\\shipout{\\message{[p\\the\\pageno]}\\setbox0}
\\input \\jobname.texnique \\vfill\\supereject}
\\init{\\gdef\\passtwo{}\\input \\jobname.texnique }
\\end
EOTEX
close(TEXCNTL);
}
$code=0; $text=1; $ignore=0;
whileloop:
while(<>)
{
if(/^begin code (.*)$/) { $delayed="\\nwbegincode{$1}"; $code=1; $text=5; }
elsif(/^end code/) { print TEX "\\nwendcode{}\\filbreak$defing"; $code=0; }
elsif(/^begin docs (.*)$/) { print TEX "\\nwbegindocs{$1}"; $text=0; $textmode=0; }
elsif(/^end docs/) { print TEX "\\nwenddocs{}"; }
elsif(/^text (.*)$/)
{ $text+=length $1;
if($code==1) { print TEX &escapebslash($1); }
elsif($quoting==1) { print TEX &TeXliteral($1); }
else { print TEX $1; }
$textmode=1 if $text>0;
}
elsif(/^nl$/)
{ if($code==0)
{ if($text==0)
{ if($textmode==1) { print TEX "\\nwdocspar\\noindent\n"; }
else { print TEX "\n"; }
$textmode=1; $text=1;
}
else { print TEX "\n"; }
}
elsif($quoting) { print TEX "\\nwnewline"; }
else { if($text>0) { print TEX "\n"; } }
}
elsif(/^defn ([a-z]+)\|(.*)\|(.*)\| (.*)$/)
{ $xref=$1; $name=$2;
$defing="\\makeref{$1}";
$deflist=$2; $uselist=$3;
if($opt_s && @defns{$name} eq 'plus')
{
if(($firstr=index($deflist,'}\\'))!=-1)
{ $deflist=substr($deflist,0,$firstr) . '}}'; }
if(($firstr=index($uselist,'}\\'))!=-1)
{ $uselist=substr($uselist,0,$firstr) . '}}'; }
}
print TEX "$delayed\\def\\list$deflist\\def\\ulist$uselist",
"\\moddef{\\xp{\\$1}}{",&convquotes($4),"}",
"\\inmodname\\",@defns{$name},"endmoddef";
$ignore=1;
@defns{$name}='plus';
}
elsif(/^use ([a-z]+)\|(.*)\| (.*)$/)
{
$deflist=$2;
if($opt_s)
{ $deflist=~s/^({\\\\\{.*\}).*\}$/\1\}/;}
print TEX "\\LA{}",&convquotes($3),"\\def\\list",$deflist,"\\inmodname\\RA{}";
}
elsif(/^quote$/) { $quoting=1; print TEX "{\\tt "; }
elsif(/^endquote$/) { $quoting=0; print TEX "}"; $textmode=0; }
elsif(/^file (.*)$/) { print TEX "\\filename{$1}"; }
elsif(/^literal (.*)$/) { print TEX "$1"; }
elsif(/^entry (.*)$/ && $opt_i) { print INDEX "$1\n"; }
elsif(/^index (.*)$/ && $opt_i)
{ print STDERR "creating index `$filename.$1'\n" unless $opt_q;
open(INDEX,">$filename.$1");
print INDEX "\\begingroup\\parindent=0pt\\obeylines%\n";
}
elsif(/^end index$/ && $opt_i)
{
print INDEX "\\endgroup\n";
close(INDEX);
}
}
print TEX "\\passfin\n";
syntax highlighted by Code2HTML, v. 0.9.1