summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/core-ref.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/core-ref.tex')
-rw-r--r--Master/texmf-dist/tex/context/base/core-ref.tex617
1 files changed, 103 insertions, 514 deletions
diff --git a/Master/texmf-dist/tex/context/base/core-ref.tex b/Master/texmf-dist/tex/context/base/core-ref.tex
index 4a0c1a3ce12..9c6ad0f9ca9 100644
--- a/Master/texmf-dist/tex/context/base/core-ref.tex
+++ b/Master/texmf-dist/tex/context/base/core-ref.tex
@@ -222,7 +222,6 @@
{#3}%
\egroup}
-
%D As we can see, these macros depend on three other ones,
%D \type {\makesectionformat}, that generated \type
%D {\sectionformat}, \type {\pagenumber}. The not yet used
@@ -313,11 +312,12 @@
\ifx\lastreference\empty \else
\doiffirstreferenceoccurance\lastreference
{\thisisdestination{\referenceprefix\lastreference}}%
- \referentieinfo>\lastreference
- \edef\dododowritereference
- {\writeutilitycommand
- {\mainreference{\referenceprefix}{\lastreference}{#4}{#5}{#6}}}%
- \dododowritereference
+ \referenceinfo>\lastreference
+% \edef\dododowritereference
+% {\writeutilitycommand
+% {\mainreference{\referenceprefix}{\lastreference}{#4}{#5}{#6}}}%
+% \dododowritereference
+ \expanded{\writeutilitycommand{\noexpand\mainreference{\referenceprefix}{\lastreference}{#4}{#5}{#6}}}%
\fi
\egroup}
@@ -329,19 +329,6 @@
%D In practice this comes to giving \type {\mainreference} a
%D appropriate meaning and loading the utility file.
-% \def\setreferences
-% {\def\mainreference##1##2##3##4##5%
-% {\doifundefinedelse{\r!cross\fileprefix##1##2}
-% {\setglobalcrossreference{##1##2}{##3}{##4}{##5}}
-% {\showmessage\m!references{2}{[##1][##2],##4}}}}
-
-% \def\setreferences
-% {\the\everyreference % we're grouped anyway
-% \def\mainreference##1##2##3##4##5%
-% {\doifundefinedelse{\r!cross\fileprefix##1##2}
-% {\setglobalcrossreference{##1##2}{##3}{##4}{##5}}
-% {\ifcase0##4\else\showmessage\m!references{2}{[##1][##2],##4}\fi}}}
-
%D For a long time the only way to access an external file was
%D to use the file prefix (\type {somefile::}. However, when
%D you split up a document, redefining the references may be
@@ -359,48 +346,31 @@
\chardef\autocrossfilereferences=0
-% \def\setreferences % some day, filename will be stored in ref record
-% {\the\everyreference % we're grouped anyway
-% \def\mainreference##1##2##3##4##5%
-% {\doifundefinedelse{\r!cross\fileprefix##1##2}
-% {\ifcase\autocrossfilereferences
-% \setglobalcrossreference{##1##2}{##3}{##4}{##5}%
-% \or
-% \setglobalcrossreference{##1##2}{##3}{##4}{##5}%
-% \doifundefinedelse{\r!cross##1##2}
-% {\expanded{\definereference[##1##2][\fileprefix##1##2]}}
-% {\showmessage\m!references2{[##1][##2],##4 (auto \currentutilityfilename)}}%
-% \or
-% \doifundefinedelse{\r!cross##1##2}
-% {\expanded{\definereference[##1##2][\noexpand\v!pagina(\fileprefix##4)]}}
-% {\showmessage\m!references2{[##1][##2],##4 (auto \currentutilityfilename)}}%
-% \fi}
-% {\ifcase0##4\else
-% \showmessage\m!references2{[##1][##2],##4 (\currentutilityfilename)}%
-% \fi}}}
-
-% optimizing this one makes sense when we have docs with 10K
-% refs.
-
\def\setreferences% some day, filename will be stored in ref record
{\the\everyreference % we're grouped anyway
\def\mainreference##1##2##3##4##5% can be made faster by indirect calls
- {\ifundefined{\r!cross\fileprefix##1##2}% \ifcsname\r!cross\fileprefix##1##2\endcsname
+ {\ifcsname\r!cross\fileprefix##1##2\endcsname
+ \ifcase0##4\else
+ \showmessage\m!references2{[##1][##2],##4 (\currentutilityfilename)}%
+ \fi
+ \else
\ifcase\autocrossfilereferences
\setglobalcrossreference{##1##2}{##3}{##4}{##5}%
\or
\setglobalcrossreference{##1##2}{##3}{##4}{##5}%
- \doifundefinedelse{\r!cross##1##2}
- {\expanded{\definereference[##1##2][\fileprefix##1##2]}}
- {\showmessage\m!references2{[##1][##2],##4 (auto \currentutilityfilename)}}%
+ \ifcsname\r!cross##1##2\endcsname
+ \showmessage\m!references2{[##1][##2],##4 (auto \currentutilityfilename)}%
+ \else
+ \expanded{\definereference[##1##2][\fileprefix##1##2]}%
+ \fi
\or
- \doifundefinedelse{\r!cross##1##2}
- {\expanded{\definereference[##1##2][\noexpand\v!page(\fileprefix##4)]}}
- {\showmessage\m!references2{[##1][##2],##4 (auto \currentutilityfilename)}}%
+ \ifcsname\r!cross##1##2\endcsname
+ \showmessage\m!references2{[##1][##2],##4 (auto \currentutilityfilename)}%
+ \else
+ \expanded{\definereference[##1##2][\noexpand\v!page(\fileprefix##4)]}%
+ \fi
\fi
- \else\ifcase0##4\else
- \showmessage\m!references2{[##1][##2],##4 (\currentutilityfilename)}%
- \fi\fi}}
+ \fi}}
\def\resetreferences
{\let\mainreference\gobblefivearguments}
@@ -506,7 +476,7 @@
\def\setglobalcrossreference#1#2#3#4%
{\scratchtoks{#4}%
- \global\advance\crossreferenceorder 1
+ \global\advance\crossreferenceorder \plusone
\@EA\xdef\csname\r!cross\fileprefix#1\endcsname
{\rt!cross{#2}{#3}{\the\scratchtoks}{\the\crossreferenceorder}}}
@@ -516,17 +486,6 @@
\def\setglobalsystemreference#1#2#3%
{\@EA\xdef\csname\r!cross\fileprefix#2\endcsname{#1{#3}}}
-% Maybe I need this some day.
-
-% \def\copycrossreference#1#2#3% file from to
-% {\bgroup
-% \def\fileprefix{#1::}%
-% \def\rt!cross##1##2##3##4%
-% {\setxvalue{\r!cross\fileprefix#3}%
-% {\noexpand\rt!cross{##1}{##2}{##3}{##4}}}%
-% \getvalue{\r!cross\fileprefix#2}%
-% \egroup}
-
\def\copycrossreference#1#2#3% file from to / slow
{\bgroup
\doifelse{#1}{}
@@ -580,13 +539,6 @@
%D with four arguments and one with only two, we need a two
%D step filter.
-%\def\getreferenceelements#1%
-% {\edef\referenceelements{\getvalue{\r!cross\referenceprefix#1}}%
-% \expandafter\dogetreferenceelements\referenceelements{}{}{}{}}
-%
-%\def\getreferenceelements#1% only one level expansion permitted!
-% {\@EA\@EA\@EA\dogetreferenceelements\csname\r!cross\referenceprefix#1\endcsname{}{}{}{}}
-
\def\getreferenceelements#1% only one level expansion permitted!
{\@EA\@EA\@EA\dogetreferenceelements\csname\r!cross\referenceprefix#1\endcsname\empty\empty\empty\empty}
@@ -746,33 +698,8 @@
%D meaning of the original cross reference. In fact,
%D \type{\rt!cross} is toggled to \type{\rt!done}.
-% \def\doiffirstreferenceoccurance#1#2%
-% {\ifcheckduplicatereferences
-% \doifundefinedelse{\r!cross\referenceprefix#1}
-% {#2}
-% {\getreferenceelements{#1}%
-% \ifnum\currentreferencetype=\rt!cross
-% #2%
-% \bgroup
-% \def\rt!cross##1##2##3##4%
-% {\setgvalue{\r!cross\referenceprefix#1}%
-% {\rt!done{##1}{##2}{##3}{##4}}}%
-% \getvalue{\r!cross\referenceprefix#1}%
-% \egroup
-% \fi}%
-% \else
-% #2%
-% \fi}
-
\def\rt!crossdone#1#2#3#4{\rt!done{#1}{#2}{#3}{#4}}
-% \def\dohandleduplicatereference#1%
-% {\bgroup
-% \let\rt!cross\rt!crossdone
-% \@EA\xdef\csname\r!cross\referenceprefix#1\endcsname
-% {\csname\r!cross\referenceprefix#1\endcsname}%
-% \egroup}
-
\def\dohandleduplicatereference#1%
{\bgroup
\let\rt!cross\rt!crossdone
@@ -780,17 +707,6 @@
{\csname\r!cross\referenceprefix#1\endcsname}%
\egroup}
-% \def\checkfirstreferenceoccurance#1#2% etex
-% {\ifcsname\r!cross\referenceprefix#1\endcsname
-% \getreferenceelements{#1}%
-% \ifnum\currentreferencetype=\rt!cross
-% \dohandleduplicatereference{#1}%
-% #2%
-% \fi
-% \else
-% #2%
-% \fi}
-
\def\checkfirstreferenceoccurance#1#2% etex
{\@EA\ifx\csname\r!cross\referenceprefix#1\endcsname\relax % no ifcsname needed here
\predefinereference{#1}%
@@ -1274,7 +1190,7 @@
\fi}
\def\docheckglobalfilereference#1%
- {\ifundefined{\r!cross#1::\currentinnerreference}\else
+ {\ifcsname\r!cross#1::\currentinnerreference\endcsname
\def\currentouterreference{#1}%
\edef\currentfullreference%
{\currentouterreference::\currentinnerreference}%
@@ -1315,101 +1231,6 @@
% lijst, dan de chain doorlopen. Momenteel mag alleen laatste
% laatste undefined zijn, eigenlijk moet dat overal kunnen met
% 'geen' zonder melding. Is wel trager. Dus niet.
-%
-% \def\doifreferencefoundelse#1#2#3% \@EA niet nodig
-% {\doresetgotowhereever
-% \global\secondaryreferencefalse
-% {\the\everyreference\xdef\primaryreference{#1}}%
-% \global\nofsecondaryreferences=0
-% \def\dopreprocessreference##1,%
-% {\if]##1\else
-% \ifsecondaryreference
-% \ifenablereferencechains \iflocation
-% {\the\everyreference\xdef\secondaryreference{##1}}%
-% %\global\advance\nofsecondaryreferences by 1
-% \@EA\dodoifreferencefoundelse\@EA{\secondaryreference}
-% {\global\advance\nofsecondaryreferences by 1
-% #2}
-% {%\global\advance\nofsecondaryreferences by -1
-% \dostartnoto#3\dostopnoto}%
-% \fi \fi
-% \else
-% {\the\everyreference\xdef\primaryreference{##1}}%
-% \global\secondaryreferencetrue
-% \fi
-% \expandafter\dopreprocessreference
-% \fi}%
-% \dopreprocessreference#1,],%
-% \global\secondaryreferencefalse
-% \@EA\dodoifreferencefoundelse\@EA{\primaryreference}{#2}{#3}%
-% \doresetgotowhereever} % to prevent problems with direct goto's
-
-% \def\doifreferencefoundelse#1#2#3% REF \cs
-% {\checkreferences
-% \bgroup
-% \the\everyreference
-% \let\referenceprefix\empty
-% \expandreferences{#1}%
-% \egroup
-% \doresetgotowhereever
-% \global\nofsecondaryreferences 0
-% \ifcase\nofexpandedreferences\relax % #1 can be number -)
-% % no ref
-% \or
-% % one ref
-% \or
-% % two refs
-% \ifenablereferencechains \iflocation
-% \global\secondaryreferencetrue
-% \xdef\secondaryreference{\csname REF::2\endcsname}%
-% \bgroup
-% \let\unharmedreferenceprefix\referenceprefix
-% %\bgroup
-% \dodoifreferencefoundelse\secondaryreference
-% \global\nofsecondaryreferences 1
-% \ifreferencefound
-% #2%
-% \else
-% \dostartnoto#3\dostopnoto
-% \fi
-% %\egroup
-% \egroup
-% \fi \fi
-% \else
-% % more than two refs
-% \ifenablereferencechains \iflocation
-% \global\secondaryreferencetrue
-% \scratchcounter2
-% \loop
-% \xdef\secondaryreference{\csname REF::\number\scratchcounter\endcsname}%
-% \bgroup
-% \let\unharmedreferenceprefix\referenceprefix
-% %\bgroup
-% \dodoifreferencefoundelse\secondaryreference
-% \global\advance\nofsecondaryreferences 1
-% \ifreferencefound
-% #2%
-% \else
-% \global\advance\nofsecondaryreferences -1
-% \dostartnoto#3\dostopnoto
-% \fi
-% %\egroup
-% \egroup
-% \ifnum\scratchcounter<\nofexpandedreferences\relax
-% \advance\scratchcounter 1
-% \repeat
-% \fi \fi
-% \fi
-% \global\secondaryreferencefalse
-% \xdef\primaryreference{\csname REF::1\endcsname}%
-% \bgroup
-% \let\unharmedreferenceprefix\referenceprefix
-% %\bgroup
-% \dodoifreferencefoundelse\primaryreference
-% \ifreferencefound#2\else#3\fi
-% %\egroup
-% \egroup
-% \doresetgotowhereever} % to prevent problems with direct goto's
\def\doifreferencefoundelse#1#2#3% REF \cs / never more than one group (else \aftergroup usage problems)
{\checkreferences
@@ -1439,7 +1260,7 @@
\global\nofsecondaryreferences \plusone
#2%
\else
- \dostartnoto#3\dostopnoto
+ \dohandlenoto{#3}%
\fi
\egroup
\fi \fi
@@ -1459,7 +1280,7 @@
\global\advance\nofsecondaryreferences \plusone
#2%
\else
- \dostartnoto#3\dostopnoto
+ \dohandlenoto{#3}%
\fi
\egroup
\ifnum\scratchcounter<\nofexpandedreferences\relax
@@ -1494,20 +1315,20 @@
{\dodoifreferencefoundelse{#1}%
\ifreferencefound\@EA\firstoftwoarguments\else\@EA\secondoftwoarguments\fi}
-%D Somewhere else we will properly define \type {\dostartgoto};
+%D Somewhere else we will properly define \type {\dohandlegoto};
%D the noto alternative takes care of undefined references in
%D a sequence
-\ifx\dostartnoto\undefined
+\ifx\dohandlenoto\undefined
- \def\dostartnoto#1\dostopnoto
+ \def\dohandlenoto#1%
{\ifsecondaryreference\else{#1}\fi}
\fi
-\ifx\dostartgoto\undefined
+\ifx\dohandlegoto\undefined
- \def\dostartgoto\data#1\start#2\stop#3\dostopgoto
+ \def\dohandlegoto#1#2#3%
{\ifsecondaryreference\else{#1}\fi}
\fi
@@ -1523,10 +1344,11 @@
{\checkreferences
\bgroup
\edef\currentfullreference{#1}%
- \ifundefined{\r!cross\currentfullreference}%
- \global\referencefoundfalse #3%
- \else\getreferenceelements\currentfullreference
- \global\referencefoundtrue #2%
+ \ifcsname\r!cross\currentfullreference\endcsname
+ \getreferenceelements\currentfullreference
+ \global\referencefoundtrue#2%
+ \else
+ \global\referencefoundfalse#3%
\fi
\egroup}
@@ -1538,25 +1360,6 @@
%D \goto{some text}[prefix:reference]
%D \stoptyping
-%\def\docheckinnerreference%
-% {\global\let\predefinedreference=\currentinnerreference
-% \ifx\currentreferencearguments\empty
-% \doifdefinedelse{\r!cross\referenceprefix\currentfullreference}
-% {\global\referencefoundtrue}
-% {\let\referenceprefix\empty
-% \doifdefinedelse{\r!cross\currentfullreference}
-% {\global\referencefoundtrue}
-% {\global\referencefoundfalse}}%
-% \else % [SomeThing{with,me}]
-% \let\referenceprefix\empty
-% \doifdefinedelse{\r!cross\currentinnerreference}
-% {\global\referencefoundtrue}
-% {\global\referencefoundfalse}%
-% \fi
-% \doifpredefinedreferenceelse{\global\referencefoundfalse}{}}
-
-\beginETEX
-
\def\docheckinnerreference
{\global\let\predefinedreference\currentinnerreference
\ifx\currentreferencearguments\empty
@@ -1580,35 +1383,6 @@
\fi
\doifpredefinedreferenceelse{\global\referencefoundfalse}\donothing}
-\endETEX
-
-\beginTEX
-
-\def\docheckinnerreference
- {\global\let\predefinedreference\currentinnerreference
- \ifx\currentreferencearguments\empty
- \@EA\ifx\csname\r!cross\referenceprefix\currentfullreference\endcsname\relax
- \let\referenceprefix\empty
- \@EA\ifx\csname\r!cross\currentfullreference\endcsname\relax
- \global\referencefoundfalse
- \else
- \global\referencefoundtrue
- \fi
- \else
- \global\referencefoundtrue
- \fi
- \else % [SomeThing{with,me}]
- \let\referenceprefix\empty
- \@EA\ifx\csname\r!cross\currentinnerreference\endcsname\relax
- \global\referencefoundfalse
- \else
- \global\referencefoundtrue
- \fi
- \fi
- \doifpredefinedreferenceelse{\global\referencefoundfalse}\donothing}
-
-\endTEX
-
%D References to other files however are treated strict or
%D tolerant, depending on their loading and availability:
%D
@@ -1624,67 +1398,8 @@
%D \type{\setouterreference} as a signal that indeed references
%D are defined for the outer file.
-% \def\docheckouterreference%
-% {\let\referenceprefix=\empty
-% \let\unharmedreferenceprefix=\empty
-% \xdef\predefinedreference%
-% {\currentouterreference::\currentinnerreference}%
-% \ifx\innerreference\empty
-% \global\referencefoundtrue % no checking done
-% \else
-% \doifdefinedelse{\r!cross\currentouterreference::}
-% {\doifdefinedelse{\r!cross\currentfullreference}
-% {\global\referencefoundtrue}
-% {\global\referencefoundfalse}}
-% {\global\referencefoundtrue}% no checking done
-% \fi
-% \doifpredefinedreferenceelse{\global\referencefoundfalse}{}}
-
\newif\ifstrictouterreferences \strictouterreferencesfalse
-\beginTEX
-
-\def\dodocheckouterreference
- {\@EA\ifx\csname\specialREFidentifier\currentfullreference\endcsname\relax
- \ifstrictouterreferences
- \global\referencefoundfalse
- \else
- % already \global\referencefoundtrue % no checking done
- \fi
- \else
- \@EA\@EA\@EA\splitofffullreference\@EA\@EA\@EA % 1 level
- {\csname\specialREFidentifier\currentfullreference\endcsname}%
- \docheckouterreference
- \fi}
-
-\def\docheckouterreference
- {\let\referenceprefix\empty
- \let\unharmedreferenceprefix\empty
- \xdef\predefinedreference
- {\currentouterreference::\currentinnerreference}%
- \ifx\innerreference\empty
- \global\referencefoundtrue % no checking done
- \else
- \@EA\ifx\csname\r!cross\currentouterreference::\endcsname\relax
- \ifstrictouterreferences
- \global\referencefoundfalse
- \else
- \global\referencefoundtrue % no checking done
- \fi
- \else
- \ifcsname\r!cross\currentfullreference\endcsname
- \global\referencefoundtrue
- \else
- \dodocheckouterreference
- \fi
- \fi
- \fi
- \doifpredefinedreferenceelse{\global\referencefoundfalse}\donothing}
-
-\endTEX
-
-\beginETEX \ifcsname
-
\def\dodocheckouterreference
{\ifcsname\specialREFidentifier\currentfullreference\endcsname
\@EA\@EA\@EA\splitofffullreference\@EA\@EA\@EA % 1 level
@@ -1720,8 +1435,6 @@
\fi
\doifpredefinedreferenceelse{\global\referencefoundfalse}\donothing}
-\endETEX
-
%D Special references are only tested when some test routine is
%D defined.
@@ -1738,24 +1451,6 @@
%D An unknown reference is reported on the screen, in the log
%D file and, when enabled, in the left margin of the text.
-% \def\reportreferenceerror#1#2%
-% {\bgroup
-% \the\everyreference % cleanup : etc in french
-% \ifinpagebody\else
-% \doifconcepttracing
-% {\doifsomething{#2}
-% {\inleft
-% {\infofont
-% \scratchdimen\leftmarginwidth
-% \advance\scratchdimen -2em
-% \doboundtext{#2}\scratchdimen{..}->}}}%
-% \fi
-% \doifpredefinedreferenceelse
-% \donothing
-% {\predefinereference
-% \showmessage\m!references{#1}{[\unharmedreferenceprefix][#2]}}%
-% \egroup}
-
\def\reportreferenceerror#1#2%
{\bgroup
\the\everyreference % cleanup : etc in french
@@ -1794,16 +1489,6 @@
\let\predefinedreference\s!unknown
-% \def\predefinereference
-% {\setgvalue{\r!cross\predefinedreference}{\rt!cross{}{}{}{}}%
-% \setgvalue{\r!cross\unharmedreferenceprefix\predefinedreference}{\rt!cross{}{}{}{}}}
-
-% \def\dummypredefinedreference{\r!cross{}{}{}{}}
-%
-% \def\predefinereference
-% {\global\@EA\let\csname\r!cross\predefinedreference \endcsname\dummypredefinedreference
-% \global\@EA\let\csname\r!cross\unharmedreferenceprefix\endcsname\dummypredefinedreference} % bug!
-%
% we need to predefine in order to make dup checking possible (when no ref
% is defined yet)
@@ -1815,15 +1500,6 @@
%D Testing on existance then becomes:
-% \def\checkpredefinedreference#1#2#3#4% #3 can expand tricky
-% {{#1}{#2}{#4}}
-%
-% \def\doifpredefinedreferenceelse#1#2% \referenceprefix added
-% {\bgroup
-% \let\rt!cross\checkpredefinedreference
-% \doifelse{\getvalue{\r!cross\referenceprefix\predefinedreference}}{{}{}{}}
-% {\egroup#1}{\egroup#2}}
-
\def\doifpredefinedreferenceelse % \referenceprefix added
{\@EA\ifx\csname\r!cross\referenceprefix\predefinedreference\endcsname\dummypredefinedreference
\expandafter\firstoftwoarguments
@@ -1840,23 +1516,6 @@
%D
%D The second argument can be a comma seperated list.
-% this will be replaced by a more general mechanis
-
-% \def\doifreferencepermittedelse#1#2#3#4% ref set found notfound
-% {\doifreferencefoundelse{#1}
-% {\ifx\currentinnerreference\empty
-% \ifx\currentouterreference\empty
-% #3%
-% \else
-% \doifinstringelse{\currentouterreference::}{#2}{#4}{#3}%
-% \fi
-% \else\ifx\currentouterreference\empty
-% \doifinstringelse{\currentinnerreference}{#2}{#4}{#3}%
-% \else
-% \doifinstringelse{\currentouterreference::\currentinnerreference}{#2}{#4}{#3}%
-% \fi\fi}
-% {#4\unknownreference{#1}}}
-
\let\permittedreferences\empty
\def\doifreferencepermittedelse#1#2#3% ref found notfound
@@ -1930,11 +1589,7 @@
%D counterparts. A common component in these is:
%D
%D \starttyping
-%D \dostartgoto
-%D \data {..}
-%D \start {..}
-%D \stop {..}
-%D \dostopgoto
+%D \dohandlegoto{..}{..}{..}
%D \stoptyping
%D
%D Here data can be whatever needs highlighting, e.g. {\em
@@ -1951,15 +1606,10 @@
\ifusepagedestinations
\gotorealpage{#1}{#2}{#4}{#5}%
\else
- \dostartgoto
- \data
- {#5}%
- \start
- \the\everyreference % we are (have to be) grouped !
- \dostartgotolocation\buttonwidth\buttonheight{#1}{#2}{#3}{#4}%
- \stop
- \dostopgotolocation
- \dostopgoto
+ \dohandlegoto
+ {#5}%
+ {\the\everyreference\dostartgotolocation\buttonwidth\buttonheight{#1}{#2}{#3}{#4}}%
+ {\dostopgotolocation}%
\fi
\else
{#5}%
@@ -1967,14 +1617,10 @@
\def\gotorealpage#1#2#3#4% url file page data
{\iflocation
- \dostartgoto
- \data
- {#4}%
- \start
- \dostartgotorealpage\buttonwidth\buttonheight{#1}{#2}{#3}%
- \stop
- \dostopgotorealpage
- \dostopgoto
+ \dohandlegoto
+ {#4}%
+ {\dostartgotorealpage\buttonwidth\buttonheight{#1}{#2}{#3}}%
+ {\dostopgotorealpage}%
\else
{#4}%
\fi}
@@ -2062,6 +1708,16 @@
\thisisdestination{\s!aut\iftraceinternalreferences:#1\fi:\nextinternalreference}%
\fi}
+% beter:
+%
+% \def\thisisnextinternal#1%
+% {\iftrialtypesetting\else
+% \global\advance\locationcount \plusone
+% \ifinternalnamedreferences
+% \thisisdestination{\s!aut\iftraceinternalreferences:#1\fi:\nextinternalreference}%
+% \fi
+% \fi}
+
\def\gotonextinternal#1#2#3#4%
{\ifinternalnamedreferences
\gotodestination\empty\empty{\s!aut\iftraceinternalreferences:#1\fi:#2}{#3}{#4}%
@@ -2283,14 +1939,10 @@
\def\executecommand#1#2#3%
{\iflocation
- \dostartgoto
- \data
- {#3}%
- \start
- \dostartexecutecommand\buttonwidth\buttonheight{#1}{#2}%
- \stop
- \dostopexecutecommand
- \dostopgoto
+ \dohandlegoto
+ {#3}%
+ {\dostartexecutecommand\buttonwidth\buttonheight{#1}{#2}}%
+ {\dostopexecutecommand}%
\else
{#3}%
\fi}
@@ -2445,7 +2097,7 @@
\def\doref[#1][#2]%
{\ifsecondargument
\doifreferencefoundelse{#2}
- {\doifundefinedelse{reftype#1}{\reftypep}{\getvalue{reftype#1}}}
+ {\executeifdefined{reftype#1}\reftypep}
{\unknownreference{#2}\dummyreference}%
\else
\dummyreference
@@ -2494,7 +2146,7 @@
\dogotospace{\thecurrentsubtextreference}[#1]}
{\unknownreference{#1}\dummyreference}%
\@@rfright
- \referentieinfo{<}{#1}%
+ \referenceinfo{<}{#1}%
\egroup}
%D Typesetting the reference is a bit more complicated than one
@@ -2571,7 +2223,7 @@
% {\egroup\dosymbolreference{#1}{#2}[#3]}
% {\egroup\dowantedreference{#1}{#2}[#3]}}
% {\dounknownreference{#1}{#2}[#3]}%
-% \referentieinfo{<}{#3}%
+% \referenceinfo{<}{#3}%
% \egroup}
%D The previously discussed setup macro lets us specify the
@@ -2750,7 +2402,7 @@
% {#1}{#2}[#3]%
% \fi}
% {\dounknownreference{#1}{#2}[#3]}%
-% \referentieinfo<{#3}%
+% \referenceinfo<{#3}%
% \global\let\leftofreference \empty
% \global\let\rightofreference\empty
% \global\let\textofreference \empty
@@ -2786,7 +2438,7 @@
{#1}{#2}[#3]%
\fi}
{\dounknownreference{#1}{#2}[#3]}%
- \referentieinfo<{#3}%
+ \referenceinfo<{#3}%
\global\let\leftofreference \empty
\global\let\rightofreference\empty
\global\let\textofreference \empty
@@ -2816,7 +2468,7 @@
% {\dosymbolreference{}{}[#2]}
% {\dogotospace{#1}[#2]}}
% {\unknownreference{#2}#1}%
-% \referentieinfo{<}{#2}}
+% \referenceinfo{<}{#2}}
\def\dogoto#1[#2]%
{\dontleavehmode
@@ -2829,7 +2481,7 @@
{\dogotospace{#1}[#2]}}
{\unknownreference{#2}#1\relax}% \relax catches lookahead
\egroup
- \referentieinfo{<}{#2}}
+ \referenceinfo{<}{#2}}
\unexpanded\def\goto#1#2%
{\dogoto{#1}#2}
@@ -2883,7 +2535,7 @@
\doifreferencefoundelse{#2}
{\dogotofixed{#1}[#2]}
{\hbox{\unknownreference{#2}#1}}%
- \referentieinfo{<}{#2}%
+ \referenceinfo{<}{#2}%
\egroup}
%D An reference to another document can be specified as a file
@@ -3087,7 +2739,11 @@
\edef\otherfile{#2}}%
\def\setouterlocation#1%
- {\ifundefined{\v!file:::#1}%
+ {\ifcsname\v!file:::#1\endcsname
+ \let\doexternaldocument\setouterfilelocation % will change
+ \let\doexternalurl \setouterfilelocation % will change
+ \csname\v!file:::#1\endcsname
+ \else
\ifconditional\forceURLlocation
\edef\otherURL{#1}%
\let\otherfile\empty
@@ -3095,10 +2751,6 @@
\let\otherURL\empty
\edef\otherfile{#1}%
\fi
- \else
- \let\doexternaldocument\setouterfilelocation % will change
- \let\doexternalurl \setouterfilelocation % will change
- \csname\v!file:::#1\endcsname
\fi
\setfalse\forceURLlocation
\doifparentfileelse\otherfile
@@ -3144,19 +2796,19 @@
\egroup}
\def\redospecialfrom[#1::#2]%
- {\ifundefined{\v!file:::#1}%
- \tttf[#1]%
- \else
+ {\ifcsname\v!file:::#1\endcsname
\def\doexternaldocument##1##2##3{\goto{##3}[#1::#2]}%
\csname\v!file:::#1\endcsname
+ \else
+ \tttf[#1]%
\fi}
\def\nodospecialfrom[#1]%
- {\ifundefined{\v!file:::#1}%
- \tttf[#1]%
- \else
+ {\ifcsname\v!file:::#1\endcsname
\def\doexternaldocument##1##2##3{##3}% different than ^
\csname\v!file:::#1\endcsname
+ \else
+ \tttf[#1]%
\fi}
%D We also support:
@@ -3248,12 +2900,11 @@
\def\program#1[#2]%
{\bgroup
- \ifundefined{\v!program:::#2}%
- {\tttf[#2]}%
- \else
- \def\doprogram##1##2%
- {\goto{\doifelsenothing{#1}{##2}{#1}}[\v!program(#2)]}%
+ \ifcsname\v!program:::#2\endcsname
+ \def\doprogram##1##2{\goto{\doifelsenothing{#1}{##2}{#1}}[\v!program(#2)]}%
\csname\v!program:::#2\endcsname
+ \else
+ {\tttf[#2]}%
\fi
\egroup}
@@ -3262,20 +2913,17 @@
\definespeciallocation\v!program#1#2%
{\bgroup
\iflocation
- \doifdefinedelse{\v!program:::\currentreferenceoperation}
- {\def\doprogram##1##2{\def\@@programfile{##1}}%
- \getvalue{\v!program:::\currentreferenceoperation}}
- {\let\@@programfile\currentreferenceoperation}%
+ \ifcsname\v!program:::\currentreferenceoperation\endcsname
+ \def\doprogram##1##2{\def\@@programfile{##1}}%
+ \getvalue{\v!program:::\currentreferenceoperation}%
+ \else
+ \let\@@programfile\currentreferenceoperation
+ \fi
\convertcommand\@@programfile\to\ascii
- \dostartgoto
- \data
- {#2}%
- \start
- \dostartrunprogram\buttonwidth\buttonheight
- {\@@prdirectory\ascii}\currentreferencearguments
- \stop
- \dostoprunprogram
- \dostopgoto
+ \dohandlegoto
+ {#2}%
+ {\dostartrunprogram\buttonwidth\buttonheight{\@@prdirectory\ascii}\currentreferencearguments}%
+ {\dostoprunprogram}%
\else
{#2}%
\fi
@@ -3340,65 +2988,6 @@
%D Because we combine both methods, we have to take care of
%D the \type{file::page(n)} as well as \type{page(file::n)}.
-% \definespeciallocation\v!pagina#1#2%
-% {\iflocation
-% \ifx\currentouterreference\empty
-% \splitoffreference\currentreferenceoperation
-% \else
-% \let\currentinnerreference=\currentreferenceoperation
-% \fi
-% \ifx\currentouterreference\empty
-% \doifnonzeropositiveelse{\currentinnerreference}
-% {}
-% {\edef\currentinnerreference{1}}%
-% \gotorealpage\empty\empty\currentinnerreference{#2}%
-% \else
-% \setouterlocation\currentouterreference
-% \doifnonzeropositiveelse{\currentinnerreference}
-% {}
-% {\doifdefinedelse{\v!pagina:::\currentinnerreference}
-% {\edef\currentinnerreference{\getvalue{\v!pagina:::\currentinnerreference}}}
-% {\edef\currentinnerreference{1}}}%
-% \gotorealpage\otherURL\otherfile\currentinnerreference{#2}%
-% \fi
-% \else
-% {#2}%
-% \fi}
-
-% \definespeciallocation\v!pagina#1#2% page(n) page(+n) page(-n)
-% {\iflocation
-% \ifx\currentouterreference\empty
-% \splitoffreference\currentreferenceoperation
-% \else
-% \let\currentinnerreference\currentreferenceoperation
-% \fi
-% \ifx\currentouterreference\empty
-% \doifinstringelse+\currentinnerreference
-% {\scratchcounter\realpageno
-% \advance\scratchcounter \currentinnerreference
-% \edef\currentinnerreference{\the\scratchcounter}}
-% {\doifinstringelse-\currentinnerreference
-% {\scratchcounter\realpageno
-% \advance\scratchcounter \currentinnerreference
-% \edef\currentinnerreference{\the\scratchcounter}}
-% \donothing}%
-% \doifnonzeropositiveelse\currentinnerreference
-% \donothing
-% {\edef\currentinnerreference{1}}%
-% \gotorealpage\empty\empty\currentinnerreference{#2}%
-% \else
-% \setouterlocation\currentouterreference
-% \doifnonzeropositiveelse\currentinnerreference
-% \donothing
-% {\doifdefinedelse{\v!pagina:::\currentinnerreference}
-% {\edef\currentinnerreference{\getvalue{\v!pagina:::\currentinnerreference}}}
-% {\edef\currentinnerreference{1}}}%
-% \gotorealpage\otherURL\otherfile\currentinnerreference{#2}%
-% \fi
-% \else
-% {#2}%
-% \fi}
-
\definespeciallocation\v!page#1#2% page(n) page(+n) page(-n)
{\iflocation
\ifx\currentouterreference\empty
@@ -3407,6 +2996,7 @@
\let\currentinnerreference\currentreferenceoperation
\fi
\ifx\currentouterreference\empty
+% numexpr
\doifinstringelse+\currentinnerreference
{\scratchcounter\realpageno
\advance\scratchcounter \currentinnerreference
@@ -3426,9 +3016,11 @@
\setouterlocation\currentouterreference
\doifnonzeropositiveelse\currentinnerreference
\donothing
- {\doifdefinedelse{\v!page:::\currentinnerreference}
- {\edef\currentinnerreference{\getvalue{\v!page:::\currentinnerreference}}}
- {\edef\currentinnerreference{1}}}%
+ {\ifcsname\v!page:::\currentinnerreference\endcsname
+ \edef\currentinnerreference{\getvalue{\v!page:::\currentinnerreference}}%
+ \else
+ \edef\currentinnerreference{1}%
+ \fi}%
\gotorealpage\otherURL\otherfile\currentinnerreference{#2}%
\fi
\else
@@ -3464,7 +3056,7 @@
{\dogotospace{#2}[#4]}%
\fi}
{\unknownreference{#4}#1/#2}%
- \referentieinfo{<}{#4}}
+ \referenceinfo{<}{#4}}
\unexpanded\def\atpage[#1]%
{\dontleavehmode
@@ -3481,7 +3073,7 @@
\fi}
{\unknownreference{#1}%
\labeltexts\v!page\dummyreference}%
- \referentieinfo{<}{#1}}
+ \referenceinfo{<}{#1}}
%D We can cross link documents by using:
%D
@@ -3522,10 +3114,10 @@
\stopnointerference}%
\douseexternaldocument[#1][#2][#4]%
\doglobal\addtocommalist{#1}\crossdocumentreferences
- \def\docommando##1%
+ \def\docommand##1%
{\letgvalue{\??rf##1\c!state}\v!start % for fast checking
\doglobal\addtocommalist{##1}\crossdocumentelements}%
- \processcommalist[#3]\docommando
+ \processcommalist[#3]\docommand
\ifutilitydone
\global\autocrossdocumenttrue
\fi
@@ -3539,8 +3131,7 @@
\def\checkcontrastreference#1%
{\ifnum\currentreferencetype=\rt!page\ifnum\currentdatareference=\realpageno
- \doifdefined{#1\c!contrastcolor}
- {\setevalue{#1\c!color}{\getvalue{#1\c!contrastcolor}}}%
+ \doifdefined{#1\c!contrastcolor}{\setevalue{#1\c!color}{\getvalue{#1\c!contrastcolor}}}%
\fi\fi}
\def\checkcontrastreference#1%
@@ -3777,8 +3368,6 @@
\c!expansion=\v!no,
\c!separator=\nonbreakablespace]
-\let\nonbreakablespace=~
-
\setupurl
[\c!alternative=\v!both,
\c!space=\v!no,