summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/strc-bkm.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/strc-bkm.mkiv')
-rw-r--r--Master/texmf-dist/tex/context/base/strc-bkm.mkiv60
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