summaryrefslogtreecommitdiff
path: root/tex/context/base/font-ini.mkiv
diff options
context:
space:
mode:
authorMarius <mariausol@gmail.com>2011-12-13 17:40:23 +0200
committerMarius <mariausol@gmail.com>2011-12-13 17:40:23 +0200
commit008b7b212da48ca7ef8fc8ac876dbf13ca7b21a5 (patch)
tree8571937aba1460b4bf7daa0e08738f8768c48d03 /tex/context/base/font-ini.mkiv
parent0396ead2bd0816d7e546848690271bbbe9077334 (diff)
downloadcontext-008b7b212da48ca7ef8fc8ac876dbf13ca7b21a5.tar.gz
beta 2011.12.13 15:17
Diffstat (limited to 'tex/context/base/font-ini.mkiv')
-rw-r--r--tex/context/base/font-ini.mkiv189
1 files changed, 84 insertions, 105 deletions
diff --git a/tex/context/base/font-ini.mkiv b/tex/context/base/font-ini.mkiv
index 57fd53854..9ccad32d3 100644
--- a/tex/context/base/font-ini.mkiv
+++ b/tex/context/base/font-ini.mkiv
@@ -3510,7 +3510,7 @@
\unexpanded\def\definealternativestyle
{\dotripleempty\dodefinealternativestyle}
-\unexpanded\def\definestyle{\definealternativestyle} % later redefined
+\let\definestyle\definealternativestyle % later redefined
%D Maybe too geneneric, but probably ok is the following. (Maybe one
%D day we will use a dedicated grouped command for styles.)
@@ -3565,58 +3565,15 @@
%D \type{\noconvertfont}. In nested calls, we can restore the
%D conversion by saying \type{\redoconvertfont}.
-% subtle ... \expandafter is needed else problems with lookahead caps
-%
-% this will be cleaned up
-%
-% beware: p!defined can contain crap like \edef crap {...} and such
-% so we need to pass #1 as well .. no longer needed in luatex
-
-% \def\@@dodoconvertfont{\csname\@letter@ \p!defined\expandafter\endcsname\gobbleoneargument}
-% \def\@@donoconvertfont{\csname\@noletter@\p!defined\endcsname}
-% \def\@@redoconvertfont{\csname \p!defined\expandafter\endcsname\gobbleoneargument}
-%
-% \unexpanded\def\dodoconvertfont#1% #2% we need the protection
-% {\edef\p!defined{#1}%
-% \ifx\p!defined\empty\else
-% \@EA\dododoconvertfont
-% \fi{#1}}
-%
-% \def\dododoconvertfont % #1 (detokenize no longer needed in luatex)
-% {\ifcsname\@letter@\detokenize\@EA{\p!defined}\endcsname
-% \expandafter\@@dodoconvertfont
-% \else\ifcsname\detokenize\@EA{\p!defined}\endcsname
-% \doubleexpandafter\@@redoconvertfont
-% \else
-% \doubleexpandafter\firstofoneargument
-% \fi\fi} % {#1}
-%
-% \let\doconvertfont\dodoconvertfont
-%
-% \unexpanded\def\noconvertfont#1% #2%
-% {\edef\p!defined{#1}%
-% \ifx\p!defined\empty
-% \else
-% \@EA\nononoconvertfont
-% \fi}
-%
-% \def\nononoconvertfont
-% {\ifcsname\@noletter@\detokenize\@EA{\p!defined}\endcsname
-% \@EA\@@donoconvertfont
-% \fi}
-%
-% %D Extras:
-%
-% \unexpanded\def\dontconvertfont{\let\doconvertfont\noconvertfont}
-% \unexpanded\def\redoconvertfont{\let\doconvertfont\dodoconvertfont}
-
%D These commands are not grouped! Grouping is most probably
%D done by the calling macro's and would lead to unnecessary
%D overhead.
\unexpanded\def\doconvertfont#1% #2% we need the protection
{\edef\currentconvertfont{#1}%
- \ifx\currentconvertfont\empty \else
+ \ifx\currentconvertfont\empty
+ %\expandafter\firstofoneargument
+ \else
\expandafter\dodoconvertfont
\fi}
@@ -3635,6 +3592,32 @@
\unexpanded\def\dontconvertfont{\currentalternativestyleindex\plustwo}
\unexpanded\def\redoconvertfont{\currentalternativestyleindex\plusone}
+%D The new one:
+
+\unexpanded\def\dousestyleparameter#1%
+ {\edef\currentstyleparameter{#1}%
+ \ifx\currentstyleparameter\empty\else
+ \expandafter\dousecurrentstyleparameter
+ \fi}
+
+\unexpanded\def\dousestylehashparameter#1#2%
+ {\ifcsname#1#2\endcsname
+ \expandafter\dousestyleparameter\csname#1#2\endcsname
+ \fi}
+
+\unexpanded\def\dousecurrentstyleparameter % empty check outside here
+ {\edef\detokenizedstyleparameter{\detokenize\expandafter{\currentstyleparameter}}%
+ \settrue\fontattributeisset % reset is done elsewhere
+ \ifcsname\??ft:as:\detokenizedstyleparameter\endcsname
+ \csname\??ft:as:\detokenizedstyleparameter\endcsname
+ \else\ifcsname\detokenizedstyleparameter\endcsname
+ \csname\detokenizedstyleparameter\endcsname
+ \else
+ \currentstyleparameter
+ \fi\fi}
+
+\let\dosetfontattribute\dousestylehashparameter % for a while
+
%D \macros
%D {em,emphasistypeface,emphasisboldface}
%D
@@ -4447,84 +4430,80 @@
\def\removemissingcharacters{\ctxcommand{removemissingcharacters}}
%D New commands (not yet interfaced):
-
-% \def\style[#1]% for inline usage, like \color
-% {\groupedcommand{\ifcsname#1\endcsname\csname#1\endcsname\else\definedfont[#1]\fi}{}}
-%
-% \unexpanded\def\startstyle[#1]%
-% {\begingroup
-% \ifcsname#1\endcsname\csname#1\endcsname\else\definedfont[#1]\fi}
-%
-% \unexpanded\def\stopstyle
-% {\endgroup}
+%D
+%D \startbuffer
+%D \definestyle[one][style=bold,color=darkblue]
+%D
+%D test \one{test} test
+%D test \style[one]{test} test
+%D test \style[color=red]{test} test
+%D test \style[Serif at 20pt]{test} test
+%D \stopbuffer
+%D
+%D \typebuffer \startlines \getbuffer \stoplines
% definitions .. no tagging here
-\def\definestyle
- {\dotripleargument\dodefinestyle}
-
-\def\dodefinestyle[#1][#2][#3]%
- {\doifassignmentelse{#2}\dododefinestyle\definealternativestyle[#1][#2][#3]}
+\installcommandhandler \??cf {style} \??cf
-\def\dododefinestyle[#1][#2][#3]% no commalist and for the moment #3 is ignored
- {\getparameters[\??cf:#1][\c!style=,\c!color=,#2]%
- \setuvalue{\e!start#1}{\begingroup\dostartattributes{\??cf:#1}\c!style\c!color}%
- \setuvalue{\e!stop #1}{\dostopattributes\endgroup}%
- \setuvalue {#1}{\groupedcommand{\dostartattributes{\??cf:#1}\c!style\c!color}\dostopattributes}}
+\appendtoks
+ \letvalue{\??cf\currentstyle\s!check}\relax
+ \setuevalue{\e!start\currentstyle}{\begingroup\use_defined_style{\currentstyle}}%
+ \setuevalue{\e!stop \currentstyle}{\endgroup}%
+ \setuevalue {\currentstyle}{\groupedcommand{\use_defined_style{\currentstyle}}{}}%
+\to \everydefinestyle
-\def\setupstyle
- {\dotripleargument\dosetupstyle}
+\unexpanded\def\use_defined_style#1%
+ {\edef\currentstyle{#1}%
+ \usestylestyleandcolor\c!style\c!color}
-\def\dosetupstyle[#1][#2][#3]% no commalist and for the moment #3 is ignored
- {\ifcsname\??cf:#1\c!style\endcsname
- \getparameters[\??cf:#1][#2]%
- \else
- \getparameters[\??cf:#1][\c!style=,\c!color=,#2]% so we define but without commands (todo for all define related things)
- \fi}
+\unexpanded\def\use_generic_style#1%
+ {\getparameters[\??cf][\c!style=,\c!color=,#1]%
+ \dousestyleparameter\@@cfstyle
+ \dousecolorparameter\@@cfcolor}
% commands
\unexpanded\def\style[#1]%
- {\csname\ifcsname#1\endcsname n\else\ifcsname\??cf:#1\c!style\endcsname c\else d\fi\fi ostyle\endcsname{#1}}
-
-\def\nostyle#1{\csname#1\endcsname}
-\def\costyle#1{\groupedcommand{\dostartattributes{\??cf:#1}\c!style\c!color}\dostopattributes}
-\def\dostyle#1{\doifassignmentelse{#1}\dostyleassignment\dostyledirect{#1}}
-
-\def\dostyleassignment#1%
- {\groupedcommand
- {\getparameters[\??cf][\c!style=,\c!color=,#1]%
- \dostartattributes\??cf\c!style\c!color}
- {\dostopattributes}}
+ {\csname style_%
+ \ifcsname#1\endcsname
+ nop%
+ \else\ifcsname\??cf#1\s!check\endcsname
+ use%
+ \else
+ yes%
+ \fi\fi
+ \endcsname{#1}}
-\def\dostyledirect#1%
- {\groupedcommand
- {\definedfont[#1]}
- {}}
+\def\style_nop #1{\csname#1\endcsname}
+\def\style_use #1{\groupedcommand{\use_defined_style{#1}}{}}
+\def\style_yes #1{\doifassignmentelse{#1}\style_assignment\style_direct{#1}}
+\def\style_assignment#1{\groupedcommand{\use_generic_style{#1}}{}}
+\def\style_direct #1{\groupedcommand{\definedfont[#1]}{}}
% environments
\unexpanded\def\startstyle[#1]%
{\begingroup
- \csname\ifcsname#1\endcsname n\else\ifcsname\??cf:#1\c!style\endcsname c\else d\fi\fi ostyless\endcsname{#1}}
+ \csname start_style_%
+ \ifcsname#1\endcsname
+ nop%
+ \else\ifcsname\??cf#1\s!check\endcsname
+ use%
+ \else
+ yes%
+ \fi\fi
+ \endcsname{#1}}
\unexpanded\def\stopstyle
- {\dostopstyle
- \endgroup
+ {\endgroup
\autoinsertnextspace} % will be configurable, maybe also in \definestartstop
-\def\nostyless#1{\let\dostopstyle\donothing\csname#1\endcsname}
-\def\costyless#1{\let\dostopstyle\dostopattributes\dostartattributes{\??cf:#1}\c!style\c!color}
-\def\dostyless#1{\doifassignmentelse{#1}\dostylessassignment\dostylessdirect{#1}}
-
-\def\dostylessassignment#1%
- {\let\dostopstyle\dostopattributes
- \getparameters[\??cf][\c!style,\c!color=,#1]%
- \dostartattributes\??cf\c!style\c!color}
-
-\def\dostylessdirect#1%
- {\let\dostopstyle\donothing
- \definedfont[#1]\relax}
+\def\start_style_nop #1{\csname#1\endcsname}
+\def\start_style_use #1{\use_defined_style{#1}}
+\def\start_style_yes #1{\doifassignmentelse{#1}\start_style_assignment\start_style_direct{#1}}
+\def\start_style_assignment#1{\usegenericstyle{#1}}
+\def\start_style_direct #1{\definedfont[#1]\relax}
%D Still experimental (might even go away).