From 69d2352af4b60929b37fc49f3bdb263977016244 Mon Sep 17 00:00:00 2001 From: Marius Date: Fri, 19 Oct 2012 01:20:13 +0300 Subject: stable 2012.05.30 11:26 --- tex/context/base/page-lin.mkiv | 597 ++++++++++++++++++++--------------------- 1 file changed, 292 insertions(+), 305 deletions(-) (limited to 'tex/context/base/page-lin.mkiv') diff --git a/tex/context/base/page-lin.mkiv b/tex/context/base/page-lin.mkiv index dd13fb87d..7b1cbcd94 100644 --- a/tex/context/base/page-lin.mkiv +++ b/tex/context/base/page-lin.mkiv @@ -26,6 +26,20 @@ % % 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 @@ -41,96 +55,137 @@ \definesystemattribute[linenumber] [public] \definesystemattribute[linereference][public] -\appendtoksonce - \attribute\linenumberattribute\attributeunsetvalue -\to \everyforgetall +\appendtoksonce \attribute\linenumberattribute \attributeunsetvalue \to \everyforgetall +\appendtoksonce \attribute\displaymathattribute\plusone \to \everybeforedisplayformula \newcount \linenumber % not used -\newbox \b_page_lines_scratch -\newcount \c_page_lines_reference -\newconstant\c_page_lines_nesting +\newbox \linenumberscratchbox +\newcount \linenumberchunk +\newcount \linerefcounter +\newconstant\linenumbernesting \newconditional\tracelinenumbering -% id nr shift width leftskip dir +\def\mkprocesstextlinenumbers#1#2% + {\setbox\linenumberscratchbox\vbox + {\forgetall + \offinterlineskip + \ctxlua{nodes.lines.boxed.stage_one(\number#1,\ifcase\linenumbernesting false\else true\fi)}}% #2 + \ctxlua{nodes.lines.boxed.stage_two(\number#1,\number\linenumberscratchbox)}}% can move to lua code -\installcorenamespace{linenumberinginstance} +% id nr shift width leftskip dir -\let\makelinenumber\gobblesevenarguments % used at lua end +\let\makelinenumber\gobblesevenarguments -\newconditional\page_postprocessors_needed_box +\newconditional\boxcontentneedsprocessing -\unexpanded\def\page_postprocessors_linenumbers_page #1{\page_lines_add_numbers_to_box{#1}\plusone \plusone \zerocount} -\unexpanded\def\page_postprocessors_linenumbers_box #1{\page_lines_add_numbers_to_box{#1}\plusone \plusone \zerocount} -\unexpanded\def\page_postprocessors_linenumbers_deepbox#1{\page_lines_add_numbers_to_box{#1}\plusone \plusone \plusone } -\unexpanded\def\page_postprocessors_linenumbers_column #1{\page_lines_add_numbers_to_box{#1}\currentcolumn\nofcolumns\zerocount} +\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\page_lines_parameters_regular - {continue = "\ifnum\c_page_lines_mode=\zerocount\v!yes\else\v!no\fi", - start = \number\linenumberingparameter\c!start, - step = \number\linenumberingparameter\c!step, - method = "\linenumberingparameter\c!method", +\def\mklinenumberparameters + {continue = "\linenumberparameter\c!continue", + start = \linenumberparameter\c!start, + step = \linenumberparameter\c!step, + method = "\linenumberparameter\c!method", tag = "\currentlinenumbering"} -\def\page_lines_parameters_update - {continue = "\ifnum\c_page_lines_mode=\zerocount\v!yes\else\v!no\fi"} +\def\mklinenumberupdateparameters + {continue = "\linenumberparameter\c!continue"} -\def\page_lines_start_define - {\setxvalue{\??linenumberinginstance\currentlinenumbering}{\ctxcommand{registerlinenumbering({\page_lines_parameters_regular})}}} +\def\mkdefinetextlinenumbering + {\setxvalue{ln:c:\currentlinenumbering}{\number\cldcontext{nodes.lines.boxed.register({\mklinenumberparameters})}}} -\def\page_lines_start_update - {\ctxcommand{setuplinenumbering(\csname\??linenumberinginstance\currentlinenumbering\endcsname,{\page_lines_parameters_update})}} +\def\mkupdatetextlinenumbering + {\ctxlua{nodes.lines.boxed.setup(\getvalue{ln:c:\currentlinenumbering},{\mklinenumberupdateparameters})}} -\def\page_lines_setup - {\ifcsname \??linenumberinginstance\currentlinenumbering\endcsname - \ctxcommand{setuplinenumbering(\csname\??linenumberinginstance\currentlinenumbering\endcsname,{\page_lines_parameters_regular})}% +\def\mkstarttextlinenumbering#1#2% always when assignment + {\globallet\mkprocesspagecontents \mkdoprocesspagecontents + \globallet\mkprocesscolumncontents\mkdoprocesscolumncontents + \global\settrue\boxcontentneedsprocessing % see core-rul.mkiv + \edef\currentlinenumbering{#1}% + \ifcase#2\relax + \mkupdatetextlinenumbering % continue + \or + \mkdefinetextlinenumbering % only when assignment + \fi + \attribute\linenumberattribute\getvalue{ln:c:\currentlinenumbering}\relax} + +\def\mksetuptextlinenumbering + {\ifcsname ln:c:\currentlinenumbering\endcsname + \ctxlua{nodes.lines.boxed.setup(\getvalue{ln:c:\currentlinenumbering},{\mklinenumberparameters})}% \fi} +\def\mkstoptextlinenumbering + {\attribute\linenumberattribute\attributeunsetvalue} + % we could make this a bit more efficient by putting the end reference % in the same table as the start one but why make things complex ... -\let\dofinishlinereference\dofinishfullreference % at lua end +\let\dofinishlinereference\dofinishfullreference -\unexpanded\def\page_lines_some_reference#1#2#3% +\def\mksomelinereference#1#2#3% {\dontleavehmode\begingroup - \global\advance\c_page_lines_reference\plusone - \attribute\linereferenceattribute\c_page_lines_reference + \global\advance\linerefcounter\plusone + \attribute\linereferenceattribute\linerefcounter #3% % for the moment we use a simple system i.e. no prefixes etc .. todo: store as number - \normalexpanded{\strc_references_set_named_reference{line}{#2}{conversion=\linenumberingparameter\c!conversion}{\the\c_page_lines_reference}}% kind labels userdata text + \expanded{\strc_references_set_named_reference{line}{#2}{conversion=\linenumberparameter\c!conversion}{\the\linerefcounter}}% kind labels userdata text \endgroup} -\def\page_lines_reference_start#1{\page_lines_some_reference{#1}{lr:b:#1}{}\ignorespaces} -\def\page_lines_reference_stop #1{\removeunwantedspaces\page_lines_some_reference{#1}{lr:e:#1}{}} - -% \def\mklinestartreference#1[#2]{\in{#1}[lr:b:#2]} % not interfaced/ not used -% \def\mklinestopreference #1[#2]{\in{#1}[lr:e:#2]} % not interfaced/ not used +\def\mkstartlinereference#1{\mksomelinereference{#1}{lr:b:#1}{}\ignorespaces} +\def\mkstoplinereference #1{\removeunwantedspaces\mksomelinereference{#1}{lr:e:#1}{}} -\newif\ifnumberinglines % will change -\newif\iftypesettinglines % will change +\def\mklinestartreference#1[#2]{\in{#1}[lr:b:#2]} % not interfaced +\def\mklinestopreference #1[#2]{\in{#1}[lr:e:#2]} % not interfaced -\installcorenamespace{linenumbering} +% high level interface -\installcommandhandler \??linenumbering {linenumbering} \??linenumbering +\newif\ifnumberinglines +\newif\iftypesettinglines -\setnewconstant\c_page_lines_mode \plusone % 0=continue, 1=restart -\setnewconstant\c_page_lines_location \plusone % 0=middle, 1=left, 2=right, 3=inner, 4=outer, 5=text, 6=begin, 7=end -\setnewconstant\c_page_lines_alignment\plusfive % 0=middle, 1=left, 2=right, 5=auto +\let\currentlinenumbering\empty -\newdimen\d_page_lines_width -\newdimen\d_page_lines_distance +\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 \newevery \everylinenumber \relax -\appendtoks - \page_lines_setup -\to \everysetuplinenumbering +\newdimen\linenumberwidth +\newdimen\linenumberdistance + +\unexpanded\def\definelinenumbering + {\dosingleempty\dodefinelinenumbering} -\appendtoks - \page_lines_start_define -\to \everydefinelinenumbering +\def\dodefinelinenumbering[#1]% + {\edef\currentlinenumbering{#1}% + \mkdefinetextlinenumbering} + +\unexpanded\def\setuplinenumbering + {\dodoubleempty\dosetuplinenumbering} + +\def\dosetuplinenumbering[#1][#2]% + {\ifsecondargument + \def\currentlinenumbering{#1}% + \getparameters[\??rn#1][#2]% + \else + \let\currentlinenumbering\empty + \getparameters[\??rn][#1]% + \fi + \mksetuptextlinenumbering} + +% some day commandhandler + +\def\linenumberparameter#1% + {\csname\??rn\ifcsname\??rn\currentlinenumbering#1\endcsname\currentlinenumbering\fi#1\endcsname} + +\unexpanded\def\dolinenumberattributes#1#2% + {\dousestyleparameter{\linenumberparameter#1}% + \dousecolorparameter{\linenumberparameter#2}} \setuplinenumbering [\c!conversion=\v!numbers, @@ -141,7 +196,7 @@ \c!location=\v!left, \c!style=, \c!color=, - \c!width=2\emwidth, + \c!width=2em, \c!left=, \c!right=, \c!command=, @@ -149,314 +204,253 @@ \c!align=\v!auto] \definelinenumbering - [] + +\unexpanded\def\startlinenumbering + {\dodoubleempty\dostartlinenumbering} % no intermediate changes in values, define a class, otherwise each range % would need a number % todo: text -\installcorenamespace{linennumberinglocation} -\installcorenamespace{linennumberingalternative} - -\expandafter\let\csname\??linennumberinglocation\v!middle \endcsname \zerocount -\expandafter\let\csname\??linennumberinglocation\v!left \endcsname \plusone -\expandafter\let\csname\??linennumberinglocation\v!margin \endcsname \plusone -\expandafter\let\csname\??linennumberinglocation\v!inmargin \endcsname \plusone -\expandafter\let\csname\??linennumberinglocation\v!inleft \endcsname \plusone -\expandafter\let\csname\??linennumberinglocation\v!right \endcsname \plustwo -\expandafter\let\csname\??linennumberinglocation\v!inright \endcsname \plustwo -\expandafter\let\csname\??linennumberinglocation\v!inner \endcsname \plusthree -\expandafter\let\csname\??linennumberinglocation\v!outer \endcsname \plusfour -\expandafter\let\csname\??linennumberinglocation\v!text \endcsname \plusfive -\expandafter\let\csname\??linennumberinglocation\v!begin \endcsname \plussix -\expandafter\let\csname\??linennumberinglocation\v!end \endcsname \plusseven - -\expandafter\let\csname\??linennumberingalternative\v!middle \endcsname \zerocount -\expandafter\let\csname\??linennumberingalternative\v!right \endcsname \plusone -\expandafter\let\csname\??linennumberingalternative\v!flushleft \endcsname \plusone -\expandafter\let\csname\??linennumberingalternative\v!left \endcsname \plustwo -\expandafter\let\csname\??linennumberingalternative\v!flushright\endcsname \plustwo -\expandafter\let\csname\??linennumberingalternative\v!auto \endcsname \plusfive - -% \startlinenumbering[|continue|settings|name] -% \startlinenumbering[name][|continue|settings] - -\unexpanded\def\startlinenumbering - {\dodoubleempty\page_lines_start} - -\def\page_lines_start % we stay downward compatible +\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 + \linenumbermode\plusone \ifsecondargument - \expandafter\page_lines_start_two + \def\currentlinenumbering{#1}% + \doifassignmentelse{#2} + {\getparameters[\??rn\currentlinenumbering][#2]} + {\doifnumberelse{#2}% downward compatible + {\setvalue{\??rn#1\c!start}{#2}}% + {\doif{#2}\v!continue + {\getparameters[\??rn\currentlinenumbering][\c!continue=\v!yes]% + \linenumbermode\zerocount}}}% \else\iffirstargument - \doubleexpandafter\page_lines_start_one - \else - \doubleexpandafter\page_lines_start_zero - \fi\fi} - -\def\page_lines_start_zero[#1][#2]% - {\edef\m_argument{\linenumberingparameter\c!continue}% - \ifx\m_argument\v!continue - \c_page_lines_mode\zerocount - \else - \c_page_lines_mode\plusone - \fi - \page_lines_start_followup} - -\def\page_lines_start_one[#1][#2]% [continue||settings] % historic - {\edef\m_argument{#1}% - \ifx\m_argument\v!continue - \c_page_lines_mode\zerocount - \let\currentlinenumbering\empty - \else - \c_page_lines_mode\plusone - \ifx\m_argument\v!empty - \let\currentlinenumbering\empty - \else - \doifassignmentelse{#1} - {\let\currentlinenumbering\empty - \setupcurrentlinenumbering[#1]} - {\doifnumberelse\m_argument - {\let\currentlinenumbering\empty - \letlinenumberingparameter\c!start\m_argument} - {\let\currentlinenumbering\m_argument}}% - \fi - \edef\m_argument{\linenumberingparameter\c!continue}% - \ifx\m_argument\v!continue - \c_page_lines_mode\zerocount - \fi - \fi - \page_lines_start_followup} - -\def\page_lines_start_two[#1][#2]% [tag][continue||settings] - {\edef\currentlinenumbering{#1}% - \edef\m_argument{#2}% - \ifx\m_argument\v!continue - \c_page_lines_mode\zerocount - \else - \c_page_lines_mode\plusone - \ifx\m_argument\v!empty \else - \doifassignmentelse{#2} - {\setupcurrentlinenumbering[#2]} - {\doifnumber\m_argument - {\letlinenumberingparameter\c!start\m_argument}}% - \fi - \edef\m_argument{\linenumberingparameter\c!continue}% - \ifx\m_argument\v!continue - \c_page_lines_mode\zerocount - \fi - \fi - \page_lines_start_followup} - -\def\page_lines_start_followup - {\numberinglinestrue + \doifnumberelse{#1}% downward compatible + {\let\currentlinenumbering\empty + \setvalue{\??rn\c!start}{#1}}% + {\doifelse{#1}\v!continue + {\let\currentlinenumbering\empty + \getparameters[\??rn\currentlinenumbering][\c!continue=\v!yes]% + \linenumbermode\zerocount} + {\def\currentlinenumbering{#1}}}% + \fi\fi + \doif{\linenumberparameter\c!continue}\v!yes + {\linenumbermode\zerocount}% + \numberinglinestrue \the\beforeeverylinenumbering - \globallet\page_postprocessors_page \page_postprocessors_linenumbers_page - \globallet\page_postprocessors_column\page_postprocessors_linenumbers_column - \global\settrue\page_postprocessors_needed_box % see core-rul.mkiv - \ifcase\c_page_lines_mode\relax - \page_lines_start_update % continue - \or - \page_lines_start_define % only when assignment - \fi - \attribute\linenumberattribute\getvalue{\??linenumberinginstance\currentlinenumbering}\relax} + \mkstarttextlinenumbering\currentlinenumbering\linenumbermode} \unexpanded\def\stoplinenumbering - {\attribute\linenumberattribute\attributeunsetvalue + {\mkstoptextlinenumbering \the\aftereverylinenumbering \endgroup} % number placement .. will change into (the new) margin code -\def\page_lines_number_inner_indeed{\doifoddpageelse\page_lines_number_left_indeed\page_lines_number_right_indeed} -\def\page_lines_number_outer_indeed{\doifoddpageelse\page_lines_number_right_indeed\page_lines_number_left_indeed} +\def\mkdoinnerlinenumber{\doifoddpageelse\mkdoleftlinenumber\mkdorightlinenumber} +\def\mkdoouterlinenumber{\doifoddpageelse\mkdorightlinenumber\mkdoleftlinenumber} -\def\page_lines_number_left - {\ifcase\c_page_lines_location - \expandafter\page_lines_number_left_indeed +\def\mkleftlinenumber + {\ifcase\linenumberlocation + \expandafter\mkdoleftlinenumber \or - \expandafter\page_lines_number_left_indeed + \expandafter\mkdoleftlinenumber \or - \expandafter\page_lines_number_left_indeed + \expandafter\mkdoleftlinenumber \or - \expandafter\page_lines_number_inner_indeed + \expandafter\mkdoinnerlinenumber \or - \expandafter\page_lines_number_outer_indeed + \expandafter\mkdoouterlinenumber \or - \expandafter\page_lines_number_text_indeed + \expandafter\mkdotextlinenumber \or - \expandafter\page_lines_number_begin_indeed + \expandafter\mkdobeginlinenumber \or - \expandafter\page_lines_number_end_indeed + \expandafter\mkdoendlinenumber \fi} -\def\page_lines_number_right - {\ifcase\c_page_lines_location - \expandafter\page_lines_number_right_indeed +\def\mkrightlinenumber + {\ifcase\linenumberlocation + \expandafter\mkdorightlinenumber \or - \expandafter\page_lines_number_right_indeed + \expandafter\mkdorightlinenumber \or - \expandafter\page_lines_number_right_indeed + \expandafter\mkdorightlinenumber \or - \expandafter\page_lines_number_outer_indeed + \expandafter\mkdoouterlinenumber \or - \expandafter\page_lines_number_inner_indeed + \expandafter\mkdoinnerlinenumber \or - \expandafter\page_lines_number_text_indeed + \expandafter\mkdotextlinenumber \or - \expandafter\page_lines_number_end_indeed + \expandafter\mkdoendlinenumber \or - \expandafter\page_lines_number_begin_indeed + \expandafter\mkdobeginlinenumber \fi} -\newconditional\c_page_lines_fake_number -\newconstant \b_page_lines_number -\newconstant \c_page_lines_column -\newconstant \c_page_lines_last_column +\newconditional\faketextlinenumber +\newconstant \linenumberbox +\newconstant \linenumbercolumn +\newconstant \linenumberlastcolumn -\def\page_lines_add_numbers_to_box#1#2#3#4% box col max nesting +\def\mkaddtextlinenumbers#1#2#3#4% box col max nesting {\bgroup - \b_page_lines_number #1\relax - \c_page_lines_column #2\relax - \c_page_lines_last_column#3\relax - \c_page_lines_nesting #4\relax + \linenumberbox #1\relax + \linenumbercolumn #2\relax + \linenumberlastcolumn#3\relax + \linenumbernesting #4\relax \fullrestoreglobalbodyfont - \let\makelinenumber\page_lines_make_number % used at lua end - \setbox\b_page_lines_scratch\vbox - {\forgetall - \offinterlineskip - \ctxcommand{linenumbersstageone(\number\b_page_lines_number,\ifcase\c_page_lines_nesting false\else true\fi)}}% - \ctxcommand{linenumbersstagetwo(\number\b_page_lines_number,\number\b_page_lines_scratch)}% can move to lua code + \let\makelinenumber\maketextlinenumber + \mkprocesstextlinenumbers\linenumberbox\linenumbernesting \egroup} -\let\page_lines_make_number_indeed\relax - -\def\page_lines_make_number#1#2% +\def\maketextlinenumber#1#2% {\edef\currentlinenumbering{#1}% \ifcase#2\relax - \settrue \c_page_lines_fake_number + \settrue \faketextlinenumber \else - \setfalse\c_page_lines_fake_number + \setfalse\faketextlinenumber \fi - \c_page_lines_location \executeifdefined{\??linennumberinglocation \linenumberingparameter\c!location}\plusone \relax % left - \c_page_lines_alignment\executeifdefined{\??linennumberingalternative\linenumberingparameter\c!align }\plusfive\relax % auto - \ifcase\c_page_lines_last_column\relax - \settrue \c_page_lines_fake_number + \linenumberlocation \executeifdefined{\??rn:l:\linenumberparameter\c!location}\plusone % left + \linenumberalignment\executeifdefined{\??rn:a:\linenumberparameter\c!align }\plusfive % auto + \ifcase\linenumberlastcolumn\relax + \settrue \faketextlinenumber \or % one column - \ifcase\c_page_lines_location - \settrue \c_page_lines_fake_number - \let\page_lines_make_number_indeed\page_lines_number_fake_indeed + \ifcase\linenumberlocation + \settrue \faketextlinenumber + % hm \or - \let\page_lines_make_number_indeed\page_lines_number_left + \let\domakelinenumber\mkleftlinenumber \or - \let\page_lines_make_number_indeed\page_lines_number_right + \let\domakelinenumber\mkrightlinenumber \or % inner - \let\page_lines_make_number_indeed\page_lines_number_inner_indeed + \let\domakelinenumber\mkdoinnerlinenumber \or % outer - \let\page_lines_make_number_indeed\page_lines_number_outer_indeed + \let\domakelinenumber\mkdoouterlinenumber \or % text - \let\page_lines_make_number_indeed\page_lines_number_text_indeed + \let\domakelinenumber\mkdotextlinenumber \or - \let\page_lines_make_number_indeed\page_lines_number_begin_indeed + \let\domakelinenumber\mkdobeginlinenumber \or - \let\page_lines_make_number_indeed\page_lines_number_end_indeed + \let\domakelinenumber\mkdoendlinenumber \fi - \else\ifcase\c_page_lines_column\relax - \settrue \c_page_lines_fake_number + \else\ifcase\linenumbercolumn\relax + \settrue \faketextlinenumber \or - \let\page_lines_make_number_indeed\page_lines_number_left - \ifcase\c_page_lines_location\or - \c_page_lines_location\plusone + \let\domakelinenumber\mkleftlinenumber + \ifcase\linenumberlocation\or + \linenumberlocation\plusone \or - \c_page_lines_location\plustwo + \linenumberlocation\plustwo \else - \c_page_lines_location\plusone + \linenumberlocation\plusone \or - \c_page_lines_location\plusone + \linenumberlocation\plusone \or - \c_page_lines_location\plusone + \linenumberlocation\plusone \or - \c_page_lines_location\plusone % todo + \linenumberlocation\plusone % todo \or - \c_page_lines_location\plusone % todo + \linenumberlocation\plusone % todo \fi \else - \let\page_lines_make_number_indeed\page_lines_number_right - \ifcase\c_page_lines_location\or - \c_page_lines_location\plustwo + \let\domakelinenumber\mkrightlinenumber + \ifcase\linenumberlocation\or + \linenumberlocation\plustwo \or - \c_page_lines_location\plusone + \linenumberlocation\plusone \or - \c_page_lines_location\plustwo + \linenumberlocation\plustwo \or - \c_page_lines_location\plustwo + \linenumberlocation\plustwo \or - \c_page_lines_location\plustwo % todo + \linenumberlocation\plustwo % todo \or - \c_page_lines_location\plustwo % todo + \linenumberlocation\plustwo % todo \fi \fi\fi - \page_lines_make_number_indeed{#1}} + \domakelinenumber{#1}} -\let\page_lines_number_fake_indeed\gobblesixarguments % needs checking +\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}} -\def\page_lines_number_text_indeed#1#2#3#4#5#6% beware, one needs so compensate for this in the \hsize - {\hbox{\page_lines_number_construct{#1}{2}{#2}{#5}\hskip#3\scaledpoint}} +\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}} -\def\page_lines_number_left_indeed#1#2#3#4#5#6% +\def\mkdoleftlinenumber #1#2#3#4#5#6% {\naturalhbox to \zeropoint {\ifcase\istltdir#6\else \hskip-#4\scaledpoint \fi - \llap{\page_lines_number_construct{#1}{2}{#2}{#5}\kern#3\scaledpoint}}} + \llap{\dosomelinenumber{#1}{2}{#2}{#5}\kern#3\scaledpoint}}} -\def\page_lines_number_right_indeed#1#2#3#4#5#6% +\def\mkdorightlinenumber#1#2#3#4#5#6% {\naturalhbox to \zeropoint {\ifcase\istltdir#6\else \hskip-#4\scaledpoint \fi - \rlap{\hskip\dimexpr#4\scaledpoint+#3\scaledpoint\relax\page_lines_number_construct{#1}{1}{#2}{#5}}}} + \rlap{\hskip#4\scaledpoint\hskip#3\scaledpoint\dosomelinenumber{#1}{1}{#2}{#5}}}} -\def\page_lines_number_begin_indeed#1#2#3#4#5#6% +\def\mkdobeginlinenumber #1#2#3#4#5#6% {\ifcase\istltdir#6\relax - \c_page_lines_location\plusone - \expandafter\page_lines_number_left_indeed + \linenumberlocation\plusone + \expandafter\mkdoleftlinenumber \else - \c_page_lines_location\plustwo - \expandafter\page_lines_number_left_indeed + \linenumberlocation\plustwo + \expandafter\mkdorightlinenumber \fi{#1}{#2}{#3}{#4}{#5}{#6}} -\def\page_lines_number_end_indeed#1#2#3#4#5#6% +\def\mkdoendlinenumber#1#2#3#4#5#6% {\ifcase\istltdir#6\relax - \c_page_lines_location\plustwo - \expandafter\page_lines_number_left_indeed + \linenumberlocation\plustwo + \expandafter\mkdorightlinenumber \else - \c_page_lines_location\plusone - \expandafter\page_lines_number_left_indeed + \linenumberlocation\plusone + \expandafter\mkdoleftlinenumber \fi{#1}{#2}{#3}{#4}{#5}{#6}} -\def\page_lines_number_construct#1#2#3#4% tag 1=left|2=right linenumber leftskip +\def\dosomelinenumber#1#2#3#4% tag 1=left|2=right linenumber leftskip {\begingroup \def\currentlinenumbering{#1}% \def\linenumber{#3}% unsafe - \doifelse{\linenumberingparameter\c!width}\v!margin - {\d_page_lines_width\leftmarginwidth} - {\d_page_lines_width\linenumberingparameter\c!width}% - \d_page_lines_distance\linenumberingparameter\c!distance\relax - \ifcase#2\relax\or\hskip\d_page_lines_distance\fi\relax - \ifnum\c_page_lines_location=\plusfive - \scratchdimen\dimexpr#4\scaledpoint-\d_page_lines_distance\relax - \c_page_lines_location\plusone + \doifelse{\linenumberparameter\c!width}\v!margin + {\linenumberwidth\leftmarginwidth} + {\linenumberwidth\linenumberparameter\c!width}% + \linenumberdistance\linenumberparameter\c!distance\relax + \ifcase#2\relax\or\hskip\linenumberdistance\fi\relax + \ifnum\linenumberlocation=\plusfive + \scratchdimen\dimexpr#4\scaledpoint-\linenumberdistance\relax + \linenumberlocation\plusone \else \scratchdimen\zeropoint \fi - \ifcase\c_page_lines_alignment - \c_page_lines_location\zerocount % middle + \ifcase\linenumberalignment + \linenumberlocation\zerocount % middle \or - \c_page_lines_location\plusone % left + \linenumberlocation\plusone % left \or - \c_page_lines_location\plustwo % right + \linenumberlocation\plustwo % right \fi - \ifconditional\tracelinenumbering\ruledhbox\else\hbox\fi to \d_page_lines_width - {\ifcase\c_page_lines_location + \ifconditional\tracelinenumbering\ruledhbox\else\hbox\fi to \linenumberwidth + {\ifcase\linenumberlocation \hss % middle \or % left @@ -467,16 +461,16 @@ \or \doifoddpageelse\hss\relax % outer \fi - \ifconditional\c_page_lines_fake_number + \ifconditional\faketextlinenumber % we need to reserve space \else - \uselinenumberingstyleandcolor\c!style\c!color - \linenumberingparameter\c!command - {\linenumberingparameter\c!left - \convertnumber{\linenumberingparameter\c!conversion}{#3}% - \linenumberingparameter\c!right}% + \dolinenumberattributes\c!style\c!color + \linenumberparameter\c!command + {\linenumberparameter\c!left + \convertnumber{\linenumberparameter\c!conversion}{#3}% + \linenumberparameter\c!right}% \fi - \ifcase\c_page_lines_location + \ifcase\linenumberlocation \hss % middle \or \hss % left @@ -487,60 +481,53 @@ \or \doifoddpageelse\relax\hss % outer \fi}% - \ifcase#2\relax - \hskip-\scratchdimen - \or - \hskip-\scratchdimen - \or - \hskip\dimexpr\d_page_lines_distance-\scratchdimen\relax - \fi - \relax + \ifcase#2\relax\or\or\hskip\linenumberdistance\fi\relax + \hskip-\scratchdimen \the\everylinenumber \endgroup} +% left right inner outer + +% align: \alignedline\@@rnalign\v!right{\box0\hskip\@@rndistance} + % referencing -\unexpanded\def\someline [#1]{\page_lines_reference_start{#1}\page_lines_reference_stop{#1}} % was just a def -\unexpanded\def\startline[#1]{\page_lines_reference_start{#1}} -\unexpanded\def\stopline [#1]{\page_lines_reference_stop {#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}} -\def\page_lines_reference_show_start#1% +\def\mkshowstartlinereference#1% {\ifconditional\tracelinenumbering \setbox\scratchbox\hbox{\llap - {\vrule\s!width\onepoint\s!depth\strutdp\s!height.8\strutht\raise.85\strutht\hbox{\llap{\tt\txx#1}}}}% - \smashbox\scratchbox - \box\scratchbox + {\vrule\!!width\onepoint\!!depth\strutdp\!!height.8\strutht\raise.85\strutht\hbox{\llap{\tt\txx#1}}}}% + \smashbox\scratchbox\box\scratchbox \fi} -\def\page_lines_reference_show_stop#1% +\def\mkshowstoplinereference#1% {\ifconditional\tracelinenumbering \setbox\scratchbox\hbox{\rlap - {\raise.85\strutht\hbox{\rlap{\tt\txx#1}}\vrule\s!width\onepoint\s!depth\strutdp\s!height.8\strutht}}% - \smashbox\scratchbox - \box\scratchbox + {\raise.85\strutht\hbox{\rlap{\tt\txx#1}}\vrule\!!width\onepoint\!!depth\strutdp\!!height.8\strutht}}% + \smashbox\scratchbox\box\scratchbox \fi} -\def\page_lines_reference_start#1{\page_lines_some_reference{#1}{lr:b:#1}{\page_lines_reference_show_start{#1}}\ignorespaces} -\def\page_lines_reference_stop #1{\removeunwantedspaces\page_lines_some_reference{#1}{lr:e:#1}{\page_lines_reference_show_stop{#1}}} +\def\mkstartlinereference#1{\mksomelinereference{#1}{lr:b:#1}{\mkshowstartlinereference{#1}}\ignorespaces} +\def\mkstoplinereference #1{\removeunwantedspaces\mksomelinereference{#1}{lr:e:#1}{\mkshowstoplinereference{#1}}} % eventually we will do this in lua -\def\currentreferencelinenumber{\ctxcommand{filterreference("linenumber")}} - -\let\m_page_lines_from\empty -\let\m_page_lines_to \empty +\def\currentreferencelinenumber{\ctxlua{structures.references.filter("linenumber")}} -\unexpanded\def\doifelsesamelinereference#1#2#3% +\def\doifelsesamelinereference#1#2#3% {\doifreferencefoundelse{lr:b:#1} - {\edef\m_page_lines_from{\currentreferencelinenumber}% + {\edef\fline{\currentreferencelinenumber}% \doifreferencefoundelse{lr:e:#1} - {\edef\m_page_lines_to{\currentreferencelinenumber}% - %[\m_page_lines_from,\m_page_lines_to] - \ifx\m_page_lines_from\m_page_lines_to#2\else#3\fi} + {\edef\tline{\currentreferencelinenumber}% + %[\fline,\tline] + \ifx\fline\tline#2\else#3\fi} {#2}} {#2}} -\unexpanded\def\inline#1[#2]% +\def\inline#1[#2]% {\doifelsenothing{#1} {\doifelsesamelinereference{#2} {\in{\leftlabeltext\v!line}{\rightlabeltext\v!line}[lr:b:#2]} @@ -549,9 +536,9 @@ {\in{#1}[lr:b:#2]} {\in{#1}[lr:b:#2]--\in[lr:e:#2]}}} -\unexpanded\def\inlinerange[#1]% +\def\inlinerange[#1]% {\doifelsesamelinereference{#1} {\in[lr:b:#1]} - {\in[lr:b:#1]\endash\in[lr:e:#1]}} + {\in[lr:b:#1]--\in[lr:e:#1]}} \protect \endinput -- cgit v1.2.3