diff options
Diffstat (limited to 'support/rnototex/latexops.pas')
-rw-r--r-- | support/rnototex/latexops.pas | 276 |
1 files changed, 276 insertions, 0 deletions
diff --git a/support/rnototex/latexops.pas b/support/rnototex/latexops.pas new file mode 100644 index 0000000000..6df005a9f8 --- /dev/null +++ b/support/rnototex/latexops.pas @@ -0,0 +1,276 @@ +[INHERIT('UTILITYOPS','ARGOPS','BASICFILEOPS', +'TREEANDLISTOPS','FLAGOPS'), environment('latexops')] + +MODULE LATEXOPS; + + +TYPE + + +countparametertype = (numericcounter, lowercasechars, uppercasechars ); + +parameterchangestates = (nochange, altered, assigned); + +pagestyletype = (empty, plain, headings, myheadings); + +liststatetype = (nostate, itemize, enumerate); + + +VAR + + LOG : [EXTERNAL] TEXT; + pagestyle : [EXTERNAL] pagestyletype; + datestring : [EXTERNAL] pckstr; + title, subtitle : [EXTERNAL] argarray; + fill : [EXTERNAL] boolean; + centering : [EXTERNAL] boolean; + flushright : [EXTERNAL] boolean; + minipageactive : [EXTERNAL] boolean; + inmarginpar : [EXTERNAL] boolean; + infootnote : [EXTERNAL] boolean; + underlineactive : [EXTERNAL] enhancmentstates; + boldactive : [EXTERNAL] enhancmentstates; + listnestlevel : [EXTERNAL] integer; + +PROCEDURE startlatex( var outfile : text; outputfont : integer ; outputstyle: pckstr ); +const + minfont = 10; + maxfont = 12; +var + pt : integer; +begin + pt := outputfont; + if (pt < minfont) or (pt > maxfont) then + pt := minfont; + writeln(outfile,'%'); + if pt = 10 then + writeln(outfile,'\documentstyle{',outputstyle,'}') + else + writeln(outfile,'\documentstyle[',pt:2,'pt]{',outputstyle,'}'); + writeln(outfile,'%'); + writeln(outfile,'% (put preamble statements here) '); + writeln(outfile,'%'); + writeln(outfile,'\begin{document}'); + writeln(outfile,'%') +end; + + +[GLOBAL] PROCEDURE closeanyopenbrackets( var outfile : text ); +var + i : integer; +begin + if not fill then + writeln(outfile,'} % - end of obeylines and obeyspaces group'); + if centering then + writeln(outfile,'\end{centering}'); + if flushright then + writeln(outfile,'\end{flushright}'); + if minipageactive then + writeln(outfile,'\end{minipage}'); + if inmarginpar then + writeln(outfile,'} % - end of margin par '); + if infootnote then + writeln(outfile,'} % - end of footnote'); + if inliteral then + writeln(outfile,'\end{verbatim}'); + for i := 1 to listnestlevel do + writeln(outfile,'\end{itemize} % - RNOTOTEX forced list close'); + stopunderline( outfile ); + stopbold( outfile ) +end; + + + +[GLOBAL] PROCEDURE endlatex( var outfile : text ); +begin + closeanyopenbrackets( outfile ); + writeln(outfile,'%'); + writeln(outfile,'% (put postamble statements here) '); + writeln(outfile,'%'); + writeln(outfile,'\end{document}') +end; + + + +[GLOBAL] PROCEDURE adjustpagestyle( var f : text; newstyle : pagestyletype); +begin + pagestyle := newstyle; + case pagestyle of + empty : writeln(f,'\pagestyle{empty}'); + plain : writeln(f,'\pagestyle{plain}'); + headings : writeln(f,'\pagestyle{headings}'); + myheadings : begin + writeln(f,'\pagestyle{myheadings}'); + write(f,'\markright{'); + writeargarray(f, title); + writeargarray(f, subtitle); + write(f, datestring ); + writeln(f,'}') + end + end; + case pagestyle of + empty : writeln(log,'\pagestyle{empty}'); + plain : writeln(log,'\pagestyle{plain}'); + headings : writeln(log,'\pagestyle{headings}'); + myheadings : begin + writeln(log,'\pagestyle{myheadings}'); + write(log,'\markright{'); + writeargarray(log, title); + writeargarray(log, subtitle); + write(log, datestring ); + writeln(log,'}') + end + end +end; + + + + +[GLOBAL] PROCEDURE writecharwidth( var f : text; nchars : integer); +const + widthofcharincm = 0.254; { 10 chars per inch, 2.54 cm per inch } + maxwidth = 20.0; + minwidth = -20.0; +var + cm : real; +begin + cm := nchars * widthofcharincm; + if cm > maxwidth then + begin + writeln(log,'[too many chars to skip, ',nchars,' = ',cm:10:2,'cm]'); + cm := 1.0 + end; + if cm < minwidth then + begin + writeln(log,'[too many chars to skip ',nchars,' = ',cm:10:2,'cm]'); + cm := -1.0 + end; + write(f, cm:6:2, 'cm '); + write(log, cm:6:2,'cm ') +end; + + + +[GLOBAL] PROCEDURE writecharheight( var f : text; nlines : integer ); +const + heightoftextincm = 0.425; { 6 lines per inch, 2.54 cm per inch } + maxheight = 25.0; + minheight = -25.0; +var + cm : real; +begin + cm := nlines * heightoftextincm; + if cm > maxheight then + begin + writeln(log,'[too many lines to skip, ',nlines,' = ',cm:10:2,'cm]'); + cm := 1.0 + end; + if cm < minheight then + begin + writeln(log,'[too many lines to skip ',nlines,' = ',cm:10:2,'cm]'); + cm := -1.0 + end; + write(f, cm:6:2,'cm '); + write(log, cm:6:2,'cm ') +end; + + + + + +[GLOBAL] PROCEDURE adjustlength( var outfile : text; modified : parameterchangestates; +lengthvalue : integer; adjustmentvalue : integer; charwidth : boolean; +latexname : pckstr ); +begin + case modified of + nochange : nullstatement; + altered : begin + write(outfile,'\addtolength{',latexname,'}{'); + if charwidth then + writecharwidth(outfile, adjustmentvalue) + else + writecharheight(outfile, adjustmentvalue); + writeln(outfile,'}') + end; + assigned : begin + write(outfile,'\setlength{',latexname,'}{'); + if charwidth then + writecharwidth(outfile, lengthvalue) + else + writecharheight(outfile, lengthvalue); + writeln(outfile,'}') + end + end; + case modified of + nochange : noconversion; + altered : begin + write(log,'\addtolength{',latexname,'}{'); + if charwidth then + writecharwidth(log, adjustmentvalue) + else + writecharheight(log, adjustmentvalue); + writeln(log,'}') + end; + assigned : begin + write(log,'\setlength{',latexname,'}{'); + if charwidth then + writecharwidth(log, lengthvalue) + else + writecharheight(log, lengthvalue); + writeln(log,'}') + end + end +end; + + + +[GLOBAL] PROCEDURE adjustcounter( var outfile : text; modified : parameterchangestates; +countervalue : integer; adjustmentvalue : integer; latexname : pckstr ); +begin + case modified of + nochange : nullstatement; + altered : writeln(outfile,'\addtocounter{',latexname,'}{',adjustmentvalue,'}'); + assigned : writeln(outfile,'\setcounter{',latexname,'}{',countervalue,'}') + end; + case modified of + nochange : noconversion; + altered : writeln(log,'\addtocounter{',latexname,'}{',adjustmentvalue,'}'); + assigned : writeln(log,'\setcounter{',latexname,'}{',countervalue,'}') + end +end; + + + +[GLOBAL] PROCEDURE adjuststyle(var outfile : text; s : styletype; + latexname : pckstr ); +begin + case s of + undetermined : nullstatement; + decimal : writeln(outfile,'\renewcommand{\the',latexname,'}{\arabic{',latexname,'}}'); + octal : writeln(outfile,'\renewcommand{\the',latexname,'}{\arabic{',latexname,'}}'); + hexidecimal : writeln(outfile,'\renewcommand{\the',latexname,'}{\arabic{',latexname,'}}'); + romanupper : writeln(outfile,'\renewcommand{\the',latexname,'}{\Roman{',latexname,'}}'); + romanlower : writeln(outfile,'\renewcommand{\the',latexname,'}{\roman{',latexname,'}}'); + romanmixed : writeln(outfile,'\renewcommand{\the',latexname,'}{\roman{',latexname,'}}'); + letterupper : writeln(outfile,'\renewcommand{\the',latexname,'}{\Alpha{',latexname,'}}'); + letterlower : writeln(outfile,'\renewcommand{\the',latexname,'}{\alpha{',latexname,'}}'); + lettermixed : writeln(outfile,'\renewcommand{\the',latexname,'}{\alpha{',latexname,'}}'); + nostyle : nullstatement + end; + case s of + undetermined : noconversion; + decimal : writeln(log,'\renewcommand{\the',latexname,'}{\arabic{',latexname,'}}'); + octal : writeln(log,'\renewcommand{\the',latexname,'}{\arabic{',latexname,'}}'); + hexidecimal : writeln(log,'\renewcommand{\the',latexname,'}{\arabic{',latexname,'}}'); + romanupper : writeln(log,'\renewcommand{\the',latexname,'}{\Roman{',latexname,'}}'); + romanlower : writeln(log,'\renewcommand{\the',latexname,'}{\roman{',latexname,'}}'); + romanmixed : writeln(log,'\renewcommand{\the',latexname,'}{\roman{',latexname,'}}'); + letterupper : writeln(log,'\renewcommand{\the',latexname,'}{\Alpha{',latexname,'}}'); + letterlower : writeln(log,'\renewcommand{\the',latexname,'}{\alpha{',latexname,'}}'); + lettermixed : writeln(log,'\renewcommand{\the',latexname,'}{\alpha{',latexname,'}}'); + nostyle : noconversion + end +end; + + +END. |