diff options
Diffstat (limited to 'tex/context/base/mkiv/strc-reg.mkxl')
-rw-r--r-- | tex/context/base/mkiv/strc-reg.mkxl | 1210 |
1 files changed, 0 insertions, 1210 deletions
diff --git a/tex/context/base/mkiv/strc-reg.mkxl b/tex/context/base/mkiv/strc-reg.mkxl deleted file mode 100644 index 97933ffb8..000000000 --- a/tex/context/base/mkiv/strc-reg.mkxl +++ /dev/null @@ -1,1210 +0,0 @@ -%D \module -%D [ file=strc-reg, -%D version=2008.10.20, -%D title=\CONTEXT\ Structure Macros, -%D subtitle=Registers, -%D author=Hans Hagen, -%D date=\currentdate, -%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] -%C -%C This module is part of the \CONTEXT\ macro||package and is -%C therefore copyrighted by \PRAGMA. See mreadme.pdf for -%C details. - -\writestatus{loading}{ConTeXt Structure Macros / Registers} - -\registerctxluafile{strc-reg}{} - -\unprotect - -\startcontextdefinitioncode - -% todo: tag:: becomes rendering -% todo: language, character, linked, location -% todo: fonts etc at sublevels (already defined) - -% \starttext -% \placeregister[index] -% \chapter{a} \index{93} \index{456} \index{***} \index{*} \index{@} -% test \index{aa} test \startregister[index][x]{bb} test \page test \page test \page test \stopregister[index][x] -% test \index{aa} test \setregisterentry[index][label=x,entries=bb] test \page test \page test \page test \finishregisterentry[index][label=x] -% test \index{aa} test \setregisterentry[index][label=y] test \page test \page test \page test \finishregisterentry[index][label=y,entries=yy] -% \stoptext - -% \index {entry} -% \index[key] {entry} -% \index[pageclass::] {entry} -% \index[pageclass::key]{entry} -% \index {textclass::entry} -% \index[key] {textclass::entry} -% \index[pageclass::] {textclass::entry} -% \index[pageclass::key]{textclass::entry} - -% tzt variant with n entries, parameters and userdata (altnum) - -\installcorenamespace{register} - -\installcommandhandler\??register {register} \??register - -\aliased\let\strc_registers_setup_saved\setupregister - -% maybe we should drop the plural form - -\permanent\tolerant\protected\overloaded\def\setupregister[#1]#*[#2]#*[#3]% - {\ifarguments\or - \strc_registers_setup_saved[#1]% - \or - \strc_registers_setup_saved[#1][#2]% - \or - \def\strc_registers_setup_step##1{\strc_registers_setup_saved[#1:##1][#3]}% - \processcommalist[#2]\strc_registers_setup_step - \fi} - -\permanent\tolerant\protected\def\setupregisters[#1]% - {\strc_registers_setup_saved[#1]\relax} - -\setupregister - [\c!n=2, - \c!balance=\v!yes, % \v!no komt niet zo vaak voor - \c!align=\v!flushleft, - \c!tolerance=\v!stretch, - \c!before=\blank, - %\c!after=, - %\c!symbol=, - \c!compress=\v!no, - \c!interaction=\v!pagenumber, - \c!alternative=\v!a, - \c!distance=\emwidth, - \c!style=\v!bold, - \c!pagestyle=\v!slanted, - \c!indicator=\v!yes, - \c!criterium=\v!all, - \c!check=\v!yes, % check for weird see usage - %\c!command=, - \c!referencing=\v!on, - \c!location=\v!middle, - %\c!maxwidth=, - \c!number=\v!no, - \c!unknownreference=\v!empty, - \c!prefix=\v!both, - %\c!expansion=, - %\c!xmlsetup=, - \c!pagenumber=\v!yes, - \c!pageprefixconnector=\endash, - \c!pagesegments=2:2, - \c!file=\jobname, - %\c!deeptextcommand=, % undefined by default ! - \c!method=, % no default as we have them in the module, maybe some day in lang-* - \c!numberorder=\v!numbers, % \v!characters - \s!language=\currentmainlanguage]% - -% yes or no shared ? - -\setupregister - [\c!label=, - \c!entries=, - \c!alternative=] - -\definemixedcolumns - [\v!register] - [\c!n=\registerparameter\c!n, - \c!balance=\registerparameter\c!balance, - \c!align=\registerparameter\c!align, - \c!tolerance=\registerparameter\c!tolerance] - -%D \starttyping -%D \setupregister[index][1][textcolor=darkred] -%D \setupregister[index][2][textcolor=darkgreen,textstyle=bold] -%D -%D \placeregister[index][n=1] \blank[3*big] -%D -%D test \index{test+one} test \index{test+two} more \index{more} -%D \stoptyping - -\newconditional\c_strc_registers_defining -\setnewconstant\c_strc_registers_maxlevel \plusfive - -\ifdefined\Word \else \protected\def\Word#1{#1} \fi - -\appendtoks - \ifconditional\c_strc_registers_defining \else % todo: dosingle ... - \settrue\c_strc_registers_defining - \definemixedcolumns[\currentregister][\v!register]% first as otherwise it overloads start/stop - \clf_defineregister{\currentregister}{\registerparameter\c!referencemethod}% - \normalexpanded{\presetheadtext[\currentregister=\Word{\currentregister}]}% - \frozen\instance\setuevalue{\currentregister}{\strc_registers_insert_entry[\currentregister]}% - \frozen\instance\setuevalue{\e!see\currentregister}{\strc_registers_insert_see[\currentregister]}% - %frozen\instance\setuevalue{\e!coupled\currentregister}{\dolinkedregister{\currentregister}}% - % historic ballast - \frozen\instance\setuevalue{\e!place\currentregister}{\placeregister[\currentregister]}% - \frozen\instance\setuevalue{\e!complete\currentregister}{\completeregister[\currentregister]}% - \frozen\instance\setuevalue{\e!setup\currentregister\e!endsetup}{\setupregister[\currentregister]}% - \dorecurse\c_strc_registers_maxlevel{% weird, expanded should not be needed - \normalexpanded{\defineregister[\currentregister:\recurselevel][\currentregister]}% - %\defineregister[\currentregister:\recurselevel][\currentregister]% - \letregisterparameter{\c!entries:\recurselevel}\empty % needed as we use detokenize (ok, we can - \letregisterparameter{\c!keys :\recurselevel}\empty % avoid it, but it's faster too) - }% - % - \setfalse\c_strc_registers_defining - \fi -\to \everydefineregister - -\appendtoks - \clf_setregistermethod{\currentregister}{\registerparameter\c!referencemethod}% -\to \everysetupregister - -%D Registering: - -\glet\currentregistername \empty -\glet\currentregisternumber\!!zerocount - -\def\strc_registers_register_page_entry - {\iftrialtypesetting - \expandafter\gobblethreearguments - \else - \expandafter\strc_registers_register_page_entry_indeed - \fi} - -\def\strc_registers_register_page_expand_xml_entries - {\xmlstartraw - \xdef\currentregisterentriesa{\registerparameter{\c!entries:1}}% - \xdef\currentregisterentriesb{\registerparameter{\c!entries:2}}% - \xdef\currentregisterentriesc{\registerparameter{\c!entries:3}}% - \xmlstopraw - \glet\currentregistercoding\s!xml} - -\def\strc_registers_register_page_expand_yes_entries - {\xdef\currentregisterentriesa{\registerparameter{\c!entries:1}}% - \xdef\currentregisterentriesb{\registerparameter{\c!entries:2}}% - \xdef\currentregisterentriesc{\registerparameter{\c!entries:3}}% - \glet\currentregistercoding\s!tex} - -\def\strc_registers_register_page_expand_nop_entries - {\xdef\currentregisterentriesa{\detokenizedregisterparameter{\c!entries:1}}% - \xdef\currentregisterentriesb{\detokenizedregisterparameter{\c!entries:2}}% - \xdef\currentregisterentriesc{\detokenizedregisterparameter{\c!entries:3}}% - \glet\currentregistercoding\s!tex} - -\def\strc_registers_register_page_expand_xml - {\xmlstartraw - \xdef\currentregisterentries{\registerparameter\c!entries}% - \xmlstopraw - \glet\currentregistercoding\s!xml} - -\def\strc_registers_register_page_expand_yes - {\xdef\currentregisterentries{\registerparameter\c!entries}% - \glet\currentregistercoding\s!tex} - -\def\strc_registers_register_page_expand_nop - {\xdef\currentregisterentries{\detokenizedregisterparameter\c!entries}% - \glet\currentregistercoding\s!tex} - -\def\strc_registers_register_page_expand_xml_keys - {\xmlstartraw - \xdef\currentregisterkeysa{\registerparameter{\c!keys:1}}% - \xdef\currentregisterkeysb{\registerparameter{\c!keys:2}}% - \xdef\currentregisterkeysc{\registerparameter{\c!keys:3}}% - \xmlstopraw} - -\def\strc_registers_register_page_expand_yes_keys - {\xdef\currentregisterkeysa{\registerparameter{\c!keys:1}}% - \xdef\currentregisterkeysb{\registerparameter{\c!keys:2}}% - \xdef\currentregisterkeysc{\registerparameter{\c!keys:3}}} - -\def\strc_registers_register_page_entry_indeed#1#2#3% register data userdata - {\begingroup - \edef\currentregister{#1}% - %\setupcurrentregister[\c!entries=,\c!label=,\c!keys=,\c!alternative=,#2]% - \setupcurrentregister[#2]% - \edef\currentregisterlabel {\registerparameter\c!label}% - \edef\currentregisterexpansion{\registerparameter\c!expansion}% - \edef\currentregisterownnumber{\registerparameter\c!ownnumber}% - \xdef\currentregisterkeys {\registerparameter\c!keys}% - \xdef\currentregisterentries {\registerparameter\c!entries}% - \xdef\currentregisterxmlsetup {\registerparameter\c!xmlsetup}% - \ifempty\currentregisterentries - \ifx\currentregisterexpansion\s!xml - \strc_registers_register_page_expand_xml_entries - \orelse\ifx\currentregisterexpansion\v!yes - \strc_registers_register_page_expand_yes_entries - \else - \strc_registers_register_page_expand_nop_entries - \fi - \else - \ifx\currentregisterexpansion\s!xml - \strc_registers_register_page_expand_xml - \orelse\ifx\currentregisterexpansion\v!yes - \strc_registers_register_page_expand_yes - \else - \strc_registers_register_page_expand_nop - \fi - \fi - \ifempty\currentregisterkeys - \ifx\currentregistercoding\s!xml - \strc_registers_register_page_expand_xml_keys - \else - \strc_registers_register_page_expand_yes_keys - \fi - \fi - \setnextinternalreference - % we could consider storing register entries in a list which we - % could then sort - \glet\currentregistername\currentregister - \xdef\currentregisternumber{\clf_storeregister % 'own' should not be in metadata - metadata {% - name {\currentregister}% - coding {\currentregistercoding}% - \ifx\currentregisterownnumber\v!yes - own {\registerparameter\c!alternative}% can be used instead of pagenumber - \fi - \ifx\currentreferencecoding\s!xml - xmlroot {\xmldocument} % only useful when text - \fi - \ifempty\currentregisterxmlsetup \else - xmlsetup {\currentregisterxmlsetup}% - \fi - }% - references {% - \ifempty\currentregisterlabel \else - label {\currentregisterlabel}% - \fi -% view {\interactionparameter\c!focus}% - }% - entries {% - % we need a special one for xml, this is just a single one - \ifempty\currentregisterentries - entries { - {\currentregisterentriesa}% - {\currentregisterentriesb}% - {\currentregisterentriesc}% - } - \else - entry {\currentregisterentries}% - \fi - \ifempty\currentregisterkeys - keys { - {\currentregisterkeysa}% - {\currentregisterkeysb}% - {\currentregisterkeysc}% - } - \else - key {\currentregisterkeys}% - \fi - }% - userdata {\detokenize\expandafter{\normalexpanded{#3}}} - }% - \clf_setinternalreference - internal \locationcount - view {\interactionparameter\c!focus}% - \relax % this will change - \ifx\currentregisterownnumber\v!yes - \glet\currentregistersynchronize\relax - \else - \xdef\currentregistersynchronize{\clf_deferredenhanceregister{\currentregister}\number\currentregisternumber}% - \fi - \currentregistersynchronize % here? - % needs thinking ... bla\index{bla}. will break before the . but adding a - % penalty is also no solution - \dostarttagged\t!registerlocation\currentregister - \c_attr_destination\lastdestinationattribute - \signalcharacter % no \strut as it will be removed during cleanup - \dotagregisterlocation - \dostoptagged - \endgroup} - -\permanent\protected\def\dosetfastregisterentry#1#2#3#4#5% register entry key processor processor - {\begingroup - \edef\currentregister{#1}% - \setnextinternalreference - \glet\currentregistername\currentregister - \xdef\currentregisternumber{\clf_storeregister - {% - metadata {% - name {\currentregister}% - } - entries {% - entry {#2}% - key {#3}% - }% - processors {% - entry {#4}% - page {#5}% - }% - }% - }% - % overlap with the above - % \clf_setinternalreference - % internal \locationcount - % view {\interactionparameter\c!focus}% - \relax % this will change - \xdef\currentregistersynchronize{\clf_deferredenhanceregister{\currentregister}\number\currentregisternumber}% - \currentregistersynchronize % here? - \dostarttagged\t!registerlocation\currentregister - \c_attr_destination\lastdestinationattribute \signalcharacter % no \strut as it will be removed during cleanup - \dotagregisterlocation - \dostoptagged - \endgroup} - -\let\dotagregisterlocation\relax % experiment - -\tolerant\protected\def\strc_registers_insert_entry[#1]#*[#2]% - {\def\currentregister{#1}% - \edef\p_ownnumber{\registerparameter\c!ownnumber}% - \ifx\p_ownnumber\v!yes - \expandafter\strc_registers_insert_entry_yes - \else - \expandafter\strc_registers_insert_entry_nop - \fi{#2}} - -% \def\strc_registers_insert_entry_nop#1#2% -% {\doflushatpar{\strc_registers_register_page_entry\currentregister{\c!keys={#1},\c!entries={#2}}{}}} -% -% \def\strc_registers_insert_entry_yes#1#2#3% -% {\doflushatpar{\strc_registers_register_page_entry\currentregister{\c!keys={#1},\c!alternative=#2,\c!entries={#3}}{}}} -% -% less tokens passed (nicer for tracing) .. could become installable - -\def\strc_registers_insert_entry_nop - {\ifvmode - \expandafter\strc_registers_insert_entry_nop_par - \else - \expandafter\strc_registers_insert_entry_nop_txt - \fi} - -\def\strc_registers_insert_entry_yes - {\ifvmode - \expandafter\strc_registers_insert_entry_yes_par - \else - \expandafter\strc_registers_insert_entry_yes_txt - \fi} - -\def\strc_registers_insert_entry_nop_par#1#2% - {\flushatnextpar{\strc_registers_register_page_entry\currentregister{\c!keys={#1},\c!entries={#2}}{}}} - -\def\strc_registers_insert_entry_yes_par#1#2#3% - {\flushatnextpar{\strc_registers_register_page_entry\currentregister{\c!keys={#1},\c!alternative=#2,\c!entries={#3}}{}}} - -\def\strc_registers_insert_entry_nop_txt#1#2% - {\strc_registers_register_page_entry\currentregister{\c!keys={#1},\c!entries={#2}}{}} - -\def\strc_registers_insert_entry_yes_txt#1#2#3% - {\strc_registers_register_page_entry\currentregister{\c!keys={#1},\c!alternative=#2,\c!entries={#3}}{}} - -%D This is one of the few commands where a stop has arguments. - -\permanent\tolerant\protected\def\startregister[#1]#*[#2]#*[#3]#*[#4]#*#:#5% - {\ifparameter#4\or - % #1=register #2=tag #3=own #4=sortkey #5=entry - \doflushatpar{\strc_registers_register_page_entry{#1}{\c!label=#2,\c!alternative=#3,\c!keys={#4},\c!entries={#5}}{}}% - \else - % #1=register #2=tag #3=sortkey #5=entry - \doflushatpar{\strc_registers_register_page_entry{#1}{\c!label=#2,\c!keys={#3},\c!entries={#5}}{}}% - \fi} - -\permanent\tolerant\protected\def\stopregister[#1]#*[#2]% - {\normalexpanded{\ctxlatecommand{extendregister("#1","#2")}}} - -% a synonym, so that we can nest with overlap without syntax check problems - -\aliased\let\openregisterrange \startregister -\aliased\let\closeregisterrange\stopregister - -% not yet document, not sure if this will stay: - -\permanent\tolerant\protected\def\setregisterentry[#1]#*[#2]#*[#3]% - {\doflushatpar{\strc_registers_register_page_entry{#1}{#2}{#3}}} - -\permanent\tolerant\protected\def\finishregisterentry[#1]#*[#2]#*[#3]% - {\strc_registers_finish_entry_indeed{#1}{#2}{#3}} - -\def\strc_registers_finish_entry_indeed#1#2#3% register data userdata - {\begingroup - \edef\currentregister{#1}% - %\setupcurrentregister[\c!entries=,\c!label=,\c!keys=,\c!alternative=,#2]% todo: fast setter - \resetregisterparameter\c!entries - \resetregisterparameter\c!label - \resetregisterparameter\c!keys - \resetregisterparameter\c!alternative - \setupcurrentregister[#2]% - \edef\currentregisterlabel {\registerparameter\c!label}% - \edef\currentregisterexpansion{\registerparameter\c!expansion}% - \edef\currentregisterownnumber{\registerparameter\c!ownnumber}% - \xdef\currentregisterkeys {\registerparameter\c!keys}% - \ifx\currentregisterexpansion\s!xml - \xmlstartraw - \xdef\currentregisterentries{\registerparameter\c!entries}% - \xmlstopraw - \glet\currentregistercoding\s!xml - \else - \ifx\currentregisterexpansion\v!yes - \xdef\currentregisterentries{\registerparameter\c!entries}% - \else - \xdef\currentregisterentries{\detokenizedregisterparameter\c!entries}% - \fi - \glet\currentregistercoding\s!tex - \fi - % I hate this kind of mess ... but it's a user request. - \ifempty\currentregisterentries - \normalexpanded{\ctxcommand{extendregister("\currentregister","\currentregisterlabel", { - metadata = { - \ifx\currentregisterownnumber\v!yes - own = "\registerparameter\c!alternative", % can be used instead of pagenumber - \fi - }, - userdata = \!!bs\detokenize{#3}\!!es - })% - }}% - \else - \normalexpanded{\ctxcommand{extendregister("\currentregister","\currentregisterlabel", { - metadata = { - % catcodes = \the\catcodetable, - coding = "\currentregistercoding", - \ifx\currentregisterownnumber\v!yes - own = "\registerparameter\c!alternative", % can be used instead of pagenumber - \fi - }, - entries = { - % we need a special one for xml, this is just a single one - \!!bs\currentregisterentries\!!es, - \!!bs\currentregisterkeys\!!es - }, - userdata = \!!bs\detokenize{#3}\!!es - }) - }}% - \fi - \endgroup} - -% The following variants are meant for (for instance xml). There is some -% overlap with previously defined macros. -% -% \starttext -% \setstructurepageregister[index][entries=alpha]a -% \setstructurepageregister[index][entries=gamma]g -% \setstructurepageregister[index][entries=beta]b -% \setstructurepageregister[index][entries:1=alpha,keys:1=z]a -% \setstructurepageregister[index][entries:1=gamma,keys:1=x]g -% \setstructurepageregister[index][entries:1=beta, keys:1=y]b -% \index{alpha}a -% \index{gamma}g -% \index{beta}b -% \placeregister[index][n=1] -% \stoptext - -% some overlap with previous - -\permanent\tolerant\protected\def\setstructurepageregister[#1]#*[#2]#*[#3]% [register][settings][userdata] - {\doflushatpar{\strc_registers_register_page_entry{#1}{#2}{#3}}} - -\permanent\tolerant\protected\def\startstructurepageregister[#1]#*[#2]#*[#3]#*[#4]% [register][tag][settings][userdata] - {\doflushatpar{\strc_registers_register_page_entry{#1}{\c!label=#2,#3}{#4}}} - -\permanent\tolerant\protected\def\stopstructurepageregister[#1]#*[#2]% - {\normalexpanded{\ctxlatecommand{structures.registers.extend("#1","#2")}}} - -\let\openstructurepageregisterrange \startstructurepageregister -\let\closestructurepageregisterrange\stopstructurepageregister - -% So far. - -\tolerant\protected\def\strc_registers_insert_see[#1]#*[#2]#*#:#3#4% - {\doflushatpar{\strc_registers_insert_see_indeed{#1}{#2}{#3}{#4}}} - -\def\strc_registers_insert_see_indeed#1#2#3#4% register key entry seeword - {\begingroup - \edef\currentregister{#1}% - \edef\currentregisterexpansion{\registerparameter\c!expansion}% - \ifx\currentregisterexpansion\s!xml - \xmlstartraw - \xdef\currentregisterentries{\detokenize{#3}}% not ok yet - \xdef\currentregisterseeword{\detokenize{#4}}% not ok yet - \xmlstopraw - \glet\currentregistercoding\s!xml - \else - \ifx\currentregisterexpansion\v!yes - \xdef\currentregisterentries{#3}% not ok yet - \xdef\currentregisterseeword{#4}% not ok yet - \else - \xdef\currentregisterentries{\detokenize{#3}}% not ok yet - \xdef\currentregisterseeword{\detokenize{#4}}% not ok yet - \fi - \glet\currentregistercoding\s!tex - \fi - \setnextinternalreference - % we could consider storing register entries in list - \edef\temp{\clf_storeregister{% \temp grabs the nofentries - metadata {% - kind {see}% - name {\currentregister}% - }% - references {% -% view {\interactionparameter\c!focus}% - }% - entries {% - % we need a special one for xml, this is just a single one - entry {\currentregisterentries}% - key {#2}% - }% - seeword {% - text {\currentregisterseeword}% - }% - }}% - \clf_setinternalreference - internal \locationcount - view {\interactionparameter\c!focus}% - \relax % this will change - \dostarttagged\t!registerlocation\currentregister - \c_attr_destination\lastdestinationattribute \signalcharacter % no \strut as it will be removed during cleanup - \dotagregisterlocation - \dostoptagged - \endgroup} - -%D Rendering: - -% todo: c!language ipv s!language - -\let\utilityregisterlength\!!zerocount - -\permanent\tolerant\protected\def\determineregistercharacteristics[#1]#*[#2]% - {\begingroup - \setupregister[#1][#2]% - \edef\currentregister{\firstinset{#1}}% - \normalexpanded{\endgroup\noexpand\xdef\noexpand\utilityregisterlength{\clf_analyzeregister - {\currentregister}% - {% - language {\registerparameter\s!language}% - method {\registerparameter\c!method}% - numberorder {\registerparameter\c!numberorder}% - compress {\registerparameter\c!compress}% - criterium {\registerparameter\c!criterium}% - pagenumber \ifempty\registerpageseparatorsymbol false\else true\fi - }% - }}% - \ifcase\utilityregisterlength\relax - \resetsystemmode\v!register - \else - \setsystemmode \v!register - \fi} - -\newtoks\everyplaceregister - -\appendtoks - \dontcomplain -\to \everyplaceregister - -\newconditional\c_strc_registers_text_interaction - -\permanent\tolerant\protected\def\placeregister[#1]#*[#2]% - {\ifarguments\else - \begingroup - %\forgetall - \setupregister[#1][#2]% can be a list - \edef\currentregister{\firstinset{#1}}% - \the\everyplaceregister - \ifnum\namedmixedcolumnsparameter\currentregister\c!n>\plusone - \startmixedcolumns[\currentregister]% - \strc_registers_place_indeed{#1}% - \stopmixedcolumns - \else - \strc_registers_place_indeed{#1}% - \fi - \endgroup - \fi} - -\def\strc_registers_place_indeed#1% - {\doifelse{\registerparameter\c!interaction}\v!text - \settrue\setfalse\c_strc_registers_text_interaction - \clf_processregister - {#1}% - {% - language {\registerparameter\s!language}% - method {\registerparameter\c!method}% - numberorder {\registerparameter\c!numberorder}% - check {\registerparameter\c!check}% - compress {\registerparameter\c!compress}% - criterium {\registerparameter\c!criterium}% - pagemethod {\registerparameter\c!pagemethod}% - pagenumber \ifempty\registerpageseparatorsymbol false\else true\fi - }{% - separatorset {\registerparameter\c!pageprefixseparatorset}% - conversionset {\registerparameter\c!pageprefixconversionset}% - starter {\registerparameter\c!pageprefixstarter}% - stopper {\registerparameter\c!pageprefixstopper}% - set {\registerparameter\c!pageprefixset}% - segments {\registerparameter\c!pageprefixsegments}% - connector {\registerparameter\c!pageprefixconnector}% - }{% - prefix {\registerparameter\c!pageprefix}% - separatorset {\registerparameter\c!pageseparatorset}% - conversionset {\registerparameter\c!pageconversionset}% - starter {\registerparameter\c!pagestarter}% - stopper {\registerparameter\c!pagestopper}% - segments {\registerparameter\c!pagesegments}% - }% - \relax} - -% \def\strc_registers_limited_entry#1% -% {\limitatetext{#1}\currentregistermaxwidth\unknown}% - -\def\strc_registers_limited_entry#1% - {\limitated left \currentregistermaxwidth sentinel {\unknown} text {#1} freeze true\relax} - -\aliased\let\limitedregisterentry\firstofoneargument - -\appendtoks - \edef\currentregistermaxwidth{\registerparameter\c!maxwidth}% - \ifempty\currentregistermaxwidth - \enforced\let\limitedregisterentry\firstofoneargument - \else - \enforced\let\limitedregisterentry\strc_registers_limited_entry - \fi -\to \everyplaceregister - -\permanent\tolerant\protected\def\completeregister[#1]#*[#2]% - {\ifarguments\or - \begingroup - \edef\currentregister{\firstinset{#1}}% - \normalexpanded{\startnamedsection[\v!chapter][\c!title={\headtext{\currentregister}},reference=\currentregister]}% - \placeregister[#1][#2]% - \page[\v!yes]% - \stopnamedsection - \endgroup - \fi} - -% test case for collapsing (experimental, for Steffen Wolfrum) -% -% \starttext -% \placeregister[index][compress=no] \blank[2*big] -% \placeregister[index][compress=yes] \blank[2*big] -% \placeregister[index][compress=all] \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 - -%D Character rendering (sections): - -\installcorenamespace{registerindicator} - -\permanent\def\defaultregistercharacter#1% - {\edef\currentregistercharacter{#1}% - \ifempty\currentregistercharacter - % skip - \orelse\ifx\currentregistercharacter\s!unknown - % skip - \else - \edef\p_indicator{\registerparameter\c!indicator}% - \ifx\p_indicator\v!yes - \strc_registers_place_character_yes - \else - \strc_registers_place_character_nop - \fi - \fi} - -\def\strc_registers_place_character_yes - {\expandnamespaceparameter\??registerindicator\registerparameter\c!alternative\v!a{\currentregistercharacter}} - -\def\strc_registers_place_character_nop - {\registerparameter\c!before - \goodbreak} - -% a = <before> <goodbreak> <character> <par> <after> <nobreak> - -\def\strc_registers_indicator_a#1#2% - {\registerparameter\c!before - % bugged, why does leftskip gets set: \vskip\lineheight\goodbreak\vskip-\lineheight - \typo_injectors_check_register - \begingroup - \useregisterstyleandcolor\c!style\c!color - \dontleavehmode - \typo_injectors_mark_register - \strut - \iflocation - \dosetdirectpagereference{\currentregister:\v!section:#1}% - \fi - \registerparameter\c!command{#2}% - \endgroup - \blank[\v!samepage]% - \registerparameter\c!after - \par - \nobreak} - -% b = <goodbreak> <before> <character> <after> <nobreak> - -\def\strc_registers_indicator_b#1#2% - {\registerparameter\c!before - \typo_injectors_check_register - \begingroup - \useregisterstyleandcolor\c!style\c!color - \dontleavehmode - \typo_injectors_mark_register - \strut - \iflocation - \dosetdirectpagereference{\currentregister:\v!section:#1}% - \fi - \registerparameter\c!command{#2}% - \endgroup - \registerparameter\c!after - \nobreak} - -\setvalue{\??registerindicator a}#1{\strc_registers_indicator_a{#1}{#1}} -\setvalue{\??registerindicator A}#1{\strc_registers_indicator_a{#1}{\WORD{#1}}} -\setvalue{\??registerindicator b}#1{\strc_registers_indicator_b{#1}{#1}} -\setvalue{\??registerindicator B}#1{\strc_registers_indicator_b{#1}{\WORD{#1}}} - -%D The following macros are the interface to the rendering. These are -%D generated by \LUA. This might change. - -% \showinjector -% \setinjector[register][2][\column] -% -% \starttext -% first \index{first} -% second \index{second} -% third \index{third} -% fourth \index{fourth} -% \placeregister[index] -% \stoptext - -\doinstallinjector\s!register - -%D Beware, we get funny side effects when a dangling \index precedes an -%D placeindex as then flushing takes place inside the index. Took me hours -%D to notice that. - -\newconstant\c_strc_registers_page_state % 0=nothing 1=page 2=see -\newdimen \d_strc_registers_distance - -\permanent\protected\def\startregisteroutput - {\endgraf - \begingroup - \d_strc_registers_distance\registerparameter\c!distance\relax - \dostarttaggedchained\t!register\currentregister\??register - \forgeteverypar - \forgetparindent - \forgetparskip} - -\permanent\protected\def\stopregisteroutput - {\endgraf - \dostoptagged - \endgroup} - -\newdimen\d_strc_registers_hangindent -\newcount\c_strc_registers_hangafter - -\permanent\protected\def\usenestedregisterstyleandcolor#1#2% will change - {\useregisterstyleandcolor#1#2% - % how about style - \ifconditional\c_strc_registers_text_interaction - \ifempty\currentcolorparameter \else - \resetinteractionparameter\c!color - \resetinteractionparameter\c!contrastcolor - \fi - \fi} - -\permanent\protected\def\startregisterentries#1% depth - {\endgraf - \begingroup - \scratchcounter\ifnum#1>\c_strc_registers_maxlevel\c_strc_registers_maxlevel\else#1\fi\relax - \dostarttagged\t!registerentries\empty - \let\savedcurrentregister\currentregister - \edef\currentregister{\currentregister:\number\scratchcounter}% - \usenestedregisterstyleandcolor\c!textstyle\c!textcolor - \ifnum\scratchcounter>\plusone - \advance\leftskip\d_strc_registers_distance\relax - \fi - \d_strc_registers_hangindent\registerparameter\c!distance\relax - \c_strc_registers_hangafter \plusone - \blank[\v!samepage]% - \let\currentregister\savedcurrentregister} - -\permanent\protected\def\stopregisterentries - {\endgraf - \dostoptagged - \endgroup} - -\permanent\protected\def\startregisterentry#1% todo: level - {\typo_injectors_check_register - \begingroup - \dostarttagged\t!registerentry\empty - \global\setconstant\c_strc_registers_page_state\zerocount - \hangindent\d_strc_registers_hangindent - \hangafter \c_strc_registers_hangafter - \typo_injectors_mark_register} - -\permanent\protected\def\stopregisterentry - {\endgraf - \global\setconstant\c_strc_registers_page_state\zerocount - \dostoptagged - \endgroup} - -\permanent\protected\def\startregistersection#1% title - {\dostarttagged\t!registersection\empty - \dostarttagged\t!registertag\empty - \registercharacter{#1}\endgraf - \dostoptagged} - -\permanent\protected\def\stopregistersection - {\dostoptagged - \endgraf} - -\permanent\protected\def\startregisterpages - {\begingroup - \dostarttagged\t!registerpages\empty - \useregisterstyleandcolor\c!pagestyle\c!pagecolor - \registerparameter\c!pageleft} - -\permanent\protected\def\stopregisterpages - {\registerparameter\c!pageright - \dostoptagged - \endgroup} - -\permanent\protected\def\startregisterseewords - {\begingroup - \dostarttagged\t!registerpage\empty - \useregisterstyleandcolor\c!pagestyle\c!pagecolor} - -\permanent\protected\def\stopregisterseewords - {\dostoptagged - \endgroup} - -\permanent\protected\def\registerpageseparator % todo: , configurable - {\ifcase\c_strc_registers_page_state - \hskip\d_strc_registers_distance\relax - \or - \dostarttagged\t!registerseparator\empty - \registerpageseparatorsymbol % page - \dostoptagged - \or - \dostarttagged\t!registerseparator\empty - \registerpageseparatorsymbol % see - \dostoptagged - \fi} - -\permanent\protected\def\registeronepagerangeseparator - {|\endash|} % todo use \prewordbreak - -% \protected\def\withregisterpagecommand#1#2#3#4% -% {\def\currentregisterpageindex{#2}% -% \iflocation -% \goto{\applyprocessor{#1}{\registerparameter\c!pagecommand{#4}}}[internal(#2)]% -% \else -% \applyprocessor{#1}{\registerparameter\c!pagecommand{#4}}% -% \fi} - -\permanent\protected\def\withregisterpagecommand#1#2#3#4% - {\ifcase#3\relax - {\tt [entry\space not\space flushed]}% - \else - \def\currentregisterpageindex{#2}% - \iflocation - \strc_references_goto_internal{\applyprocessor{#1}{\registerparameter\c!pagecommand{#4}}}[internal(#2)]% - \else - \applyprocessor{#1}{\registerparameter\c!pagecommand{#4}}% - \fi - \fi} - -\permanent\protected\def\pushcurrentregister#1% - {\let\m_current_register\currentregister - \edef\currentregister{#1}} - -\permanent\protected\def\popcurrentregister - {\let\currentregister\m_current_register} - -\permanent\protected\def\registeronepage#1#2#3#4#5% #1:class #2:processor content - {\pushcurrentregister{#1}% - \edef\p_pagenumber{\registerparameter\c!pagenumber}% - \ifx\p_pagenumber\v!no\else - \registerpageseparator - \global\setconstant\c_strc_registers_page_state\plusone - \dostarttagged\t!registerpage\empty - \withregisterpagecommand{#2}{#3}{#4}{#5}% - \dostoptagged - \fi - \popcurrentregister} - -\newconditional\c_strc_registers_following - -\appendtoks - \edef\p_compress{\registerparameter\c!compress}% - \ifx\p_compress\v!text - \settrue\c_strc_registers_following - \letregisterparameter\c!compress\v!yes - \else - \setfalse\c_strc_registers_following - \fi -\to \everyplaceregister - -\permanent\protected\def\registerpagerange#1#2#3#4#5#6#7#8% #1:class #2:processor content, content todo: -- configurable - {\pushcurrentregister{#1}% - \edef\p_pagenumber{\registerparameter\c!pagenumber}% - \ifx\p_pagenumber\v!no\else - \registerpageseparator - \global\setconstant\c_strc_registers_page_state\plusone - \dostarttagged\t!registerpagerange\empty - \dostarttagged\t!registerfrompage\empty - \withregisterpagecommand{#2}{#3}{#4}{#5}% - \dostoptagged - \ifconditional\c_strc_registers_following - \ifnum#3=\numexpr#6-1\relax - \labeltext{following:\s!singular}% - \else - \labeltext{following:\s!plural}% - \fi - \else - \registeronepagerangeseparator - \dostarttagged\t!registertopage\empty - \withregisterpagecommand{#2}{#6}{#7}{#8}% - \fi - \dostoptagged - \dostoptagged - \fi - \popcurrentregister} - -\permanent\protected\def\defaultregisterentry#1#2#3#4#5% #1:class #2:processor #3:internal #4:seeindex #5:word - {\pushcurrentregister{#1}% - \def\currentregisterpageindex{#3}% - \iflocation - \def\currentregisterseeindex{#4}% - \ifconditional\c_strc_registers_text_interaction - \strc_references_goto_internal{\setlocationcolor\doapplyregisterentrycommand{#2}{#5}}[internal(#3)]% - \else - \doapplyregisterentrycommand{#2}{#5}% - \fi - \else - \let\currentregisterseeindex\empty - \doapplyregisterentrycommand{#2}{#5}% - \fi - \popcurrentregister} - -\permanent\protected\def\doapplyregisterentrycommand#1#2% processor text - {\dostarttagged\t!registercontent\empty - \ifempty\currentregisterseeindex \else - \dontleavehmode - \dosetdirectpagereference{seeindex:\currentregisterseeindex}% maybe some day we will support an area - \fi - \applyprocessor{#1}{\registerparameter\c!textcommand{\limitedregisterentry{\registerparameter\c!deeptextcommand{#2}}}}% - \dostoptagged} - -\permanent\protected\def\doapplyregisterseecommand#1#2% - {\ifempty\currentregisterseeindex - \applyprocessor{#1}{#2}% - \orelse\iflocation - \strc_references_goto_internal{\applyprocessor{#1}{#2}}[seeindex:\currentregisterseeindex]% - \else - \applyprocessor{#1}{#2}% - \fi} - -\permanent\protected\def\defaultregisterseeword#1#2#3#4#5#6#7% class i n #3:processor #4:internal #5:seeindex #6:word - {\pushcurrentregister{#1}% - \ifnum#2=\plusone - \registerpageseparator - \fi - \global\setconstant\c_strc_registers_page_state\plustwo - \def\currentregisterpageindex{#5}% - \dostarttagged\t!registersee\empty - \settrue\c_strc_registers_page_done - \iflocation - \def\currentregisterseeindex{#6}% - \else - \let\currentregisterseeindex\empty - \fi - \ifnum#2=\plusone - \labeltexts\v!see{\doapplyregisterseecommand{#4}{#7}}% - \orelse\ifnum#2=#3\relax - \labeltexts\v!and{\doapplyregisterseecommand{#4}{#7}}% - \else - ,\space\doapplyregisterseecommand{#4}{#7}% - \fi - \dostoptagged - \popcurrentregister} - -\permanent\protected\def\doapplyregistersectioncommand#1#2% - {\ifempty\currentregistersectionindex - \applyprocessor{#1}{#2}% - \orelse\iflocation - \strc_references_goto_internal{\applyprocessor{#1}{#2}}[sectionindex:\currentregistersectionindex]% - \else - \applyprocessor{#1}{#2}% - \fi} - -\permanent\protected\def\defaultregistersection#1#2#3#4#5#6#7% class i n #4:processor #5:internal #6:sectionindex #7:word - {\pushcurrentregister{#1}% - \ifnum#2=\plusone - \registerpageseparator - \fi - \global\setconstant\c_strc_registers_page_state\plustwo - \def\currentregisterpageindex{#5}% - \dostarttagged\t!registersection\empty - \settrue\c_strc_registers_page_done - \iflocation - \def\currentregistersectionindex{#6}% - \else - \let\currentregistersectionindex\empty - \fi - \ifnum#2=\plusone\else - ,\space - \fi - \doapplyregistersectioncommand{#4}{#7}% - \dostoptagged - \popcurrentregister} - -\aliased\let\registersection \defaultregistersection -\aliased\let\registerseeword \defaultregisterseeword -\aliased\let\registerentry \defaultregisterentry -\aliased\let\registercharacter\defaultregistercharacter - -%D Experimental: -%D -%D \starttyping -%D \setupregister -%D [index] -%D [pagesegments=1:4, -%D pagemethod=section] -%D -%D \starttext -%D -%D \chapter {one} \section {alpha} -%D -%D x\index {whatever 1}x\index {whatever 2}x\index {whatever 2}x \page -%D x\index {whatever 1}x\index {whatever 2}x\index {whatever 2}x \page -%D -%D \chapter {one} \section {alpha} -%D -%D x\index {whatever 1}x\index {whatever 2}x\index {whatever 2}x \page -%D x\index {whatever 1}x\index {whatever 2}x\index {whatever 2}x \page -%D -%D \placeindex[n=1] -%D -%D \stoptext -%D \stoptyping - -%D A few specific rendering variants: - -% \def\doregisterpagelocation#1#2% -% {\nextregisterpage -% \hbox to 1em{\hss\doregisterpagehowto{#1}{#2}\hss}} - -% todo: \installregisterpagehandler - -% \def\MyRegisterPageCommand#1% -% {#1\currentregisterpageuserdata{whatever}} -% -% \starttext -% \setregisterentry[index][entries=aaa][whatever=f.] test \index{bbb} test -% \placeregister[index][n=1,pagecommand=\MyRegisterPageCommand] -% \stoptext - -\permanent\def\registerpageuserdata #1#2{\clf_registeruserdata#1{#2}} -\permanent\def\currentregisterpageuserdata {\registerpageuserdata\currentregisterpageindex} % {#1} - -% not yet ok : new internal handler names - -\aliased\let\registerpageseparatorsymbol\empty - -\permanent\protected\def\registerpagebuttonsymbol - {\vrule\s!width\emwidth\s!height\exheight\s!depth\zeropoint\relax} - -\installcorenamespace{registersymbol} - -\setvalue{\??registersymbol n}% - {\enforced\frozen\def\registerpageseparatorsymbol{,\space}} - -\setvalue{\??registersymbol a}% - {\enforced\frozen\def\registerpageseparatorsymbol{,\space}} % now done via conversion - -\setvalue{\??registersymbol\v!none}% - {\enforced\frozen\let\registerpageseparatorsymbol\empty - \enforced\frozen\let\registeronepage\gobblefivearguments - \enforced\frozen\let\registerpagerange\gobbleeightarguments} - -\setvalue{\??registersymbol 1}% - {\enforced\frozen\let\registerpageseparatorsymbol\space - \enforced\frozen\def\registeronepage{\symbol[1]\gobblefivearguments}% - \enforced\frozen\def\registerpagerange{\symbol[1]\gobbleeightarguments}} - -\setvalue{\??registersymbol 2}% - {\enforced\frozen\let\registerpageseparatorsymbol\space - \enforced\frozen\def\registeronepage{\registerpagebuttonsymbol\gobblefivearguments}% - \enforced\frozen\def\registerpagerange{\registerpagebuttonsymbol\gobbleeightarguments}} - -\protected\def\setregisterpagerendering - {\doifelse{\registerparameter\c!pagenumber}\v!no - {\enforced\frozen\let \currentregisterpagesymbol\v!none} - {\enforced\frozen\edef\currentregisterpagesymbol{\registerparameter\c!symbol}}% - \ifempty\currentregisterpagesymbol - \csname\??registersymbol n\endcsname - \orelse\ifcsname\??registersymbol\currentregisterpagesymbol\endcsname - \csname\??registersymbol\currentregisterpagesymbol\endcsname - \else - \enforced\frozen\let\registerpageseparatorsymbol\space - \enforced\frozen\def\registeronepage{\registerparameter\c!symbol\gobblefivearguments}% - \enforced\frozen\def\registerpagerange{\registerparameter\c!symbol\gobbleeightarguments}% - \fi} - -\appendtoks - \setregisterpagerendering -\to \everyplaceregister - -%D The linked register code will be reimplemented (not that hard) when it's needed -%D again and/or when I'm bored. - -\permanent \def\findregisterinternal#1#2#3{\clf_findregisterinternal{#1}{#2}#3\relax} -\permanent\protected\def\pageofinternal #1{\clf_pageofinternal#1\relax} - -\permanent\protected\def\linkedregisterentrylink#1#2#3#4% tag where before after - {\iflocation - \scratchcounter\findregisterinternal{#1}{#2}\currentregisternumber\relax\relax - \ifcase\scratchcounter\else - #3\relax - \goto{\symbol[#2]}[internal(\the\scratchcounter)]% - #4\relax - \fi - \else - % \scratchcounter\findregisterinternal{#1}{#2}\currentregisternumber\relax\relax - % \ifcase\scratchcounter\else - % #3\relax - % \pageofinternal\scratchcounter - % #4\relax - % \fi - \fi} - -\permanent\protected\def\linkedregisterentry#1% - {\dontleavehmode - \begingroup - \setbox\scratchbox\hbox{#1}% - \linkedregisterentrylink\currentregistername\v!previous\relax\nobreakspace - \unhbox\scratchbox - \linkedregisterentrylink\currentregistername\v!next\nobreakspace\relax - \endgroup} - -\permanent\protected\def\registerpacked#1#2% - {\iflocation - \hskip\d_strc_registers_distance\relax - \nobreak - \ifnum#1=#2\relax - \goto{\symbol[\v!somewhere]}[internal(#1)]% - \else - \goto{\symbol[\v!first]}[internal(#1)]% - \nobreakspace - \goto{\symbol[\v!last]}[internal(#2)]% - \fi - \fi} - -%D Default index: - -\defineregister - [\v!index] -% [\v!indices] - -\stopcontextdefinitioncode - -\protect \endinput |