summaryrefslogtreecommitdiff
path: root/tex/context/base/publ-ini.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/publ-ini.mkiv')
-rw-r--r--tex/context/base/publ-ini.mkiv141
1 files changed, 79 insertions, 62 deletions
diff --git a/tex/context/base/publ-ini.mkiv b/tex/context/base/publ-ini.mkiv
index 107e23122..f70628bad 100644
--- a/tex/context/base/publ-ini.mkiv
+++ b/tex/context/base/publ-ini.mkiv
@@ -55,6 +55,11 @@
\def\v!btxlist {btxlist}
\def\v!btxrendering {btxrendering}
+\def\s!btxset {btxset}
+\def\s!btxref {btxref}
+\def\s!btxint {btxint}
+\def\s!btxbck {btxbck}
+
\definelabelclass[btxlabel][2]
% a dedicated construction mechanism
@@ -97,7 +102,6 @@
\unexpanded\setvalue{\??constructiontexthandler\v!btxlist}%
{\begingroup
- \xdef\btxcurrentlistinternal{\the\numexpr\locationcount+\plusone)}% \nextinternalreference
\directsetup{\v!btxrendering:\v!number:\constructionparameter\c!number}%
\endgroup}
@@ -112,7 +116,7 @@
\iflocation
\goto
{\publ_list_number_normal}%
- [\s!internal(\btxcurrentlistinternal)]%
+ [\s!internal(\currentbtxinternal)]%
\else
\publ_list_number_normal
\fi
@@ -124,8 +128,6 @@
\btx_list_reference_inject
\relax}
-\let\btxcurrentlistinternal\relax
-
% todo: low level builder commands without using the constructor
% construction
@@ -203,7 +205,6 @@
\installcorenamespace {btxnumbering}
\installcorenamespace {btxrenderingdefinition}
-
\installcommandhandler \??btxdataset {btxdataset} \??btxdataset
\installcommandhandler \??btxlistvariant {btxlistvariant} \??btxlistvariant
\installcommandhandler \??btxcitevariant {btxcitevariant} \??btxcitevariant
@@ -287,6 +288,15 @@
\unexpanded\def\definebtxcommand#1% {body} #1..#n{body}
{\setuvalue{\??btxcommand\strippedcsname#1}}%
+% tracing
+
+\installtextracker
+ {publications.crosslinks}
+ {\let\btx_trace_list_cross\strc_references_tracer}
+ {\let\btx_trace_list_cross\gobbletwoarguments}
+
+\let\btx_trace_list_cross\gobbletwoarguments
+
% access
\let\currentbtxtag \empty
@@ -298,7 +308,8 @@
\unexpanded\def\setbtxentry[#1]%
{\edef\currentbtxtag{\ctxcommand{setbtxentry("\currentbtxdataset","#1")}}}
-\setbtxdataset[\v!standard]
+\setbtxdataset
+ [\v!standard]
% \let\btxsetdataset\setbtxdataset
% \let\btxsetentry \setbtxentry
@@ -366,8 +377,8 @@
%newdimen\d_publ_number_distance
\ifdefined\btxblock \else \newcount\btxblock \fi \btxblock\plusone
-\ifdefined\btxlistcounter \else \newcount\btxlistcounter \fi
-\ifdefined\btxcitecounter \else \newcount\btxcitecounter \fi
+\ifdefined\btxlistcounter \else \newcount\btxlistcounter \fi % maintaned here, maybe in lua too?
+\ifdefined\btxcitecounter \else \newcount\btxcitecounter \fi % maybe pass this to lua
\newtoks \everysetupbtxlistplacement % name will change
\newtoks \everysetupbtxciteplacement % name will change
@@ -524,20 +535,34 @@
\def\publ_place_list_entry_register
{\ctxcommand{btxregisterlistentry("\currentbtxdataset","\currentbtxtag")}}
+\unexpanded\def\btxchecklistentry#1% called at the lua end
+ {\begingroup
+ \edef\currentbtxtag{#1}%
+ \ifx\currentbtxcriterium\v!all % move this check to lua ... easier to test there anyway
+ \publ_check_list_entry
+ \else
+ \ctxcommand{btxdoifelselistentryplaced("\currentbtxdataset","\currentbtxtag")}\donothing\publ_check_list_entry
+ \fi
+ \endgroup}
+
\unexpanded\def\btxlistreset
- {\let\currentbtxindex \!!zerocount
- \let\currentbtxcombis \empty
- \let\currentbtxcategory\empty
- \let\currentbtxinternal\empty
- \let\currentbtxlanguage\empty
- \let\currentbtxtag \empty}
-
-\unexpanded\def\btxsetindex {\def\currentbtxindex}
-\unexpanded\def\btxsetcombis {\def\currentbtxcombis}
-\unexpanded\def\btxsetcategory{\def\currentbtxcategory}
-\unexpanded\def\btxsetinternal{\def\currentbtxinternal}
-%unexpanded\def\btxsetlanguage{\def\currentbtxlanguage}
-\unexpanded\def\btxsettag {\def\currentbtxtag}
+ {\let\currentbtxindex \!!zerocount
+ \let\currentbtxcombis \empty
+ \let\currentbtxcategory \empty
+ \let\currentbtxinternal \empty
+ \let\currentbtxbacklink \empty
+ \let\currentbtxbacktrace\empty
+ \let\currentbtxlanguage \empty
+ \let\currentbtxtag \empty}
+
+\unexpanded\def\btxsetindex {\def\currentbtxindex}
+\unexpanded\def\btxsetcombis {\def\currentbtxcombis}
+\unexpanded\def\btxsetcategory {\def\currentbtxcategory}
+\unexpanded\def\btxsetinternal {\def\currentbtxinternal}
+\unexpanded\def\btxsetbacklink {\def\currentbtxbacklink}
+\unexpanded\def\btxsetbacktrace{\def\currentbtxbacktrace}
+%unexpanded\def\btxsetlanguage {\def\currentbtxlanguage}
+\unexpanded\def\btxsettag {\def\currentbtxtag}
\unexpanded\def\btxsetlanguage#1%
{\def\currentbtxlanguage{#1}%
@@ -569,47 +594,44 @@
\btx_entry_inject
\stopbtxlistentry}
-\unexpanded\def\btxchecklistentry#1% called at the lua end
- {\begingroup
- \edef\currentbtxtag{#1}%
- \ifx\currentbtxcriterium\v!all % move this check to lua ... easier to test there anyway
- \publ_check_list_entry
- \else
- \ctxcommand{btxdoifelselistentryplaced("\currentbtxdataset","\currentbtxtag")}\donothing\publ_check_list_entry
- \fi
- \endgroup}
-
\unexpanded\def\publ_check_list_entry
{\global\advance\btxlistcounter\plusone
% todo, switch to font
\hbox{\btx_reference_checked}%
\par}
-\unexpanded\def\btx_list_reference_inject % we can use a faster \reference
+\unexpanded\def\btx_reference_checked
+ {\dontleavehmode\hbox\bgroup
+ \btx_list_reference_inject_indeed
+ \egroup}
+
+\newcount\c_btx_list_reference
+
+\unexpanded\def\btx_list_reference_inject
{\dontleavehmode\begingroup % no box
\iftrialtypesetting\else
- \ctxcommand{btxlistreference("\currentbtxdataset","\currentbtxblock","\currentbtxtag","\number\btxlistcounter")}%
+ \btx_list_reference_inject_now
\fi
- \btx_list_reference_inject_indeed
+ \btx_list_reference_inject_indeed % needs checking ... still needed?
\endgroup}
-\unexpanded\def\btx_reference_checked
- {\dontleavehmode\hbox\bgroup
- \btx_list_reference_inject_indeed
- \egroup}
+\def\btx_list_reference_inject_now
+ {\btx_trace_list_cross\empty\currentbtxbacktrace
+ \global\advance\c_btx_list_reference\plusone
+ \strc_references_direct_full_user
+ {\s!btxset="\currentbtxdataset",\s!btxref="\currentbtxtag",\ifx\currentbtxbacklink\currentbtxbacktrace\s!btxint=\currentbtxbacklink\else\s!btxbck="\currentbtxbacktrace"\fi}%
+ {\s!btx::\v!list::\number\c_btx_list_reference}%
+ {\number\btxlistcounter}}
\unexpanded\def\btx_cite_reference_inject % todo: wrap whole content?
{\dontleavehmode\begingroup % no box
- \iftrialtypesetting\else
-% \ifx\currentbtxinternal\empty\else
- % \global\advance\btxcitecounter\plusone
- \ctxcommand{btxcitereference(\number\currentbtxinternal)}%
-% \fi
+ \iftrialtypesetting \else
+ \btx_trace_list_cross\currentbtxbacklink\empty
\fi
- % \btx_list_reference_inject_indeed
\endgroup}
-\let\btxcitereference\btx_cite_reference_inject
+% \let\btxcitereference\btx_cite_reference_inject
+\let\btxcitereference\relax
\setuvalue{\??btxnumbering\v!short }{\btxlistvariant{short}} % these will be setups
\setuvalue{\??btxnumbering\v!bib }{\btxlistvariant{num}} % these will be setups
@@ -762,14 +784,14 @@
\unexpanded\def\btxdomarkcitation % called from lua end
{\iftrialtypesetting
- \expandafter\gobbletwoarguments
+ \expandafter\gobblethreearguments
\else
\expandafter\publ_cite_mark_citation
\fi}
-\def\publ_cite_mark_citation#1#2% called from lua end
+\def\publ_cite_mark_citation#1#2#3% called from lua end
{\dontleavehmode
- \writedatatolist[btx][btxset=#1,btxref=#2]} % \c!location=\v!here
+ \normalexpanded{\writedatatolist[\s!btx][\s!btxset=#1,\s!btxref=#2,\s!btxint=\number#3]}} % \c!location=\v!here
%D \macros{cite,nocite,citation,nocitation,usecitation}
%D
@@ -923,17 +945,20 @@
\newconstant\currentbtxconcat
\unexpanded\def\btxcitereset
- {\let\currentbtxfirst \empty
- \let\currentbtxsecond \empty
- \let\currentbtxinternal\empty
- \let\currentbtxlanguage\empty
- \let\currentbtxtag \empty
+ {\let\currentbtxfirst \empty
+ \let\currentbtxsecond \empty
+ \let\currentbtxinternal \empty
+ \let\currentbtxbacklink \empty
+ \let\currentbtxbacktrace\empty
+ \let\currentbtxlanguage \empty
+ \let\currentbtxtag \empty
\setconstant\currentbtxconcat\zerocount}
\btxcitereset
\unexpanded\def\btxcitesetup#1%
- {\directsetup{btx:cite:#1}%
+ {\btx_cite_reference_inject
+ \directsetup{btx:cite:#1}%
\btxcitereset}
\unexpanded\def\btxsetfirst {\def\currentbtxfirst}
@@ -943,14 +968,6 @@
%unexpanded\def\btxsetlanguage{\def\currentbtxlanguage}
\unexpanded\def\btxsetconcat#1{\setconstant\currentbtxconcat#1\relax}
-\unexpanded\def\btxsetlistreference#1#2% #3#4%
- {\strc_references_direct_full_user{btxset="#1",btxref="#2"}}
-
-\unexpanded\def\btxsetcitereference#1#2%
- {\ifx\currentbtxinternal\empty \else
- \strc_references_direct_full_user{btxint=#2}{#1}\empty
- \fi}
-
\unexpanded\def\btxstartsubcite#1%
{\bgroup
\btxcitereset