summaryrefslogtreecommitdiff
path: root/tex/context/base/math-fen.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/math-fen.mkiv')
-rw-r--r--tex/context/base/math-fen.mkiv132
1 files changed, 113 insertions, 19 deletions
diff --git a/tex/context/base/math-fen.mkiv b/tex/context/base/math-fen.mkiv
index 640821bad..45f628862 100644
--- a/tex/context/base/math-fen.mkiv
+++ b/tex/context/base/math-fen.mkiv
@@ -11,8 +11,6 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-% 0x -> "
-
\writestatus{loading}{ConTeXt Math Macros / Fences}
\unprotect
@@ -40,9 +38,9 @@
\let\setupmathfences\setupmathfence
\setupmathfences
- [\c!left=0x2E,
- \c!right=0x2E,
- \c!middle=0x2E,
+ [\c!left=,
+ \c!right=,
+ \c!middle=,
\c!mathstyle=,
\c!color=,
\c!command=]
@@ -54,13 +52,22 @@
\fi
\to \everydefinemathfence
-% no Uchar here:
-
-\def\math_fenced_left {\math_fenced_color_push\normalleft \utfchar{\mathfenceparameter\c!left }\math_fenced_color_pop}
-\def\math_fenced_middle{\mskip\thinmuskip
- \math_fenced_color_push\normalmiddle\utfchar{\mathfenceparameter\c!middle}\math_fenced_color_pop
+% we need the direct use of \Udelimiter because of { etc
+
+\def\math_fenced_left {\edef\p_left{\mathfenceparameter\c!left}%
+ \math_fenced_color_push
+ \normalleft\ifx\p_left\empty.\else\Udelimiter\plusfour\fam\p_left\fi
+ \math_fenced_color_pop}
+\def\math_fenced_middle{\edef\p_middle{\mathfenceparameter\c!middle}%
+ \mskip\thinmuskip
+ \math_fenced_color_push
+ \normalmiddle\ifx\p_middle\empty.\else\Udelimiter\plusfour\fam\p_middle\fi
+ \math_fenced_color_pop
\mskip\thinmuskip}
-\def\math_fenced_right {\math_fenced_color_push\normalright \utfchar{\mathfenceparameter\c!right }\math_fenced_color_pop}
+\def\math_fenced_right {\edef\p_right{\mathfenceparameter\c!right}%
+ \math_fenced_color_push
+ \normalright\ifx\p_right\empty.\else\Udelimiter\plusfive\fam\p_right\fi
+ \math_fenced_color_pop}
\def\math_fenced_color_do_push{\pushcolor[\p_math_fenced_color]}
\let\math_fenced_color_do_pop \popcolor
@@ -68,7 +75,7 @@
\let\fence \relax
\let\fenced\relax
-\unexpanded\def\math_fenced_fenced[#1]#2%
+\unexpanded\def\math_fenced_fenced_start#1%
{\begingroup
\edef\currentmathfence{#1}%
\startusemathstyleparameter\mathfenceparameter
@@ -81,7 +88,16 @@
\let\math_fenced_color_push\math_fenced_color_do_push
\let\math_fenced_color_pop \math_fenced_color_do_pop
\fi
- \math_fenced_left
+ \math_fenced_left}
+
+\unexpanded\def\math_fenced_fenced_stop#1%
+ {\edef\currentmathfence{#1}%
+ \math_fenced_right
+ \stopusemathstyleparameter
+ \endgroup}
+
+\unexpanded\def\math_fenced_fenced[#1]#2%
+ {\math_fenced_fenced_start{#1}%
#2%
\math_fenced_right
\stopusemathstyleparameter
@@ -91,12 +107,90 @@
\let\fenced\math_fenced_fenced
\to \everymathematics
-\definemathfence [parenthesis] [\c!left=0x0028,\c!right=0x0029]
-\definemathfence [bracket] [\c!left=0x005B,\c!right=0x005D]
-\definemathfence [braces] [\c!left=0x007B,\c!right=0x007D]
-\definemathfence [bar] [\c!left=0x007C,\c!right=0x007C]
-\definemathfence [doublebar] [\c!left=0x2016,\c!right=0x2016]
-\definemathfence [angle] [\c!left=0x003C,\c!right=0x003E]
+% todo: | in mathmode letter
+%
+% \appendtoks
+% \let\bar\letterbar
+% \to \everymathematics
+%
+% but then we don't have it in embedded text too so ...
+
+\definemathfence [parenthesis] [\c!left="0028,\c!right="0029]
+\definemathfence [bracket] [\c!left="005B,\c!right="005D]
+\definemathfence [brace] [\c!left="007B,\c!right="007D]
+\definemathfence [bar] [\c!left="007C,\c!right="007C]
+\definemathfence [doublebar] [\c!left="2016,\c!right="2016]
+\definemathfence [angle] [\c!left="003C,\c!right="003E]
+\definemathfence [nothing]
+
+%D A bonus:
+
+\unexpanded\def\Lparent {\math_fenced_fenced_start{parenthesis}} \unexpanded\def\Rparent {\math_fenced_fenced_stop{parenthesis}}
+\unexpanded\def\Lbracket {\math_fenced_fenced_start{bracket}} \unexpanded\def\Rbracket {\math_fenced_fenced_stop{bracket}}
+\unexpanded\def\Lbrace {\math_fenced_fenced_start{brace}} \unexpanded\def\Rbrace {\math_fenced_fenced_stop{brace}}
+\unexpanded\def\Langle {\math_fenced_fenced_start{angle}} \unexpanded\def\Rangle {\math_fenced_fenced_stop{angle}}
+\unexpanded\def\Lbar {\math_fenced_fenced_start{bar}} \unexpanded\def\Rbar {\math_fenced_fenced_stop{bar}}
+\unexpanded\def\Ldoublebar {\math_fenced_fenced_start{doublebar}} \unexpanded\def\Rdoublebar{\math_fenced_fenced_stop{doublebar}}
+\unexpanded\def\Lnothing {\math_fenced_fenced_start{nothing}} \unexpanded\def\Rnothing {\math_fenced_fenced_stop{nothing}}
+
+%D And another one:
+
+% \setupmathfences[color=darkgreen]
+%
+% \startformula
+% \left{ \frac{1}{a} \right}
+% \left[ \frac{1}{b} \right]
+% \left( \frac{1}{c} \right)
+% \left< \frac{1}{d} \right>
+% \left| \frac{1}{e} \right|
+% \stopformula
+
+\installcorenamespace{mathleft}
+\installcorenamespace{mathright}
+
+\unexpanded\def\left {\afterassignment\math_left \let\next=}
+\unexpanded\def\right{\afterassignment\math_right\let\next=}
+
+% \def\math_left
+% {\csname\??mathleft
+% \ifcsname\??mathleft\meaning\next\endcsname
+% \meaning\next
+% \else
+% \s!unknown
+% \fi
+% \endcsname}
+
+% \def\math_right
+% {\csname\??mathright
+% \ifcsname\??mathright\meaning\next\endcsname
+% \meaning\next
+% \else
+% \s!unknown
+% \fi
+% \endcsname}
+
+\def\math_left
+ {\edef\m_math_left{\meaning\next}%
+ \csname\??mathleft \ifcsname\??mathleft \m_math_left \endcsname\m_math_left \else\s!unknown\fi\endcsname}
+
+\def\math_right
+ {\edef\m_math_right{\meaning\next}%
+ \csname\??mathright\ifcsname\??mathright\m_math_right\endcsname\m_math_right\else\s!unknown\fi\endcsname}
+
+\setvalue{\??mathleft \s!unknown}{\normalleft \next}
+\setvalue{\??mathright\s!unknown}{\normalright\next}
+
+\bgroup
+
+\let\next[ \global\expandafter\let\csname\??mathleft\meaning\next\endcsname\Lbracket \let\next] \global\expandafter\let\csname\??mathright\meaning\next\endcsname\Rbracket
+\let\next( \global\expandafter\let\csname\??mathleft\meaning\next\endcsname\Lparent \let\next) \global\expandafter\let\csname\??mathright\meaning\next\endcsname\Rparent
+\let\next< \global\expandafter\let\csname\??mathleft\meaning\next\endcsname\Langle \let\next> \global\expandafter\let\csname\??mathright\meaning\next\endcsname\Rangle
+\let\next{ \global\expandafter\let\csname\??mathleft\meaning\next\endcsname\Lbrace \let\next} \global\expandafter\let\csname\??mathright\meaning\next\endcsname\Rbrace
+\let\next| \global\expandafter\let\csname\??mathleft\meaning\next\endcsname\Lbar \let\next| \global\expandafter\let\csname\??mathright\meaning\next\endcsname\Rbar
+\let\next‖ \global\expandafter\let\csname\??mathleft\meaning\next\endcsname\Ldoublebar \let\next‖ \global\expandafter\let\csname\??mathright\meaning\next\endcsname\Rdoublebar
+\let\next. \global\expandafter\let\csname\??mathleft\meaning\next\endcsname\Lnothing \let\next. \global\expandafter\let\csname\??mathright\meaning\next\endcsname\Rnothing
+
+\egroup
%definemathfence [fancybracket] [bracket] [command=yes,color=red]