summaryrefslogtreecommitdiff
path: root/tex/context/base/core-gen.tex
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/core-gen.tex')
-rw-r--r--tex/context/base/core-gen.tex137
1 files changed, 46 insertions, 91 deletions
diff --git a/tex/context/base/core-gen.tex b/tex/context/base/core-gen.tex
index aaaba84d1..b6ab2a208 100644
--- a/tex/context/base/core-gen.tex
+++ b/tex/context/base/core-gen.tex
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\writestatus{loading}{Context Core Macros / General}
+\writestatus{loading}{ConTeXt Core Macros / General}
\unprotect
@@ -60,79 +60,38 @@
%D {waarde groot}
%D \stoptyping
-\def\assigndimension#1#2#3#4#5% can be a skip
- {\processaction
- [#1]
- [ \v!small=>#2=#3\relax,
- \v!medium=>#2=#4\relax,
- \v!big=>#2=#5\relax,
- \v!none=>#2=\zeropoint,
- -\v!small=>#2=-#3\relax,
- -\v!medium=>#2=-#4\relax,
- -\v!big=>#2=-#5\relax,
- \s!unknown=>#2=#1\relax]}
-
-\def\assignalfadimension#1#2#3#4#5%
- {\processaction
- [#1]
- [ \v!small=>\edef#2{#3},
- \v!medium=>\edef#2{#4},
- \v!big=>\edef#2{#5},
- \v!none=>\edef#2{0},
- \s!unknown=>\edef#2{#1}]}
-
-%D De onderstaande implementatie is veel sneller, maar
-%D tegelijkertijd ook veel lelijker. Omdat we deze macro
-%D relatief weinig aanroepen laten we deze optimalisatie maar
-%D achterwege. Bovendien kunnen oplossingen als deze de
-%D hash||table aardig uitputten (\type {\doifdefined}).
-%D
-%D \starttyping
-%D \edef\@@dimension{@@dim}
-%D \edef\@@negdimension{\@@dimension-}
-%D
-%D \def\assigndimension#1#2#3#4#5%
-%D {\setvalue{\@@dimension \v!small }{#3}%
-%D \setvalue{\@@dimension \v!medium}{#4}%
-%D \setvalue{\@@dimension \v!big }{#5}%
-%D \setvalue{\@@dimension \v!none }{\!!zeropoint}%
-%D \setvalue{\@@negdimension\v!small }{-#3}%
-%D \setvalue{\@@negdimension\v!medium}{-#4}%
-%D \setvalue{\@@negdimension\v!big }{-#5}%
-%D \setvalue{\@@negdimension\v!none }{\!!zeropoint}%
-%D \doifdefinedelse{\@@dimension#1}
-%D {#2=\getvalue{\@@dimension#1}}
-%D {#2=#1}}
-%D \stoptyping
-%D
-%D Let's give this a try:
-
-\let\nopv!none \v!none
-\let\posv!big \v!big
-\let\posv!middle \v!medium
-\let\posv!small \v!small
-\edef\negv!big {-\v!big}
-\edef\negv!middle{-\v!medium}
-\edef\negv!small {-\v!small}
-
-\def\assigndimension#1#2#3#4#5%
- {\edef\!!stringa{#1}%
- #2=\ifx\!!stringa\nopv!none \zeropoint\else
- \ifx\!!stringa\posv!big #5\else
- \ifx\!!stringa\posv!middle #4\else
- \ifx\!!stringa\posv!small #3\else
- \ifx\!!stringa\negv!big -#5\else
- \ifx\!!stringa\negv!middle-#4\else
- \ifx\!!stringa\negv!small -#3\else
- #1\fi\fi\fi\fi\fi\fi\fi}
-
-\def\assignalfadimension#1#2#3#4#5%
- {\edef\!!stringa{#1}%
- \edef#2{\ifx\!!stringa\posv!big #5\else
- \ifx\!!stringa\posv!middle#4\else
- \ifx\!!stringa\posv!small #3\else
- \ifx\!!stringa\nopv!none 0\else
- #1\fi\fi\fi\fi}}
+% The third (optimized) version:
+
+\def\@ad@{@ad@}
+
+\setvalue{\@ad@ \v!none }{\zeropoint\gobblethreearguments}
+\setvalue{\@ad@ \v!big }{\thirdofthreearguments}
+\setvalue{\@ad@ \v!medium}{\secondofthreearguments}
+\setvalue{\@ad@ \v!small }{\firstofthreearguments}
+\setvalue{\@ad@-\v!big }{-\thirdofthreearguments}
+\setvalue{\@ad@-\v!medium}{-\secondofthreearguments}
+\setvalue{\@ad@-\v!small }{-\firstofthreearguments}
+
+\def\assigndimension#1#2% #3 #4 #5
+ {#2=\ifcsname\@ad@#1\endcsname
+ \csname\@ad@#1\expandafter\endcsname
+ \else
+ #1\expandafter\gobblethreearguments
+ \fi}
+
+\def\@aa@{@aa@}
+
+\setvalue{\@aa@\v!none }{0\gobblethreearguments}
+\setvalue{\@aa@\v!big }{\thirdofthreearguments}
+\setvalue{\@aa@\v!medium}{\secondofthreearguments}
+\setvalue{\@aa@\v!small }{\firstofthreearguments}
+
+\def\assignalfadimension#1#2#3#4#5% #3#4#5 are single digits
+ {\edef#2{\ifcsname\@aa@#1\endcsname
+ \csname\@aa@#1\expandafter\endcsname
+ \else
+ #1\expandafter\gobblethreearguments
+ \fi#3#4#5}}
%D \macros
%D {assignvalue}
@@ -162,22 +121,18 @@
%D
%D Hier doet \type{geen} dus niet mee.
-\def\assignvalue#1#2#3#4#5%
- {\processaction
- [#1]
- [ \v!small=>\edef#2{#3},
- \v!medium=>\edef#2{#4},
- \v!big=>\edef#2{#5},
- \s!unknown=>\edef#2{#1}]}
+\def\@av@{@av@}
-%D Or faster:
+\letvalue{\@av@\v!big }\thirdofthreearguments
+\letvalue{\@av@\v!medium}\secondofthreearguments
+\letvalue{\@av@\v!small }\firstofthreearguments
\def\assignvalue#1#2#3#4#5%
- {\edef\!!stringa{#1}%
- \edef#2{\ifx\!!stringa\posv!big #5\else
- \ifx\!!stringa\posv!middle#4\else
- \ifx\!!stringa\posv!small #3\else
- #1\fi\fi\fi}}
+ {\edef#2{\ifcsname\@av@#1\endcsname
+ \csname\@av@#1\expandafter\endcsname
+ \else
+ #1\expandafter\gobblethreearguments
+ \fi{#3}{#4}{#5}}}
%D \macros
%D {assignwidth}
@@ -200,11 +155,11 @@
\def\assignwidth#1#2#3#4%
{\doifelsenothing{#2}
- {\setbox0\hbox{#3}%
- #1\wd0}
+ {\setbox\scratchbox\hbox{#3}%
+ #1\wd\scratchbox}
{\doifinsetelse{#2}{\v!fit,\v!broad}
- {\setbox0=\hbox{#3}%
- #1\wd0
+ {\setbox\scratchbox\hbox{#3}%
+ #1\wd\scratchbox
\doif{#2}\v!broad{\advance#1 #4}}%
{#1=#2}}}%