summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/core-reg.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-11-16 01:02:47 +0000
committerKarl Berry <karl@freefriends.org>2006-11-16 01:02:47 +0000
commit3c85b55e2f245fb7edac7e445f107e6d0bb423ae (patch)
treec62b7f80edafe0455310d08e09f4218127bf9e87 /Master/texmf-dist/tex/context/base/core-reg.tex
parente5ecff27a26ef59e1dbe9702677687fd7107be3a (diff)
context update
git-svn-id: svn://tug.org/texlive/trunk@2444 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/base/core-reg.tex')
-rw-r--r--Master/texmf-dist/tex/context/base/core-reg.tex458
1 files changed, 362 insertions, 96 deletions
diff --git a/Master/texmf-dist/tex/context/base/core-reg.tex b/Master/texmf-dist/tex/context/base/core-reg.tex
index 431cee6b9d6..309aee2f9ed 100644
--- a/Master/texmf-dist/tex/context/base/core-reg.tex
+++ b/Master/texmf-dist/tex/context/base/core-reg.tex
@@ -80,6 +80,34 @@
%
% \index[Ätsch]{Ätsch} test \index{QÄtsch} test \index[ratsch]{RÄtsch} test
+% \def\doprocesspageregister[#1]#2#3% key altnum entry
+% {\begingroup
+% \thisisnextinternal\s!ind
+% \ifduplicate\getlastregisterentry{#3}\fi
+% \convertexpanded{\registerparameter\c!keyexpansion}{#1}\asciiregisterentryA
+% \convertexpanded{\registerparameter\c!expansion }{#3}\asciiregisterentryB
+% \doifsomething{\registerparameter\c!keyexpansion}
+% {\ifx\asciiregisterentryA\empty
+% \convertexpanded{\registerparameter\c!keyexpansion}{#3}\asciiregisterentryA
+% \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}}}%
+% \getfirstcharacter\currentregister
+% \registerinfo{> \firstcharacter}{#3}%
+% \endgroup}
+
\def\doprocesspageregister[#1]#2#3% key altnum entry
{\begingroup
\thisisnextinternal\s!ind
@@ -123,49 +151,58 @@
% \ifvmode\nobreak\fi
% \GotoPar}
+% \long\def\doflushatpar#1%
+% %{\dogotopar{#1}}
+% %{\dogotopar{\dontleavehmode#1}} % this one can introduce empty lines
+% {\dogotopar{#1\ifvmode\nobreak\fi}} % while this one can mess up vertical space
+%
+% fails when [text] \index{test} [empty line] [text] so we now have
+% Taco's test based solution:
+
+\def\doflushatpar
+ {\ifvmode
+ \expandafter\dogotopar
+ \else
+ \expandafter\firstofoneargument
+ \fi}
+
\def\dodoregister[#1]#2#3%
- {\dogotopar{\doprocesspageregister[#1]{#2}{#3}}}
+ {\doflushatpar{\doprocesspageregister[#1]{#2}{#3}}}
\def\writetoregister[#1]% to be documented
{\doregister{#1}}
\def\startregister
- {\dodoubleargument\dostartregister}
-
-%\def\dostartregister[#1][#2]#3%
-% {\chardef\registerpagestatus=2
-% \def\currentregister{#1}%
-% \setgvalue{\??id#1\??id#2}{\dodostopregister[#1][#2]{#3}}%
-% \complexdoregister[#2]{#3}}
+ {\dotripleempty\dostartregister}
-\def\dostartregister[#1][#2]#3%
- {\chardef\registerpagestatus2
+\def\dostartregister[#1][#2][#3]#4%
+ {\chardef\registerpagestatus\plustwo
\def\currentregister{#1}%
- \setgvalue{\??id#1\??id#2}{\dodostopregister[#1][#2]{#3}}%
- \donoregister[#2]{#3}}
+ \setgvalue{\??id#1\??id#2}{\dodostopregister[#1][#3]{#4}}%
+ \dodoregister[#3]{}{#4}}
\def\stopregister
{\dodoubleargument\dostopregister}
\def\dostopregister[#1][#2]%
- {\getvalue{\??id#1\??id#2}\setgvalue{\??id#1\??id#2}{}}
+ {\getvalue{\??id#1\??id#2}\letgvalue{\??id#1\??id#2}\relax}
-\def\dodostopregister[#1][#2]%
- {\chardef\registerpagestatus3
+\def\dodostopregister[#1][#2]#3%
+ {\chardef\registerpagestatus\plusthree
\def\currentregister{#1}%
- \donoregister[#2]}
+ \dodoregister[#2]{}{#3}} % key altnum entry
-\def\complexdozieregister[#1]#2#3%
+\def\doprocessseeregister[#1]#2#3%
{\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
-\doifsomething{\registerparameter\c!keyexpansion}
- {\ifx\asciiregisterentryA\empty
- \convertexpanded{\registerparameter\c!keyexpansion}{#2}\asciiregisterentryA
- \fi}%
+ \doifsomething{\registerparameter\c!keyexpansion}
+ {\ifx\asciiregisterentryA\empty
+ \convertexpanded{\registerparameter\c!keyexpansion}{#2}\asciiregisterentryA
+ \fi}%
\makesectionformat
\expanded
{\writeutility%
@@ -177,16 +214,18 @@
{\asciiregisterentryC} %
{\sectionformat}}}%
\endgroup
- \registerinfo{> zie}{#2}%
- \GotoPar}
+ \registerinfo{> see}{#2}}
+
+\def\complexdoseeregister[#1]#2#3%
+ {\doflushatpar{\doprocessseeregister[#1]{#2}{#3}}}
-\def\dozieregister#1%
+\def\doseeregister#1%
{\def\currentregister{#1}%
- \complexorsimpleempty\dozieregister}
+ \complexorsimpleempty\doseeregister} % = \dosingleempty\doseeregister
-\def\dowritetoregister[#1]% % de twee-traps-aanroep is nodig
- {\edef\currentregister{#1}% % om gebruik van \ExpandBothAfter
- \doprocesspageregister{}} % mogelijk te maken
+\def\dowritetoregister[#1]% % de twee-traps-aanroep is nodig
+ {\edef\currentregister{#1}% % om gebruik van \ExpandBothAfter
+ \doprocesspageregister} % mogelijk te maken
\def\writetoregister
{\dodoubleempty\dowritetoregister}
@@ -242,12 +281,12 @@
\def\registertexthowto{#2}}%
\def\doregistertexthowto#1#2%
- {\dostartattributes{\??id#1\registertexthowto}\c!textstyle\c!textcolor{}%
+ {\dostartattributes{\??id#1\registertexthowto}\c!textstyle\c!textcolor\empty
\getvalue{\??id#1\c!textcommand}{#2}%
\dostopattributes}
\def\doregisterpagehowto#1#2%
- {\dostartattributes{\??id#1\registerpagehowto}\c!pagestyle\c!pagecolor{}%
+ {\dostartattributes{\??id#1\registerpagehowto}\c!pagestyle\c!pagecolor\empty
\getvalue{\??id#1\c!pagecommand}{#2}%
\dostopattributes}
@@ -292,21 +331,84 @@
\def\dosetpageregisterpage#1#2#3#4#5#6%
{\doifreglevelelse[#5]{\dodosetpageregisterpage{#1}{#2}{#3}{#4}{#5}{#6}}{}}
-\def\dodosetpageregisterpage#1#2#3#4#5#6%
+% \def\dodosetpageregisterpage#1#2#3#4#5#6%
+% {\global\utilitydonetrue
+% \c!entryletter
+% \setregisterhowto[#3]%
+% \def\dohandleregisterentry##1%
+% {\bgroup
+% \if!!donea % \strut nieuw
+% %\setbox0\hbox{\showlocation{\doregistertexthowto{#2}
+% % {\strut\limitedregisterentry{#2}{##1}}}}%
+% % \gotonextinternal\s!ind{#4}{#6}{\box0}%
+% %
+% \hhboxindent\hangindent % maybe also left and right skip
+% \setbox0\hbox{\doregistertexthowto{#2}{\strut\limitedregisterentry{#2}{##1}}}%
+% \unhhbox0\with{\gotonextinternal\s!ind{#4}{#6}{\box\hhbox}}%
+% %
+% \else
+% \doregistertexthowto{#2}{##1}%
+% \fi
+% \egroup
+% \!!doneafalse}%
+% \!!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}%
+% \global\let\c!entrya\relax
+% \global\let\c!entryb\relax
+% \global\let\c!entryc\relax
+% \global\let\c!entryletter\relax
+% \global\let\c!entryreference\relax
+% % \global\firstregisterentrytrue
+% \iffirstregisterpage
+% \global\chardef\lastregisterpagestatus\zerocount
+% \expandafter\hskip\getvalue{\??id#2\c!distance}\relax
+% \donetrue
+% \else\ifnum#1=3
+% |--|\relax % -- !
+% \donetrue
+% \else\ifnum\lastregisterpagestatus=2
+% \donefalse % waiting for "to" pagenumber
+% \else
+% \registerpageseparator
+% |\space|\relax % \relax needed because | looks ahead
+% \donetrue
+% \fi\fi\fi
+% \ifdone
+% \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
+% \global\chardef\lastregisterpagestatus#1\relax
+% \fi
+% \global\firstregisterpagefalse}
+
+\def\dodosetpageregisterpageA#1#2#3#4#5#6%
{\global\utilitydonetrue
\c!entryletter
\setregisterhowto[#3]%
\def\dohandleregisterentry##1%
{\bgroup
\if!!donea % \strut nieuw
- %\setbox0\hbox{\showlocation{\doregistertexthowto{#2}
- % {\strut\limitedregisterentry{#2}{##1}}}}%
- % \gotonextinternal\s!ind{#4}{#6}{\box0}%
- %
\hhboxindent\hangindent % maybe also left and right skip
\setbox0\hbox{\doregistertexthowto{#2}{\strut\limitedregisterentry{#2}{##1}}}%
\unhhbox0\with{\gotonextinternal\s!ind{#4}{#6}{\box\hhbox}}%
- %
\else
\doregistertexthowto{#2}{##1}%
\fi
@@ -323,8 +425,10 @@
\global\let\c!entryb\relax
\global\let\c!entryc\relax
\global\let\c!entryletter\relax
- \global\let\c!entryreference\relax
- % \global\firstregisterentrytrue
+ \global\let\c!entryreference\relax}
+
+\def\dodosetpageregisterpageB#1#2#3#4#5#6%
+ {% \global\firstregisterentrytrue
\iffirstregisterpage
\global\chardef\lastregisterpagestatus\zerocount
\expandafter\hskip\getvalue{\??id#2\c!distance}\relax
@@ -340,6 +444,13 @@
\donetrue
\fi\fi\fi
\ifdone
+ \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
@@ -347,13 +458,99 @@
\gotonextinternal{\s!ind}{#4}{#6}{\box0}%{\copy0}%
\egroup}
{\hbox{\doregisterpage{#2}[#5]\ifnum#1=2\/\fi}}%
+ \endgroup
\ignorespaces
\global\chardef\lastregisterpagestatus#1\relax
\fi
\global\firstregisterpagefalse}
+\def\resetseenregisterpage
+ {\global\let\firstseenregisterreal \relax
+ \global\let\currentseenregisterreal\relax
+ \global\let\lastseenregisterreal \relax
+ \global\let\firstseenregisterpage \relax
+ \global\let\currentseenregisterpage\relax
+ \global\let\lastseenregisterpage \relax}
+
+\resetseenregisterpage
+
+\def\dodosetpageregisterpageC#1#2#3#4#5#6%
+ {\xdef\currentseenregisterpage{#5}%
+ \xdef\currentseenregisterreal{#6}%
+ \gdef\flushseenregisterpage{\doflushseenregisterpage{#1}{#2}{#3}{#4}}%
+ \ifx\firstseenregisterreal\relax
+ \global\let\firstseenregisterreal\currentseenregisterreal
+ \global\let\firstseenregisterpage\currentseenregisterpage
+ \global\let\lastseenregisterreal \currentseenregisterreal
+ \global\let\lastseenregisterpage \currentseenregisterpage
+ \else\ifnum\numexpr\lastseenregisterreal+\plusone\relax=\currentseenregisterreal\relax
+ \global\let\lastseenregisterreal \currentseenregisterreal
+ \global\let\lastseenregisterpage \currentseenregisterpage
+ \else
+ \ifx\firstseenregisterreal\lastseenregisterreal
+ \expanded{\dodosetpageregisterpageB{1}{#2}{#3}{#4}{\lastseenregisterpage}{\lastseenregisterreal}}%
+ \else
+ \expanded{\dodosetpageregisterpageB{2}{#2}{#3}{#4}{\firstseenregisterpage}{\firstseenregisterreal}}%
+ \expanded{\dodosetpageregisterpageB{3}{#2}{#3}{#4}{\lastseenregisterpage }{\lastseenregisterreal }}%
+ \fi
+ \global\let\firstseenregisterreal\currentseenregisterreal
+ \global\let\firstseenregisterpage\currentseenregisterpage
+ \global\let\lastseenregisterreal \currentseenregisterreal
+ \global\let\lastseenregisterpage \currentseenregisterpage
+ \fi\fi}
+
+\def\doflushseenregisterpage#1#2#3#4%
+ {\global\let\flushseenregisterpage\relax
+ \ifx\firstseenregisterreal\relax
+ % nothing in the hold
+ \else\ifx\firstseenregisterreal\lastseenregisterreal
+ \expanded{\dodosetpageregisterpageB{1}{#2}{#3}{#4}{\lastseenregisterpage}{\lastseenregisterreal}}%
+ \else
+ \expanded{\dodosetpageregisterpageB{2}{#2}{#3}{#4}{\firstseenregisterpage}{\firstseenregisterreal}}%
+ \expanded{\dodosetpageregisterpageB{3}{#2}{#3}{#4}{\lastseenregisterpage }{\lastseenregisterreal }}%
+ \fi\fi
+ \resetseenregisterpage}
+
+\let\flushseenregisterpage\relax
+
+\chardef\collapseregisterpages\zerocount
+
+\def\dodosetpageregisterpage
+ {\ifcase\collapseregisterpages
+ \expandafter\dodosetpageregisterpagenormal
+ \else
+ \expandafter\dodosetpageregisterpagecollapsed
+ \fi}
+
+\def\dodosetpageregisterpagenormal#1#2#3#4#5#6%
+ {\dodosetpageregisterpageA{#1}{#2}{#3}{#4}{#5}{#6}%
+ \dodosetpageregisterpageB{#1}{#2}{#3}{#4}{#5}{#6}}
+
+\def\dodosetpageregisterpagecollapsed#1#2#3#4#5#6%
+ {\dodosetpageregisterpageA{#1}{#2}{#3}{#4}{#5}{#6}%
+ \dodosetpageregisterpageC{#1}{#2}{#3}{#4}{#5}{#6}}
+
+% test case for collapsing (experimental, for Steffen Wolfrum)
+%
+% \starttext
+% \chardef\collapseregisterpages\zerocount \placeregister[index] \blank[2*big]
+% \chardef\collapseregisterpages\plusone \placeregister[index] \page
+% \dorecurse{10}{test 1:!\index{test} test \page}
+% \dorecurse{5} {test 2:\recurselevel \page}
+% \dorecurse{10}{test 3:!\index{test} test \page}
+% \dorecurse{5} {test 4:\recurselevel \page}
+% \dorecurse{1} {test 5:!\index{test} test \page}
+% \dorecurse{5} {test 6:\recurselevel \page}
+% \dorecurse{10}{test 7:!\index{test} test \page}
+% \dorecurse{5} {test 8:\recurselevel \page}
+% oeps \index{oeps}
+% xxxx \index{xxxx}
+% todo \index{todo}
+% \stoptext
+
\def\dosetpageregistersee#1#2#3#4% ugly separator hack
- {\expanded{\doifreglevelelse[#4\sectionseparator\sectionseparator0]}%
+ {\flushseenregisterpage
+ \expanded{\doifreglevelelse[#4\sectionseparator\sectionseparator0]}%
{{\global\utilitydonetrue
\setregisterhowto[#2]%
\def\dohandleregisterentry##1% dubbelop | \strut nieuw
@@ -376,12 +573,13 @@
\def\doregistercharacter[#1]#2%
{\global\firstregisterentrytrue
- \doifelsevalue{\??id#1\c!indicator}\v!yes
- {\executeifdefined
- {\strippedcsname\doregistercharacter\getvalue{\??id#1\c!alternative}}%
- \doregistercharactera
- [#1]{#2}}
- {\noregistercharacter[#1]{#2}}}
+ \doifsomething{#2}
+ {\doifelsevalue{\??id#1\c!indicator}\v!yes
+ {\executeifdefined
+ {\strippedcsname\doregistercharacter\getvalue{\??id#1\c!alternative}}%
+ \doregistercharactera
+ [#1]{#2}}
+ {\noregistercharacter[#1]{#2}}}}
\def\noregistercharacter[#1]#2%
{\getvalue{\??id#1\c!before}%
@@ -413,12 +611,18 @@
%D Don't use \type{\string#2}; another hack is needed, since
%D \type {#2} can be \type {\string} itself.
+% \def\doregisterreference[#1]#2%
+% {\doifvalue{\??id#1\c!referencing}\v!on
+% {\pagereference[#1:#2]}}
+
\def\doregisterreference[#1]#2%
- {\doifvalue{\??id#1\c!referencing}\v!on
- {\pagereference[#1:#2]}}
+ {\doifsomething{#2}
+ {\doifvalue{\??id#1\c!referencing}\v!on
+ {\pagereference[#1:\strippedcsname#2]}}}
\def\dosetpageregisterletter#1#2%
- {\gdef\c!entryreference
+ {\flushseenregisterpage
+ \gdef\c!entryreference
{\global\let\c!entryreference\relax
\doregisterreference[#1]{#2}}%
\gdef\c!entryletter
@@ -426,21 +630,43 @@
\global\let\c!entryletter\relax
\doregistercharacter[#1]{#2}}}
+% \def\HowUgly #1{\doHowUgly#1\relax}
+% \def\doHowUgly#1#2\relax{\iffirstregisterentry{\bf#1}#2\fi#1#2} # handles utf too
+%
+% \setupregister[index][indicator=no,deeptextcommand=\HowUgly]
+%
+% \starttext
+% \chapter{First Chapter}
+% Some text...\index{word}
+% \section {First Section}
+% Some text...\index{word}
+% Some text...\index{another entry}
+% Some text...\index{ansi}
+% Some text...\index{another entry}
+% \page[yes]
+% \completeindex
+% \stoptext
+
+\def\dohandlepageregisterentry#1#2%
+ {\dohandleregisterentry{\executeifdefined{\??id#1\c!deeptextcommand}\firstofoneargument{#2}}}
+
\def\dosetpageregisterentrya#1#2%
- {\edef\currententrylevel{1}%
+ {\flushseenregisterpage
+ \edef\currententrylevel{1}%
\global\let\c!entryb\relax
\global\let\c!entryc\relax
\gdef\c!entrya
{\iffirstregisterentry\else\endgraf\fi % new
\global\firstregisterpagetrue
\hangindent1em\noindent\c!entryreference
- \dohandleregisterentry{#2}%
+ \dohandlepageregisterentry{#1}{#2}%
\global\firstregisterentryfalse
\global\firstsubentrytrue
\global\firstsubsubentrytrue}}
\def\dosetpageregisterentryb#1#2%
- {\edef\currententrylevel{2}%
+ {\flushseenregisterpage % redundant
+ \edef\currententrylevel{2}%
\global\let\c!entryc\relax
\global\def\c!entryb
{\iffirstregisterentry\else\endgraf\fi % new
@@ -448,13 +674,14 @@
\global\let\c!entrya\relax
\iffirstsubentry\nobreak\fi
\hangindent2em\noindent\c!entryreference\hskip1em\relax
- \dohandleregisterentry{#2}%
+ \dohandlepageregisterentry{#1}{#2}%
\global\firstregisterentryfalse
\global\firstsubentryfalse
\global\firstsubsubentrytrue}}
\def\dosetpageregisterentryc#1#2%
- {\edef\currententrylevel{3}%
+ {\flushseenregisterpage % redundant
+ \edef\currententrylevel{3}%
\gdef\c!entryc
{\iffirstregisterentry\else\endgraf\fi % new
\global\firstregisterpagetrue
@@ -462,7 +689,7 @@
\global\let\c!entryb\relax
\iffirstsubsubentry\nobreak\fi
\hangindent3em\noindent\c!entryreference\hskip2em\relax
- \dohandleregisterentry{#2}%
+ \dohandlepageregisterentry{#1}{#2}%
\global\firstregisterentryfalse
\global\firstsubsubentryfalse}}
@@ -509,7 +736,7 @@
\c!entryletter
\iflocation
\getalllistreferences{#1}{#2}%
-% \endgraf
+ % no \endgraf
\hangindent1em\noindent\c!entryreference
%
%\thisissomeinternal{\s!lin}{\internallistreference}%
@@ -566,7 +793,7 @@
\docommando\lastlistreference\v!next}%
% tot hier
\else
-% \endgraf
+ % no \endgraf
\noindent\c!entryreference
\limitedregisterentry{#1}{#2}%
\fi
@@ -594,36 +821,36 @@
\doglobal\increment\internallistreference}%
\setvalue{#1\s!from}%
{\getvalue{#1\s!page}}%
-\ifautoregisterhack
- \setvalue{#1\s!page}##1##2##3##4%
- {\doifreglevelelse[##3]
- {\global\utilitydonetrue
- \iffirstregisterpage
- \@EA\xdef\csname\??id#1\??id\currentregisterentry\endcsname
- {\internallistreference::##4}%
- \else % catches errors in index
- \ifcsname\??id#1\??id\currentregisterentry\endcsname
+ \ifautoregisterhack
+ \setvalue{#1\s!page}##1##2##3##4%
+ {\doifreglevelelse[##3]
+ {\global\utilitydonetrue
+ \iffirstregisterpage
\@EA\xdef\csname\??id#1\??id\currentregisterentry\endcsname
- {\csname\??id#1\??id\currentregisterentry\endcsname,##4}%
- \fi
- \fi}
- {}}%
-\else
- \setvalue{#1\s!page}##1##2##3##4%
- {\doifreglevelelse[##3]
- {\global\utilitydonetrue
- \iffirstregisterpage
- \global\firstregisterpagefalse
- \@EA\xdef\csname\??id#1\??id\currentregisterentry\endcsname
- {\internallistreference::##2-##4}%
- \else % catches errors in index
- \ifcsname\??id#1\??id\currentregisterentry\endcsname
+ {\internallistreference::##4}%
+ \else % catches errors in index
+ \ifcsname\??id#1\??id\currentregisterentry\endcsname
+ \@EA\xdef\csname\??id#1\??id\currentregisterentry\endcsname
+ {\csname\??id#1\??id\currentregisterentry\endcsname,##4}%
+ \fi
+ \fi}
+ {}}%
+ \else
+ \setvalue{#1\s!page}##1##2##3##4%
+ {\doifreglevelelse[##3]
+ {\global\utilitydonetrue
+ \iffirstregisterpage
+ \global\firstregisterpagefalse
\@EA\xdef\csname\??id#1\??id\currentregisterentry\endcsname
- {\csname\??id#1\??id\currentregisterentry\endcsname,##2-##4}%
- \fi
- \fi}
- {}}%
-\fi}
+ {\internallistreference::##2-##4}%
+ \else % catches errors in index
+ \ifcsname\??id#1\??id\currentregisterentry\endcsname
+ \@EA\xdef\csname\??id#1\??id\currentregisterentry\endcsname
+ {\csname\??id#1\??id\currentregisterentry\endcsname,##2-##4}%
+ \fi
+ \fi}
+ {}}%
+ \fi}
\def\docoupleregister[#1][#2]%
{\iflocation
@@ -726,11 +953,29 @@
\docommandoprolinrefB{#1}\nextlistreference\v!next
\fi}}
-\def\dodolinkedregister[#1][#2]#3% page auto link
+% \def\dodolinkedregister[#1][#2]#3% page auto link
+% {\bgroup
+% \chardef\registerpagestatus\plusone
+% \def\currentregister{#1}%
+% \iflocation
+% \ifautoregisterhack
+% \def\next{\doprocessautoregister[#1][#2]}%
+% \else
+% \def\next{\doprocesslinkregister[#1][#2]}%
+% \fi
+% \else
+% \def\next{\doprocesspageregister[#2]{}}%
+% \fi
+% \next{#3}%
+% \egroup
+% \ifvmode\nobreak\fi
+% \GotoPar}
+
+\def\doprocesslinkedregister[#1][#2]#3% page auto link
{\bgroup
\chardef\registerpagestatus\plusone
\def\currentregister{#1}%
- \iflocation
+ \iflocation % \next is not needed
\ifautoregisterhack
\def\next{\doprocessautoregister[#1][#2]}%
\else
@@ -740,9 +985,10 @@
\def\next{\doprocesspageregister[#2]{}}%
\fi
\next{#3}%
- \egroup
- \ifvmode\nobreak\fi
- \GotoPar}
+ \egroup}
+
+\def\dodolinkedregister[#1][#2]#3% page auto link
+ {\doflushatpar{\doprocesslinkedregister[#1][#2]{#3}}}
\def\dolinkedregister#1%
{\dodoubleempty\dodolinkedregister[#1]}
@@ -754,10 +1000,8 @@
\global\let\currentregisterentry\empty
\global\firstsubentrytrue % not needed
\global\firstsubsubentrytrue % not needed too
- \setvalue{#1\s!entrya}##1%
- {\dosetautoregisterentrya{#1}{##1}}%
- \setvalue{#1\s!entry}##1%
- {\dosetpageregisterletter{#1}{##1}}}
+ \setvalue{#1\s!entrya}##1{\dosetautoregisterentrya{#1}{##1}}%
+ \setvalue{#1\s!entry }##1{\dosetpageregisterletter{#1}{##1}}}
\def\dosetautoregisterentrya#1#2%
{\global\utilitydonetrue
@@ -838,6 +1082,9 @@
\begingroup
\edef\currentregister{#1}%
\setupregister[\currentregister][#2]%
+ \doifelse{\registerparameter\c!compress}\v!yes % new
+ {\chardef\collapseregisterpages\plusone}
+ {\chardef\collapseregisterpages\zerocount}%
\raggedright
\startcolumns
[\c!n=\registerparameter\c!n,
@@ -845,12 +1092,20 @@
\c!align=\registerparameter\c!align]%
\dontcomplain
\startpacked[\v!blank]%
- \doutilities\currentregister\jobname\currentregister\relax\par
+ \doutilities\currentregister\jobname\currentregister\dobeforeplaceregister\doafterplaceregister
\stoppacked
\stopcolumns
\endgroup
\fi}
+\def\dobeforeplaceregister
+ {\resetseenregisterpage
+ \relax}
+
+\def\doafterplaceregister
+ {\flushseenregisterpage
+ \par}
+
\def\completeregister
{\dodoubleempty\docompleteregister}
@@ -865,6 +1120,10 @@
\endgroup
\fi}
+\def\doregisterregisterlanguage#1%
+ {\savesortlanguage{\getvalue{\??id#1\s!language}}%
+ \immediatewriteutility{r l {#1} {\getvalue{\??id#1\s!language}}}}
+
\def\dodefineregister[#1][#2]%
{\setupregister[#1]%
[\c!n=2,
@@ -873,6 +1132,7 @@
\c!before=\blank, % binnen kolommen: \blank[\v!line]
\c!after=,
\c!symbol=,
+ \c!compress=\v!no,
\c!interaction=\v!pagenumber,
\c!alternative=\v!a,
\c!distance=1em,
@@ -888,15 +1148,21 @@
\c!maxwidth=,
\c!number=\v!no,
\c!unknownreference=\v!empty,
+ \c!prefix=\v!both,
\c!expansion=,
- \c!keyexpansion=]%
+ \c!keyexpansion=,
+ %\c!deeptextcommand=, % undefined by default !
+ \s!language=\currentmainlanguage]%
+ \doglobal\appendtoksonce
+ \doregisterregisterlanguage{#1}%
+ \to \everysavesortkeys
\presetheadtext[#1=\Word{#1}]%
\addutilityreset{#1}%
\setvalue{#1}{\doregister{#1}}%
\setvalue{\e!coupled#1}{\dolinkedregister{#1}}%
\setvalue{\s!set#1}{\dosetregister{#1}}%
\setvalue{\s!reset#1}{\doresetregister{#1}}%
- \setvalue{\e!see#1}{\dozieregister{#1}}%
+ \setvalue{\e!see#1}{\doseeregister{#1}}%
\setvalue{\e!place#1}{\placeregister[#1]}%
\setvalue{\e!complete#1}{\completeregister[#1]}%
\setvalue{\e!setup#1\e!endsetup}[##1]{\getparameters[\??id#1][##1]}}