diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/strc-bkm.mkiv')
-rw-r--r-- | Master/texmf-dist/tex/context/base/strc-bkm.mkiv | 60 |
1 files changed, 51 insertions, 9 deletions
diff --git a/Master/texmf-dist/tex/context/base/strc-bkm.mkiv b/Master/texmf-dist/tex/context/base/strc-bkm.mkiv index 77854738d2f..b7a5bc805eb 100644 --- a/Master/texmf-dist/tex/context/base/strc-bkm.mkiv +++ b/Master/texmf-dist/tex/context/base/strc-bkm.mkiv @@ -50,25 +50,67 @@ \def\dobookmark[#1]#2% {\begingroup \simplifycommands - \ctxlua{structure.bookmarks.overload("#1",\!!bs\detokenize\expandafter{\normalexpanded{#2}}\!!es)}% + \ctxlua{structures.bookmarks.overload("#1",\!!bs\detokenize\expandafter{\normalexpanded{#2}}\!!es)}% \endgroup} %D Placement \unknown\ look how simple compared to \MKII: +\newtoks \everysetupbookmarks + +\def\bookmarkparameter#1{\ifcsname\??bm#1\endcsname\csname\??bm#1\endcsname\fi} + +\unexpanded\def\setupbookmarks[#1]% + {\getparameters[\??bm][#1]% + \the\everysetupbookmarks} + \unexpanded\def\placebookmarks - {\dodoubleempty\doplacebookmarks} + {\dotripleempty\doplacebookmarks} -\def\doplacebookmarks[#1][#2]% +% Use force to get titles in the bookmarklist. This is somewhat tricky as one +% does not want "Contents" in a table of contents but it has to be in the +% bookmark list. + +\def\doplacebookmarks[#1][#2][#3]% {\iflocation - \iffirstargument - \ctxlua{structure.bookmarks.register("#1","#2")}% - \else - \normalexpanded{\noexpand\placebookmarks[\getvalue{\??ih\v!content\c!list}]}% + \begingroup + \edef\askednames{#1}% + \edef\askedopened{#2}% + \ifx\askednames\empty + \edef\askednames{\getvalue{\??ih\v!content\c!list}}% + \fi + \ifx\askednames\empty + \let\askednames\v!all \fi + \ifthirdargument + \getparameters[\??bm][#3]% + \else\ifsecondargument + \doifassignmentelse{#2}{\let\askedopened\empty\getparameters[\??bm][#2]}\donothing + \fi\fi + \ctxlua{structures.bookmarks.register { + names = "\askednames", + opened = "\askedopened", + force = "\bookmarkparameter\c!force", + number = "\bookmarkparameter\c!number", + }}% + \endgroup \fi} -% \prependtoks\ctxlua{structure.bookmarks.place()}\to\everystoptext % too late -% \prependtoks\ctxlua{structure.bookmarks.place()}\to\everylastbackendshipout % okay but not nice +\setupbookmarks + [\c!force=\v!no, % it's easier to force that to inhibit + \c!number=\v!yes] % might become v!no + +\appendtoks + \ctxlua{structures.bookmarks.setup { + separatorset = "\bookmarkparameter\c!numberseparatorset", + conversionset = "\bookmarkparameter\c!numberconversionset", + starter = \!!bs\bookmarkparameter\c!numberstarter\!!es, + stopper = \!!bs\bookmarkparameter\c!numberstopper\!!es, + segments = "\bookmarkparameter\c!numbersegments", + }}% +\to \everysetupbookmarks + +% \prependtoks\ctxlua{structures.bookmarks.place()}\to\everystoptext % too late +% \prependtoks\ctxlua{structures.bookmarks.place()}\to\everylastbackendshipout % okay but not nice \protect \endinput |