summaryrefslogtreecommitdiff
path: root/macros/luatex/optex/output.opm
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-02-13 03:00:51 +0000
committerNorbert Preining <norbert@preining.info>2020-02-13 03:00:51 +0000
commit8379012d545fd6a59fae8842d97d14ec0c2b27d7 (patch)
tree740889c25a2f4eb83c4433954ec856b568728575 /macros/luatex/optex/output.opm
parent2dbfa6c67f1c50ff228326c6ec6cccfdecb61735 (diff)
CTAN sync 202002130300
Diffstat (limited to 'macros/luatex/optex/output.opm')
-rw-r--r--macros/luatex/optex/output.opm104
1 files changed, 104 insertions, 0 deletions
diff --git a/macros/luatex/optex/output.opm b/macros/luatex/optex/output.opm
new file mode 100644
index 0000000000..e8028abcf1
--- /dev/null
+++ b/macros/luatex/optex/output.opm
@@ -0,0 +1,104 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \nopagenumbers {Output routine <2019-05-21>}
+
+\_output={\_begoutput \_optexoutput \_endoutput}
+\_def \_begoutput{\_prepoffsets} %
+\_def \_endoutput{}
+
+\_def\_optexoutput{%
+ \_shipout\_vbox{%
+ \_istoksempty \_pgbackground
+ \_iffalse \_backgroundbox {\_the\_pgbackground}\_nointerlineskip \_fi
+ \_istoksempty \_headline \_iffalse \_ensureblack{\_makeheadline}\_fi
+ \_vbox to\_vsize {\_boxmaxdepth=\_maxdepth \_pagecontents}%
+ \_istoksempty \_footline \_iffalse \_ensureblack{\_makefootline}\_fi }%
+ \_advancepageno
+ \_ifnum\_outputpenalty>-20000 \_else\_dosupereject\_fi
+}
+\_def \_ensureblack #1{#1} % will be re-defined by color macros
+\_def \_pagedest {} % will be re-defined by macros for references
+\_def \_prepoffsets {} % will be re-defined by margins macros
+\_def \_backgroundbox #1{\_moveleft\_hoffset\_vbox to0pt{\_kern-\voffset #1\_vss}}
+
+\_def\_makeheadline {\_vbox to0pt{\_vskip-\_headlinedist
+ \_line{\_copy\_strutbox \_the\_headline}\_vss}\_nointerlineskip}
+\_def\_makefootline{\_baselineskip=\_footlinedist
+ \_lineskiplimit=-\maxdimen \_line{\_the\_footline}}
+\_def\_pagecontents{\_pagedest % destination of the page
+ \_ifvoid\_topins \_else \_ensureblack{\_unvbox\_topins}\_fi
+ \_dimen0=\dp255 \_unvbox255 % open up \box255
+ \_ifvoid\_footins \_else % footnote info is present
+ \_vskip\_skip\_footins
+ \_ensureblack{\_footnoterule \_unvbox\_footins}\fi
+ \_ifraggedbottom \kern-\_dimen0 \_vfil \_fi
+}
+\_def \_footnoterule {\kern-3pt \hrule width 2truein \kern 2.6pt }
+\_def\_pagebody{\_vbox to\_vsize{\_boxmaxdepth\_maxdepth \_pagecontents}}
+ % unused, but for backward compatibility
+\_newdimen\_headlinedist \_headlinedist=22.5pt
+\_newdimen\_footlinedist \_footlinedist=24pt
+\_newtoks\_headline \_headline={}
+\_newtoks\_footline \_footline={\_hss\_truetenrm \_folio \_hss}
+\_newtoks\_pgbackground \_pgbackground={} % for page background
+\_public
+ \headlinedist \footlinedist \pgbackground
+ \makeheadline \makefootline \pagebody \headline \footline ;
+
+\_countdef\_pageno=0 \_pageno=1 % first page is number 1
+\_def \_folio {\_ifnum\_pageno<0 \_romannumeral-\_pageno \_else \_number\_pageno \_fi}
+\_def \_nopagenumbers {\_footline={}}
+\_def \_advancepageno {\_ifnum\_pageno<0 \_global\_advance\_pageno by-1
+ \_else \_global \_advance\_pageno by1 \_fi } % increase |pageno|
+\_newifi\_ifraggedbottom
+\_def \_raggedbottom {\_topskip=10pt plus60pt \_raggedbottomtrue}
+\_def \_normalbottom {\_topskip=10pt \_raggedbottomfalse} % undoes \raggedbottom
+\_public
+ \pageno \folio \nopagenumbers \advancepageno \raggedbottom \normalbottom ;
+
+\_newinsert\_footins
+\_def \_footnote #1{\_let\_osf=\_empty % parameter #2 (the text) is read later
+ \_ifhmode \_edef\_osf{\_spacefactor\_the\_spacefactor}\/\_fi
+ #1\_osf\_vfootnote{#1}}
+\_def \_vfootnote #1{\_insert\_footins\_bgroup
+ \_interlinepenalty=\_interfootnotelinepenalty
+ \_splittopskip=\_ht\_strutbox % top baseline for broken footnotes
+ \_splitmaxdepth=\_dp\_strutbox \_floatingpenalty=20000
+ \_leftskip=0pt \_rightskip=0pt \_spaceskip=0pt \_xspaceskip=0pt \_relax
+ \_textindent{#1}\_footstrut
+ \_isnextchar \_bgroup {\_bgroup \_aftergroup\_vfootA \_let\_next=}{\_vfootB}%
+}
+\_def\_vfootA{\_strut\_egroup}
+\_def\_vfootB #1{#1\_vfootA}
+\_def \_footstrut {\_vbox to\_splittopskip{}}
+\_skip\_footins=\_bigskipamount % space added when footnote is present
+\_count\_footins=1000 % footnote magnification factor (1 to 1)
+\_dimen\_footins=8in % maximum footnotes per page
+\_public
+ \footins \footnote \vfootnote \footstrut ;
+
+\_newinsert\_topins
+\_newifi\_ifupage \_newifi\_ifumid
+\_def \_topinsert {\_umidfalse \_upagefalse \_oins}
+\_def \_midinsert {\_umidtrue \_oins}
+\_def \_pageinsert {\_umidfalse \_upagetrue \_oins}
+\_skip\_topins=\_zoskip % no space added when a topinsert is present
+\_count\_topins=1000 % magnification factor (1 to 1)
+\_dimen\_topins=\_maxdimen % no limit per page
+\_def \_oins {\_par \_begingroup\_setbox0=\_vbox\_bgroup} % start a \_vbox
+\_def \_endinsert {\_egroup % finish the \_vbox
+ \_ifumid \_dimen0=\_ht0 \_advance\_dimen0 by\_dp0 \_advance\_dimen0 by\_baselineskip
+ \_advance\_dimen0 by\_pagetotal \_advance\_dimen0 by-\_pageshrink
+ \_ifdim\_dimen0>\_pagegoal \_umidfalse \_pagefalse \_fi \_fi
+ \_ifumid \_bigskip \_box0 \_bigbreak
+ \_else \_insert \_topins {\_penalty100 % floating insertion
+ \_splittopskip=0pt
+ \_splitmaxdepth=\_maxdimen \_floatingpenalty=0
+ \_ifupage \_dimen0=\_dp0
+ \_vbox to\_vsize {\_unvbox0 \_kern-\_dimen0}% depth is zero
+ \_else \_box0 \_nobreak \_bigskip \_fi}\_fi\_endgroup}
+\_public
+ \topins \topinsert \midinsert \pageinsert \endinsert ;
+
+\_endcode % -------------------------------------
+