summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/mkxl/symb-ini.mkxl
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkxl/symb-ini.mkxl')
-rw-r--r--Master/texmf-dist/tex/context/base/mkxl/symb-ini.mkxl340
1 files changed, 340 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkxl/symb-ini.mkxl b/Master/texmf-dist/tex/context/base/mkxl/symb-ini.mkxl
new file mode 100644
index 00000000000..c29b073606d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkxl/symb-ini.mkxl
@@ -0,0 +1,340 @@
+%D \module
+%D [ file=symb-ini,
+%D version=1998.07.20,
+%D title=\CONTEXT\ Symbol Libraries,
+%D subtitle=Basic Symbols Commands,
+%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.
+
+%D The macros described here used to be part of the \type {core-con} module. I
+%D decided to move them here when symbolsets saw the light. Let their light shine.
+
+\writestatus{loading}{ConTeXt Symbol Libraries / Initialization}
+
+\registerctxluafile{symb-ini}{autosuffix}
+
+\unprotect
+
+%D \macros
+%D {definesymbol, symbol}
+%D
+%D Converting numbers or levels into a character, romannumeral, symbol or something
+%D else, is supported by many \CONTEXT\ commands. Therefore we need a mechanism for
+%D linking such numbers to their counterparts.
+%D
+%D First we take care of symbols. These are for instance used in enumerations and
+%D itemizations. We have:
+%D
+%D \showsetup{definesymbol}
+%D \showsetup{symbol}
+%D
+%D Symbols are simply linked to a tag. Such tags can be numbers or strings.
+%D
+%D \starttyping
+%D \definesymbol [1] [$\bullet$]
+%D \definesymbol [level 5] [$\star$]
+%D \stoptyping
+
+\installcorenamespace{symbol}
+\installcorenamespace{symbols}
+\installcorenamespace{symbolset}
+\installcorenamespace{symboldefault}
+
+%D For now we only have one option.
+
+\installparameterhandler\??symbols {symbols}
+\installsetuphandler \??symbols {symbols}
+
+\appendtoks
+ \doifelse{\symbolsparameter\c!stylealternative}\v!math
+ \settrue\setfalse\prefermathovertextchar
+\to \everysetupsymbols
+
+\setupsymbols
+ [\c!stylealternative=\v!text]
+
+\mutable\let\currentsymbol \empty
+\mutable\let\currentsymbolset\empty
+
+\newtoks\t_symb_setups
+
+\let\m_symb_current_set\empty
+
+\newconditional\c_symb_found
+
+\newtoks\everysymbol
+
+%D We don't use the commandhandler as symbols have their own subsystem for resolving
+%D values.
+
+\permanent\tolerant\protected\def\definesymbol[#1]#*[#2]#*[#3]%
+ {\ifparameter#3\or
+ \defcsname\??symbol#1:#2\endcsname{#3}%
+ \doifsomething{#1}{\addvalue{\??symbolset#1}{#2}}%
+ \else
+ \defcsname\??symbol\m_symb_current_set:#1\endcsname{#2}%
+ \addvalue{\??symbolset\m_symb_current_set}{#1}%
+ \fi}
+
+\permanent\protected\def\doifelseinsymbolset#1#2{\ifcsname\??symbol#1:#2\endcsname\expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments\fi}
+\permanent\protected\def\doifinsymbolset #1#2{\ifcsname\??symbol#1:#2\endcsname\expandafter\firstofoneargument \else\expandafter\gobbleoneargument \fi}
+\permanent\protected\def\doifelsesymbolset #1{\ifcsname\??symbolset#1\endcsname\expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments\fi}
+
+\aliased\let\doifinsymbolsetelse\doifelseinsymbolset
+\aliased\let\doifsymbolsetelse \doifelsesymbolset
+
+\letvalue{\??symbolset}\empty
+
+%def\symbolset#1{\csname\??symbolset\ifcsname\??symbolset#1\endcsname#1\fi\endcsname} % no [#1], to be used in commalists etc
+
+\permanent\def\symbolset#1{\begincsname\??symbolset#1\endcsname} % no [#1], to be used in commalists etc
+
+%D Since symbols are used frequently in interactive documents, we speed up this one.
+%D Well, that was history, since now we simplified things a bit, because the low
+%D level macros have been sped up every now and then.
+
+% We support both:
+%
+% Test test \symbol[whatever]\ test \symbol[whatever].
+% Test test \symbol{whatever} test \symbol{whatever}.
+
+\permanent\tolerant\protected\def\symbol[#1]#*[#2]%
+ {\ifarguments
+ \expandafter\symb_place_argument
+ \or
+ \symb_place_argument{#1}%
+ \or
+ \dontleavehmode
+ \edef\currentsymbol{#2}%
+ \ifcsname\??symbol#1:#2\endcsname
+ \symb_place_indeed{#1:#2}% maybe use \lastnamescs
+ \orelse\ifcsname\??symboldefault#1\endcsname
+ \symb_place_named{#1}% maybe use \lastnamescs
+ \else
+ \symb_place_normal
+ \fi
+ \fi}
+
+\def\symb_place_argument#1%
+ {\dontleavehmode
+ \edef\currentsymbol{#1}%
+ \ifcsname\??symbol\currentsymbolset:#1\endcsname
+ \symb_place_indeed{\currentsymbolset:#1}%
+ \else
+ \symb_place_normal
+ \fi}
+
+\def\symb_place_normal
+ {\setfalse\c_symb_found
+ \the\t_symb_setups
+ \ifconditional\c_symb_found \else
+ \symb_place_retry\currentsymbol % hm, isn't this redundant?
+ \fi}
+
+\def\symb_place_indeed#1% \relax's prevent lookahead problems
+ {\settrue\c_symb_found
+ \begingroup
+ \the\everysymbol
+ \csname\??symbol#1\endcsname\relax
+ \endgroup}
+
+\letvalue{\??symbol}\firstofoneargument
+
+\permanent\def\directsymbol#1#2% no \relax, there can be an argument, see lists
+ {\begincsname\??symbol#1:#2\endcsname}
+
+\protected\def\symb_fetch
+ {\ifconditional\c_symb_found
+ \expandafter\gobbleoneargument
+ \else
+ \expandafter\symb_fetch_indeed
+ \fi}
+
+\def\symb_fetch_indeed#1%
+ {\ifcsname\??symbol#1:\currentsymbol\endcsname
+ \symb_place_indeed{#1:\currentsymbol}%
+ \orelse\ifcsname\??symboldefault#1\endcsname
+ \symb_place_named{#1}%
+ \fi}
+
+\def\symb_place_named#1% \relax's prevent lookahead problems
+ {\begingroup
+ \setbox\scratchbox\hbox\bgroup
+ \the\everysymbol
+ \getglyphstyled
+ {\csname\??symboldefault#1\endcsname}%
+ {\tochar{n:\currentsymbol}}%
+ \relax
+ \egroup
+ \ifdim\wd\scratchbox>\zeropoint
+ \unhbox\scratchbox
+ \endgroup
+ \xdefcsname\??symbol#1:\currentsymbol\endcsname{\symb_place_named_indeed{#1}{\currentsymbol}}%
+ \settrue\c_symb_found
+ \else
+ \endgroup
+ \fi}
+
+\protected\def\symb_place_named_indeed#1#2% \relax's prevent lookahead problems
+ {\settrue\c_symb_found
+ \begingroup
+ \the\everysymbol
+ \getglyphstyled
+ {\csname\??symboldefault#1\endcsname}%
+ {\tochar{n:#2}}%
+ \relax
+ \endgroup}
+
+\def\symb_place_retry#1%
+ {\ifcsname\??symbol:#1\endcsname
+ \symb_place_indeed{:#1}%
+ \else
+ #1%
+ \fi}
+
+%D \macros
+%D {definefiguresymbol}
+%D
+%D To simplify defining figure symbols, we offer:
+%D
+%D \showsetup{definefiguresymbol}
+%D
+%D By default, such symbols scale along the current bodyfont size or running font
+%D size (which is better).
+
+\ifdefined\externalfigure \else \def\externalfigure[#1][#2]{#1} \fi
+
+\mutable\def\defaultsymbolfactor{10}
+\mutable\def\defaultsymbolheight{1.25ex}
+
+\permanent\tolerant\protected\def\figuresymbol[#1]#*[#2]%
+ {\externalfigure[#1][\c!reset=\v!yes,\c!symbol=\v!yes,\c!height=\defaultsymbolheight,#2]}
+
+\permanent\tolerant\protected\def\definefiguresymbol[#1]#*[#2]#*[#3]%
+ {\ifarguments\or\else
+ \definesymbol[#1][{\figuresymbol[#2][#3]}]%
+ \fi}
+
+%D \macros
+%D {doifsymboldefinedelse}
+%D
+%D A handy private one:
+
+\def\symb_fetch_first
+ {\ifconditional\c_symb_found
+ \expandafter\gobbleoneargument
+ \else
+ \expandafter\symb_fetch_first_indeed
+ \fi}
+
+\def\symb_fetch_first_indeed#1%
+ {\doifinsymbolset{#1}\currentsymbol{\settrue\c_symb_found}}
+
+\def\symb_fetch_second#1%
+ {\doifinsymbolset\empty\currentsymbol{\settrue\c_symb_found}}
+
+\permanent\protected\def\doifelsesymboldefined#1%
+ {\begingroup
+ \edef\currentsymbol{#1}%
+ \let\symb_fetch\symb_fetch_first
+ \setfalse\c_symb_found
+ \the\t_symb_setups
+ \ifconditional\c_symb_found
+ \endgroup\expandafter\firstoftwoarguments
+ \else
+ \symb_fetch_second\currentsymbol
+ \ifconditional\c_symb_found
+ \endgroup\doubleexpandafter\firstoftwoarguments
+ \else
+ \endgroup\doubleexpandafter\secondoftwoarguments
+ \fi
+ \fi}
+
+\aliased\let\doifsymboldefinedelse\doifelsesymboldefined
+
+%D \macros
+%D {setupsymbolset,startsymbolset}
+%D
+%D From these macro definitions one can deduce that symbols can be grouped in
+%D symbol sets:
+%D
+%D \starttyping
+%D \startsymbolset [navigation 1]
+%D \definefiguresymbol [Next] [mp-symb.1]
+%D \definefiguresymbol [Prev] [mp-symb.2]
+%D \stopsymbolset
+%D \stoptyping
+%D
+%D Such a symbol can be typeset with:
+%D
+%D \starttyping
+%D \setupsymbolset[navigation 1]\symbol[Next]
+%D \stoptyping
+%D
+%D or simply:
+%D
+%D \starttyping
+%D \symbol[navigation 1][Next]
+%D \stoptyping
+%D
+%D Formally:
+%D
+%D \showsetup{setupsymbolset}
+%D \showsetup{startsymbolset}
+
+\installcorenamespace{symbolsets}
+
+\permanent\tolerant\protected\def\startsymbolset[#1]#*[#2]%
+ {\pushmacro\m_symb_current_set
+ \def\m_symb_current_set{#1}%
+ \ifarguments\or\or
+ \getdummyparameters[\s!font=,#2]%
+ \edef\p_font{\dummyparameter\s!font}%
+ \ifempty\p_font\else
+ \letcsname\??symboldefault#1\endcsname\p_font
+ \fi
+ \fi}
+
+\permanent\protected\def\stopsymbolset
+ {\popmacro\m_symb_current_set}
+
+\permanent\protected\def\setupsymbolset[#1]%
+ {\edef\currentsymbolset{#1}%
+ \ifcsname\??symbolsets\currentsymbolset\endcsname \else
+ \symb_setup_symbol_set
+ \fi}
+
+\def\symb_setup_symbol_set
+ {\normalexpanded{\t_symb_setups{\symb_fetch{\currentsymbolset}\the\t_symb_setups}}%
+ \letcsname\??symbolsets\currentsymbolset\endcsname\empty} % speedup
+
+\permanent\protected\def\resetsymbolset
+ {\t_symb_setups\emptytoks}
+
+\permanent\protected\def\forcesymbolset[#1]% still needed? why not just usesymbolset
+ {\normalexpanded{\t_symb_setups{\symb_fetch{#1}}}}
+
+%D \macros
+%D {showsymbolset}
+%D
+%D \showsetup{showsymbolset}
+
+\fetchmodulecommand \showsymbolset \f!symb_run
+
+%D \macros
+%D {usesymbols}
+%D
+%D \showsetup{usesymbols}
+
+\permanent\protected\def\usesymbols[#1]{\clf_usesymbols{#1}}
+
+%D As longs as symbols are linked to levels or numbers, we can also use the
+%D conversion mechanism, but in for instance the itemization macros, we prefer
+%D symbols because they can more easier be (partially) redefined.
+
+\protect \endinput