summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/symb-ini.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkiv/symb-ini.mkiv')
-rw-r--r--tex/context/base/mkiv/symb-ini.mkiv62
1 files changed, 58 insertions, 4 deletions
diff --git a/tex/context/base/mkiv/symb-ini.mkiv b/tex/context/base/mkiv/symb-ini.mkiv
index e4950e09d..ae1a2a711 100644
--- a/tex/context/base/mkiv/symb-ini.mkiv
+++ b/tex/context/base/mkiv/symb-ini.mkiv
@@ -45,6 +45,7 @@
\installcorenamespace{symbol}
\installcorenamespace{symbolset}
+\installcorenamespace{symboldefault}
\let\currentsymbol \empty
\let\currentsymbolset\empty
@@ -95,8 +96,9 @@
% Test test \symbol[whatever]\ test \symbol[whatever].
% Test test \symbol{whatever} test \symbol{whatever}.
-\unexpanded\def\symbol % This one always gobbles spaces,
- {\dodoubleempty\symb_place} % so never change it again!
+\unexpanded\def\symbol
+ {\dontleavehmode % so we can start a paragraph with it
+ \dodoubleempty\symb_place}
\def\symb_place % so we also handle \symbol{name}
{\iffirstargument % which is nicer with following spaces
@@ -160,11 +162,47 @@
\expandafter\symb_fetch_indeed
\fi}
+% \def\symb_fetch_indeed#1%
+% {\ifcsname\??symbol#1:\currentsymbol\endcsname
+% \symb_place_indeed{#1:\currentsymbol}%
+% \fi}
+
\def\symb_fetch_indeed#1%
{\ifcsname\??symbol#1:\currentsymbol\endcsname
\symb_place_indeed{#1:\currentsymbol}%
+ \else\ifcsname\??symboldefault#1\endcsname
+ \symb_place_named{#1}%
+ \fi\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
+ \setxvalue{\??symbol#1:\currentsymbol}%
+ {\symb_place_named_indeed{#1}{\currentsymbol}}%
+ \settrue\c_symb_found
+ \else
+ \endgroup
\fi}
+\unexpanded\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}%
@@ -273,9 +311,25 @@
\installcorenamespace{symbolsets}
-\unexpanded\def\startsymbolset[#1]%
+% \unexpanded\def\startsymbolset[#1]%
+% {\pushmacro\m_symb_current_set
+% \def\m_symb_current_set{#1}}
+
+% maybe a parameterhandler:
+
+\unexpanded\def\startsymbolset
+ {\dodoubleargument\symb_start_set}
+
+\def\symb_start_set[#1][#2]%
{\pushmacro\m_symb_current_set
- \def\m_symb_current_set{#1}}
+ \def\m_symb_current_set{#1}%
+ \ifsecondargument
+ \getdummyparameters[\s!font=,#2]%
+ \edef\p_font{\dummyparameter\s!font}%
+ \ifx\p_font\empty\else
+ \letvalue{\??symboldefault#1}\p_font
+ \fi
+ \fi}
\unexpanded\def\stopsymbolset
{\popmacro\m_symb_current_set}