diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/core-reg.tex')
-rw-r--r-- | Master/texmf-dist/tex/context/base/core-reg.tex | 195 |
1 files changed, 140 insertions, 55 deletions
diff --git a/Master/texmf-dist/tex/context/base/core-reg.tex b/Master/texmf-dist/tex/context/base/core-reg.tex index bd64bd6adda..18ce09830ad 100644 --- a/Master/texmf-dist/tex/context/base/core-reg.tex +++ b/Master/texmf-dist/tex/context/base/core-reg.tex @@ -81,31 +81,37 @@ \newif\ifwritetoregister \writetoregistertrue +\ifx\undefined\mkdefineregister + \let\mkdefineregister \gobbleoneargument + \let\mksaveregistervariable\gobblethreearguments + \let\mksaveregisterentry \gobblesevenarguments + \let\mksaveregistersee \gobblesevenarguments + \let\mkloadregister \gobbleoneargument +\fi + \def\doprocesspageregister[#1]#2#3% key altnum entry {\ifwritetoregister \begingroup \thisisnextinternal\s!ind \ifduplicate\getlastregisterentry{#3}\fi - \convertexpanded{\registerparameter\c!keyexpansion}{#1}\asciiregisterentryA - \convertexpanded{\registerparameter\c!expansion }{#3}\asciiregisterentryB + \defconvertexpanded\asciiregisterentryA{\registerparameter\c!keyexpansion}{#1}% + \defconvertexpanded\asciiregisterentryB{\registerparameter\c!expansion }{#3}% \doifsomething{\registerparameter\c!keyexpansion} {\ifx\asciiregisterentryA\empty - \convertexpanded{\registerparameter\c!keyexpansion}{#3}\asciiregisterentryA + \defconvertexpanded\asciiregisterentryA{\registerparameter\c!keyexpansion}{#3}% \fi}% \makesectionformat \doifelse{\registerparameter\c!ownnumber}\v!yes \donetrue\donefalse - % the spaces between } { are essential for texutil's split - \expanded - {\writeutility% - {r \ifcase\registerpagestatus\space\or e \or f \or t \fi - {\currentregister} % - {\nextinternalreference} % - {\asciiregisterentryA} % - {\asciiregisterentryB} % - {\sectionformat\sectionseparator\sectionseparator - \ifdone#2\else\noexpand\pagenumber\fi} % - {\noexpand\realfolio}}}% + \mksaveregisterentry + {\currentregister} + {\ifcase\registerpagestatus\space\or e\or f\or t\fi} + {\nextinternalreference} + {\asciiregisterentryA} + {\asciiregisterentryB} + {\sectionformat\sectionseparator\sectionseparator + \ifdone#2\else\noexpand\pagenumber\fi} + {\noexpand\realfolio}% \getfirstcharacter\currentregister \registerinfo{> \firstcharacter}{#3}% \endgroup @@ -142,14 +148,28 @@ \def\writetoregister[#1]% to be documented {\doregister{#1}} -\def\startregister - {\dotripleempty\dostartregister} +% \def\startregister +% {\dotripleempty\dostartregister} -\def\dostartregister[#1][#2][#3]#4% - {\chardef\registerpagestatus\plustwo - \def\currentregister{#1}% - \setgvalue{\??id#1\??id#2}{\dodostopregister[#1][#3]{#4}}% - \dodoregister[#3]{}{#4}} +% \def\dostartregister[#1][#2][#3]#4% +% {\chardef\registerpagestatus\plustwo +% \def\currentregister{#1}% +% \setgvalue{\??id#1\??id#2}{\dodostopregister[#1][#3]{#4}}% +% \dodoregister[#3]{}{#4}} + +\def\startregister + {\doquadrupleempty\dostartregister} + +\def\dostartregister[#1][#2][#3][#4]#5% % 3 args: #3 is sortkey + {\chardef\registerpagestatus\plustwo % 4 args: #3 is type, #4 is sortkey + \def\currentregister{#1}% + \iffourthargument + \setgvalue{\??id#1\??id#2}{\dodostopregister[#1][#4]{#5}}% + \dodoregister[#4]{#3}{#5}% + \else + \setgvalue{\??id#1\??id#2}{\dodostopregister[#1][#3]{#5}}% + \dodoregister[#3]{}{#5}% + \fi} \def\stopregister {\dodoubleargument\dostopregister} @@ -167,23 +187,22 @@ \begingroup \thisisnextinternal\s!ind \ifduplicate\getlastregisterentry{#2}\fi - \convertexpanded{\registerparameter\c!keyexpansion}{#1}\asciiregisterentryA - \convertexpanded{\registerparameter\c!expansion }{#2}\asciiregisterentryB - \convertexpanded{\registerparameter\c!expansion }{#3}\asciiregisterentryC + \defconvertexpanded\asciiregisterentryA{\registerparameter\c!keyexpansion}{#1}% + \defconvertexpanded\asciiregisterentryB{\registerparameter\c!expansion }{#2}% + \defconvertexpanded\asciiregisterentryC{\registerparameter\c!expansion }{#3}% \doifsomething{\registerparameter\c!keyexpansion} {\ifx\asciiregisterentryA\empty - \convertexpanded{\registerparameter\c!keyexpansion}{#2}\asciiregisterentryA + \defconvertexpanded\asciiregisterentryA{\registerparameter\c!keyexpansion}{#2}% \fi}% \makesectionformat - \expanded - {\writeutility% - {r s % - {\currentregister} % - {\nextinternalreference} % - {\asciiregisterentryA} % - {\asciiregisterentryB} % - {\asciiregisterentryC} % - {\sectionformat}}}% + \mksaveregistersee + {\currentregister} + {s} + {\nextinternalreference} + {\asciiregisterentryA} + {\asciiregisterentryB} + {\asciiregisterentryC} + {\sectionformat}% \endgroup \registerinfo{> see}{#2}% \fi} @@ -210,6 +229,7 @@ \let\c!entrya\empty \let\c!entryb\empty \let\c!entryc\empty +\let\c!entryd\empty \def\nextregisterpage {\iffirstregisterpage @@ -287,6 +307,7 @@ \def\registerentrya#1{\executeifdefined{#1\s!entrya}\gobbleoneargument } \def\registerentryb#1{\executeifdefined{#1\s!entryb}\gobbleoneargument } \def\registerentryc#1{\executeifdefined{#1\s!entryc}\gobbleoneargument } +\def\registerentryd#1{\executeifdefined{#1\s!entryd}\gobbleoneargument } \def\registersee #1{\executeifdefined{#1\s!see }\gobblethreearguments} \def\registerpage #1{\executeifdefined{#1\s!page }\gobblefourarguments } \def\registerfrom #1{\executeifdefined{#1\s!from }\gobblefourarguments } @@ -296,6 +317,7 @@ {\letvalue{#1\s!entrya}\gobbleoneargument \letvalue{#1\s!entryb}\gobbleoneargument \letvalue{#1\s!entryc}\gobbleoneargument + \letvalue{#1\s!entryd}\gobbleoneargument \letvalue{#1\s!see }\gobblethreearguments \letvalue{#1\s!page }\gobblefourarguments \letvalue{#1\s!from }\gobblefourarguments @@ -312,6 +334,7 @@ \let\c!entrya =\relax \let\c!entryb =\relax \let\c!entryc =\relax +\let\c!entryd =\relax \def\limitedregisterentry#1#2% {\getvalue{\??id#1\c!textcommand}% @@ -340,16 +363,47 @@ \!!doneafalse \doifelsevalue{\??id#2\c!interaction}\v!text {\ifcase\currententrylevel \or - \!!doneatrue\c!entrya\c!entryb\c!entryc \or - \c!entrya\!!doneatrue\c!entryb\c!entryc \or - \c!entrya\c!entryb\!!doneatrue\c!entryc \fi} - {\c!entrya\c!entryb\c!entryc}% + \!!doneatrue\c!entrya\c!entryb\c!entryc\c!entryd \or + \c!entrya\!!doneatrue\c!entryb\c!entryc\c!entryd \or + \c!entrya\c!entryb\!!doneatrue\c!entryc\c!entryd \or + \c!entrya\c!entryb\c!entryc\!!doneatrue\c!entryd \fi} + {\c!entrya\c!entryb\c!entryc\c!entryd}% \global\let\c!entrya\relax \global\let\c!entryb\relax \global\let\c!entryc\relax + \global\let\c!entryd\relax \global\let\c!entryletter\relax \global\let\c!entryreference\relax} +% \def\dodosetpageregisterpageB#1#2#3#4#5#6% +% {\iffirstregisterpage +% \expandafter\hskip\getvalue{\??id#2\c!distance}\relax +% \else\ifnum#1=3 +% \strut|--|\relax % -- ! +% \else +% % \relax after space needed because | looks ahead +% \strut\registerpageseparator|\space|\relax +% \fi\fi +% \iftrue % \iftrue ...\fi to preserve indentation, can be folded out +% \begingroup +% % +% \doifelsevalue{\??id#2\c!prefix}\v!none % default v!both +% {\chardef\pageprefixmode\zerocount}% +% {\doifvalue{\??id#2\c!prefix}\v!first % only first in range (1.2-4) +% {\ifnum#1=3 \chardef\pageprefixmode\zerocount \fi}}% +% % +% \doifelsevalue{\??id#2\c!interaction}\v!pagenumber +% {\bgroup +% \setbox0\hbox{\showlocation{\doregisterpage{#2}[#5]\ifnum#1=2\/\fi}}% +% \gotonextinternal{\s!ind}{#4}{#6}{\box0}%{\copy0}% +% \egroup} +% {\hbox{\doregisterpage{#2}[#5]\ifnum#1=2\/\fi}}% +% \endgroup +% \ignorespaces +% \relax +% \fi +% \global\firstregisterpagefalse} + \def\dodosetpageregisterpageB#1#2#3#4#5#6% {\iffirstregisterpage \expandafter\hskip\getvalue{\??id#2\c!distance}\relax @@ -357,19 +411,23 @@ \strut|--|\relax % -- ! \else % \relax after space needed because | looks ahead - \strut\registerpageseparator|\space|\relax +% TH: next line replaced +% \strut\registerpageseparator|\space|\relax + \strut \registerpageseparator{ }% +% /TH \fi\fi \iftrue % \iftrue ...\fi to preserve indentation, can be folded out \begingroup % \doifelsevalue{\??id#2\c!prefix}\v!none % default v!both {\chardef\pageprefixmode\zerocount}% - {\doifvalue{\??id#2\c!prefix}\v!first % only first in range (1.2-4) + {\doifvalue{\??id#2\c!prefix}\v!first % {\ifnum#1=3 \chardef\pageprefixmode\zerocount \fi}}% % \doifelsevalue{\??id#2\c!interaction}\v!pagenumber {\bgroup - \setbox0\hbox{\showlocation{\doregisterpage{#2}[#5]\ifnum#1=2\/\fi}}% + \setbox0 + \hbox{\showlocation{\doregisterpage{#2}[#5]\ifnum#1=2\/\fi}}% \gotonextinternal{\s!ind}{#4}{#6}{\box0}%{\copy0}% \egroup} {\hbox{\doregisterpage{#2}[#5]\ifnum#1=2\/\fi}}% @@ -510,12 +568,13 @@ \def\dohandleregisterentry##1% dubbelop | \strut nieuw {\doregistertexthowto{#1}{\strut\limitedregisterentry{#1}{##1}}}% \getvalue - {#1\ifcase\currententrylevel\s!entrya\or\s!entryb\else\s!entryc\fi}% + {#1\ifcase\currententrylevel\s!entrya\or\s!entryb\else\s!entryc\else\s!entryd\fi}% {\doregisterpagehowto{#1}{\labeltexts\v!see{#3}}}% - \c!entryletter\c!entrya\c!entryb\c!entryc + \c!entryletter\c!entrya\c!entryb\c!entryc\c!entryd \global\let\c!entrya\relax \global\let\c!entryb\relax \global\let\c!entryc\relax + \global\let\c!entryd\relax \global\let\c!entryletter\relax \global\let\c!entryreference\relax % \global\firstregisterentrytrue @@ -584,7 +643,7 @@ \doregistercharacter[#1]{#2}}} % \def\HowUgly #1{\doHowUgly#1\relax} -% \def\doHowUgly#1#2\relax{\iffirstregisterentry{\bf#1}#2\fi#1#2} # handles utf too +% \def\doHowUgly#1#2\relax{\iffirstregisterentry{\bf#1}\else#1\fi#2} % unchecked % % \setupregister[index][indicator=no,deeptextcommand=\HowUgly] % @@ -608,6 +667,7 @@ \edef\currententrylevel{1}% \global\let\c!entryb\relax \global\let\c!entryc\relax + \global\let\c!entryd\relax \gdef\c!entrya {\iffirstregisterentry\else\endgraf\fi % new \global\firstregisterpagetrue @@ -620,6 +680,7 @@ \def\dosetpageregisterentryb#1#2% {\flushseenregisterpage % redundant \edef\currententrylevel{2}% + \global\let\c!entryd\relax \global\let\c!entryc\relax \global\def\c!entryb {\iffirstregisterentry\else\endgraf\fi % new @@ -646,6 +707,21 @@ \global\firstregisterentryfalse \global\firstsubsubentryfalse}} +\def\dosetpageregisterentryd#1#2% + {\flushseenregisterpage % redundant + \edef\currententrylevel{4}% + \gdef\c!entryd + {\iffirstregisterentry\else\endgraf\fi % new + \global\firstregisterpagetrue + \global\let\c!entrya\relax + \global\let\c!entryb\relax + \global\let\c!entryc\relax + \iffirstsubsubentry\nobreak\fi + \hangindent4em\noindent\c!entryreference\hskip3em\relax + \dohandlepageregisterentry{#1}{#2}% + \global\firstregisterentryfalse + \global\firstsubsubentryfalse}} + \def\dosetpageregister#1% \currentregister gebruiken {\dosetreglevel{#1}% \global\let\currentregisterentry\empty @@ -655,6 +731,7 @@ \setvalue{#1\s!entrya}{\dosetpageregisterentrya {#1}}% \setvalue{#1\s!entryb}{\dosetpageregisterentryb {#1}}% \setvalue{#1\s!entryc}{\dosetpageregisterentryc {#1}}% + \setvalue{#1\s!entryd}{\dosetpageregisterentryd {#1}}% \setvalue{#1\s!page }{\dosetpageregisterpage{1}{#1}}% \setvalue{#1\s!from }{\dosetpageregisterpage{2}{#1}}% \setvalue{#1\s!to }{\dosetpageregisterpage{3}{#1}}% @@ -665,7 +742,7 @@ {\dosetfilterlevel{\getvalue{\??id#1\c!criterium}}\empty} \def\getalllistreferences#1#2% - {\doglobal\convertexpanded{\getvalue{\??id#1\c!expansion}}{#2}\currentregisterentry + {\gdefconvertexpanded\currentregisterentry{\getvalue{\??id#1\c!expansion}}{#2}% \doifdefinedelse{\??id#1\??id\currentregisterentry} {\edef\alllistreferences% {\getvalue{\??id#1\??id\currentregisterentry}}% @@ -769,7 +846,7 @@ \global\firstregisterpagetrue \setvalue{#1\s!entrya}##1% {\global\firstregisterpagetrue - \doglobal\convertargument##1\to\currentregisterentry % \doglobal nodig? + \gdefconvertedargument\currentregisterentry{##1}% global nodig? \doglobal\increment\internallistreference}% \setvalue{#1\s!from}% {\getvalue{#1\s!page}}% @@ -811,7 +888,7 @@ \let\dosetregister\doloadregisterlinks \def\currentregister{#1}% \setupregister[#1][#2]% - \doutilities{#1}{\registerparameter\c!file}{#1}\relax\relax + \mkloadregister\currentregister\dobeforeplaceregister\doafterplaceregister \endgroup \ifautoregisterhack \doinitializeautoregister{#1}% @@ -1020,19 +1097,21 @@ \doifelse{\registerparameter\c!compress}\v!yes % new {\chardef\collapseregisterpages\plusone} {\chardef\collapseregisterpages\zerocount}% - \raggedright +% TH: disable next line +% \raggedright +% /TH \startcolumns [\c!n=\registerparameter\c!n, \c!balance=\registerparameter\c!balance, - \c!align=\registerparameter\c!align]% + \c!align=\registerparameter\c!align, + tolerance=stretch]% \dontcomplain \startpacked[\v!blank]% - \doutilities\currentregister{\registerparameter\c!file}\currentregister\dobeforeplaceregister\doafterplaceregister + \mkloadregister\currentregister\dobeforeplaceregister\doafterplaceregister \stoppacked \stopcolumns \endgroup \fi} - \def\dobeforeplaceregister {\resetseenregisterpage \relax} @@ -1057,13 +1136,13 @@ \def\doregisterregisterlanguage#1% {\savesortlanguage{\getvalue{\??id#1\s!language}}% - \immediatewriteutility{r l {#1} {\getvalue{\??id#1\s!language}}}} + \mksaveregistervariable{#1}{l}{\getvalue{\??id#1\s!language}}} \def\dodefineregister[#1][#2]% {\setupregister[#1]% [\c!n=2, \c!balance=\v!yes, % \v!no komt niet zo vaak voor - \c!align=\v!no, + \c!align=\v!flushleft, \c!before=\blank, % binnen kolommen: \blank[\v!line] \c!after=, \c!symbol=, @@ -1093,7 +1172,7 @@ \doregisterregisterlanguage{#1}% \to \everysavesortkeys \presetheadtext[#1=\Word{#1}]% - \addutilityreset{#1}% + \mkdefineregister{#1}% \setvalue{#1}{\doregister{#1}}% \setvalue{\e!coupled#1}{\dolinkedregister{#1}}% \setvalue{\s!set#1}{\dosetregister{#1}}% @@ -1123,7 +1202,7 @@ \global\utilitydonetrue} {}}% \doglobal\newcounter\utilityregisterlength - \setbox0\vbox{\doutilities{#1}{\registerparameter\c!file}{#1}\relax\relax}% + \setbox0\vbox{\mkloadregister\currentregister\dobeforeplaceregister\doafterplaceregister}% \endgroup \ifregistergeplaatst \setsystemmode \v!register @@ -1134,6 +1213,12 @@ \def\determineregistercharacteristics {\dodoubleempty\dodetermineregistercharacteristics} +%D Plugins. + +\loadmarkfile{core-reg} + +%D Default index: + \defineregister [\v!index] [\v!indices] |