summaryrefslogtreecommitdiff
path: root/tex/context/base/font-ini.tex
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/font-ini.tex')
-rw-r--r--tex/context/base/font-ini.tex514
1 files changed, 347 insertions, 167 deletions
diff --git a/tex/context/base/font-ini.tex b/tex/context/base/font-ini.tex
index afe943ee7..e0bf5f838 100644
--- a/tex/context/base/font-ini.tex
+++ b/tex/context/base/font-ini.tex
@@ -43,6 +43,8 @@
\def\definedfont%
{\dosingleempty\dodefinedfont}
+%%% message 14 added
+
\startmessages dutch library: fonts
title: korps
1: codering --
@@ -55,6 +57,7 @@
8: stijl -- gedefinieerd
% 9: mapping -- is geladen
10: onbekende font file --
+ 14: korps -- is gedefinieerd (kan beter globaal plaatsvinden)
\stopmessages
\startmessages english library: fonts
@@ -69,6 +72,7 @@
8: style -- defined
% 9: mapping -- is loaded
10: unknown font file --
+ 14: bodyfont -- is defined (can beter be done global)
\stopmessages
\startmessages german library: fonts
@@ -83,6 +87,7 @@
8: Stil -- definiert
% 9: Map -- ist geladen
10: unbekanntes Font --
+ 14: bodyfont -- is defined (can beter be done global)
\stopmessages
\startmessages czech library: fonts
@@ -97,6 +102,7 @@
8: styl -- definovan
% 9: mapovani -- je nacteno
10: neznamy font --
+ 14: bodyfont -- is defined (can beter be done global)
\stopmessages
\startmessages italian library: fonts
@@ -111,6 +117,7 @@
8: stile -- definito
% 9: mappatura -- caricata
10: file di font sconosciuto --
+ 14: bodyfont -- is defined (can beter be done global)
\stopmessages
\startmessages norwegian library: fonts
@@ -125,6 +132,7 @@
8: stil -- definert
% 9: avbildning -- er lest inn
10: ukjent fontfil --
+ 14: bodyfont -- is defined (can beter be done global)
\stopmessages
\startmessages romanian library: fonts
@@ -139,6 +147,7 @@
8: stilul -- definit
% 9: maparea -- este incarcat
10: fisier font necunoscut --
+ 14: bodyfont -- is defined (can beter be done global)
\stopmessages
%D This module is one of the oldest modules of \CONTEXT. The
@@ -702,9 +711,23 @@
\newtoks \mathstrategies
\newtoks \symbstrategies
-\def\synchronizetext{\the\textstrategies\fam\mrfam} % stylish text in mmode
-\def\synchronizemath{\the\mathstrategies\fam\mrfam} % math stuff in mmode
-\def\synchronizesymb{\the\symbstrategies\fam\mrfam} % stylish math stuff in mmode
+\newif\ifsynchronizemathfonts \synchronizemathfontstrue
+
+\def\synchronizetext % stylish text in mmode
+ {\ifsynchronizemathfonts\the\textstrategies\fam\mrfam\fi}
+
+\def\synchronizemath % math stuff in mmode
+ {\ifsynchronizemathfonts\the\mathstrategies\fam\mrfam\fi}
+
+\def\synchronizesymb % stylish math stuff in mmode
+ {\ifsynchronizemathfonts\the\symbstrategies\fam\mrfam\fi}
+
+%D \macros
+%D {textonly}
+%D
+%D We can inhibit this slow||downer with:
+
+\def\textonly{\synchronizemathfontsfalse}
\appendtoks
\dosettextfamily\c!tf
@@ -717,58 +740,61 @@
\to \textstrategies
\def\dosettextfamily#1%
- {\dodosettextfamily\scriptscriptfont\scriptscriptface#1%
- \dodosettextfamily\scriptfont \scriptface #1%
- \dodosettextfamily\textfont \textface #1}
+ {\let\savedfontbody\fontbody
+ \let\fontfamily#1%
+ \let\fontbody \scriptscriptface\dodosettextfamily\scriptscriptfont
+ \let\fontbody \scriptface \dodosettextfamily \scriptfont
+ \let\fontbody \textface \dodosettextfamily \textfont
+ \let\fontbody\savedfontbody}
% \def\s!nullfont{nullfont}
\beginTEX
-\def\dodosettextfamily#1#2#3%
- {\@EA\ifx\csname\fontclass#2\c!mm#3\fontsize\endcsname\relax
- \@EA\ifx\csname\fontclass#2\c!mm#3\endcsname \relax
- \@EA\ifx\csname\fontclass#2\c!rm#3\fontsize\endcsname\relax
- \@EA\ifx\csname\fontclass#2\c!rm#3\endcsname \relax
- \@EA\ifx\csname #2\c!mm#3\fontsize\endcsname\relax
- \@EA\ifx\csname #2\c!mm#3\endcsname \relax
- \@EA\ifx\csname #2\c!rm#3\fontsize\endcsname\relax
- \@EA\ifx\csname #2\c!rm#3\endcsname \relax
+\def\dodosettextfamily#1%
+ {\@EA\ifx\csname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname\relax
+ \@EA\ifx\csname\fontclass\fontbody\c!mm\fontfamily\endcsname \relax
+ \@EA\ifx\csname\fontclass\fontbody\c!rm\fontfamily\fontsize\endcsname\relax
+ \@EA\ifx\csname\fontclass\fontbody\c!rm\fontfamily\endcsname \relax
+ \@EA\ifx\csname \fontbody\c!mm\fontfamily\fontsize\endcsname\relax
+ \@EA\ifx\csname \fontbody\c!mm\fontfamily\endcsname \relax
+ \@EA\ifx\csname \fontbody\c!rm\fontfamily\fontsize\endcsname\relax
+ \@EA\ifx\csname \fontbody\c!rm\fontfamily\endcsname \relax
\autofontsizetrue \nullfont \else
- \autofontsizetrue \csname#2\c!rm#3\endcsname \fi\else
- \autofontsizefalse \csname#2\c!rm#3\fontsize\endcsname\fi\else
- \autofontsizetrue \csname#2\c!mm#3\endcsname \fi\else
- \autofontsizefalse \csname#2\c!mm#3\fontsize\endcsname\fi\else
- \autofontsizetrue \csname\fontclass#2\c!rm#3\endcsname \fi\else
- \autofontsizefalse \csname\fontclass#2\c!rm#3\fontsize\endcsname\fi\else
- \autofontsizetrue \csname\fontclass#2\c!mm#3\endcsname \fi\else
- \autofontsizefalse \csname\fontclass#2\c!mm#3\fontsize\endcsname\fi
- #1\csname#3\s!fam\endcsname\font}
+ \autofontsizetrue \csname\fontbody\c!rm\fontfamily\endcsname \fi\else
+ \autofontsizefalse \csname\fontbody\c!rm\fontfamily\fontsize\endcsname\fi\else
+ \autofontsizetrue \csname\fontbody\c!mm\fontfamily\endcsname \fi\else
+ \autofontsizefalse \csname\fontbody\c!mm\fontfamily\fontsize\endcsname\fi\else
+ \autofontsizetrue \csname\fontclass\fontbody\c!rm\fontfamily\endcsname \fi\else
+ \autofontsizefalse \csname\fontclass\fontbody\c!rm\fontsize\endcsname\fi\else
+ \autofontsizetrue \csname\fontclass\fontbody\c!mm\fontfamily\endcsname \fi\else
+ \autofontsizefalse \csname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname\fi
+ #1\csname\fontfamily\s!fam\endcsname\font}
\endTEX
\beginETEX \ifcsname
-\def\dodosettextfamily#1#2#3%
- {\ifcsname\fontclass#2\c!mm#3\fontsize\endcsname \autofontsizefalse
- \csname\fontclass#2\c!mm#3\fontsize\endcsname \else
- \ifcsname\fontclass#2\c!mm#3\endcsname \autofontsizetrue
- \csname\fontclass#2\c!mm#3\endcsname \else
- \ifcsname\fontclass#2\c!rm#3\fontsize\endcsname \autofontsizefalse
- \csname\fontclass#2\c!rm#3\fontsize\endcsname \else
- \ifcsname\fontclass#2\c!rm#3\endcsname \autofontsizetrue
- \csname\fontclass#2\c!rm#3\endcsname \else
- \ifcsname #2\c!mm#3\fontsize\endcsname \autofontsizefalse
- \csname #2\c!mm#3\fontsize\endcsname \else
- \ifcsname #2\c!mm#3\endcsname \autofontsizetrue
- \csname #2\c!mm#3\endcsname \else
- \ifcsname #2\c!rm#3\fontsize\endcsname \autofontsizefalse
- \csname #2\c!rm#3\fontsize\endcsname \else
- \ifcsname #2\c!rm#3\endcsname \autofontsizetrue
- \csname #2\c!rm#3\endcsname \else
- \nullfont \autofontsizetrue
+\def\dodosettextfamily#1%
+ {\ifcsname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname \autofontsizefalse
+ \csname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname \else
+ \ifcsname\fontclass\fontbody\c!mm\fontfamily\endcsname \autofontsizetrue
+ \csname\fontclass\fontbody\c!mm\fontfamily\endcsname \else
+ \ifcsname\fontclass\fontbody\c!rm\fontfamily\fontsize\endcsname \autofontsizefalse
+ \csname\fontclass\fontbody\c!rm\fontfamily\fontsize\endcsname \else
+ \ifcsname\fontclass\fontbody\c!rm\fontfamily\endcsname \autofontsizetrue
+ \csname\fontclass\fontbody\c!rm\fontfamily\endcsname \else
+ \ifcsname \fontbody\c!mm\fontfamily\fontsize\endcsname \autofontsizefalse
+ \csname \fontbody\c!mm\fontfamily\fontsize\endcsname \else
+ \ifcsname \fontbody\c!mm\fontfamily\endcsname \autofontsizetrue
+ \csname \fontbody\c!mm\fontfamily\endcsname \else
+ \ifcsname \fontbody\c!rm\fontfamily\fontsize\endcsname \autofontsizefalse
+ \csname \fontbody\c!rm\fontfamily\fontsize\endcsname \else
+ \ifcsname \fontbody\c!rm\fontfamily\endcsname \autofontsizetrue
+ \csname \fontbody\c!rm\fontfamily\endcsname \else
+ \nullfont \autofontsizetrue
\fi\fi\fi\fi\fi\fi\fi\fi
- #1\csname#3\s!fam\endcsname\font}
+ #1\csname\fontfamily\s!fam\endcsname\font}
\endETEX
@@ -788,56 +814,60 @@
\to \mathstrategies
\def\dosetmathfamily#1#2#3#4#5#6%
- {\dodosetmathfamily\scriptscriptfont#4#1#5{#6}%
- \dodosetmathfamily\scriptfont #3#1#5{#6}%
- \dodosetmathfamily\textfont #2#1#5{#6}}
+ {\let\savedfontbody\fontbody % op hoger plan
+ \let\fontfamily#5%
+ \let\backfamily#6%
+ \let\fontbody #4\dodosetmathfamily\scriptscriptfont#1%
+ \let\fontbody #3\dodosetmathfamily \scriptfont#1%
+ \let\fontbody #2\dodosetmathfamily \textfont#1%
+ \let\fontbody\savedfontbody}
\beginTEX
-\def\dodosetmathfamily#1#2#3#4#5%
- {\@EA\ifx \csname\fontclass#2\c!mm#4\fontsize\endcsname\relax
- \@EA\ifx \csname\fontclass#2\c!mm#4\endcsname \relax
- \@EA\ifx \csname\fontclass#2#5\fontsize\endcsname \relax
- \@EA\ifx \csname\fontclass#2#5\endcsname \relax
- \@EA\ifx \csname #2\c!mm#4\fontsize\endcsname\relax
- \@EA\ifx \csname #2\c!mm#4\endcsname \relax
- \@EA\ifx \csname #2#5\fontsize\endcsname \relax
- \@EA\ifx \csname #2#5\endcsname \relax
+\def\dodosetmathfamily#1#2%
+ {\@EA\ifx \csname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname\relax
+ \@EA\ifx \csname\fontclass\fontbody\c!mm\fontfamily\endcsname \relax
+ \@EA\ifx \csname\fontclass\fontbody\backfamily\fontsize\endcsname \relax
+ \@EA\ifx \csname\fontclass\fontbody\backfamily\endcsname \relax
+ \@EA\ifx \csname \fontbody\c!mm\fontfamily\fontsize\endcsname\relax
+ \@EA\ifx \csname \fontbody\c!mm\fontfamily\endcsname \relax
+ \@EA\ifx \csname \fontbody\backfamily\fontsize\endcsname \relax
+ \@EA\ifx \csname \fontbody\backfamily\endcsname \relax
\autofontsizetrue \nullfont \else
- \autofontsizetrue \csname #2#5\endcsname \fi \else
- \autofontsizefalse \csname #2#5\fontsize\endcsname \fi \else
- \autofontsizetrue \csname #2\c!mm#4\endcsname \fi \else
- \autofontsizefalse \csname #2\c!mm#4\fontsize\endcsname\fi \else
- \autofontsizetrue \csname\fontclass#2#5\endcsname \fi \else
- \autofontsizefalse \csname\fontclass#2#5\fontsize\endcsname \fi \else
- \autofontsizetrue \csname\fontclass#2\c!mm#4\endcsname \fi \else
- \autofontsizefalse \csname\fontclass#2\c!mm#4\fontsize\endcsname\fi
- #1#3\font}
+ \autofontsizetrue \csname \fontbody\backfamily\endcsname \fi \else
+ \autofontsizefalse \csname \fontbody\backfamily\fontsize\endcsname \fi \else
+ \autofontsizetrue \csname \fontbody\c!mm\fontfamily\endcsname \fi \else
+ \autofontsizefalse \csname \fontbody\c!mm\fontfamily\fontsize\endcsname\fi \else
+ \autofontsizetrue \csname\fontclass\fontbody\backfamily\endcsname \fi \else
+ \autofontsizefalse \csname\fontclass\fontbody\backfamily\fontsize\endcsname \fi \else
+ \autofontsizetrue \csname\fontclass\fontbody\c!mm\fontfamily\endcsname \fi \else
+ \autofontsizefalse \csname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname\fi
+ #1#2\font}
\endTEX
\beginETEX \ifcsname
-\def\dodosetmathfamily#1#2#3#4#5%
- {\ifcsname\fontclass#2\c!mm#4\fontsize\endcsname \autofontsizefalse
- \csname\fontclass#2\c!mm#4\fontsize\endcsname \else
- \ifcsname\fontclass#2\c!mm#4\endcsname \autofontsizetrue
- \csname\fontclass#2\c!mm#4\endcsname \else
- \ifcsname\fontclass#2#5\fontsize\endcsname \autofontsizefalse
- \csname\fontclass#2#5\fontsize\endcsname \else
- \ifcsname\fontclass#2#5\endcsname \autofontsizetrue
- \csname\fontclass#2#5\endcsname \else
- \ifcsname #2\c!mm#4\fontsize\endcsname \autofontsizefalse
- \csname #2\c!mm#4\fontsize\endcsname \else
- \ifcsname #2\c!mm#4\endcsname \autofontsizetrue
- \csname #2\c!mm#4\endcsname \else
- \ifcsname #2#5\fontsize\endcsname \autofontsizefalse
- \csname #2#5\fontsize\endcsname \else
- \ifcsname #2#5\endcsname \autofontsizetrue
- \csname #2#5\endcsname \else
- \nullfont \autofontsizetrue
+\def\dodosetmathfamily#1#2%
+ {\ifcsname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname \autofontsizefalse
+ \csname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname \else
+ \ifcsname\fontclass\fontbody\c!mm\fontfamily\endcsname \autofontsizetrue
+ \csname\fontclass\fontbody\c!mm\fontfamily\endcsname \else
+ \ifcsname\fontclass\fontbody\backfamily\fontsize\endcsname \autofontsizefalse
+ \csname\fontclass\fontbody\backfamily\fontsize\endcsname \else
+ \ifcsname\fontclass\fontbody\backfamily\endcsname \autofontsizetrue
+ \csname\fontclass\fontbody\backfamily\endcsname \else
+ \ifcsname \fontbody\c!mm\fontfamily\fontsize\endcsname \autofontsizefalse
+ \csname \fontbody\c!mm\fontfamily\fontsize\endcsname \else
+ \ifcsname \fontbody\c!mm\fontfamily\endcsname \autofontsizetrue
+ \csname \fontbody\c!mm\fontfamily\endcsname \else
+ \ifcsname \fontbody\backfamily\fontsize\endcsname \autofontsizefalse
+ \csname \fontbody\backfamily\fontsize\endcsname \else
+ \ifcsname \fontbody\backfamily\endcsname \autofontsizetrue
+ \csname \fontbody\backfamily\endcsname \else
+ \nullfont \autofontsizetrue
\fi\fi\fi\fi\fi\fi\fi\fi
- #1#3\font}
+ #1#2\font}
\endETEX
@@ -852,44 +882,38 @@
\to \symbstrategies
\def\dosetsymbfamily#1#2#3#4#5%
- {\dodosetsymbfamily\scriptscriptfont#4#1#5%
- \dodosetsymbfamily\scriptfont #3#1#5%
- \dodosetsymbfamily\textfont #2#1#5}
+ {\let\savedfontbody\fontbody
+ \let\fontfamily#5%
+ \let\fontbody #4\dodosetsymbfamily\scriptscriptfont#1%
+ \let\fontbody #3\dodosetsymbfamily \scriptfont#1%
+ \let\fontbody #2\dodosetsymbfamily \textfont#1%
+ \let\fontbody\savedfontbody}
\beginTEX
-\def\dodosetsymbfamily#1#2#3#4%
- {\@EA\ifx\csname\fontclass#2\c!mm#4\fontalternative\fontsize\endcsname\relax
- \@EA\ifx\csname#2\c!mm#4\fontalternative\fontsize\endcsname\relax
+\def\dodosetsymbfamily#1#2%
+ {\@EA\ifx\csname\fontclass\fontbody\c!mm\fontfamily\fontalternative\fontsize\endcsname\relax
+ \@EA\ifx\csname\fontbody\c!mm\fontfamily\fontalternative\fontsize\endcsname\relax
\else
- \csname#2\c!mm#4\fontalternative\fontsize\endcsname
- #1#3\font
+ \csname\fontbody\c!mm\fontfamily\fontalternative\fontsize\endcsname
+ #1#2\font
\fi
\else
- \csname\fontclass#2\c!mm#4\fontalternative\fontsize\endcsname
- #1#3\font
+ \csname\fontclass\fontbody\c!mm\fontfamily\fontalternative\fontsize\endcsname
+ #1#2\font
\fi}
\endTEX
\beginETEX \ifcsname
-\def\dodosetsymbfamily#1#2#3#4%
- {\ifcsname\fontclass#2\c!mm#4\fontalternative\fontsize\endcsname
- \csname\fontclass#2\c!mm#4\fontalternative\fontsize\endcsname
- #1#3\font
- \else\ifcsname#2\c!mm#4\fontalternative\fontsize\endcsname
- \csname#2\c!mm#4\fontalternative\fontsize\endcsname
- #1#3\font
- \fi\fi}
-
-\def\dodosetsymbfamily#1#2#3#4%
- {\ifcsname\fontclass#2\c!mm#4\fontalternative\fontsize\endcsname
- \csname\fontclass#2\c!mm#4\fontalternative\fontsize\endcsname
- #1#3\font
- \else\ifcsname#2\c!mm#4\fontalternative\fontsize\endcsname
- \csname#2\c!mm#4\fontalternative\fontsize\endcsname
- #1#3\font
+\def\dodosetsymbfamily#1#2%
+ {\ifcsname\fontclass\fontbody\c!mm\fontfamily\fontalternative\fontsize\endcsname
+ \csname\fontclass\fontbody\c!mm\fontfamily\fontalternative\fontsize\endcsname
+ #1#2\font
+ \else\ifcsname\fontbody\c!mm\fontfamily\fontalternative\fontsize\endcsname
+ \csname\fontbody\c!mm\fontfamily\fontalternative\fontsize\endcsname
+ #1#2\font
\fi\fi}
\endETEX
@@ -1017,7 +1041,6 @@
\fi
#2}
-
\def\setnaturalfontspec#1]%
{\@fs@scaled\!!thousand}
@@ -1125,7 +1148,10 @@
\let\@@skewchar \empty
\let\@@hyphenchar \empty % todo, will go to encoding
-\newif\ifskipfontcharacteristics % \skipfontcharacteristicstrue
+%D This brings down maps processing from 466 to 309 seconds
+%D ($-33$\%) and mfonts from 42 to 34 seconds ($-15$\%).
+
+\newif\ifskipfontcharacteristics \skipfontcharacteristicstrue
\def\donoparsefontspec#1%
{\edef\fontfile{\truefontname\somefontname}%
@@ -1409,6 +1435,8 @@
\setfontcharacteristics
\the\everyfontswitch}
+\beginETEX \ifcsname
+
\def\xxdododefinefont#1#2% \autofontsizetrue is set by calling routine
{\ifcsname*\fontclass#1\fontsize*\endcsname\else
\dosetrelativefontsize{\fontclass#1}% dangerous with fallback
@@ -1423,6 +1451,26 @@
\the\everyfontswitch
\fi}
+\endETEX
+
+\beginTEX
+
+\def\xxdododefinefont#1#2% \autofontsizetrue is set by calling routine
+ {\@EA\ifx\csname*\fontclass#1\fontsize*\endcsname\relax
+ \dosetrelativefontsize{\fontclass#1}% dangerous with fallback
+ \parsefontspec{#2}{*\fontclass#1\fontsize*}%
+ \doresetrelativefontsize
+ \fi
+ \csname*\fontclass#1\fontsize*\endcsname
+ \autofontsizefalse
+ \edef\lastfontidentifier{#1}%
+ \ifskipfontcharacteristics \else
+ \setfontcharacteristics
+ \the\everyfontswitch
+ \fi}
+
+\endTEX
+
%D I considered checking for mistakenly use of \PLAIN's
%D \type{\magstep}'s but although it would take only a few
%D lines of code, this would not add to consistent use. I
@@ -1668,7 +1716,7 @@
\def\definebodyfontenvironment%
{\dotripleempty\dodefinebodyfontenvironment}
-\def\dodefinebodyfontenvironment[#1][#2][#3]% [class] size settings
+\def\dodefinebodyfontenvironment[#1][#2][#3]% class size settings
{\ifthirdargument
\@@beginfontdef
\doifelse{#2}{\s!default}
@@ -1682,24 +1730,50 @@
\fi}
\def\dododefinebodyfontenvironment[#1][#2][#3]% size class settings
- {\doifundefined{\??ft#2#1\s!text}
- {\def\docommando##1%
- {\scratchdimen=#1\relax
+ {\@@beginfontdef
+ \doifundefined{\??ft#2#1\c!em} % \s!text goes wrong in testing because
+ {\def\docommando##1% % the 12pt alternative will called when
+ {\scratchdimen=#1\relax % typesetting the test (or so)
\scratchdimen=\getvalue{\??ft\s!default##1}\scratchdimen
\normalizebodyfontsize\scratchdimen\to\tempbodyfontsize
- \setevalue{\??ft#2#1##1}{\tempbodyfontsize}%
- %\expanded{\checkbodyfontenvironment[\tempbodyfontsize]}%
- }%
+ \setevalue{\??ft#2#1##1}{\tempbodyfontsize}}%
\processcommalist
[\s!text,\s!script,\s!scriptscript,\c!x,\c!xx,\c!groot,\c!klein]
\docommando
\copyparameters
- [\??ft#2#1][\??ft\s!default]
- [\c!interlinie,\c!em]}%
- \@@beginfontdef
+ [\??ft#2#1][\??ft\s!default]
+ [\c!interlinie,\c!em]}%
+ % \@@beginfontdef
\getparameters[\??ft#2#1][#3]%
\@@endfontdef
- \setvalue{\@size@#2#1}{\docompletefontswitch[#1]}}
+ % new code, see remark
+ \ifloadingfonts \else % only runtime
+ \doifundefined{\@size@#1} % only once
+ {\letvalue{\@size@#1}\empty % prevent loop
+ \defineunknownfont{#1}}% % safeguard
+ \fi
+ % so far
+ \setvalue{\@size@#1}{\docompletefontswitch[#1]}}
+
+%D {\bf Remark:} We need to cover the following cases,
+%D otherwise users can get confused:
+%D
+%D \starttypen
+%D \setupbodyfont[23pt]
+%D
+%D \definebodyfontenvironment[23pt]
+%D \setupbodyfont[23pt]
+%D
+%D \definebodyfontenvironment[23pt]
+%D \definebodyfont[23pt][rm,ss,tt][default]
+%D \setupbodyfont[23pt]
+%D \stoptypen
+
+%D Beware: while some font defs can be global, the bodyfont
+%D environment checks local. This means that multiple local
+%D checks resulting in definitions are not that efficient.
+%D So, apart from an occasional switch, one should define an
+%D environment at the outer level.
\def\checkbodyfontenvironment[#1]%
{\definebodyfontenvironment[\fontclass][#1][]}
@@ -1838,6 +1912,26 @@
\definebodyfont[#1][#2][#3]%
\popmacro\fontclass}
+% \def\dodefinebodyfont[#1][#2][#3]% body|identifier style defs|identifier
+% {\ifthirdargument
+% \doifnumberelse{#1}
+% {\doifassignmentelse{#3}
+% {% [12pt] [style] [settings]
+% \doifundefined{#2}{\expanded{\definefontstyle[#2][#2]}}% new
+% \processcommalist[#1]{\dododefinebodyfont{#2}{#3}}}
+% {% [12pt] [style] [identifier]
+% \dodefinedefaultbodyfont[#1][#2][#3]}} % body style identifier
+% {% [identifier] [style] [settings]
+% \setvalue{\s!default#1#2}##1##2{\expanded{\dodefinebodyfont[##1][##2][#3]}}}%
+% \else\ifsecondargument
+% \definebodyfont[#1][\c!rm][#2]%
+% \else
+% \doifundefined{\@size@#1} % Maybe there are default dependancies
+% {\defineunknownfont{#1}}% defined which we can use ([unknown])
+% \doifundefined{\@size@#1} % and if not, then we have at least to
+% {\definebodyfont[#1][\c!rm][]}% make sure some basics are set up.
+% \fi\fi}
+
\def\dodefinebodyfont[#1][#2][#3]% body|identifier style defs|identifier
{\ifthirdargument
\doifnumberelse{#1}
@@ -1847,8 +1941,8 @@
\processcommalist[#1]{\dododefinebodyfont{#2}{#3}}}
{% [12pt] [style] [identifier]
\dodefinedefaultbodyfont[#1][#2][#3]}} % body style identifier
- {% [identifier] [style] [settings]
- \setvalue{\s!default#1#2}##1##2{\expanded{\dodefinebodyfont[##1][##2][#3]}}}%
+ {% [identifier] [style] [settings] % see ***
+ \setvalue{\s!default#1#2}##1##2{\expanded{\xdodefinebodyfont[##1][##2][#3]}}}%
\else\ifsecondargument
\definebodyfont[#1][\c!rm][#2]%
\else
@@ -1858,6 +1952,27 @@
{\definebodyfont[#1][\c!rm][]}% make sure some basics are set up.
\fi\fi}
+% nested
+%
+% \def\xdodefinebodyfont[#1][#2][#3]% body|identifier style defs|identifier
+% {%\writestatus{[#1]}{[#2][#3]}%
+% \doifnumberelse{#1}
+% {\doifassignmentelse{#3}
+% {% [12pt] [style] [settings]
+% \doifundefined{#2}{\expanded{\definefontstyle[#2][#2]}}% new
+% \processcommalist[#1]{\dododefinebodyfont{#2}{#3}}}
+% {% [12pt] [style] [identifier]
+% \dodefinedefaultbodyfont[#1][#2][#3]}} % body style identifier
+% {% [identifier] [style] [settings]
+% \setvalue{\s!default#1#2}##1##2{\expanded{\xdodefinebodyfont[##1][##2][#3]}}}}
+%
+% faster
+
+\def\xdodefinebodyfont[#1][#2][#3]% body|identifier style defs|identifier
+ {%\writestatus{[#1]}{[#2][#3]}%
+ \doifundefined{#2}{\expanded{\definefontstyle[#2][#2]}}% new
+ \processcommalist[#1]{\dododefinebodyfont{#2}{#3}}}
+
\def\dododefinebodyfont#1#2#3% style defs body
{\checkbodyfontenvironment[#3]% just to be sure.
\processcommalist[#2]{\dodododefinebodyfont{#1}{#3}}}
@@ -1947,8 +2062,11 @@
\let\c!text=\c!savedtext
\ifdone
\donefalse
- \def\defineunknownbodyfont##1%
- {\doifdefined{\s!default##1}{\donetrue\getvalue{\s!default##1}{#1}}}%
+ \def\defineunknownbodyfont##1% see ***
+ %{\doifdefined{\s!default##1}
+ % {\donetrue\getvalue{\s!default##1}{#1}}}%
+ {\doifdefined{\s!default\s!default##1}
+ {\donetrue\getvalue{\s!default\s!default##1}{#1}{##1}}}%
\processcommacommand
[\stylelist]
\defineunknownbodyfont
@@ -1965,6 +2083,9 @@
\definingunknownfontfalse
\fi
\fi
+ \ifdone
+ \showmessage{\m!fonts}{14}{#1}%
+ \fi
\fi}
%D These macros show that quite some definitions take place.
@@ -2144,6 +2265,7 @@
{\getvalue{\@size@#1}%
\localbodyfontsize=#1\relax
\normalizebodyfontsize\localbodyfontsize\to\normalizedbodyfontsize
+\checkbodyfontenvironment[\normalizedbodyfontsize]% added
}% \the\everybodyfont}
{\showmessage{\m!fonts}{4}{#1}}}
@@ -2291,17 +2413,58 @@
\let\defaultfontalternative \c!tf
\let\defaultfontsize \empty
-\def\dosetcurrentfontsize#1%
- {\let\!!stringa\fontsize
- \edef\fontsize{#1}%
- \ifx\!!stringa\fontsize\else
- \synchronizemath
- \synchronizetext
+%D \macros
+%D {bigmath,nobigmath}
+%D
+%D We can inhibit this slow||downer with:
+
+% these can best be combined
+
+% 0=never 1=everymath 2=always
+
+\chardef\synchronizebigmathflag =1
+
+\appendtoks
+ \ifcase\synchronizebigmathflag
+ % never
+ \or
+ \synchronizebigmath
+ \or
+ % always
+ \fi
+\to \everymath
+
+\def\nobigmath{\chardef\synchronizebigmathflag =0 }
+\def\bigmath {\chardef\synchronizebigmathflag =2 \synchronizebigmath}
+
+\let\bigmathfontsize\empty
+
+\def\synchronizebigmath%
+ {\ifx\bigmathfontsize\fontsize
+ % already in sync
+ \else
+ \let\bigmathfontsize\fontsize
+ \synchronizemath \synchronizetext
+ \fi}
+
+\def\checkbigmathsynchronization
+ {\ifcase\synchronizebigmathflag
+ % never
+ \or
+ \ifmmode \synchronizebigmath \fi
+ \or
+ \synchronizebigmath
\fi}
+%D So far for synchronisation.
+
+\def\dosetcurrentfontsize#1%
+ {\edef\fontsize{#1}%
+ \checkbigmathsynchronization}
+
\def\dosetcurrentfontalternative#1%
{\edef\fontalternative{#1}%
- \ifmmode % maybe better no test
+ \ifmmode % maybe no test, or actually, an option
\fam\csname\fontalternative\s!fam\endcsname
\fi}
@@ -2484,7 +2647,7 @@
\def\dosetcurrentfontxxxalternative#1#2#3#4%
{\chardef\currentxfontsize=#2
\ifmmode
- #4%
+ #4%
\else\ifcsname\bodyfontvariable{\normalizedbodyfontsize#3}\endcsname
\setcurrentfontbodyalternative{\bodyfontcsname\normalizedbodyfontsize#3\endcsname}{#1}%
\fi\fi}
@@ -2825,8 +2988,7 @@
{\edef\fontstep{\bodyfontcsname\normalizedbodyfontsize\interfaced#1\endcsname}%
\doswitchpoints[\fontstep]%
\doswitchstyle[\fontstyle]%
-\the\everybodyfont
-}
+ \the\everybodyfont}
\def\setsmallbodyfont{\setbodyfontstep\v!klein}
\def\setbigbodyfont {\setbodyfontstep\v!groot}
@@ -2834,8 +2996,7 @@
\def\setmainbodyfont%
{\doswitchpoints[\normalizedbodyfontsize]%
\doswitchstyle[\fontstyle]%
-\the\everybodyfont
-}
+ \the\everybodyfont}
%D \macros
%D {restoreglobalbodyfont}
@@ -3031,10 +3192,10 @@
%D or even better:
\def\doemphasistypeface#1#2%
- {\doifelsevalue {\??ft\fontclass\normalizedbodyfontsize\c!em}{\v!schuin}{#1}
- {\doifelsevalue {\??ft\fontclass\normalizedbodyfontsize\c!em}{\v!italic}{#2}
- {\doifelsevalue{\??ft \normalizedbodyfontsize\c!em}{\v!schuin}{#1}
- {\doifvalue {\??ft \normalizedbodyfontsize\c!em}{\v!italic}{#2}}}}}
+ {\doifelsevalue{\??ft\fontclass\normalizedbodyfontsize\c!em}\v!schuin#1%
+ {\doifelsevalue{\??ft\fontclass\normalizedbodyfontsize\c!em}\v!italic#2%
+ {\doifelsevalue{\??ft \normalizedbodyfontsize\c!em}\v!schuin#1%
+ {\doifvalue {\??ft \normalizedbodyfontsize\c!em}\v!italic#2}}}}
\def\emphasistypeface{\doemphasistypeface\sl\it}
\def\emphasisboldface{\doemphasistypeface\bs\bi}
@@ -3046,21 +3207,21 @@
\unexpanded\def\em%
{\relax
- \ifdim\fontdimen1\font>\!!zeropoint\relax
+ \ifdim\fontdimen1\font>\zeropoint
\settrue\emneeded
\else
\setfalse\emneeded
\fi
\setemphasisboldface % new
- \ifnum\fam=\itfam
+ \ifx\fontalternative\c!it % \ifnum\fam=\itfam
\def\emphasistypeface{\it}\tf
- \else\ifnum\fam=\slfam
+ \else\ifx\fontalternative\c!sl % \ifnum\fam=\slfam
\def\emphasistypeface{\sl}\tf
- \else\ifnum\fam=\bffam
+ \else\ifx\fontalternative\c!bf % \ifnum\fam=\bffam
\emphasisboldface
- \else\ifnum\fam=\bsfam
+ \else\ifx\fontalternative\c!bs % \ifnum\fam=\bsfam
\def\emphasisboldface{\bs}\bf
- \else\ifnum\fam=\bifam
+ \else\ifx\fontalternative\c!bi % \ifnum\fam=\bifam
\def\emphasisboldface{\bi}\bf
\else
\emphasistypeface
@@ -3079,9 +3240,9 @@
\let\setemphasisboldface\relax
\def\bf%
{\relax
- \ifnum\fam=\itfam
+ \ifx\fontalternative\c!it % \ifnum\fam=\itfam
\bi
- \else\ifnum\fam=\slfam
+ \else\ifx\fontalternative\c!sl % \ifnum\fam=\slfam
\bs
\else
\normalbf
@@ -3260,17 +3421,20 @@
\fetchruntimecommand \showfontstyle {\f!fontprefix\s!run}
%D \macros
-%D {getglyph}
+%D {getglyph, symbolicfont}
%D
%D Individual glyphs can be accessed by using
%D
%D \starttypen
%D \getglyph{fontname}{character}
%D \stoptypen
-%D
+%D
%D This macro is used in for instance the symbol modules and
%D as one can see, it does obey the small and even smaller
-%D sizes.
+%D sizes. The \type {\symbolicfont} macro can be used to
+%D switch to a font named \type {fontname} (see \type
+%D {cont-log} and \type {symb-eur} for examples of symbolic
+%D definitions.
\def\fontstringA%
{\ifx\fontstyle\c!rm \s!Serif \else
@@ -3285,11 +3449,11 @@
\s!Serif \fi\fi\fi}
\def\fontstringC%
- {\ifnum\fam=\bffam \s!Bold \else
- \ifnum\fam=\slfam \s!Slanted \else
- \ifnum\fam=\itfam \s!Italic \else
- \ifnum\fam=\bsfam \s!BoldSlanted \else
- \ifnum\fam=\bifam \s!BoldItalic \s!Regular \fi\fi\fi\fi\fi}
+ {\ifx\fontalternative\c!bf \s!Bold \else
+ \ifx\fontalternative\c!sl \s!Slanted \else
+ \ifx\fontalternative\c!it \s!Italic \else
+ \ifx\fontalternative\c!bs \s!BoldSlanted \else
+ \ifx\fontalternative\c!bi \s!BoldItalic \fi\fi\fi\fi\fi}
\beginETEX \ifcsname
@@ -3326,9 +3490,13 @@
\endTEX
+\def\symbolicfont#1% see cont-log.tex for example usage
+ {\definedfont[\glyphfontfile{#1} sa *]}
+
\def\getglyph#1#2%
%{{\definefont[\s!dummy][\glyphfontfile{#1} sa \currentfontscale]\dummy#2}}
- {{\definefont[\s!dummy][\glyphfontfile{#1} sa *]\dummy#2}}
+ %{{\definefont[\s!dummy][\glyphfontfile{#1} sa *]\dummy#2}}
+ {{\symbolicfont{#1}#2}}
%D The last implementation of \type {\getglyph} permits
%D definitions like:
@@ -3694,6 +3862,9 @@
\definealternativestyle [\v!kleinvetschuin,\v!kleinschuinvet] [\bsx] []
\definealternativestyle [\v!kleinvetitalic,\v!kleinitalicvet] [\bix] []
+\definealternativestyle [\v!kleinkorps] [\setsmallbodyfont] []
+\definealternativestyle [\v!grootkorps] [\setbigbodyfont] []
+
%D We treat {\sc Small Caps} and \kap {Pseudo Caps} a bit
%D different. We also provide an \WOORD {uppercase} style.
@@ -3725,14 +3896,23 @@
%D The next macro is used to map non latin fontnames on
%D fonts. See \type {font-uni} for an example of its use.
-\def\fontstylesuffix%
- {\ifnum\fam=\tffam \s!Regular \else
- \ifnum\fam=\bffam \s!Bold \else
- \ifnum\fam=\slfam \s!Slanted \else
- \ifnum\fam=\itfam \s!Italic \else
- \ifnum\fam=\bsfam \s!BoldSlanted \else
- \ifnum\fam=\bifam \s!BoldItalic \else
- \s!Regular \fi\fi\fi\fi\fi\fi}%
+%\def\fontstylesuffix%
+% {\ifnum\fam=\tffam \s!Regular \else
+% \ifnum\fam=\bffam \s!Bold \else
+% \ifnum\fam=\slfam \s!Slanted \else
+% \ifnum\fam=\itfam \s!Italic \else
+% \ifnum\fam=\bsfam \s!BoldSlanted \else
+% \ifnum\fam=\bifam \s!BoldItalic \else
+% \s!Regular \fi\fi\fi\fi\fi\fi}%
+
+\def\fontstylesuffix% why the \s!Regular ? see \getglyph
+ {\ifx\fontalternative\c!tf \s!Regular \else
+ \ifx\fontalternative\c!bf \s!Bold \else
+ \ifx\fontalternative\c!sl \s!Slanted \else
+ \ifx\fontalternative\c!it \s!Italic \else
+ \ifx\fontalternative\c!bs \s!BoldSlanted \else
+ \ifx\fontalternative\c!bi \s!BoldItalic \else
+ \s!Regular \fi\fi\fi\fi\fi\fi}%
%D We still have to take care of \type{\xi}, so: