summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/strc-not.mklx
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkiv/strc-not.mklx')
-rw-r--r--tex/context/base/mkiv/strc-not.mklx1972
1 files changed, 0 insertions, 1972 deletions
diff --git a/tex/context/base/mkiv/strc-not.mklx b/tex/context/base/mkiv/strc-not.mklx
deleted file mode 100644
index 299873830..000000000
--- a/tex/context/base/mkiv/strc-not.mklx
+++ /dev/null
@@ -1,1972 +0,0 @@
-%D \module
-%D [ file=strc-not,
-%D version=2008.10.20,
-%D title=\CONTEXT\ Structure Macros,
-%D subtitle=Note Handling,
-%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 / Note Handling}
-
-\registerctxluafile{strc-not}{}
-
-\unprotect
-
-% todo: finish local rendering
-% todo: more p_strc_notations_* (outside trial loop)
-% todo: see if we can now use \insertpenalties (>0 == some left)
-
-\ifdefined\dotagsetnotesymbol \else \let\dotagsetnotesymbol\relax \fi
-\ifdefined\dotagsetnotation \else \let\dotagsetnotation \relax \fi
-
-\protected\def\unvboxed {\ifvmode\unvbox \else\box \fi} % will change or used more often
-\protected\def\unvcopied{\ifvmode\unvcopy\else\copy\fi} % will change or used more often
-
-%D \LMTX\ testcase:
-%D
-%D \starttyping
-%D \hbox {\hbox{\footnote{HH1}\footnote{HH2}}} \par
-%D \hbox {\hbox{x\footnote{XHH1}x\footnote{XHH2}}} \par
-%D \vbox {\setbox0\hbox{\footnote{VH1}\footnote{VH2}}\box0} \par
-%D \vbox {\hbox{\footnote{VH1}xxx\footnote{VH2}}} \par
-%D \vbox {\hbox{\footnote{VH1}\footnote{VH2}}
-%D \hbox{\footnote{VH1}\footnote{VH2}}} \par
-%D \vbox {\hbox{x\footnote{XVH1}x\footnote{XVH2}}} \par
-%D \vbox {\vbox{\footnote{VV1}\footnote{VV2}}} \par % two lines
-%D \vbox {\vbox{x\footnote{XVV1}x\footnote{XVV2}}} \par
-%D \stoptyping
-
-%D Notes have two handlers: notations and notes. Although notations can be defined
-%D independently it makes not much sense. In principle we can treat notes as lists
-%D but they are currently done as a variant on enumerations. I will provide a list
-%D variant as well. One complication is that for page related notes inserts are used
-%D and therefore notes are typeset immediately and descriptions are better suited
-%D for that. For instance endnotes can as well be typeset using lists.
-
-% textcommand/textstyle/textcolor : set by note commandhandler and used for inline number
-
-%D \macros
-%D {setupnote,setupnotation}
-%D
-%D We can influence footnote typesetting with the setup command:
-%D
-%D \showsetup{setupnotation}
-%D \showsetup{setupnote}
-%D
-%D The definition command indicate that we can frame the footnote area. The
-%D footnotes themselves are treated as descriptions.
-%D
-%D \showsetup{definenote}
-%D
-%D It's sort of a custom to precede footnotes by a horizontal rule and although
-%D fancy rules like
-%D
-%D \starttyping
-%D \hbox to 10em{\hskip-3em\dotfill}
-%D \stoptyping
-%D
-%D Are quite ligitimate, we default to a simple one 20\% of the text width.
-
-% \c!headstyle=\noteparameter\c!style,
-% \c!headcolor=\noteparameter\c!color,
-
-\installcorenamespace{notation}
-
-\installcommandhandler \??notation {notation} \??notation
-
-\installcounterassociation{notation}
-
-\aliased\let\setupnotations\setupnotation
-
-\definesymbol[\v!note:\v!previouspage][\llap{\low{\symbol[\v!previouspage]}}]
-\definesymbol[\v!note:\v!nextpage ][\llap{\low{\symbol[\v!nextpage ]}}]
-
-\setupnotations % check with old
- [\c!alternative=\v!note,
- %\c!headstyle=,
- %\c!titlestyle=,
- %\c!style=,
- %\c!color=,
- %\c!headcolor=,
- %\c!titlecolor=,
- \c!numbercommand=\high,
- %\c!symbolcommand=\lowllap, % experiment
- %\c!indicator=\v!no, % was \v!yes in mkii for page notes
- \c!width=\v!fit,
- \c!titledistance=.5em,
- \c!distance=.5em,
- %\c!hang=,
- %\c!sample=,
- %\c!align=,
- %\c!headalign=,
- \c!margin=\v!no,
- \c!before=,
- \c!inbetween=,
- \c!after=,
- \c!indentnext=\v!yes,
- \c!indenting=\v!never,
- \c!titleleft=(,
- \c!titleright=),
- %\c!closesymbol=,
- \c!closecommand=\wordright,
- \c!display=\v!yes,
- %\c!command=,
- \c!titlecommand=,
- \c!expansion=\v!no,
- %\c!xmlsetup=,
- %\s!catcodes=,
- \c!way=\v!by\v!text,
- \c!prefix=\v!no,
- \c!prefixconnector=.,
- %\c!starter=,
- %\c!stopper=,
- \c!number=\v!yes,
- \c!text=,
- \c!start=0,
- \c!state=\v!start,
- \c!levels=3]
-
-%D The code here is mostly the same as enumerations but we want to keep them
-%D isolated and at some point we might differentiate.
-
-% \installcorenamespace{noteclass}
-
-\protected\def\strc_define_commands_notation#tag#level#parent%
- {\doifelsenothing{#parent}
- {\normalexpanded{\defineconstruction[#tag][\s!handler=\v!notation,\c!level=#level]}%
- \setevalue{\??notation#tag:\s!parent}{\??notation}}%
- {\normalexpanded{\defineconstruction[#tag][#parent][\s!handler=\v!notation,\c!level=#level]}%
- \setevalue{\??note #tag:\s!parent}{\??note#parent}% see later for \s!note
- \setevalue{\??notation#tag:\s!parent}{\??notation#parent}}%
- \instance\setuevalue{\e!next #tag}{\strc_notations_next {#tag}{\number#level}}% obsolete
- \instance\setuevalue{\c!reset#tag}{\strc_notations_reset {#tag}{\number#level}}% obsolete
- \instance\setuevalue {#tag}{\strc_notations_command[#tag]}%
- \instance\setuevalue{\e!start#tag}{\strc_notations_start [#tag]}%
- \instance\setuevalue{\e!stop #tag}{\strc_notations_stop }}
-
-\appendtoks
- \ifempty\currentnotationparent
- % clone => parent | subclone => clone | subsubclone => subclone
- \let\currentnotationsub\empty
- \strc_define_commands_notation
- {\currentnotationsub\currentnotation}%
- \plusone
- \empty
- \edef\p_levels{\notationparameter\c!levels}%
- \dostepwiserecurse\plustwo\p_levels\plusone
- {\strc_define_commands_notation
- {\v!sub\currentnotationsub\currentnotation}%
- \recurselevel
- {\currentnotationsub\currentnotation}%
- \edef\currentnotationsub{\v!sub\currentnotationsub}}%
- \definelist[\currentnotation]% goodie
- \else
- % clone => parent | subclone => subparent | subsubclone => subsubparent
- \let\currentnotationsub\empty
- \edef\p_levels{\notationparameter\c!levels}%
- \dorecurse\p_levels
- {\strc_define_commands_notation
- {\currentnotationsub\currentnotation}%
- \recurselevel
- {\currentnotationsub\currentnotationparent}%
- \edef\currentnotationsub{\v!sub\currentnotationsub}}%
- \definelist[\currentnotation][\currentnotationparent]% goodie
- \fi
- \edef\p_counter{\notationparameter\s!counter}% can inherit from parent
- \ifempty\p_counter
- \let\p_counter\currentnotation
- \fi
- \doifelsecounter\p_counter\donothing{\strc_notes_define_counter\p_counter}%
- \letnotationparameter\s!counter\p_counter
- %\strc_notes_setup_counter\currentnotation
-\to \everydefinenotation
-
-\let\p_strc_constructions_title \empty
-\let\p_strc_constructions_number\empty
-
-\protected\setvalue{\??constructioninitializer\v!notation}%
- {\let \currentnotation \currentconstruction
- \enforced\let\constructionparameter \notationparameter
- \enforced\let\constructionnamespace \??notation
- \enforced\let\detokenizedconstructionparameter\detokenizednotationparameter
- \enforced\let\letconstructionparameter \letnotationparameter
- \enforced\let\useconstructionstyleandcolor \usenotationstyleandcolor
- \enforced\let\setupcurrentconstruction \setupcurrentnotation
- \edef\p_strc_constructions_number{\constructionparameter\c!number}%
- \ifx\p_strc_constructions_number\v!yes
- \settrue\c_strc_constructions_number_state
- \iftrialtypesetting
- \strc_counters_save\currentconstructionnumber
- \fi
- %\strc_counters_increment_sub\currentconstructionnumber\currentconstructionlevel
- \else
- \setfalse\c_strc_constructions_number_state
- \fi
- \edef\p_strc_constructions_title{\constructionparameter\c!title}%
- \ifx\p_strc_constructions_title\v!yes
- \settrue\c_strc_constructions_title_state
- \else
- \setfalse\c_strc_constructions_title_state
- \fi}
-
-\protected\setvalue{\??constructionfinalizer\v!notation}%
- {\ifconditional\c_strc_constructions_number_state
- \iftrialtypesetting
- \strc_counters_restore\currentconstructionnumber
- \fi
- \fi}
-
-%D Notations (we simply needed a word that relates to notes and is and sounds like
-%D description and enumeration) are a special case in the sense that they are
-%D stored, rendered elsewhere and referered to from where they are specified. For
-%D that reason they have a different set op main commands.
-
-% \notation[ref]{title}
-% \notation[reference=,title=]
-% \startnotation[ref] title \stopnotation
-
-\protected\def\strc_notations_next {\strc_constructions_next_indeed \namednotationparameter} % #1#2
-\protected\def\strc_notations_reset{\strc_constructions_reset_indeed\namednotationparameter} % #1#2
-%protected\def\strc_notations_set {\strc_constructions_set_indeed \namednotationparameter} % #1#2
-
-\newconditional\c_strc_notations_anchored_next
-
-\def\strc_notations_finalize
- {\ifconditional\c_strc_notations_anchored_next
- \expandafter\strc_notations_finalize_next
- \else
- \expandafter\strc_notations_finalize_previous
- \fi}
-
-\def\strc_notations_finalize_previous
- {\normalexpanded{\endgroup\noteparameter\c!next}}
-
-\def\strc_notations_finalize_next
- {\endgroup\ignorespaces}
-
-\tolerant\protected\def\strc_notations_command[#1]#*[#2]%
- {\begingroup
- \edef\currentnote{#1}%
- \strc_constructions_initialize{#1}%
- \strc_notes_synchronize
- \edef\p_next{\noteparameter\c!anchor}%
- \ifx\p_next\v!next % for now only two states
- \settrue \c_strc_notations_anchored_next
- \else
- \setfalse\c_strc_notations_anchored_next
- \fi
- \ifnotesenabled
- \strc_counters_increment_sub\currentconstructionnumber\currentconstructionlevel
- \fi
- \ifhastok={#2}%
- \expandafter\strc_notations_command_setups
- \else
- \expandafter\strc_notations_command_reference
- \fi[#2]}
-
-\def\strc_notations_command_setups[#1]%
- {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference=,\c!title=,\c!bookmark=,\c!list=,#1]%
- \strc_notations_wrapup}
-
-\tolerant\def\strc_notations_command_reference[#1]#*#=%
- {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference={#1},\c!title={#2},\c!bookmark=,\c!list=]%
- \strc_notations_wrapup}
-
-\def\strc_notations_wrapup
- {\csname\??constructionnotehandler\currentconstructionhandler\endcsname
- \strc_constructions_finalize
- \strc_notations_finalize}
-
-\tolerant\protected\def\strc_notations_start[#1]#*[#2]%
- {\begingroup
- \edef\currentnote{#1}%
- \strc_constructions_initialize{#1}%
- \strc_notes_synchronize
- \ifnotesenabled
- \strc_counters_increment_sub\currentconstructionnumber\currentconstructionlevel
- \fi
- \ifhastok={#2}%
- \expandafter\strc_notations_start_setups
- \else
- \expandafter\strc_notations_start_reference
- \fi[#2]}
-
-\protected\def\strc_notations_start_setups[#1]%
- {\normalexpanded{\def\noexpand\strc_pickup_yes##/\csname\e!stop\currentconstruction\endcsname{\strc_notations_start_setups_indeed[#1]{##1}}}%
- \strc_pickup_yes}
-
-\protected\def\strc_notations_start_setups_indeed[#1]#*#2%
- {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference=,\c!title={#2},\c!bookmark=,\c!list=,#1]%
- \strc_notations_wrapup}
-
-\protected\def\strc_notations_start_reference[#1]%
- {\normalexpanded{\def\noexpand\strc_pickup_yes##/\csname\e!stop\currentconstruction\endcsname{\strc_notations_start_reference_indeed[#1]{##1}}}%
- \strc_pickup_yes}
-
-\protected\def\strc_notations_start_reference_indeed[#1]#*#2%
- {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference={#1},\c!title={#2},\c!bookmark=,\c!list=]%
- \strc_notations_wrapup}
-
-\protected\def\strc_notations_stop
- {}
-
-%D A complication is that we need to set up rather specific properties of e.g.
-%D footnotes. It is for this reason that we introduce an extra level of
-%D indirectness. This way notations don't bark on undefined macros when used in
-%D combination.
-
-\protected\setvalue{\??constructionnotehandler\v!notation}%
- {\csname\??constructionnotehandler\currentconstructionhandler:\constructionparameter\c!type\endcsname}
-
-\protected\setvalue{\??constructionnotehandler\v!notation:}% empty case
- {[\currentconstructionhandler:\currentconstruction]}
-
-%D Here is a simple renderer for notes
-
-\defineconstructionalternative
- [\v!note]
- [\c!renderingsetup=\??constructionrenderings:\v!note]
-
-\startsetups[\??constructionrenderings:\v!note]
- \noindent
- \leftboundary % experiment, to be done in more places
- \llap{\box\constructionheadbox\hskip\constructionparameter\c!distance}%
- \useconstructionstyleandcolor\c!style\c!color
- \ignorespaces
-\stopsetups
-
-%D We now implement the note definer.
-
-\installcorenamespace{note}
-
-\installframedcommandhandler \??note {note} \??note
-
-\let\setupnotes\setupnote
-
-% These only concern the inline symbol/number and wrapping of the whole list.
-
-\setupnotes % not all make sense here
- [\c!location=\v!page,
- %\c!conversion=,
- \c!rule=\v!on,
- \c!before=\blank,
- \c!bodyfont=\v!small,
- \c!anchor=, % can also be v!next
- %\c!style=,
- %\c!color=,
- %\c!after=,
- %\c!rulecolor=,
- %\c!rulecommand=,
- \c!rulethickness=\linewidth,
- \c!frame=\v!off,
- \c!distance=.125em, % in the text between symbols
- % \c!textseparator={,}, % optional separator
- \c!columndistance=1em,
- % \c!margindistance=.5em,
- \c!align=, % also use instead of \c!tolerance
- \c!split=\v!tolerant,
- \c!width=\makeupwidth, % \ifdim\hsize<\makeupwidth\hsize\else\makeupwidth\fi
- \c!height=\textheight,
- \c!command=, % \noteparameter\c!numbercommand, % (command in enumeration) too messy, called twice
- \c!separator=,%
- \c!textcommand=\high,
- \c!textstyle=\tx,
- %\c!textcolor=,
- \c!interaction=\v!yes,
- %\c!factor=,
- %\c!scope=, % \v!text \v!page
- \c!prefixconnector=.,
- %\c!next=\autoinsertnextspace,
- \c!prefix=\v!no,
- %\c!continue=\v!no,
- \c!paragraph=\v!no,
- \c!inbetween=\hskip\emwidth,
- \c!symbol=\mathematics{*},
- \c!n=1]
-
-\setupnotes
- [\c!expansion=\v!no,
- \c!xmlsetup=,
- \s!catcodes=]
-
-%D Insertions are part of notes.
-
-% \installcorenamespace{noteinsertion}
-
-\permanent\def\currentnoteinsertion {\noteparameter\s!insert}
-\permanent\def\currentnoteinsertionnumber{\namedinsertionnumber{\noteparameter\s!insert}}
-
-\appendtoks
- \ifempty\currentnoteparent
- \doifelseinsertion\currentnote
- \donothing
- {\defineinsertion[\currentnote]% could be an option
- \normalexpanded{\t_strc_notes{\the\t_strc_notes\noexpand\strc_notes_process_list{\currentnote}}}}%
- \letnoteparameter\s!insert\currentnote
- \definenotation[\currentnote][\c!type=\v!note]%
- \else
- \setexpandednoteparameter\s!insert{\namednoteparameter\currentnoteparent\s!insert}%
- \definenotation[\currentnote][\currentnoteparent][\c!type=\v!note]%
- \fi
- \clf_definenote
- {\currentnote}%
- {insert}%
- \currentnoteinsertionnumber
- \relax
-\to \everydefinenote
-
-% maybe we will share this at some point:
-
-\def\strc_notes_define_counter#tag% todo: move inline
- {\definecounter[#tag]%
- \registerenumerationcounter{#tag}}
-
-\appendtoks
- \synchronizenotationcounters
-\to \everysetupnotation
-
-\appendtoks
- \synchronizenotationcounters
-\to \everydefinenotation
-
-% so far
-
-%letcsname\??constructionstarthandler \v!notation\expandafter\endcsname\csname\??constructionstarthandler \v!enumeration\endcsname
-\letcsname\??constructionstarthandler \v!notation\expandafter\endcsname\csname\??constructionstarthandler \v!construction\endcsname % no par mess
-\letcsname\??constructionstophandler \v!notation\expandafter\endcsname\csname\??constructionstophandler \v!enumeration \endcsname
-\letcsname\??constructioncommandhandler\v!notation\expandafter\endcsname\csname\??constructioncommandhandler\v!enumeration \endcsname
-\letcsname\??constructiontexthandler \v!notation\expandafter\endcsname\csname\??constructiontexthandler \v!enumeration \endcsname
-
-\protected\setvalue{\??constructionmainhandler\v!notation}#following%
- {\iftrialtypesetting \else
- \begingroup
- \currentconstructionsynchronize
- \c_attr_destination\currentconstructionattribute\relax % todo, whole text
- \signalcharacter
- \endgroup
- \fi#following}
-
-\protected\setvalue{\??constructionnotehandler\v!notation:\v!note}% in the running text
- {\ifnotesenabled
- % do be done elsewhere
- %
- %let\currentnote\currentconstructionmain
- \let\currentnote\currentconstruction % else wrong inheritance
- %
- \iftrialtypesetting
- \strc_notes_inject_dummy
- \else
- \begingroup
- \edef\currentnotenumber{\clf_storenote{\currentnote}\currentconstructionlistentry}%
- \settrue\processingnote
- \ifconditional\c_strc_notes_skip
- \glet\lastnotesymbol\strc_notes_inject_symbol_nop
- \else
- \iftypesettinglines % otherwise problems with \type <crlf> {xxx}
- \ignorelines % makes footnotes work in \startlines ... \stoplines
- \fi
- \ifconditional\c_strc_notes_symbol
- \strc_notes_inject_symbol_yes
- \else
- \unskip\unskip
- \glet\lastnotesymbol\strc_notes_inject_symbol_yes
- \fi
- \fi
- \ifconditional\postponingnotes % todo: per note class
- \global\settrue\postponednote
- \orelse\ifconditional\inlocalnotes % todo: per note class
- \global\settrue\postponednote
- \orelse\ifconditional\c_strc_notes_delayed
- % probably end notes
- \else
- \handlenoteinsert\currentnote\currentnotenumber % either an insert or just delayed
- \fi
- \endgroup
- \fi
- \fi
- \ifconditional\c_strc_notes_skip
- \global\setfalse\c_strc_notes_skip
- \else
- \kern\d_strc_notes_signal\relax % \relax is needed to honor spaces
- \fi}
-
-%D Interaction in notes is somewhat complex due to the way notes get flushed. In
-%D principle it is more or less the same as lists but where in lists we pack whole
-%D entries, in notes this doesn't happen. Okay, in retrospect we could have made
-%D descriptions lists but that will be a backward compatibility mess. At some point
-%D a completely new mechanism might show up, but not now. Also, as notes are inserts
-%D there is some extra mess to be kept in mind and it's easier to maintain two
-%D mechanisms than to combine too much.
-%D
-%D Interaction is also complicated because we want to provide several variants. For
-%D simple reference there is no need for anything special, as page references will
-%D do and we store them in the list anyway. But if we want a destination with
-%D dimensions we will use an additional destination because we can have only one
-%D with the same name and we always have the number as one.
-
-% interaction:
-%
-% all : text and number
-% number|yes: only number
-% text : only text
-%
-% \dogetsimple : injects
-
-\installcorenamespace{noteinteractioninline}
-\installcorenamespace{noteinteractiondisplay}
-
-\newconstant\a_strc_notes_symbol_reference
-\newconstant\a_strc_notes_number_reference
-\newconstant\a_strc_notes_text_reference
-\newconstant\a_strc_notes_text_destination
-
-\let\strc_notes_get_reference_attribute_symbol \empty
-\let\strc_notes_get_destination_attribute_symbol\empty
-
-\def\strc_notes_interaction_check_inline
- {\edef\p_interaction{\noteparameter\c!interaction}%
- \csname\??noteinteractioninline
- \ifcsname\??noteinteractioninline\p_interaction\endcsname\p_interaction\else\v!no\fi
- \endcsname}
-
-\def\strc_notes_interaction_check_display
- {\edef\p_interaction{\noteparameter\c!interaction}%
- \csname\??noteinteractiondisplay
- \ifcsname\??noteinteractiondisplay\p_interaction\endcsname\p_interaction\else\v!no\fi
- \endcsname}
-
-\def\currentnotenumber{0}
-
-\let\strc_notes_get_reference_attribute_symbol \empty
-\let\strc_notes_get_destination_attribute_symbol\empty
-
-\let\strc_notes_set_reference_attribute_number\donothing
-\let\strc_notes_set_reference_attribute_text \donothing
-\let\strc_notes_set_destination_attribute_text\donothing
-
-% inline
-
-\def\strc_references_prepare_inline_references_nop
- {\let\strc_notes_get_reference_attribute_symbol\empty
- \let\strc_notes_get_destination_attribute_symbol\empty
- \let\strc_notes_set_style_color_inline\strc_notes_set_style_color_inline_nop}
-
-% \def\strc_references_prepare_inline_references_yes
-% {\strc_references_set_simple_reference{symb:\currentnote:\currentnotenumber}% destination
-% \strc_references_get_simple_reference{internal(\clf_noteinternal{\currentnote}\currentnotenumber)}% reference
-% \edef\strc_notes_get_destination_attribute_symbol{attr\destinationattribute\currentdestinationattribute}%
-% \edef\strc_notes_get_reference_attribute_symbol{attr\referenceattribute\currentreferenceattribute}%
-% \let\strc_notes_set_style_color_inline\strc_notes_set_style_color_inline_yes}
-
-\def\strc_references_prepare_inline_references_yes
- {\edef\currentnoteinternal{\clf_noteinternal{\currentnote}\currentnotenumber}%
- \strc_references_set_simple_reference{*\currentnoteinternal}% destination
- \strc_references_get_simple_reference{internal(\currentnoteinternal)}% reference
- \edef\strc_notes_get_destination_attribute_symbol{attr\destinationattribute\currentdestinationattribute}%
- \edef\strc_notes_get_reference_attribute_symbol{attr\referenceattribute\currentreferenceattribute}%
- \let\strc_notes_set_style_color_inline\strc_notes_set_style_color_inline_yes}
-
-\letvalue{\??noteinteractioninline\v!no }\strc_references_prepare_inline_references_nop
-\letvalue{\??noteinteractioninline\v!all }\strc_references_prepare_inline_references_yes
-\letvalue{\??noteinteractioninline\v!number}\strc_references_prepare_inline_references_yes
-\letvalue{\??noteinteractioninline\v!text }\strc_references_prepare_inline_references_yes
-\letvalue{\??noteinteractioninline\v!yes }\strc_references_prepare_inline_references_yes
-
-% display (for 'all' we need unique text and number attributes so we resolve twice
-% as we otherwise don't get the number one which is lapped in the margin so we need
-% to explicitly visit it)
-
-\def\strc_references_prepare_display_references_nop
- {\let\strc_notes_set_reference_attribute_number\donothing
- \let\strc_notes_set_reference_attribute_text\donothing
- \let\strc_notes_set_destination_attribute_text\donothing
- \let\strc_notes_set_style_color_display\strc_notes_set_style_color_display_nop}
-
-\def\strc_references_prepare_display_references_yes_number
- {\edef\currentnoteinternal{\clf_noteinternal{\currentnote}\currentnotenumber}%
- \ifcase\currentnoteinternal\relax
- \strc_references_prepare_display_references_nop
- \else
- \let\strc_notes_set_reference_attribute_text\donothing
- \strc_references_get_simple_reference{*\currentnoteinternal}% reference
- \edef\strc_notes_set_reference_attribute_number{\c_attr_reference\currentreferenceattribute}%
- \let\strc_notes_set_style_color_display\strc_notes_set_style_color_display_yes
- \fi}
-
-\def\strc_references_prepare_display_references_yes_text
- {\edef\currentnoteinternal{\clf_noteinternal{\currentnote}\currentnotenumber}%
- \ifcase\currentnoteinternal\relax
- \strc_references_prepare_display_references_nop
- \else
- \strc_references_get_simple_reference{*\currentnoteinternal}% reference
- \edef\strc_notes_set_reference_attribute_text{\c_attr_reference\currentreferenceattribute}%
- \let\strc_notes_set_reference_attribute_number\donothing
- \let\strc_notes_set_style_color_display\strc_notes_set_style_color_display_yes
- \fi}
-
-\def\strc_references_prepare_display_references_yes_all
- {\edef\currentnoteinternal{\clf_noteinternal{\currentnote}\currentnotenumber}%
- \ifcase\currentnoteinternal\relax
- \strc_references_prepare_display_references_nop
- \else
- \strc_references_get_simple_reference{*\currentnoteinternal}% reference
- \edef\strc_notes_set_reference_attribute_text{\c_attr_reference\currentreferenceattribute}%
- \strc_references_get_simple_reference{*\currentnoteinternal}% reference
- \edef\strc_notes_set_reference_attribute_number{\c_attr_reference\currentreferenceattribute}%
- \let\strc_notes_set_style_color_display\strc_notes_set_style_color_display_yes
- \fi}
-
-\letvalue{\??noteinteractiondisplay\v!no }\strc_references_prepare_display_references_nop
-\letvalue{\??noteinteractiondisplay\v!all }\strc_references_prepare_display_references_yes_all
-\letvalue{\??noteinteractiondisplay\v!number}\strc_references_prepare_display_references_yes_number
-\letvalue{\??noteinteractiondisplay\v!text }\strc_references_prepare_display_references_yes_text
-\letvalue{\??noteinteractiondisplay\v!yes }\strc_references_prepare_display_references_yes_number
-
-\let\strc_notes_set_style_color_inline_nop \usenotestyleandcolor
-\let\strc_notes_set_style_color_display_nop\usenotationstyleandcolor
-
-\protected\def\strc_notes_set_style_color_inline_yes#style#color%
- {\usenotestyleandcolor#style#color%
- \iflocation\strc_notes_set_style_color_special\fi}
-
-\protected\def\strc_notes_set_style_color_display_yes#style#color%
- {\usenotationstyleandcolor#style#color%
- \iflocation\strc_notes_set_style_color_special\fi}
-
-\def\strc_notes_set_style_color_special
- {\iftrialtypesetting
- % keep
- \orelse\ifempty\currentcolorparameter
- \scratchcounter\clf_notedeltapage{\currentnote}\currentnotenumber\relax % todo calculate once
- \setlocationcolorspecified\scratchcounter
- \fi}
-
-\setvalue{\??constructiontexthandler\v!notation}%
- {\begingroup
- % we need to retrigger the reference as otherwise it gets lost because we don't do nested
- % references with the same id ... maybe some day if we can figure out a nice heuristic ...
- % the problem is that normally it's no issue but here we lap into the margin, so maybe that's
- % a criterium
- % \strc_notes_interaction_check_display
- \strc_notes_set_reference_attribute_number
- \dotagsetnotation
- \strc_notes_set_style_color_display\c!headstyle\c!headcolor
- \strc_enumerations_text
- \endgroup}
-
-% in mkii the pointer only showed up in pagewise notes
-
-\protected\def\strc_notes_inject_pointer % todo calculate once
- {\ifcase\clf_notedeltapage{\currentnote}\currentnotenumber\relax\relax
- % unknown
- \or
- % same page
- \or
- \noteparameter\c!symbolcommand{\symbol[\v!note:\v!nextpage]}%
- \or
- \noteparameter\c!symbolcommand{\symbol[\v!note:\v!previouspage]}%
- \fi}
-
-\protected\def\strc_notes_inject_symbol_yes
- {\strc_notes_inject_symbol_indeed\conditionaltrue}
-
-\protected\def\strc_notes_inject_symbol_nop
- {\strc_notes_inject_symbol_indeed\conditionalfalse}
-
-\definemargindata
- [strc_notes_destination_margin]
- [\v!left]
- [\c!margin=\zeropoint,
- \c!width=\zeropoint,
- \c!style=,
- \c!color=]
-
-\protected\def\strc_notes_inject_symbol_indeed#synchronize%
- {\ifconditional\c_strc_notations_anchored_next\else
- \removeunwantedspaces
- \doifelseitalic\/\donothing % Charles IV \footnote{the fourth}
- \fi
- \ifdim\lastkern=\d_strc_notes_signal
- % \kern\noteparameter\c!distance % yes or no note font? or main text
- \strc_notes_inject_separator
- \fi
- \nobreak
- \begingroup
- \strc_notes_interaction_check_inline
- \strc_notes_set_style_color_inline\c!textstyle\c!textcolor
- \hbox \strc_notes_get_reference_attribute_symbol \strc_notes_get_destination_attribute_symbol \bgroup
- % \hbox \strc_notes_get_reference_attribute_symbol \bgroup \strc_notes_destination_hack
- \strc_references_flush_destination_nodes % a bit late but ok
- \dostarttagged\t!descriptionsymbol\currentnote
- \dotagsetnotesymbol
- \noteparameter\c!textcommand{\clf_noteprefixednumber{\currentnote}\currentnotenumber\relax}%
- % the next one can cycle so we need to make sure it has no advance width
- \doif{\noteparameter\c!indicator}\v!yes\strc_notes_inject_pointer
- \dostoptagged
- \egroup
- \endgroup
- \glet\lastnotesymbol\relax}
-
-\protected\def\strc_notes_inject_dummy % temp hack
- {\removeunwantedspaces
- \doifelseitalic\/\donothing % Charles IV \footnote{the fourth}
- \ifdim\lastkern=\d_strc_notes_signal
- % \kern\noteparameter\c!distance % yes or no note font? or main text
- \strc_notes_inject_separator
- \fi
- \nobreak
- \hpack to .5\emwidth{}%
- \glet\lastnotesymbol\relax}
-
-\protected\def\strc_notes_inject_separator % patch by WS due to request on list
- {\edef\p_textseparator{\noteparameter\c!textseparator}%
- \ifempty\p_textseparator
- \kern\noteparameter\c!distance
- \else
- % skip or kern
- \nobreak
- \hbox\bgroup
- \strc_notes_interaction_check_inline
- \strc_notes_set_style_color_inline\c!textstyle\c!textcolor
- \noteparameter\c!textcommand{\p_textseparator}%
- \kern\noteparameter\c!distance
- \egroup
- \nobreak
- \fi}
-
-% this needs a further cleanup ... soon as it's a slow mechanism
-%
-% -- set breakpoint in descriptions
-% -- reset after trialtypesetting
-% -- that way we can trick the symbol space
-
-% removed:
-%
-% \pushsomestates
-%
-% core-ins -> obsolete
-%
-% saveinsertiondata
-% restoreinsertiondata
-% saveinsertionbox
-% eraseinsertionbackup
-% restoreinsertionbackup
-
-\def\savenotedata {} % \writestatus{todo}{save note data}}
-\def\restorenotedata {} % \writestatus{todo}{restore note data}}
-\def\savenotecontent {} % \writestatus{todo}{save note content}}
-\def\restorenotecontent{} % \writestatus{todo}{restore note content}}
-\def\erasenotebackup {} % \writestatus{todo}{erase note backup}}
-
-% page-set:
-
-\def\enablenotes {\writestatus{todo}{enable notes}}
-\def\disablenotes {\writestatus{todo}{disable notes}}
-\def\savenotes {\writestatus{todo}{save notes}}
-\def\flushsavednotes{\writestatus{todo}{flush notes}}
-
-% experiment: (compare scope=text and scope=page)
-%
-% \definenote[mynote][way=bytext,location=text,width=\leftmarginwidth,scope=page,rule=,before=,after=,factor=0]
-% \setuptexttexts[margin][\vbox to \textheight{\placenotes[mynote]\vfill}][]
-
-%D Footnotes are can be characterized by three components:
-%D
-%D \startitemize[packed]
-%D \item a small number \footnote {a footnote number} or symbol {\setupfootnotes
-%D [conversion=set 2]\footnote {a footnote}}
-%D \item and a similar mark at the bottom of the page
-%D \item followed by some additional text
-%D \stopitemize
-%D
-%D Because footnotes are declared at the location of their reference they can be
-%D seen as a special kind of floating bodies. Their placement is postponed but has
-%D to be taken into account in the pagebreak calculations. This kind of calculations
-%D are forced by using \type{\insert}s and dealing with all cases is not trivial.
-
-%D \macros
-%D {notesenabled}
-%D
-%D We need a couple of states because at some moments we don't want to mess around
-%D with inserts at all. Take for instance a table of contents. And so we can
-%D temporary disable footnotes by saying
-%D
-%D \starttyping
-%D \notesenabledfalse
-%D \stoptyping
-
-\newif\ifnotesenabled \notesenabledtrue
-
-% better mark a note .. once flushed no more flushing
-
-%appendtoks \notesenabledfalse \to \everymarking
-\appendtoks \notesenabledfalse \to \everybeforepagebody
-\appendtoks \notesenabledfalse \to \everystructurelist % quick hack
-\appendtoks \notesenabledfalse \to \everysimplifycommands % quick hack
-\appendtoks \notesenabledfalse \to \everypreroll % quick hack
-
-%D Often we need to process the whole set of notes and to make that fast, we use a
-%D token register:
-
-% we have several synchronizers:
-%
-% - after a definition
-% - after a specific setup
-% - after a general setup (inheritance of dimensions)
-% - just before a note is typeset
-
-\newtoks\t_strc_notes
-
-\let\strc_notes_process_list\gobbleoneargument
-
-\protected\def\strc_notes_process#action% argument is a \macro that uses \currentnote
- {\def\strc_notes_process_list##1{\edef\currentnote{##1}\let\currentdescription\currentnote#action}%
- \the\t_strc_notes}
-
-\newtoks\everychecknote % just before a note is typeset
-\newtoks\everysynchronizenote % after a general setup has happened
-
-\appendtoks
- \ifempty\currentnote \else
- \setupnotations[\currentnote][]% also a synchronize
- \fi
-\to \everysynchronizenote
-
-\def\strc_notes_synchronize
- {\the\everysynchronizenote} % we can speed this one up if needed by avoiding the commalist
-
-\appendtoks
- \strc_notes_process\strc_notes_synchronize
-\to \everysetupnoteroot
-
-\appendtoks
- \the\everysynchronizenote
-\to \everydefinenote
-
-% \starttext
-% text \startfootnote Test.\stopfootnote
-% test \footnote{xxxx} \subfootnote{xxxx}
-% test \footnote{xxxx} \subfootnote{xxxx}
-% \stoptext
-
-\installcorenamespace{notecommand}
-\installcorenamespace{notealign}
-\installcorenamespace{notepenalty}
-\installcorenamespace{noterule}
-
-\permanent\protected\def\currentnoterulecommand{\begincsname\??notecommand\currentnote\endcsname}
-\permanent\protected\def\currentnoterulealign {\begincsname\??notealign \currentnote\endcsname}
-
-\permanent\protected\def\currentnoterulecommandcommand{\noteparameter\c!rulecommand}
-\permanent\protected\def\currentnoterulecommandnormal {\normalnoterule} % no let as it can be changed afterwards
-
-\permanent\protected\def\letcurrentnoterulecommand{\enforced\letcsname\??notecommand\currentnote\endcsname}
-\permanent\protected\def\letcurrentnoterulealign {\enforced\letcsname\??notealign \currentnote\endcsname}
-
-\appendtoks
- \enforced\letcsname\??notecommand\currentnote\endcsname\currentnoterulecommandnormal
- \enforced\letcsname\??notealign \currentnote\endcsname\lefttoright
-\to \everysynchronizenote
-
-\def\strc_notes_set_rule
- {\letcurrentnoterulecommand\relax % so we default to nothing
- \letcurrentnoterulealign \relax
- \processcommacommand[\noteparameter\c!rule]\strc_notes_set_rule_step}
-
-\def\strc_notes_set_rule_step#alternative%
- {\begincsname\??noterule#alternative\endcsname}
-
-\def\strc_notes_set_rule_autodir
- {\doifelserighttoleftinbox\currentnoteinsertionnumber\righttoleft\lefttoright}
-
-\setvalue{\??noterule \v!command}{\letcurrentnoterulecommand\currentnoterulecommandcommand}
-\setvalue{\??noterule \v!on}{\letcurrentnoterulecommand\currentnoterulecommandnormal}
-\setvalue{\??noterule \v!normal}{\letcurrentnoterulecommand\currentnoterulecommandnormal}
-\setvalue{\??noterule \v!left}{\letcurrentnoterulecommand\currentnoterulecommandnormal
- \letcurrentnoterulealign \lefttoright}
-\setvalue{\??noterule \v!right}{\letcurrentnoterulecommand\currentnoterulecommandnormal
- \letcurrentnoterulealign \righttoleft}
-\setvalue{\??noterule\v!paragraph}{\letcurrentnoterulecommand\currentnoterulecommandnormal
- \letcurrentnoterulealign \strc_notes_set_rule_autodir}
-\setvalue{\??noterule \v!off}{\letcurrentnoterulecommand\relax}
-
-\appendtoks
- \strc_notes_set_rule
-\to \everysynchronizenote
-
-\permanent\def\currentnotepenalty
- {\ifcsname\??notepenalty\noteparameter\c!split\endcsname
- \lastnamedcs
- \else
- \numexpr\noteparameter\c!split\relax
- \fi}
-
-\setnewconstant\notepenaltytolerant \zerocount
-\setnewconstant\notepenaltystrict 9999
-\setnewconstant\notepenaltyverystrict\maxdimen
-
-\letvalue{\??notepenalty\v!tolerant }\notepenaltytolerant
-\letvalue{\??notepenalty\v!strict }\notepenaltystrict
-\letvalue{\??notepenalty\v!verystrict}\notepenaltyverystrict
-\letvalue{\??notepenalty }\notepenaltytolerant
-
-%D The following switch can be used to disable limiting the height of the footnote
-%D area, something that is needed in multi column balancing. Use this switch with
-%D care.
-
-\newif\ifnotelimit \notelimittrue % shared
-
-\def\strc_notes_set_factor
- {\edef\p_factor{\noteparameter\c!factor}%
- \ifempty\p_factor \else
- \ifnum\p_factor<\zerocount \else
-% \global
- \count\currentnoteinsertionnumber\p_factor % new: global
- \fi
- \fi}
-
-\appendtoks
- \strc_notes_set_factor
-\to \everysynchronizenote
-
-% locations:
-
-\installcorenamespace{notelocationvariant}
-\installcorenamespace{notepositionvariant}
-\installcorenamespace{notedelayedvariant}
-\installcorenamespace{notelocation}
-
-\newconditional\c_strc_notes_delayed
-
-\protected\def\strc_notes_set_delayed_yes{\settrue \c_strc_notes_delayed}
-\protected\def\strc_notes_set_delayed_nop{\setfalse\c_strc_notes_delayed}
-
-\setvalue{\??notelocation\v!page }{\letvalue{\??notedelayedvariant \currentnote}\strc_notes_set_delayed_nop
- \letvalue{\??notelocationvariant\currentnote}\strc_notes_set_location_page}
-\setvalue{\??notelocation\v!columns }{\letvalue{\??notedelayedvariant \currentnote}\strc_notes_set_delayed_nop
- \letvalue{\??notelocationvariant\currentnote}\strc_notes_set_location_columns}
-\setvalue{\??notelocation\v!lastcolumn }{\letvalue{\??notedelayedvariant \currentnote}\strc_notes_set_delayed_nop
- \letvalue{\??notelocationvariant\currentnote}\strc_notes_set_location_lastcolumn}
-\setvalue{\??notelocation\v!firstcolumn}{\letvalue{\??notedelayedvariant \currentnote}\strc_notes_set_delayed_nop
- \letvalue{\??notelocationvariant\currentnote}\strc_notes_set_location_firstcolumn}
-\setvalue{\??notelocation\v!none }{\letvalue{\??notedelayedvariant \currentnote}\strc_notes_set_delayed_yes
- \letvalue{\??notelocationvariant\currentnote}\strc_notes_set_location_none}
-\setvalue{\??notelocation\v!text }{\letvalue{\??notedelayedvariant \currentnote}\strc_notes_set_delayed_yes
- \letvalue{\??notelocationvariant\currentnote}\strc_notes_set_location_text}
-\setvalue{\??notelocation\v!high }{\letvalue{\??notepositionvariant\currentnote}\strc_notes_set_position_high}
-\setvalue{\??notelocation\v!bottom }{\letvalue{\??notepositionvariant\currentnote}\strc_notes_set_position_bottom}
-
-\setvalue{\??notedelayedvariant \??notedelayedvariant }{\strc_notes_set_delayed_nop} % not let
-\setvalue{\??notepositionvariant\??notepositionvariant}{\strc_notes_set_position_bottom} % not let
-\setvalue{\??notelocationvariant\??notelocationvariant}{\strc_notes_set_location_page} % not let
-
-\protected\def\strc_notes_set_delayed
- {\csname\??notedelayedvariant
- \ifcsname\??notedelayedvariant\currentnote\endcsname
- \currentnote
- \else
- \??notedelayedvariant
- \fi
- \endcsname}
-
-\protected\def\strc_notes_set_position
- {\csname\??notepositionvariant
- \ifcsname\??notepositionvariant\currentnote\endcsname
- \currentnote
- \else
- \??notepositionvariant
- \fi
- \endcsname}
-
-\protected\def\strc_notes_set_location
- {\csname\??notelocationvariant
- \ifcsname\??notelocationvariant\currentnote\endcsname
- \currentnote
- \else
- \??notelocationvariant
- \fi
- \endcsname}
-
-\protected\def\strc_notes_set_variants
- {\normalexpanded{\rawprocesscommalist[\noteparameter\c!location]\strc_notes_set_location_step}}
-
-\protected\def\strc_notes_set_location_step#alternative% the insert related one
- {\begincsname\??notelocation#alternative\endcsname}
-
-\appendtoks
- \strc_notes_set_variants
- \strc_notes_set_delayed
-\to \everysynchronizenote
-
-\newskip \s_strc_notes_distance % we need to implement stretch
-\newcount\c_strc_notes_columns
-
-\newskip \s_strc_notes_before
-\newskip \s_strc_notes_inbetween
-\newconditional\c_strc_notes_first_flushed
-
-\appendtoks
- \edef\p_spacebefore{\rootnoteparameter\c!spacebefore}%
- \ifempty\p_spacebefore
- \global\s_strc_notes_before\zeropoint
- \else
- \setbox\scratchbox\vbox{\blank[\p_spacebefore]\global\s_strc_notes_before\lastskip}%
- \fi
- \edef\p_spaceinbetween{\rootnoteparameter\c!spaceinbetween}%
- \ifempty\p_spaceinbetween
- \global\s_strc_notes_inbetween\zeropoint
- \else
- \setbox\scratchbox\vbox{\blank[\p_spaceinbetween]\global\s_strc_notes_inbetween\lastskip}%
- \fi
-\to \everysynchronizenote
-
-\def\strc_notes_set_distance
- {\begingroup
- \restoreglobalbodyfont
- \setbox\scratchbox\vbox % no reuse as it can mirror
- {\forgetall
- \dontcomplain
- \noteparameter\c!before
- \placenoterule
- \strut
- \noteparameter\c!after}%
- % also dp now
- \scratchdimen\dimexpr\htdp\scratchbox-\lineheight\relax
- \ifgridsnapping
- \getnoflines\scratchdimen
- \scratchdimen\noflines\lineheight
- \fi
- \expandafter\endgroup\expandafter
- \s_strc_notes_distance\the\scratchdimen\relax}
-
-\def\strc_notes_set_columns
- {\c_strc_notes_columns\noteparameter\c!n\relax
- \ifcase\c_strc_notes_columns
- \c_strc_notes_columns\plusone
- \fi}
-
-\def\strc_notes_set_location_page
- {\setfalse\c_strc_notes_delayed
- \strc_notes_set_distance
- \strc_notes_set_columns
- \page_inserts_set_location\currentnoteinsertion\v!page % \setupinsertion[\currentnote][\c!location=\v!page]%
- \global\count\currentnoteinsertionnumber\numexpr(\plusthousand/\c_strc_notes_columns)*\nofmulticolumns\relax
- \global\dimen\currentnoteinsertionnumber\ifnotelimit\dimexpr\noteparameter\c!height*\c_strc_notes_columns\relax\else\maxdimen\fi
- \global\skip \currentnoteinsertionnumber\s_strc_notes_distance}
-
-\def\strc_notes_set_location_columns
- {\setfalse\c_strc_notes_delayed
- \strc_notes_set_distance
- \strc_notes_set_columns
- \ifnum\currentnofcolumns=\zerocount
- \c_strc_notes_columns\plusone
- \fi
- \page_inserts_set_location\currentnoteinsertion\v!columns % \setupinsertion[\currentnote][\c!location=\v!columns]%
- \global\count\currentnoteinsertionnumber\numexpr\plusthousand/\c_strc_notes_columns\relax
- \global\dimen\currentnoteinsertionnumber\ifnotelimit\dimexpr\noteparameter\c!height*\c_strc_notes_columns\relax\else\maxdimen\fi
- \global\skip \currentnoteinsertionnumber\s_strc_notes_distance}
-
-\def\strc_notes_set_location_somecolumn#whatcolumn%
- {\setfalse\c_strc_notes_delayed
- \strc_notes_set_distance
- \strc_notes_set_columns
- \page_inserts_set_location\currentnoteinsertion#whatcolumn% \setupinsertion[\currentnote][\c!location=#whatcolumn]%
- \global\count\currentnoteinsertionnumber\plusthousand
- \global\dimen\currentnoteinsertionnumber\ifnotelimit\noteparameter\c!height\else\maxdimen\fi
- \global\skip \currentnoteinsertionnumber\s_strc_notes_distance}
-
-\def\strc_notes_set_location_firstcolumn{\strc_notes_set_location_somecolumn\v!firstcolumn}
-\def\strc_notes_set_location_lastcolumn {\strc_notes_set_location_somecolumn\v!lastcolumn }
-
-\def\strc_notes_set_location_text % we don't use inserts anyway (e.g. endnotes)
- {\settrue\c_strc_notes_delayed
- \clf_setnotestate{\currentnote}{store}%
- \page_inserts_set_location\currentnoteinsertion\v!text % \setupinsertion[\currentnote][\c!location=\v!text]%
- \global\count\currentnoteinsertionnumber\zerocount
- \global\dimen\currentnoteinsertionnumber\maxdimen
- \global\skip \currentnoteinsertionnumber\zeropoint}
-
-\let\strc_notes_set_location_none\strc_notes_set_location_text
-
-\def\strc_notes_set_properties
- {\strc_notes_set_columns
- \strc_notes_set_distance
- \strc_notes_set_location
- \strc_notes_set_delayed}
-
-\let\strc_notes_set_position_high\relax
-
-\def\strc_notes_set_position_bottom
- {\settrue\c_notes_bottom_present}
-
-\appendtoks
- \strc_notes_set_properties
-\to \everysynchronizenote
-
-%D A fast checker for bottom notes being used:
-
-\newconditional\c_notes_bottom_present
-
-\def\strc_notes_check_if_bottom_present_indeed % in otr !
- {\ifvoid\currentnoteinsertionnumber\else
- \strc_notes_set_position
- \fi}
-
-\def\strc_notes_check_if_bottom_present_step
- {\ifconditional\c_notes_bottom_present\else\strc_notes_check_if_bottom_present_indeed\fi}
-
-\def\strc_notes_check_if_bottom_present
- {\setfalse\c_notes_bottom_present
- \strc_notes_process\strc_notes_check_if_bottom_present_step}
-
-% Example of using factor:
-%
-% \definenote[mynote][way=bypage,location=text,width=\marginwidth,rule=,before=,factor=0]
-% \setuplayout[backspace=5cm,margin=3cm,margindistance=.5cm,width=middle]
-% \setuptexttexts[margin][\vbox to \textheight{\placenotes[mynote]\vfill}][]
-% \starttext
-% \dorecurse{10}{test \mynote{one one one one one one} \input zapf \mynote{one one one one one one} }
-% \stoptext
-
-%D The noterule can be a graphic and therefore calling this setup macro at every
-%D skipswitch is tricky (many many MP runs). Let's just reserve a few points, that
-%D probably match those of the stretch component. A bit messy:
-
-\permanent\protected\def\placenoterule
- {\begingroup
- \currentnoterulealign
- \currentnoterulecommand
- \par
- \endgroup}
-
-\permanent\protected\def\normalnoterule
- {\ifvmode
- \dontleavehmode \blackrule
- [\c!color=\noteparameter\c!rulecolor,
- \c!width=.2\hsize,
- \c!height=\noteparameter\c!rulethickness,
- \c!depth=\zeropoint]%
- \endgraf
- \kern\strutdepth
- \fi}
-
-%D The formatting depends on the width of the table, so we have to set \type {n} to
-%D zero.
-%D
-%D \starttyping
-%D \startbuffer
-%D \bTABLE
-%D \bTR \bTD one \footnote{\dorecurse{10}{abcd }} \eTD \bTD two \eTD \eTR
-%D \bTR \bTD three fout five six seven eight nine \eTD \bTD ten \eTD \eTR
-%D \eTABLE
-%D \stopbuffer
-%D
-%D \startlocalfootnotes[n=0,location={text,none}]
-%D \placelegend[n=2]{\getbuffer}{\placelocalfootnotes}
-%D \stoplocalfootnotes
-%D \stoptyping
-
-%D \macros
-%D {footnote}
-%D
-%D A footnote can have a reference as optional argument and therefore its formal
-%D specification looks like:
-%D
-%D \showsetup{footnote}
-%D
-%D This command has one optional command: the reference. By saying \type{[-]} the
-%D number is omitted. The footnote command is not that sensitive to spacing, so it's
-%D quite legal to say:
-%D
-%D \startbuffer
-%D Users of \CONTEXT\ must keep both feet \footnote {Given they have two.} on the
-%D ground and not get confused \footnote {Or even crazy.} by all those obscure
-%D \footnote {But fortunately readable.} parameters.
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D When setting the \type{conversion} to \type{set 2} we get
-%D something like:
-%D
-%D \bgroup
-%D \startnarrower
-%D \setupfootnotes[conversion=set 1]
-%D \getbuffer
-%D \stopnarrower
-%D \egroup
-%D
-%D Typesetting footnotes is, at least for the moment, disabled when reshaping boxes.
-%D The additional macro \type {\footnotetext} and the associated \type {\note} macro
-%D were implemented at request of users on the mailing list and a suggestion by taco
-%D to split of the symbol placement. I decided to merge this functionality with the
-%D existing \type {\note} functionality.
-
-\newconditional\c_strc_notes_symbol \settrue\c_strc_notes_symbol % not used
-\newconditional\c_strc_notes_skip
-
-\permanent\protected\def\setnote [#tag]{\csname#tag\endcsname}
-\permanent\protected\def\setnotetext[#tag]{\global\settrue\c_strc_notes_skip\csname#tag\endcsname}
-
-\permanent\protected\def\handlenoteinsert#tag#id%
- {\begingroup
- \edef\currentnote{#tag}%
- \strc_constructions_initialize{#tag}%
- \strc_notes_synchronize
- \the\everybeforenoteinsert
- \insert\currentnoteinsertionnumber\bgroup
- \the\everyinsidenoteinsert\relax
- \usesetupsparameter\noteparameter % experimental
- \useinterlinespaceparameter\noteparameter
- \doifelse{\noteparameter\c!paragraph}\v!yes
- {\nointerlineskip
- \startvboxtohboxseparator
- \noteparameter\c!inbetween
- \stopvboxtohboxseparator
- \startvboxtohbox
- \handlenoteitself{#tag}{#id}%
- \stopvboxtohbox}
- {\handlenoteitself{#tag}{#id}}%
- \egroup
- \the\everyafternoteinsert
- \endgroup}
-
-\permanent\protected\def\betweennoteitself#tag% used ?
- {\edef\currentnote{#tag}%
- \doif{\noteparameter\c!paragraph}\v!yes{\noteparameter\c!inbetween}}
-
-\permanent\protected\def\handlenoteitself#tag#id%
- {\edef\currentnotenumber{#id}%
- \edef\currentnote{#tag}%
- \strc_constructions_initialize{#tag}%
- \strc_notes_synchronize
- \edef\currentconstructionlistentry{\clf_notelistindex{\currentnote}#id}% index in list cache
- % as we can have collected notes (e.g. in tables) we need to recover
- % \currentdescriptionattribute and \currentdescriptionsynchronize
- %
- \reinstatecachedconstructionnumberentry\currentconstructionlistentry % we could store the number in the entry (e.g. needed when local notes in table)
- %
- \dontcomplain
- %begingroup
- \strc_notes_interaction_check_display
- \strc_notes_set_reference_attribute_text
- \strc_constructions_stored_start
- \begstrut
- \strc_references_flush_destination_nodes
- \strc_notes_set_destination_attribute_text
- \strc_notes_inject_text\relax
- \ifvmode\obeydepth\else\endstrut\fi % \obeydepth is new per 2015-01-10
- \strc_constructions_stored_stop
- %endgroup
- }
-
-\protected\def\strc_notes_inject_text % hm main?
- {\clf_savedlisttitle{\currentconstructionmain}\currentconstructionlistentry\relax}
-
-\let\startpushnote\relax
-\let\stoppushnote \relax
-
-\newsignal\d_strc_notes_signal
-
-\newconditional\processingnote
-\newconditional\postponednote
-
-\newtoks\everybeforenoteinsert
-\newtoks\everyinsidenoteinsert
-\newtoks\everyafternoteinsert
-
-\permanent\protected\def\doifelseinnote
- {\ifconditional\processingnote
- \expandafter\firstoftwoarguments
- \else
- \expandafter\secondoftwoarguments
- \fi}
-
-\appendtoks
- \enforced\let\flushnotes \relax
- \enforced\let\postponenotes\relax
- \forgetall
- \resetallattributes % new, we don't want color bleed into notes
- \inheritmaintextcolor % but we do want to obey the textcolor
-\to \everybeforenoteinsert
-
-\def\strc_notes_set_penalties
- {% stored in insert node
- \floatingpenalty \currentnotepenalty
- % used when typesetting
- \interlinepenalty\plushundred % plain value
- % used when we need to split in columns
- \ifnum\noteparameter\c!n>\plusone
- \penalty\zerocount % otherwise no split in columns, maybe just always (tex just adds it to accumulated)
- \fi}
-
-\appendtoks
- \strc_notes_set_penalties
- \forgetall % again
- \strc_notes_set_bodyfont
- \redoconvertfont % to undo \undo calls in in headings etc
- \splittopskip\strutht % not actually needed here
- \splitmaxdepth\strutdp % not actually needed here
- %
- % not:
- %
- % \leftmargindistance \noteparameter\c!margindistance
- % \rightmargindistance\leftmargindistance
- % \ifnum\noteparameter\c!n=\zerocount % no ifcase new 31-07-99 ; always ?
- % \doifnotinset{\noteparameter\c!width}{\v!fit,\v!broad}\setnotehsize % ?
- % \fi
- %
- \pickupattributes
-\to \everyinsidenoteinsert
-
-%D Nasty, the might be more:
-
-\appendtoks \strc_itemgroups_push \to \everybeforenoteinsert
-\appendtoks \strc_itemgroups_pop \to \everyafternoteinsert
-
-% maybe but better use [scope=local] here
-%
-% \appendtoks
-% \setfalse\inhibitmargindata
-% \to \everyinsidenoteinsert
-
-\setupnotes
- [\c!width=\v!auto]
-
-\permanent\protected\def\setnotehsize
- {\ifinsidemulticolumns
- \setnoteparameter\c!width{\makeupwidth}%
- \else
- \edef\p_width{\noteparameter\c!width}%
- \ifx\p_width\v!auto
- % \ifinsidecolumns
- \setnoteparameter\c!width{\ifdim\hsize<\makeupwidth\hsize\else\makeupwidth\fi}%
- % \else
- % \setnoteparameter\c!width{\makeupwidth}%
- % \fi
- \orelse\ifempty\p_width
- \setnoteparameter\c!width{\hsize}%
- \fi
- \fi
- \hsize\noteparameter\c!width\relax}
-
-\appendtoks
- % only needed when columns (could be three \set...)
- \setnotehsize
- \setsimplecolumnshsize[\c!distance=\noteparameter\c!columndistance,\c!n=\noteparameter\c!n,\c!width=\noteparameter\c!width]%
-\to \everyinsidenoteinsert
-
-%D Normally footnotes are saved as inserts that are called upon as soon as the
-%D pagebody is constructed. The footnote insertion routine looks just like the
-%D \PLAIN\ \TEX\ one, except that we check for the end note state.
-
-% testcase for split bottom alignment see (a) below
-%
-% \dorecurse{6}{\input tufte\footnote{\input ward \input tufte \relax}}
-
-\newconditional\c_strc_notes_first_placed
-
-\permanent\protected\def\placenoteinserts
- {\setfalse\c_strc_notes_first_placed
- \strc_notes_process\strc_notes_place_inserts}
-
-\def\strc_notes_place_inserts
- {\strc_notes_set_delayed % \strc_notes_synchronize % we need to know if it's delayed
- \ifconditional\c_strc_notes_delayed \else
- \ifdim\ht\currentnoteinsertionnumber>\zeropoint % or a faster delayed test
- \strc_notes_place_inserts_indeed
- \settrue\c_strc_notes_first_placed
- \fi
- \fi}
-
-\def\strc_notes_place_inserts_indeed
- {\relax
- \ifdim\ht\currentnoteinsertionnumber>\zeropoint
- \endgraf
- \ifvmode
- \whitespace
- \ifconditional\c_strc_notes_first_placed
- \edef\p_spaceinbetween{\noteparameter\c!spaceinbetween}%
- \ifempty\p_spaceinbetween\else
- \blank[\p_spaceinbetween]%
- \fi
- \else
- \edef\p_spacebefore{\noteparameter\c!spacebefore}%
- \ifempty\p_spacebefore\else
- \blank[\p_spacebefore]%
- \fi
- \fi
- \noteparameter\c!before
- \fi
- \placenoterule
- \bgroup
- \strc_notes_set_bodyfont
- \setbox\scratchbox\hbox
- {\strc_notes_flush_inserts}%
- \page_postprocessors_linenumbers_deepbox\scratchbox
- \setbox\scratchbox\hbox
- {\setupcurrentnote
- [\c!location=,
- \c!width=\v!fit,
- \c!height=\v!fit,
- \c!strut=\v!no,
- \c!offset=\v!overlay]%
- \inheritednoteframed
- {\ifzeropt\dp\scratchbox % this hack is needed because \vadjust
- \hpack{\lower\strutdp\box\scratchbox}% % in margin number placement
- \else % hides the (always) present depth
- \box\scratchbox
- \fi}}%
- \setbox\scratchbox\hpack{\lower\strutdepth\box\scratchbox}%
- \dp\scratchbox\strutdepth % so we know that it has the note bodyfont depth
- \ifvmode
- \nointerlineskip % else sometimes empty line
- \fi
- \box\scratchbox
- \egroup
- \endgraf
- \ifvmode
- \noteparameter\c!after
- \fi
- \fi}
-
-\def\strc_notes_flush_inserts
- {\ifcase\noteparameter\c!n\relax
- % should not happen
- \or
- \strc_notes_flush_inserts_normal
- \else
- \strc_notes_flush_inserts_columns
- \fi}
-
-\def\strc_notes_flush_inserts_normal
- {\strc_notes_flush_global
- \obeydepth} % (a) added , since split footnotes will not align properly
-
-\def\strc_notes_flush_inserts_columns
- {\begingroup
- \setnotehsize % probably still not ok for columns
- \startsimplecolumns[\c!distance=\noteparameter\c!columndistance,\c!n=\noteparameter\c!n,\c!width=\noteparameter\c!width]%
- \strc_notes_flush_global
- \stopsimplecolumns
- \endgroup}
-
-% idea: tag with attr and then just flush them again
-
-\def\strc_notes_flush_global
- {\begingroup
- \useinterlinespaceparameter\noteparameter
- \doifelse{\noteparameter\c!paragraph}\v!yes
- {\leftorrightvbox % cf mail from ws to list
- {\starthboxestohbox
- \iftrialtypesetting\unvcopy\else\unvbox\fi\currentnoteinsertionnumber
- \stophboxestohbox}}
- {\iftrialtypesetting\unvcopied\else\unvboxed\fi\currentnoteinsertionnumber}%
- \endgroup}
-
-%D Supporting end notes is surprisingly easy. Even better, we can combine this
-%D feature with solving the common \TEX\ problem of disappearing inserts when
-%D they're called for in deeply nested boxes. The general case looks like:
-%D
-%D \starttyping
-%D \postponenotes
-%D \.box{whatever we want with footnotes}
-%D \flushnotes
-%D \stoptyping
-%D
-%D This alternative can be used in headings, captions, tables etc. The latter one
-%D sometimes calls for notes local to the table, which can be realized by saying
-%D
-%D \starttyping
-%D \setlocalfootnotes
-%D some kind of table with local footnotes
-%D \placelocalfootnotes
-%D \stoptyping
-%D
-%D Postponing is accomplished by simply redefining the (local) insert operation. A
-%D not too robust method uses the \type{\insert} primitive when possible. This
-%D method fails in situations where it's not entirely clear in what mode \TEX\ is.
-%D Therefore the auto method can is to be overruled when needed.
-
-\newconditional\postponingnotes
-
-% we need a proper state: normal, postponing, flushing
-
-\permanent\protected\def\postponenotes % will be locally overloaded
- {\ifcase\insertionmigrationmode
- \ifconditional\postponingnotes\else
- \global\settrue\postponingnotes
- \enforced\glet\flushnotes\doflushnotes
- \clf_postponenotes
- \fi
- \fi}
-
-\let\flushnotes\relax
-
-% also \ifcase\insertionmigrationmode here, needs testing:
-
-\permanent\protected\def\startpostponingnotes % experimental, page-mix
- {\ifconditional\postponingnotes\else
- \global\settrue\postponingnotes
- %\glet\flushnotes\doflushnotes
- \clf_postponenotes
- \fi}
-
-\permanent\protected\def\stoppostponingnotes % experimental, page-mix
- {\doflushnotes}
-
-\permanent\protected\def\doflushnotes
- {\ifconditional\postponingnotes
- \begingroup
- \enforced\let\flushnotes \relax
- \enforced\let\postponenotes\relax
- \ifconditional\postponednote
- \ifhmode
- % needed for tagging ... otherwise we get some weird node free error
- \signalcharacter
- \fi
- \fi
- \clf_flushpostponednotes% this also resets the states !
- \global\setfalse\postponednote
- \global\setfalse\postponingnotes
- \enforced\glet\flushnotes\relax
- \endgroup
- \fi}
-
-%D \macros
-%D {startlocalfootnotes,placelocalfootnotes}
-%D
-%D The next two macros can be used in for instance tables, as we'll demonstrate
-%D later on.
-%D
-%D \showsetup{startlocalfootnotes}
-%D \showsetup{placelocalfootnotes}
-
-% todo: compatibility mode: when first arg is assignment or missing, then all
-
-\newtoks\everyplacelocalnotes
-
-\appendtoks
- \enforced\let\flushnotes \relax
- \enforced\let\postponenotes\relax
-\to \everyplacelocalnotes
-
-\newconditional\inlocalnotes
-
-\permanent\tolerant\protected\def\startlocalnotes[#list]% grouping ? (we used to have a second argument ... settings)
- {\def\localnoteslist{#list}%
- \settrue\inlocalnotes
- \processcommacommand[\localnoteslist]\strc_notes_local_start_step}
-
-\permanent\protected\def\stoplocalnotes
- {\processcommacommand[\localnoteslist]\strc_notes_local_stop_step
- \setfalse\inlocalnotes}
-
-\let\p_strc_notes_continue\empty
-
-\def\strc_notes_local_start_step#tag%
- {\p_strc_notes_continue{\noteparameter\c!continue}%
- \ifx\p_strc_notes_continue\v!yes \else
- \strc_counters_save{#tag}%
- \strc_counters_reset{#tag}%
- \fi
- \clf_savenote{#tag}{store}}
-
-\def\strc_notes_local_stop_step#tag%
- {\p_strc_notes_continue{\noteparameter\c!continue}%
- \ifx\p_strc_notes_continue\v!yes \else
- \strc_counters_restore{#tag}%
- \fi
- \clf_restorenote{#tag}}
-
-\permanent\tolerant\protected\def\placelocalnotes[#tag]#spacer[#settings]%
- {\doif{\clf_getnotestate{#tag}}{store}{\strc_notes_local_place_indeed{#settings}{#tag}}}
-
-\def\strc_notes_local_place_indeed#settings#tag%
- {\begingroup
- \edef\currentnote{#tag}% is already set?
- \the\everyplacelocalnotes
- % beware, we cannot trust setting \currentnote here
- \setupcurrentnote[#settings]% later we set height etc for framed
- \strc_notes_place_local_alternative
- \strc_notes_set_properties % restore globals (if needed)
- \endgroup
- }% TODO: just restore properties \the\everychecknote} % we need to restore the old state
-
-%D These commands can be used like:
-%D
-%D \startbuffer
-%D \startlocalnotes[footnote]
-%D \placetable
-%D {Some Table}
-%D \placeontopofeachother
-%D {\starttable[|l|r|]
-%D \HL
-%D \VL Nota\footnote{Bene} \VL Bene\footnote{Nota} \VL\SR
-%D \VL Bene\footnote{Nota} \VL Nota\footnote{Bene} \VL\SR
-%D \HL
-%D \stoptable}
-%D {\setupnotation[footnote][alternative={serried},distance=.5em,after=\hskip1em]%
-%D \placelocalnotes[footnote]}
-%D \stoplocalnotes
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D Because this table placement macro expect box content, and thanks to the grouping
-%D of the local footnotes, we don't need additional braces.
-%D
-%D \getbuffer
-
-%D \macros
-%D {placefootnotes}
-%D
-%D We still have no decent command for placing footnotes somewhere else than at the
-%D bottom of the page (for which no user action is needed). Footnotes (endnotes) can
-%D be placed by using
-%D
-%D \showsetup{placefootnotes}
-
-\permanent\protected\def\placebottomnotes
- {\strc_notes_process\strc_notes_place_inserts}
-
-\permanent\tolerant\protected\def\placenotes[#list]#spacer[#settings]%
- {\processcommalist[#list]{\strc_notes_place_indeed{#settings}}}
-
-\def\strc_notes_place_indeed#settings#tag% settings note
- {\edef\currentnote{#tag}% grouping ?
- \doifelse{\clf_getnotestate{#tag}}{store}
- \strc_notes_local_place_indeed
- \strc_notes_global_place_indeed
- {#settings}{#tag}}
-
-\def\strc_notes_global_place_indeed#settings#tag%
- {\begingroup
- \setupnote[#tag][#settings]%
- \strc_notes_place_inserts
- \endgroup
- \the\everysetupnote} % to be checked .. synchronize
-
-%D Placement
-
-\installcorenamespace{notealternative}
-
-\permanent\protected\def\installnotealternative#alternative#command%
- {\setvalue{\??notealternative#alternative}{#command}}
-
-\permanent\protected\def\doifnotescollected#tag%
- {\clf_doifnotecontent{#tag}}
-
-\def\strc_notes_place_local_alternative % will be a setup (wrapper)
- {\doifnotescollected\currentnote
- {\endgraf
- \ifvmode
- \whitespace
- \noteparameter\c!before
- \fi
- \begingroup
- \strc_notes_set_bodyfont
- \csname\??notealternative\noteparameter\c!alternative\endcsname
- \endgroup
- \ifvmode
- \noteparameter\c!after
- \fi}}
-
-%D A stupid alternative is also provided:
-%D
-%D \starttyping
-%D \setupfootnotes[location=text,alternative=none]
-%D \stoptyping
-
-% setups ?
-
-\permanent\def\flushlocalnotes#tag{\clf_flushnotes{#tag}{store}{\noteparameter\c!criterium}}
-
-\installnotealternative \v!none
- {\flushlocalnotes\currentnote}
-
-\installnotealternative \empty
- {\flushlocalnotes\currentnote}
-
-\installnotealternative \v!grid % test if n > 0
- {\begingroup
- \setupcurrentnote[\c!location=]%
- \snaptogrid\hbox
- {\inheritednoteframed
- {\flushlocalnotes\currentnote}}%
- \endgroup}
-
-\installnotealternative \v!fixed % test if n > 0
- {\begingroup
- \setupcurrentnote[\c!location=]%
- \inheritednoteframed
- {\flushlocalnotes\currentnote}%
- \endgroup}
-
-\installnotealternative \v!columns % redundant
- {\begingroup
- \setupcurrentnote[\c!location=]%
- \inheritednoteframed
- {\edef\currentnotewidth{\noteparameter\c!width}%
- \doifelsedimension\currentnotewidth\donothing
- {\edef\currentnotewidth{\the\hsize}}%
- \startsimplecolumns[\c!distance=\noteparameter\c!columndistance,\c!n=\noteparameter\c!n,\c!width=\currentnotewidth]%
- \flushlocalnotes\currentnote
- \stopsimplecolumns}%
- \endgroup}
-
-% 0:page 1:firstcolumn 2:lastcolumn
-
-\newconstant\c_strc_notes_page_location
-
-\protected\def\strc_notes_check_locations
- {\edef\p_strc_notes_location{\rootnoteparameter\c!location}%
- \c_strc_notes_page_location
- \ifx\p_strc_notes_location\v!firstcolumn\plusone \else
- \ifx\p_strc_notes_location\v!lastcolumn \plustwo \else
- \zerocount\fi\fi}
-
-\appendtoks
- \strc_notes_check_locations
-\to \everysynchronizenote
-
-% still semi public (but will change)
-
-\newif\ifnotespresent
-
-\permanent\protected\def\checknotepresence
- {\notespresentfalse
- \strc_notes_process\strc_notes_check_presence}
-
-\def\strc_notes_check_presence
- {\ifdim\ht\currentnoteinsertionnumber>\zeropoint
- \notespresenttrue
- \fi}
-
-%D \macros
-%D {fakenotes}
-
- % used in page-mul
-
- \ifdefined\currentnofcolumns\else \def\currentnofcolumns{\nofcolumns} \fi
-
- \protected\def\fakenotes
- {\ifhmode\endgraf\fi\ifvmode
- \calculatetotalclevernoteheight
- \ifdim\totalnoteheight>\zeropoint \kern\totalnoteheight \fi
- \fi}
-
- \protected\def\fakepagenotes
- {\ifhmode\endgraf\fi\ifvmode
- \calculatetotalpagenoteheight
- \ifdim\totalnoteheight>\zeropoint \kern\totalnoteheight \fi
- \fi}
-
- % used in page-not but not yet ok
-
- \newdimen\totalnoteheight
-
- \protected\def\additionaltotalnoteheight#insert% temp hacks anyway
- {\dimexpr
- \ifdim\ht#insert>\zeropoint
- \ifcase\count#insert %
- \zeropoint
- \else % todo: divide by count
- \ht#insert+\skip#insert% hm, no stretch but a dimen anyway
- \fi
- \else
- \zeropoint
- \fi
- \relax}
-
- \def\docalculatetotalnoteheight
- {\ifcase\c_strc_notes_page_location % tricky here ! ! ! to be sorted out ! ! !
- \advance\totalnoteheight\normalexpanded{\additionaltotalnoteheight\currentnoteinsertionnumber}%
- \fi}
-
- \def\docalculatetotalclevernoteheight
- {\ifcase\c_strc_notes_page_location \else % tricky here ! ! ! to be sorted out ! ! !
- \advance\totalnoteheight\normalexpanded{\additionaltotalnoteheight\currentnoteinsertionnumber}%
- \fi}
-
- \def\docalculatetotalpagenoteheight
- {\advance\totalnoteheight\normalexpanded{\additionaltotalnoteheight\currentnoteinsertionnumber}}
-
- \def\calculatetotalnoteheight {\totalnoteheight\zeropoint\strc_notes_process\docalculatetotalnoteheight}
- \def\calculatetotalclevernoteheight{\totalnoteheight\zeropoint\strc_notes_process\docalculatetotalclevernoteheight}
- \def\calculatetotalpagenoteheight {\totalnoteheight\zeropoint\strc_notes_process\docalculatetotalpagenoteheight}
-
-%D Now how can this mechanism be hooked into \CONTEXT\ without explictly postponing
-%D footnotes? The solution turned out to be rather simple:
-%D
-%D \starttyping
-%D \everypar {...\flushnotes...}
-%D \neverypar {...\postponenotes}
-%D \stoptyping
-%D
-%D We can use \type {\neverypar} because in most commands sensitive to footnote
-%D gobbling we disable \type {\everypar} in favor for \type {\neverypar}. In fact,
-%D this footnote implementation is the first to use this scheme.
-
-%D This is a nasty and new secondary footnote flusher. It can be hooked into \type
-%D {\everypar} like:
-%D
-%D \starttyping
-%D \appendtoks \synchronizenotes \to \everypar
-%D \stoptyping
-
-\let\synchronizenotes\relax
-
-%D When typesetting footnotes, we have to return to the footnote specific bodyfont
-%D size, which is in most cases derived from the global document bodyfont size. In
-%D the previous macros we already used a footnote specific font setting macro.
-
-\def\strc_notes_set_bodyfont
- {\let\strc_notes_set_bodyfont\relax
- \restoreglobalbodyfont
- \usebodyfontparameter\noteparameter
- \usealignparameter\noteparameter}
-
-%D The footnote mechanism defaults to a traditional one column way of showing them.
-%D By default we precede them by a small line.
-
-% end notes in the margin:
-%
-% \setuptexttexts
-% [margin]
-% [] [{\directsetup{notabene}}]
-%
-% \startsetups notabene
-% \vbox to \textheight \bgroup
-% \setupalign[tolerant]
-% \topskipcorrection
-% \placenotes[endnote][before=,after=]
-% \vfilll
-% \egroup
-% \stopsetups
-
-\definenote [\v!footnote]
-\definenote [\v!endnote ] [\c!location=\v!none] % else no break
-
-%D Compatibility macros:
-
-\permanent\protected\def\setupfootnotedefinition{\setupnotation [\v!footnote]}
-\permanent\protected\def\setupfootnotes {\setupnote [\v!footnote]}
-\permanent \def\footnotetext {\setnotetext [\v!footnote]}
-\permanent\protected\def\placefootnotes {\strc_notes_place_footnotes [\v!footnote]}
-\permanent\protected\def\placelocalfootnotes {\strc_notes_place_local_footnotes[\v!footnote]}
-\permanent\protected\def\startlocalfootnotes {\startlocalnotes [\v!footnote]} % alleen footnote
-\permanent\protected\def\stoplocalfootnotes {\stoplocalnotes }
-
-\tolerant\def\strc_notes_place_footnotes[#list]#spacer[#settings]%
- {\ifarguments\or
- \placenotes[#list][\c!height=\textheight]%
- \or
- \placenotes[#list][#settings,\c!height=\textheight]%
- \fi}
-
-\tolerant\def\strc_notes_place_local_footnotes[#list]#spacer[#settings]%
- {\ifarguments\or
- \placelocalnotes[#list][\c!height=\textheight]%
- \or
- \placelocalnotes[#list][#settings,\c!height=\textheight]%
- \fi}
-
-%D Goodies:
-%D
-%D \starttyping
-%D \dorecurse {100} {
-%D test \footnote{\doifnoteonsamepageelse[footnote]{ibidem}{aaa}}
-%D }
-%D \stoptyping
-
-\permanent\def\doifelsenoteonsamepage#tag{\clf_doifnoteonsamepageasprevious{#tag}}
-
-\aliased\let\doifnoteonsamepageelse\doifelsenoteonsamepage
-
-%D New trickery:
-
-%D \macros
-%D {note}
-%D
-%D Refering to a note is accomplished by the rather short command:
-%D
-%D \showsetup{note}
-%D
-%D This command is implemented rather straightforward as:
-
-\installcorenamespace{notesymbol}
-
-\let\lastnotesymbol\relax % todo: per class
-
-\permanent\tolerant\protected\def\notesymbol[#tag]#spacer[#reference]%
- {\ifnotesenabled
- \dontleavehmode
- \begingroup
- \edef\currentnote{#tag}%
- \usenotestyleandcolor\c!textstyle\c!textcolor
- \iftok{#reference}\emptytoks
- \noteparameter\c!textcommand\lastnotesymbol % check if command double
- \else
- \unskip
- \noteparameter\c!textcommand{\in[#reference]}% command here?
- \fi
- \endgroup
- \fi}
-
-\permanent\tolerant\protected\def\note[#tag]#spacer[#reference]%
- {\iftok{#reference}\emptytoks
- \notesymbol[\v!footnote][#tag]%
- \else
- \notesymbol[#tag][#reference]%
- \fi}
-
-% will be redone if needed
-%
-% \def\ownnotesymbol#1% #1 gets number passed
-% {\executeifdefined{\??notesymbol\currentnote}\empty}
-%
-% \protected\def\setnotesymbol[#1]#2#3%
-% {\prewordbreak % prevent lookback
-% \setgvalue{\??notesymbol#1}{#3}
-% \strc_notes_inject_symbol}
-%
-% \protected\def\ownnote[#1]#2#3#4%
-% {\setnotesymbol[#1]{#2}{#3}%
-% \setnotetext [#1]{#4}}
-%
-% \defineconversion
-% [ownnote]
-% [\ownnotesymbol]
-
-% tricky:
-%
-% \enabletrackers[nodes.areas]
-% \enabletrackers[nodes.references]
-% \enabletrackers[nodes.destinations]
-%
-% \setupnotes[interaction=all,rule=no]
-% \setupinteraction[state=start,focus=standard]
-%
-% \starttext
-% \goto{\input tufte\relax}[page(2)] \par
-% \ruledhbox{\gotobox{\vtop{\input tufte\relax}}[page(2)]} \par
-% \ruledhbox{\gotobox{\vbox{\input tufte\relax}}[page(2)]} \par
-% % \completecontent
-% % \chapter{Chapter}
-% % \dorecurse{5}{\input knuth}
-% a\footnote{\input tufte\par\input ward\relax}
-% \stoptext
-
-%D Bonus:
-
-\appendtoks
- \setsystemmode\currentnote
-\to \everysynchronizenote
-
-\protect \endinput