diff options
Diffstat (limited to 'tex/context/base/core-gen.tex')
-rw-r--r-- | tex/context/base/core-gen.tex | 137 |
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}}}% |