diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/page-lin.mkiv')
-rw-r--r-- | Master/texmf-dist/tex/context/base/page-lin.mkiv | 237 |
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} |