summaryrefslogtreecommitdiff
path: root/tex/context/base/core-fnt.tex
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/core-fnt.tex')
-rw-r--r--tex/context/base/core-fnt.tex765
1 files changed, 434 insertions, 331 deletions
diff --git a/tex/context/base/core-fnt.tex b/tex/context/base/core-fnt.tex
index 4df92a5a4..cdafdf605 100644
--- a/tex/context/base/core-fnt.tex
+++ b/tex/context/base/core-fnt.tex
@@ -1,331 +1,434 @@
-%D \module
-%D [ file=core-fnt,
-%D version=1995.10.10,
-%D title=\CONTEXT\ Core Macros,
-%D subtitle=Font Support,
-%D author=Hans Hagen,
-%D date=\currentdate,
-%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
-%C
-%C This module is part of the \CONTEXT\ macro||package and is
-%C therefore copyrighted by \PRAGMA. Non||commercial use is
-%C granted.
-
-\writestatus{loading}{Context Core Macros / Font Support}
-
-\unprotect
-
-%D \macros
-%D {kap,KAP,Kap,Kaps,nokap}
-%D
-%D We already introduced \type{\kap} as way to capitalize
-%D words. This command comes in several versions:
-%D
-%D \startbuffer
-%D \kap {let's put on a \kap{cap}}
-%D \kap {let's put on a \nokap{cap}}
-%D \KAP {let's put on a \\{cap}}
-%D \Kap {let's put on a \\{cap}}
-%D \Kaps{let's put on a cap}
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D Note the use of \type{\nokap}, \type{\\} and the nested
-%D \type{\kap}.
-%D
-%D \startvoorbeeld
-%D \startregels
-%D \haalbuffer
-%D \stopregels
-%D \stopvoorbeeld
-%D
-%D These macros show te main reason why we introduced the
-%D smaller \type{\tx} and \type{\txx}.
-%D
-%D \starttypen
-%D \kap\romeins{1995}
-%D \stoptypen
-%D
-%D This at first sight unusual capitilization is completely
-%D legal.
-%D
-%D \showsetup{\y!kap}
-%D \showsetup{\y!Kap}
-%D \showsetup{\y!KAP}
-%D \showsetup{\y!Kaps}
-%D \showsetup{\y!nokap}
-
-\unexpanded\def\kap%
- {\futurelet\next\dokap}
-
-% \def\dokap%
-% {\ifx\next\bgroup
-% \def\next{\dodokap\relax}%
-% \else
-% \def\next{\dodokap}%
-% \fi
-% \next}
-
-\def\dokap%
- {\ifx\next\bgroup
- \expandafter\dodokap\expandafter\relax
- \else
- \expandafter\dodokap
- \fi}
-
-\def\dodokap#1#2%
- {\ifmmode\hbox\fi
- \bgroup
- \tx
- \the\everyuppercase
- \uppercase{#1{#2}}%
- \egroup}
-
-\unexpanded\def\KAP#1%
- {{\def\\##1{\kap{##1}}#1}}
-
-\unexpanded\def\Kap#1%
- {\KAP{\\#1}}
-
-\def\nokap#1%
- {\lowercase{#1}}
-
-\def\Kaps%
- {\let\processword=\Kap
- \processwords}
-
-%D \macros
-%D {Word, Words, WORD, WORDS, doprocesswords}
-%D
-%D This is probably not the right place to present the next set
-%D of macros.
-%D
-%D \starttypen
-%D \Word {far too many words}
-%D \Words{far too many words}
-%D \WORD {far too many words}
-%D \WORDS{far too many words}
-%D \stoptypen
-%D
-%D \typebuffer
-%D
-%D This calls result in:
-%D
-%D \startvoorbeeld
-%D \startregels
-%D \haalbuffer
-%D \stopregels
-%D \stopvoorbeeld
-%D
-%D \showsetup{\y!Word}
-%D \showsetup{\y!Words}
-%D \showsetup{\y!WORD}
-%D \showsetup{\y!WORDS}
-
-\def\doWord#1%
- {\bgroup
- \the\everyuppercase
- \uppercase{#1}%
- \egroup}
-
-\def\Word#1%
- {\doWord#1}
-
-\def\doprocesswords#1 #2\od%
- {\ConvertToConstant\doifnot{#1}{}
- {\processword{#1} %
- \doprocesswords#2 \od}}
-
-\def\processwords#1%
- {\doprocesswords#1 \od\unskip}
-
-\def\Words%
- {\let\processwords=\Word
- \processwords}
-
-\def\WORD#1%
- {\bgroup
- \def\kap#1{#1}%
- \edef\next{#1}%
- \the\everyuppercase
- \uppercase\expandafter{\next}%
- \egroup}
-
-\def\WORDS#1%
- {\WORD{#1}}
-
-%D \macros
-%D {stretched}
-%D
-%D Stretching characters in a word is a sort of typographical
-%D murder. Nevertheless we support this manipulation for use in
-%D for instance titles.
-%D
-%D \starttypen
-%D \hbox to 5cm{\stretched{murder}}
-%D \stoptypen
-%D
-%D \typebuffer
-%D
-%D or
-%D
-%D \startvoorbeeld
-%D \haalbuffer
-%D \stopvoorbeeld
-%D
-%D \showsetup{\y!stretched}
-
-\def\stretched%
- {\ifvmode\hbox to \hsize\else\ifinner\else\hbox\fi\fi
- \processtokens\relax\hss\relax\normalspace}
-
-%D \startbuffer
-%D \stretched{Unknown Box}
-%D \hbox to .5\hsize{\stretched{A Horizontal Box}}
-%D \vbox to 2cm{\stretched{A Vertical Box}}
-%D \hbox to 3cm{\stretched{sp{\'e}c{\`\i}{\"a}l}}
-%D \stopbuffer
-%D
-%D \haalbuffer
-%D
-%D The first line of this macros takes care of boxing. Normally
-%D one will use an \type{\hbox} specification. The last line
-%D shows how special characters should be passed.
-%D
-%D \typebuffer
-
-%D \macros
-%D {underbar,underbars,overstrike,overstrikes,setupunderbar}
-%D
-%D In the rare case that we need undelined words, for instance
-%D because all font alternatives are already in use, one can
-%D use \type{\underbar} and \type{\overstrike} and their plural
-%D forms.
-%D
-%D \startbuffer
-%D \underbars{drawing \underbar{bars} under words is a typewriter leftover}
-%D \overstrikes{striking words makes them \overstrike{unreadable}}
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D \startvoorbeeld
-%D \startregels
-%D \haalbuffer
-%D \stopregels
-%D \stopvoorbeeld
-%D
-%D The next macros are derived from the \PLAIN\ \TEX\ one, but
-%D also supports nesting. The \type{$} keeps us in horizontal
-%D mode and at the same time applies grouping.
-%D
-%D \showsetup{\y!underbar}
-%D \showsetup{\y!underbars}
-%D \showsetup{\y!overstrike}
-%D \showsetup{\y!overstrikes}
-%D
-%D Although underlining is ill advised, we permit some
-%D alternatives, that can be set up by:
-%D
-%D \showsetup{\y!setupunderbar}
-%D
-%D The alternatives show up as
-%D {\setupunderbar [variant=a]{alternative a},
-%D {\setupunderbar [variant=b]{alternative b},
-%D {\setupunderbar [variant=c]{alternative c}
-%D and
-%D {\setupunderbar [lijndikte=1pt]{1pt width},
-%D {\setupunderbar [lijndikte=2pt]{2pt width},
-%D or whatever. Because \type{\overstrike} uses the same
-%D method, the settings also apply to that macro.
-
-\newcounter\underbarlevel
-\newbox\underbarbox
-
-\def\underbarmethoda#1#2#3% RULE
- {\hbox to #1{\vrule\!!width#1\!!height#2\!!depth#3}}
-
-\def\underbarmethodb#1#2#3% DASH
- {\hbox to #1
- {\hskip-.25em
- \xleaders
- \hbox{\hskip.25em\vrule\!!width.25em\!!height#2\!!depth#3}
- \hfil}}
-
-\def\underbarmethodc#1#2#3% PERIOD
- {\hbox to #1
- {\dimen0=#3
- \advance\dimen0 by .2ex
- \hskip-.25em
- \xleaders
- \hbox{\hskip.25em\lower\dimen0\hbox{.}}
- \hfil}}
-
-\def\dodounderbar#1#2#3%
- {\bmath
- \setbox0=\hbox{#3}%
- \setbox2=\getvalue{underbarmethod\@@onvariant}{\wd0}{#1}{#2}%
- \wd0=\!!zeropoint
- \box0\box2
- \emath}
-
-\unexpanded\def\dounderbar#1%
- {\bgroup
- \increment\underbarlevel
- \dimen0=1.5\normallineskip % was \dimen0=1.5\lineskip
- \dimen0=\underbarlevel\dimen0
- \dimen2=\dimen0
- \advance\dimen2 by \@@onlijndikte
- \dodounderbar{-\dimen0}{\dimen2}{#1}%
- \egroup}
-
-\unexpanded\def\underbar#1%
- {\bgroup
- \setbox\underbarbox=\hbox
- {\dounderbar{\hskip\fontdimen2\font}}%
- \def\betweenisolatedwords%
- {\nobreak
- \hskip\!!zeropoint\!!minus\fontdimen4\font
- \discretionary{}{}{\copy\underbarbox}}%
- \processisolatedwords{#1}\dounderbar
- \egroup}
-
-\unexpanded\def\underbars#1%
- {\processisolatedwords{#1}\dounderbar}
-
-\unexpanded\def\dooverstrike#1%
- {\bgroup
- \dimen0=2.5\lineskip
- \dimen2=\dimen0
- \advance\dimen2 by \@@onlijndikte
- \dodounderbar{\dimen2}{-\dimen0}{#1}%
- \egroup}
-
-\unexpanded\def\overstrike#1%
- {\bgroup
- \setbox\underbarbox=\hbox
- {\dooverstrike{\hskip\fontdimen2\font}}%
- \def\betweenisolatedwords%
- {\nobreak
- \hskip\!!zeropoint\!!minus\fontdimen4\font
- \discretionary{}{}{\copy\underbarbox}}%
- \processisolatedwords{#1}\dooverstrike
- \egroup}
-
-\unexpanded\def\overstrikes#1%
- {\processisolatedwords{#1}\dooverstrike}
-
-\def\setupunderbar%
- {\dodoubleargument\getparameters[\??on]}
-
-%D This module has only a few setups:
-
-\setupunderbar
- [\c!variant=a,
- \c!lijndikte=\linewidth]
-
-\protect
-
-\endinput
- \ No newline at end of file
+%D \module
+%D [ file=core-fnt,
+%D version=1995.10.10,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Font Support,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. Non||commercial use is
+%C granted.
+
+\writestatus{loading}{Context Core Macros / Font Support}
+
+\unprotect
+
+%D \macros
+%D {kap,KAP,Kap,Kaps,nokap,userealcaps,usepseudocaps}
+%D
+%D We already introduced \type{\kap} as way to capitalize
+%D words. This command comes in several versions:
+%D
+%D \startbuffer
+%D \kap {let's put on a \kap{cap}}
+%D \kap {let's put on a \nokap{cap}}
+%D \KAP {let's put on a \\{cap}}
+%D \Kap {let's put on a \\{cap}}
+%D \Kaps{let's put on a cap}
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D Note the use of \type{\nokap}, \type{\\} and the nested
+%D \type{\kap}.
+%D
+%D \startvoorbeeld
+%D \startregels
+%D \haalbuffer
+%D \stopregels
+%D \stopvoorbeeld
+%D
+%D These macros show te main reason why we introduced the
+%D smaller \type{\tx} and \type{\txx}.
+%D
+%D \starttypen
+%D \kap\romeins{1995}
+%D \stoptypen
+%D
+%D This at first sight unusual capitilization is completely
+%D legal.
+%D
+%D \showsetup{\y!kap}
+%D \showsetup{\y!Kap}
+%D \showsetup{\y!KAP}
+%D \showsetup{\y!Kaps}
+%D \showsetup{\y!nokap}
+%D
+%D The difference between pseudo and real caps is demonstrated
+%D below:
+%D
+%D \startbuffer
+%D \usepseudocaps \kap{Hans Hagen}
+%D \userealcaps \kap{Hans Hagen}
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D \haalbuffer
+%D
+%D The \type {\bgroup} trickery below is needed because of
+%D \type {\groupedcommand}.
+
+\def\usepseudocaps%
+ {\def\cap@@uppercase{\the\everyuppercase\uppercase}%
+ \def\cap@@lowercase{\the\everylowercase\lowercase}%
+ \def\cap@@visualize{\tx}}
+
+\def\userealcaps%
+ {\let\cap@@uppercase=\relax
+ %\let\cap@@lowercase=\relax % Definitely not!
+ \def\cap@@visualize{\sc}}
+
+\usepseudocaps
+
+\def\dodokap#1#2%
+ {\ifmmode\hbox\fi
+ \bgroup
+ \cap@@visualize
+ \cap@@uppercase{#1{#2}}%
+ \egroup}
+
+\def\nokap#1%
+ {\cap@@lowercase{#1}}
+
+\unexpanded\def\kap%
+ {\futurelet\next\dokap}
+
+\def\dokap%
+ {\ifx\next\bgroup
+ \expandafter\dodokap\expandafter\relax
+ \else
+ \expandafter\dodokap
+ \fi}
+
+\unexpanded\def\KAP#1%
+ {{\def\\##1{\kap{##1}}#1}}
+
+\unexpanded\def\Kap#1%
+ {\KAP{\\#1}}
+
+\unexpanded\def\Kaps%
+ {\let\processword=\Kap
+ \processwords}
+
+%D Sure:
+
+\let\normalkap\kap
+
+%D Some precautions for a \PLAIN\ \TEX\ definition.
+
+\let\normalcap\cap
+
+\def\cap%
+ {\ifmmode
+ \expandafter\normalcap
+ \else
+ \expandafter\kap
+ \fi}
+
+%D \macros
+%D {setupcapitals}
+%D
+%D By default we use pseudo small caps in titles. This can be
+%D set up with:
+%D
+%D \showsetup{setupcapitals}
+
+\def\setupcapitals%
+ {\dosingleempty\dosetupcapitals}
+
+\def\dosetupcapitals[#1]%
+ {\getparameters[\??kk][#1]%
+ \doifelse{\@@kktitel}{\v!ja}
+ {\definealternativestyle[\v!kapitaal][\normalkap][\normalkap]%
+ \definealternativestyle[\v!smallcaps][\sc][\sc]%
+ \let\kap\normalkap}
+ {\definealternativestyle[\v!kapitaal][\normalkap][\uppercase]%
+ \definealternativestyle[\v!smallcaps][\sc][\uppercase]%
+ \def\kap{\doconvertfont{\v!kapitaal}}}%
+ \doifelse{\@@kksc}{\v!ja}
+ {\userealcaps}
+ {\usepseudocaps}}
+
+\setupcapitals
+ [\c!titel=\v!ja,
+ \c!sc=\v!nee]
+
+%D \macros
+%D {Word, Words, WORD, WORDS, doprocesswords}
+%D
+%D This is probably not the right place to present the next set
+%D of macros.
+%D
+%D \starttypen
+%D \Word {far too many words}
+%D \Words{far too many words}
+%D \WORD {far too many words}
+%D \WORDS{far too many words}
+%D \stoptypen
+%D
+%D \typebuffer
+%D
+%D This calls result in:
+%D
+%D \startvoorbeeld
+%D \startregels
+%D \haalbuffer
+%D \stopregels
+%D \stopvoorbeeld
+%D
+%D \showsetup{\y!Word}
+%D \showsetup{\y!Words}
+%D \showsetup{\y!WORD}
+%D \showsetup{\y!WORDS}
+
+\def\doWord#1%
+ {\bgroup
+ \the\everyuppercase
+ \uppercase{#1}%
+ \egroup}
+
+\def\Word#1%
+ {\doWord#1}
+
+\def\doprocesswords#1 #2\od%
+ {\ConvertToConstant\doifnot{#1}{}
+ {\processword{#1} %
+ \doprocesswords#2 \od}}
+
+\def\processwords#1%
+ {\doprocesswords#1 \od\unskip}
+
+\def\Words%
+ {\let\processwords=\Word
+ \processwords}
+
+\def\WORD#1%
+ {\bgroup
+ \the\everyuppercase
+ \def\kap#1{#1}%
+ \edef\next{#1}%
+ \uppercase\expandafter{\next}%
+ \egroup}
+
+\def\WORDS#1%
+ {\WORD{#1}}
+
+%D \macros
+%D {stretched}
+%D
+%D Stretching characters in a word is a sort of typographical
+%D murder. Nevertheless we support this manipulation for use in
+%D for instance titles.
+%D
+%D \starttypen
+%D \hbox to 5cm{\stretched{murder}}
+%D \stoptypen
+%D
+%D \typebuffer
+%D
+%D or
+%D
+%D \startvoorbeeld
+%D \haalbuffer
+%D \stopvoorbeeld
+%D
+%D \showsetup{\y!stretched}
+
+\def\stretched%
+ {\ifvmode\hbox to \hsize\else\ifinner\else\hbox\fi\fi
+ \processtokens\relax\hss\relax\normalspace}
+
+%D \startbuffer
+%D \stretched{Unknown Box}
+%D \hbox to .5\hsize{\stretched{A Horizontal Box}}
+%D \vbox to 2cm{\stretched{A Vertical Box}}
+%D \hbox to 3cm{\stretched{sp{\'e}c{\`\i}{\"a}l}}
+%D \stopbuffer
+%D
+%D \haalbuffer
+%D
+%D The first line of this macros takes care of boxing. Normally
+%D one will use an \type{\hbox} specification. The last line
+%D shows how special characters should be passed.
+%D
+%D \typebuffer
+
+%D \macros
+%D {underbar,underbars,
+%D overbar,overbars,
+%D overstrike,overstrikes,
+%D setupunderbar}
+%D
+%D In the rare case that we need undelined words, for instance
+%D because all font alternatives are already in use, one can
+%D use \type{\underbar} and \type{\overstrike} and their plural
+%D forms.
+%D
+%D \startbuffer
+%D \underbars{drawing \underbar{bars} under words is a typewriter leftover}
+%D \overstrikes{striking words makes them \overstrike{unreadable} but
+%D sometimes even \overbar{top lines} come into view.}
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D \startvoorbeeld
+%D \startregels
+%D \haalbuffer
+%D \stopregels
+%D \stopvoorbeeld
+%D
+%D The next macros are derived from the \PLAIN\ \TEX\ one, but
+%D also supports nesting. The \type{$} keeps us in horizontal
+%D mode and at the same time applies grouping.
+%D
+%D \showsetup{\y!underbar}
+%D \showsetup{\y!underbars}
+%D \showsetup{\y!overbar}
+%D \showsetup{\y!overbars}
+%D \showsetup{\y!overstrike}
+%D \showsetup{\y!overstrikes}
+%D
+%D Although underlining is ill advised, we permit some
+%D alternatives, that can be set up by:
+%D
+%D \showsetup{\y!setupunderbar}
+%D
+%D The alternatives show up as
+%D {\setupunderbar [variant=a]\underbar{alternative a},
+%D {\setupunderbar [variant=b]\underbar{alternative b},
+%D {\setupunderbar [variant=c]\underbar{alternative c}
+%D and
+%D {\setupunderbar [lijndikte=1pt]\underbar{1pt width},
+%D {\setupunderbar [lijndikte=2pt]\underbar{2pt width},
+%D or whatever. Because \type{\overstrike} uses the same
+%D method, the settings also apply to that macro.
+
+\newcounter\underbarlevel
+
+\def\underbarmethoda#1#2#3% RULE
+ {\hbox to #1{\vrule\!!width#1\!!height#2\!!depth#3}}
+
+\def\underbarmethodb#1#2#3% DASH
+ {\hbox to #1
+ {\hskip-.25em
+ \xleaders
+ \hbox{\hskip.25em\vrule\!!width.25em\!!height#2\!!depth#3}
+ \hfil}}
+
+\def\underbarmethodc#1#2#3% PERIOD
+ {\hbox to #1
+ {\dimen4=#3
+ \advance\dimen4 by .2ex
+ \hskip-.25em
+ \xleaders
+ \hbox{\hskip.25em\lower\dimen4\hbox{.}}
+ \hfil}}
+
+\def\dododounderbar#1#2#3%
+ {\startmathmode
+ \setbox0=\hbox{#3}%
+ \setbox2=\getvalue{underbarmethod\@@onvariant}{\wd0}{#1}{#2}%
+ \wd0=\!!zeropoint
+ \ht2=\ht0
+ \dp2=\dp0
+ \box0\box2
+ \stopmathmode}
+
+\unexpanded\def\dodounderbar#1%
+ {\bgroup
+ \dimen0=1.5\normallineskip
+ \dimen0=\underbarlevel\dimen0
+ \ifdone \else
+ \advance\dimen0 by -\normallineskip
+ \advance\dimen0 by -\ht\strutbox
+ \fi
+ \dimen2=\dimen0
+ \advance\dimen2 by \@@onlijndikte
+ \dododounderbar{-\dimen0}{\dimen2}{#1}%
+ \egroup}
+
+\def\betweenunderbarwords%
+ {\bgroup
+ \setbox0=\hbox
+ {\dodounderbar{\hskip\fontdimen2\font}}%
+ \nobreak
+ \hskip\!!zeropoint\!!minus\fontdimen4\font
+ \discretionary{}{}{\box0}%
+ \egroup}
+
+\def\betweenunderbarspaces%
+ {\hskip\currentspaceskip}
+
+\unexpanded\def\dounderbar#1#2%
+ {\let\betweenisolatedwords#1%
+ \processisolatedwords{#2}\dodounderbar
+ \egroup}
+
+\unexpanded\def\underbar%
+ {\bgroup
+ \increment\underbarlevel
+ \donetrue
+ \dounderbar\betweenunderbarwords}
+
+\unexpanded\def\underbars%
+ {\bgroup
+ \increment\underbarlevel
+ \donetrue
+ \dounderbar\betweenunderbarspaces}
+
+\unexpanded\def\overbar%
+ {\bgroup
+ \decrement\underbarlevel
+ \donefalse
+ \dounderbar\betweenunderbarwords}
+
+\unexpanded\def\overbars%
+ {\bgroup
+ \decrement\underbarlevel
+ \donefalse
+ \dounderbar\betweenunderbarspaces}
+
+\def\dooverstrike#1%
+ {\bgroup
+ \dimen0=2.5\normallineskip
+ \dimen2=\dimen0
+ \advance\dimen2 by \@@onlijndikte
+ \dododounderbar{\dimen2}{-\dimen0}{#1}%
+ \egroup}
+
+\def\betweenoverstrikewords%
+ {\bgroup
+ \setbox0=\hbox
+ {\dooverstrike{\hskip\fontdimen2\font}}%
+ \nobreak
+ \hskip\!!zeropoint\!!minus\fontdimen4\font
+ \discretionary{}{}{\box0}%
+ \egroup}
+
+\unexpanded\def\overstrike#1%
+ {\bgroup
+ \let\betweenisolatedwords\betweenoverstrikewords
+ \processisolatedwords{#1}\dooverstrike
+ \egroup}
+
+\unexpanded\def\overstrikes#1%
+ {\bgroup
+ \processisolatedwords{#1}\dooverstrike
+ \egroup}
+
+\def\setupunderbar%
+ {\dodoubleargument\getparameters[\??on]}
+
+%D This module has only a few setups:
+
+\setupunderbar
+ [\c!variant=a,
+ \c!lijndikte=\linewidth]
+
+\protect
+
+\endinput