summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/page-lin.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/page-lin.mkiv')
-rw-r--r--Master/texmf-dist/tex/context/base/page-lin.mkiv237
1 files changed, 139 insertions, 98 deletions
diff --git a/Master/texmf-dist/tex/context/base/page-lin.mkiv b/Master/texmf-dist/tex/context/base/page-lin.mkiv
index 51f02763985..4f2226f6e33 100644
--- a/Master/texmf-dist/tex/context/base/page-lin.mkiv
+++ b/Master/texmf-dist/tex/context/base/page-lin.mkiv
@@ -12,47 +12,75 @@
%C details.
% generic or not ... maybe not bother too much and simplify to mkiv only
+% get rid of \mk*
\writestatus{loading}{ConTeXt Core Macros / Line Numbering}
\unprotect
% todo: save settings
-
+%
% low level interface
+%
+% we should use normal counters but then we need to sync settings
+
+% not yet ok, we need to give the top line a proper height
+%
+% \newbox\locallinenumberbox
+%
+% \unexpanded\def\startlocallinenumbering
+% {\setbox\locallinenumberbox\vbox\bgroup
+% \startlinenumbering}
+%
+% \unexpanded\def\stoplocallinenumbering
+% {\stoplinenumbering
+% \egroup
+% \mkdoprocessdeepboxcontents\locallinenumberbox
+% \unvbox\locallinenumberbox}
+
+% some line
+%
+% \startlocallinenumbering
+% some source code 1\par
+% some source code 2\par
+% some source code 3\par
+% \stoplocallinenumbering
+%
+% some line
\registerctxluafile{page-lin}{1.001}
-\definesystemattribute[line-number] \chardef\linenumberattribute \dogetattributeid{line-number}
-\definesystemattribute[line-reference] \chardef\linereferenceattribute \dogetattributeid{line-reference}
+\definesystemattribute[linenumber] [public]
+\definesystemattribute[linereference][public]
\appendtoksonce \attribute\linenumberattribute \attributeunsetvalue \to \everyforgetall
\appendtoksonce \attribute\displaymathattribute\plusone \to \everybeforedisplayformula
-\newcount\linenumber
-\newbox \linenumberscratchbox
-\newcount\linenumberchunk
-\newcount\linerefcounter
+\newcount \linenumber % not used
+\newbox \linenumberscratchbox
+\newcount \linenumberchunk
+\newcount \linerefcounter
+\newconstant\linenumbernesting
\newconditional\tracelinenumbering
-\def\mkprocesstextlinenumbers#1%
- {\setbox\linenumberscratchbox\vbox{\forgetall\offinterlineskip\ctxlua{nodes.lines.boxed.stage_one(\number#1)}}%
+\def\mkprocesstextlinenumbers#1#2%
+ {\setbox\linenumberscratchbox\vbox
+ {\forgetall
+ \offinterlineskip
+ \ctxlua{nodes.lines.boxed.stage_one(\number#1,\ifcase\linenumbernesting false\else true\fi)}}%
\ctxlua{nodes.lines.boxed.stage_two(\number#1,\number\linenumberscratchbox)}}% can move to lua code
% id nr shift width leftskip dir
-% \def\mkskiplinenumber #1#2#3#4#6#5{}
-% \def\mkleftlinenumber #1#2#3#4#5#6{\hbox{\llap{#2\quad\hskip#3\scaledpoint}}}
-% \def\mkrightlinenumber#1#2#3#4#5#6{\hbox{\rlap{\hskip#4\scaledpoint\hskip#3\scaledpoint\quad#2}}}
-
-\let\makenumber\gobblesixarguments
+\let\makelinenumber\gobblesevenarguments
\newconditional\boxcontentneedsprocessing
-\def\mkdoprocesspagecontents #1{\mkaddtextlinenumbers{#1}\plusone \plusone}
-\def\mkdoprocessboxcontents #1{\mkaddtextlinenumbers{#1}\plusone \plusone}
-\def\mkdoprocesscolumncontents#1{\mkaddtextlinenumbers{#1}\currentcolumn\nofcolumns}
+\def\mkdoprocesspagecontents #1{\mkaddtextlinenumbers{#1}\plusone \plusone \zerocount}
+\def\mkdoprocessboxcontents #1{\mkaddtextlinenumbers{#1}\plusone \plusone \zerocount}
+\def\mkdoprocessdeepboxcontents#1{\mkaddtextlinenumbers{#1}\plusone \plusone \plusone }
+\def\mkdoprocesscolumncontents #1{\mkaddtextlinenumbers{#1}\currentcolumn\nofcolumns\zerocount}
\def\mklinenumberparameters
{continue = "\linenumberparameter\c!continue",
@@ -117,9 +145,9 @@
\let\currentlinenumbering\empty
-\chardef\linenumbermode = 1 % 0=continue, 1=restart
-\chardef\linenumberlocation = 1 % 0=middle, 1=left, 2=right, 3=inner, 4=outer, 5=text, 6=begin, 7=end
-\chardef\linenumberalignment = 5 % 0=middle, 1=left, 2=right, 5=auto
+\setnewconstant\linenumbermode \plusone % 0=continue, 1=restart
+\setnewconstant\linenumberlocation \plusone % 0=middle, 1=left, 2=right, 3=inner, 4=outer, 5=text, 6=begin, 7=end
+\setnewconstant\linenumberalignment\plusfive % 0=middle, 1=left, 2=right, 5=auto
\newevery \beforeeverylinenumbering \relax
\newevery \aftereverylinenumbering \relax
@@ -180,29 +208,29 @@
% todo: text
-\expandafter\chardef\csname\??rn:l:\v!middle \endcsname \zerocount
-\expandafter\chardef\csname\??rn:l:\v!left \endcsname \plusone
-\expandafter\chardef\csname\??rn:l:\v!margin \endcsname \plusone
-\expandafter\chardef\csname\??rn:l:\v!inmargin\endcsname \plusone
-\expandafter\chardef\csname\??rn:l:\v!inleft \endcsname \plusone
-\expandafter\chardef\csname\??rn:l:\v!right \endcsname \plustwo
-\expandafter\chardef\csname\??rn:l:\v!inright \endcsname \plustwo
-\expandafter\chardef\csname\??rn:l:\v!inner \endcsname \plusthree
-\expandafter\chardef\csname\??rn:l:\v!outer \endcsname \plusfour
-\expandafter\chardef\csname\??rn:l:\v!text \endcsname \plusfive
-\expandafter\chardef\csname\??rn:l:\v!begin \endcsname \plussix
-\expandafter\chardef\csname\??rn:l:\v!end \endcsname \plusseven
-
-\expandafter\chardef\csname\??rn:a:\v!middle \endcsname \zerocount
-\expandafter\chardef\csname\??rn:a:\v!right \endcsname \plusone
-\expandafter\chardef\csname\??rn:a:\v!flushleft \endcsname \plusone
-\expandafter\chardef\csname\??rn:a:\v!left \endcsname \plustwo
-\expandafter\chardef\csname\??rn:a:\v!flushright\endcsname \plustwo
-\expandafter\chardef\csname\??rn:a:\v!auto \endcsname \plusfive
+\expandafter\let\csname\??rn:l:\v!middle \endcsname \zerocount
+\expandafter\let\csname\??rn:l:\v!left \endcsname \plusone
+\expandafter\let\csname\??rn:l:\v!margin \endcsname \plusone
+\expandafter\let\csname\??rn:l:\v!inmargin \endcsname \plusone
+\expandafter\let\csname\??rn:l:\v!inleft \endcsname \plusone
+\expandafter\let\csname\??rn:l:\v!right \endcsname \plustwo
+\expandafter\let\csname\??rn:l:\v!inright \endcsname \plustwo
+\expandafter\let\csname\??rn:l:\v!inner \endcsname \plusthree
+\expandafter\let\csname\??rn:l:\v!outer \endcsname \plusfour
+\expandafter\let\csname\??rn:l:\v!text \endcsname \plusfive
+\expandafter\let\csname\??rn:l:\v!begin \endcsname \plussix
+\expandafter\let\csname\??rn:l:\v!end \endcsname \plusseven
+
+\expandafter\let\csname\??rn:a:\v!middle \endcsname \zerocount
+\expandafter\let\csname\??rn:a:\v!right \endcsname \plusone
+\expandafter\let\csname\??rn:a:\v!flushleft \endcsname \plusone
+\expandafter\let\csname\??rn:a:\v!left \endcsname \plustwo
+\expandafter\let\csname\??rn:a:\v!flushright\endcsname \plustwo
+\expandafter\let\csname\??rn:a:\v!auto \endcsname \plusfive
\def\dostartlinenumbering[#1][#2]% todo: c!continue
{\begingroup
- \chardef\linenumbermode\plusone
+ \linenumbermode\plusone
\ifsecondargument
\def\currentlinenumbering{#1}%
\doifassignmentelse{#2}
@@ -211,7 +239,7 @@
{\setvalue{\??rn#1\c!start}{#2}}%
{\doif{#2}\v!continue
{\getparameters[\??rn\currentlinenumbering][\c!continue=\v!yes]%
- \chardef\linenumbermode\zerocount}}}%
+ \linenumbermode\zerocount}}}%
\else\iffirstargument
\doifnumberelse{#1}% downward compatible
{\let\currentlinenumbering\empty
@@ -219,11 +247,11 @@
{\doifelse{#1}\v!continue
{\let\currentlinenumbering\empty
\getparameters[\??rn\currentlinenumbering][\c!continue=\v!yes]%
- \chardef\linenumbermode\zerocount}
+ \linenumbermode\zerocount}
{\def\currentlinenumbering{#1}}}%
\fi\fi
\doif{\linenumberparameter\c!continue}\v!yes
- {\chardef\linenumbermode\zerocount}%
+ {\linenumbermode\zerocount}%
\numberinglinestrue
\the\beforeeverylinenumbering
\mkstarttextlinenumbering\currentlinenumbering\linenumbermode}
@@ -235,8 +263,6 @@
% number placement
-\let\mkskiplinenumber \gobblesixarguments
-
\def\mkdoinnerlinenumber{\doifoddpageelse\mkdoleftlinenumber\mkdorightlinenumber}
\def\mkdoouterlinenumber{\doifoddpageelse\mkdorightlinenumber\mkdoleftlinenumber}
@@ -278,79 +304,89 @@
\expandafter\mkdobeginlinenumber
\fi}
-\def\mkaddtextlinenumbers#1#2#3% box col max
+\newconditional\faketextlinenumber
+\newconstant \linenumberbox
+\newconstant \linenumbercolumn
+\newconstant \linenumberlastcolumn
+
+\def\mkaddtextlinenumbers#1#2#3#4% box col max nesting
{\bgroup
- \chardef\linenumberbox #1\relax
- \chardef\linenumbercolumn #2\relax
- \chardef\linenumberlastcolumn#3\relax
+ \linenumberbox #1\relax
+ \linenumbercolumn #2\relax
+ \linenumberlastcolumn#3\relax
+ \linenumbernesting #4\relax
\fullrestoreglobalbodyfont
- \def\skipnumber{\hbox{}}%
- \let\makenumber\maketextlinenumber
- \mkprocesstextlinenumbers\linenumberbox
+ \let\makelinenumber\maketextlinenumber
+ \mkprocesstextlinenumbers\linenumberbox\linenumbernesting
\egroup}
-\def\maketextlinenumber#1%
+\def\maketextlinenumber#1#2%
{\edef\currentlinenumbering{#1}%
- \chardef\linenumberlocation \executeifdefined{\??rn:l:\linenumberparameter\c!location}\plusone % left
- \chardef\linenumberalignment\executeifdefined{\??rn:a:\linenumberparameter\c!align }\plusfive % auto
+ \ifcase#2\relax
+ \settrue \faketextlinenumber
+ \else
+ \setfalse\faketextlinenumber
+ \fi
+ \linenumberlocation \executeifdefined{\??rn:l:\linenumberparameter\c!location}\plusone % left
+ \linenumberalignment\executeifdefined{\??rn:a:\linenumberparameter\c!align }\plusfive % auto
\ifcase\linenumberlastcolumn\relax
- \let\domakenumber\mkskiplinenumber
+ \settrue \faketextlinenumber
\or
% one column
\ifcase\linenumberlocation
- \let\domakenumber\mkskiplinenumber
+ \settrue \faketextlinenumber
% hm
\or
- \let\domakenumber\mkleftlinenumber
+ \let\domakelinenumber\mkleftlinenumber
\or
- \let\domakenumber\mkrightlinenumber
+ \let\domakelinenumber\mkrightlinenumber
\or % inner
- \let\domakenumber\mkdoinnerlinenumber
+ \let\domakelinenumber\mkdoinnerlinenumber
\or % outer
- \let\domakenumber\mkdoouterlinenumber
+ \let\domakelinenumber\mkdoouterlinenumber
\or % text
- \let\domakenumber\mkdotextlinenumber
+ \let\domakelinenumber\mkdotextlinenumber
\or
- \let\domakenumber\mkdobeginlinenumber
+ \let\domakelinenumber\mkdobeginlinenumber
\or
- \let\domakenumber\mkdoendlinenumber
+ \let\domakelinenumber\mkdoendlinenumber
\fi
\else\ifcase\linenumbercolumn\relax
- \let\domakenumber\mkskiplinenumber
+ \settrue \faketextlinenumber
\or
- \let\domakenumber\mkleftlinenumber
+ \let\domakelinenumber\mkleftlinenumber
\ifcase\linenumberlocation\or
- \chardef\linenumberlocation\plusone
+ \linenumberlocation\plusone
\or
- \chardef\linenumberlocation\plustwo
+ \linenumberlocation\plustwo
\else
- \chardef\linenumberlocation\plusone
+ \linenumberlocation\plusone
\or
- \chardef\linenumberlocation\plusone
+ \linenumberlocation\plusone
\or
- \chardef\linenumberlocation\plusone
+ \linenumberlocation\plusone
\or
- \chardef\linenumberlocation\plusone % todo
+ \linenumberlocation\plusone % todo
\or
- \chardef\linenumberlocation\plusone % todo
+ \linenumberlocation\plusone % todo
\fi
\else
- \let\domakenumber\mkrightlinenumber
+ \let\domakelinenumber\mkrightlinenumber
\ifcase\linenumberlocation\or
- \chardef\linenumberlocation\plustwo
+ \linenumberlocation\plustwo
\or
- \chardef\linenumberlocation\plusone
+ \linenumberlocation\plusone
\or
- \chardef\linenumberlocation\plustwo
+ \linenumberlocation\plustwo
\or
- \chardef\linenumberlocation\plustwo
+ \linenumberlocation\plustwo
\or
- \chardef\linenumberlocation\plustwo % todo
+ \linenumberlocation\plustwo % todo
\or
- \chardef\linenumberlocation\plustwo % todo
+ \linenumberlocation\plustwo % todo
\fi
\fi\fi
- \domakenumber{#1}}
+ \domakelinenumber{#1}}
\def\mkdotextlinenumber #1#2#3#4#5#6% beware, one needs so compensate for this in the width !
{\hbox{\dosomelinenumber{#1}{2}{#2}{#5}\hskip#3\scaledpoint}}
@@ -370,19 +406,19 @@
\def\mkdobeginlinenumber #1#2#3#4#5#6%
{\ifcase\istltdir#6\relax
- \chardef\linenumberlocation\plusone
+ \linenumberlocation\plusone
\expandafter\mkdoleftlinenumber
\else
- \chardef\linenumberlocation\plustwo
+ \linenumberlocation\plustwo
\expandafter\mkdorightlinenumber
\fi{#1}{#2}{#3}{#4}{#5}{#6}}
\def\mkdoendlinenumber#1#2#3#4#5#6%
{\ifcase\istltdir#6\relax
- \chardef\linenumberlocation\plustwo
+ \linenumberlocation\plustwo
\expandafter\mkdorightlinenumber
\else
- \chardef\linenumberlocation\plusone
+ \linenumberlocation\plusone
\expandafter\mkdoleftlinenumber
\fi{#1}{#2}{#3}{#4}{#5}{#6}}
@@ -397,16 +433,16 @@
\ifcase#2\relax\or\hskip\linenumberdistance\fi\relax
\ifnum\linenumberlocation=\plusfive
\scratchdimen\dimexpr#4\scaledpoint-\linenumberdistance\relax
- \chardef\linenumberlocation\plusone
+ \linenumberlocation\plusone
\else
\scratchdimen\zeropoint
\fi
\ifcase\linenumberalignment
- \chardef\linenumberlocation\zerocount % middle
+ \linenumberlocation\zerocount % middle
\or
- \chardef\linenumberlocation\plusone % left
+ \linenumberlocation\plusone % left
\or
- \chardef\linenumberlocation\plustwo % right
+ \linenumberlocation\plustwo % right
\fi
\ifconditional\tracelinenumbering\ruledhbox\else\hbox\fi to \linenumberwidth
{\ifcase\linenumberlocation
@@ -420,11 +456,15 @@
\or
\doifoddpageelse\hss\relax % outer
\fi
- \linenumberattributes\c!style\c!color
- {\linenumberparameter\c!command
- {\linenumberparameter\c!left
- \convertnumber{\linenumberparameter\c!conversion}{#3}%
- \linenumberparameter\c!right}}%
+ \ifconditional\faketextlinenumber
+ % we need to reserve space
+ \else
+ \linenumberattributes\c!style\c!color
+ {\linenumberparameter\c!command
+ {\linenumberparameter\c!left
+ \convertnumber{\linenumberparameter\c!conversion}{#3}%
+ \linenumberparameter\c!right}}%
+ \fi
\ifcase\linenumberlocation
\hss % middle
\or
@@ -447,7 +487,7 @@
% referencing
-\def\someline [#1]{\mkstartlinereference{#1}\mkstoplinereference{#1}}
+\unexpanded\def\someline [#1]{\mkstartlinereference{#1}\mkstoplinereference{#1}} % was just a def
\unexpanded\def\startline[#1]{\mkstartlinereference{#1}}
\unexpanded\def\stopline [#1]{\mkstoplinereference {#1}}
@@ -457,6 +497,7 @@
{\vrule\!!width\onepoint\!!depth\strutdp\!!height.8\strutht\raise.85\strutht\hbox{\llap{\tt\txx#1}}}}%
\smashbox\scratchbox\box\scratchbox
\fi}
+
\def\mkshowstoplinereference#1%
{\ifconditional\tracelinenumbering
\setbox\scratchbox\hbox{\rlap
@@ -469,7 +510,7 @@
% eventually we will do this in lua
-\def\currentreferencelinenumber{\ctxlua{jobreferences.filter("linenumber")}}
+\def\currentreferencelinenumber{\ctxlua{structures.references.filter("linenumber")}}
\def\doifelsesamelinereference#1#2#3%
{\doifreferencefoundelse{lr:b:#1}
@@ -478,8 +519,8 @@
{\edef\tline{\currentreferencelinenumber}%
%[\fline,\tline]
\ifx\fline\tline#2\else#3\fi}
- {\unknownreference{#1}#2}}
- {\unknownreference{#1}#2}}
+ {#2}}
+ {#2}}
\def\inline#1[#2]%
{\doifelsenothing{#1}