summaryrefslogtreecommitdiff
path: root/support/rnototex/latexops.pas
diff options
context:
space:
mode:
Diffstat (limited to 'support/rnototex/latexops.pas')
-rw-r--r--support/rnototex/latexops.pas276
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.