diff options
Diffstat (limited to 'tex/context/base/mkiv/font-mat.mklx')
-rw-r--r-- | tex/context/base/mkiv/font-mat.mklx | 490 |
1 files changed, 0 insertions, 490 deletions
diff --git a/tex/context/base/mkiv/font-mat.mklx b/tex/context/base/mkiv/font-mat.mklx deleted file mode 100644 index 8ee5f4043..000000000 --- a/tex/context/base/mkiv/font-mat.mklx +++ /dev/null @@ -1,490 +0,0 @@ -%D \module -%D [ file=font-mat, -%D version=2011.01.13, % (copied fron font-ini) -%D title=\CONTEXT\ Font Macros, -%D subtitle=Math, -%D author=Hans Hagen, -%D date=\currentdate, -%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] -%C -%C This module is part of the \CONTEXT\ macro||package and is -%C therefore copyrighted by \PRAGMA. See mreadme.pdf for -%C details. - -\writestatus{loading}{ConTeXt Font Macros / Math} - -\unprotect - -%D Be nice: - -\ifdefined\??fontinstanceready \else \installcorenamespace{fontinstanceready} \fi -\ifdefined\??fontinstancebasic \else \installcorenamespace{fontinstancebasic} \fi -\ifdefined\??fontinstanceclass \else \installcorenamespace{fontinstanceclass} \fi - -%D The order 3 2 1 of siuze matters: needed for math-fbk relative size storage! - -%D \macros -%D {textonly} -%D -%D Traditionally math has a big impact on font definitions, mainly because we need -%D to define alphabet variants using families and fonts. This means that one can -%D easily get 10 fonts loaded per math size. In \MKIV\ we use a different approach: -%D one family which has either a virtual font made of traditional fonts, or an -%D \OPENTYPE\ font that has it all. -%D -%D We currently use only one math family but in the future we might consider using a -%D second one for bold math. For the moment we keep the \MKII\ method of using a -%D token register for definitions but we already dropped the text and symbols ones -%D since they now live in the same family. - -\newtoks \t_font_math_strategies -\newconditional\c_font_synchronize_math_fonts \settrue\c_font_synchronize_math_fonts - -\protected\def\font_helpers_synchronize_math % math stuff in mmode - {\ifconditional\c_font_synchronize_math_fonts\the\t_font_math_strategies\fi} - -\permanent\protected\def\textonly{\setfalse\c_font_synchronize_math_fonts} % document this - -%D The main math font definer. We have removed some optimized code simply because we -%D now always have a fontclass. We could check for fontclass being default or empty -%D and save a few tests but it does not help us when no math is defined. -%D -%D Because we want to keep mr=.. and mb=... settings (read: not break downward -%D compatibility by enforcing mrlr etc) we need a bit more code that optimal. - -% todo: \c_font_fam_mr - -\let\c_font_fam_mr \zerocount % math regular -\let\c_font_fam_mr_lr\plusone % math regular l2r -\let\c_font_fam_mr_rl\plustwo % math regular r2l - -\let\c_font_fam_mb \plusthree % math bold -\let\c_font_fam_mb_lr\plusfour % math bold l2r -\let\c_font_fam_mb_rl\plusfive % math bold r2l - -\definesystemattribute[mathfamily][public] - -\newconditional\c_font_bidirectional_mathstrategy % can be default, not that much overhead: \settrue\c_font_bidirectional_mathstrategy -\newconditional\c_font_complete_bold_mathstrategy \settrue\c_font_complete_bold_mathstrategy - -% \frozen ... - -\def\mathtextsuffix {-text} -\def\mathscriptsuffix {-script} -\def\mathscriptscriptsuffix{-scriptscript} - -\def\mathsizesuffix{\ifcase\fontface\or\mathtextsuffix\or\mathscriptsuffix\or\mathscriptscriptsuffix\fi} - -%D Beware: truefontname also does a fallback on defaultfontclass so there -%D can be some interference here, which is why we use a different method -%D for bold. - -\def\font_helpers_set_math_family_a - {\ifcsname\??fontinstanceready\fontclass -\fontbody-\s!mm-\fontfamily-\fontsize\endcsname \setfalse\c_font_auto_size - \lastnamedcs \orelse - \ifcsname\??fontinstanceready\fontclass -\fontbody-\s!mm-\fontfamily \endcsname \settrue \c_font_auto_size - \lastnamedcs \else - \font_helpers_set_math_family_b - \fi} - -\def\font_helpers_set_math_family_b - {\ifcsname\??fontinstanceready\defaultfontclass-\fontbody-\s!mm-\fontfamily-\fontsize\endcsname \setfalse\c_font_auto_size - \lastnamedcs \orelse - \ifcsname\??fontinstanceready\defaultfontclass-\fontbody-\s!mm-\fontfamily \endcsname \settrue \c_font_auto_size - \lastnamedcs \else - \font_helpers_set_math_family_c - \fi} - -\def\font_helpers_set_math_family_c - {\ifcsname\??fontinstanceready \fontbody-\s!mm-\fontfamily-\fontsize\endcsname \setfalse\c_font_auto_size - \lastnamedcs \orelse - \ifcsname\??fontinstanceready \fontbody-\s!mm-\fontfamily \endcsname \settrue \c_font_auto_size - \lastnamedcs \else - \settrue \c_font_auto_size - \fi} - -\let\mathsizesuffix\empty - -\def\font_helpers_set_math_family_indeed#mrtag#family% \fontface etc are also used later on - {\let\savedfontbody\fontbody - \let\fontfamily#family% - % the order is important as we depend on known id's when completing fonts - % enabling is needed when we have fallbacks which spoils the families - \let\mathsizesuffix\mathscriptscriptsuffix\let\fontface\!!plusthree - \font_helpers_set_math_family_a\scriptscriptfont#mrtag\font % defines - \font_helpers_set_math_family_a\scriptscriptfont#mrtag\font % enables - \let\mathsizesuffix\mathscriptsuffix \let\fontface\!!plustwo - \font_helpers_set_math_family_a\scriptfont #mrtag\font % defines - \font_helpers_set_math_family_a\scriptfont #mrtag\font % enables - \let\mathsizesuffix\mathtextsuffix \let\fontface\!!plusone - \font_helpers_set_math_family_a\textfont #mrtag\font % defines - \font_helpers_set_math_family_a\textfont #mrtag\font % enables - \let\mathsizesuffix\empty \let\fontface\!!zerocount - \let\fontbody\savedfontbody - \setfalse\c_font_auto_size} - -\def\font_helpers_set_math_family_bold_a#font#mbfam#mrfam% - {\ifcsname\??fontinstanceready\fontclass-\fontbody-\s!mm-\fontfamily-\fontsize\endcsname \setfalse\c_font_auto_size - \lastnamedcs #font#mbfam\font \orelse - \ifcsname\??fontinstanceready\fontclass-\fontbody-\s!mm-\fontfamily \endcsname \settrue \c_font_auto_size - \lastnamedcs #font#mbfam\font \else - #font#mbfam#font#mrfam% - \fi} - -\def\font_helpers_set_math_family_bold_indeed#mbfam#familytag#mrfam% \c_font_fam_mb \s!mb \c_font_fam_mr - {\let\savedfontclass\defaultfontclass - \let\defaultfontclass\fontclass % else truefontname falls back on the wrong one - \let\savedfontbody\fontbody - \let\fontfamily#familytag% - \let\mathsizesuffix\mathscriptscriptsuffix\let\fontface\!!plusthree - \font_helpers_set_math_family_bold_a\scriptscriptfont#mbfam#mrfam% defines - \font_helpers_set_math_family_bold_a\scriptscriptfont#mbfam#mrfam% enables - \let\mathsizesuffix\mathscriptsuffix \let\fontface\!!plustwo - \font_helpers_set_math_family_bold_a\scriptfont #mbfam#mrfam% defines - \font_helpers_set_math_family_bold_a\scriptfont #mbfam#mrfam% enables - \let\mathsizesuffix\mathtextsuffix \let\fontface\!!plusone - \font_helpers_set_math_family_bold_a\textfont #mbfam#mrfam% defines - \font_helpers_set_math_family_bold_a\textfont #mbfam#mrfam% enables - \let\mathsizesuffix\empty \let\fontface\!!zerocount - \let\fontbody\savedfontbody - \let\defaultfontclass\savedfontclass - \setfalse\c_font_auto_size} - -% optimized: math fonts are never changed (10K \bfa $x$: 3.2 => 2.5 (baseline 1.0)) -% -% sort of tricky: we cannot reset in \everybeforedefinetypeface as we don't know -% all sizes so we postpone the optimization to the first starttext -% -% pitfall: we should reset 'm when a fontclass name is reused - -\newconditional\optimizemathfontdefinitions \settrue\optimizemathfontdefinitions - -\def\font_helpers_set_math_family#mrfam#familytag% - {\ifconditional\optimizemathfontdefinitions - \ifcsname\??fontinstanceclass\fontclass-\fontbody-\s!mm-#familytag-\fontsize-1\endcsname - % \writestatus{fonts}{math: reusing \fontclass\fontbody\s!mm#familytag\fontsize1}% - \font_helpers_preset_math_family_indeed#mrfam#familytag% - \else - % \writestatus{fonts}{math: defining \fontclass\fontbody\s!mm#familytag\fontsize1}% - \font_helpers_set_math_family_indeed#mrfam#familytag% - \fi - \else - \font_helpers_set_math_family_indeed#mrfam#familytag% - \fi} - -\def\font_helpers_set_math_family_bold#mbfam#familytag#mrfam% - {\ifconditional\optimizemathfontdefinitions - %\ifcsname\??fontinstanceclass\fontclass-\textface-\s!mm-#familytag-\fontsize-1\endcsname - \ifcsname\??fontinstanceclass\fontclass-\fontbody-\s!mm-#familytag-\fontsize-1\endcsname - \font_helpers_preset_math_family_indeed#mbfam#familytag% - \else - \font_helpers_set_math_family_bold_indeed#mbfam#familytag#mrfam% - \fi - \else - \font_helpers_set_math_family_bold_indeed#mbfam#familytag#mrfam% - \fi} - -%D It can happen that we use a bodyfont with no math in which case we have a problem -%D with setting the global bodyfont size in the page builder. For instance in: -%D -%D \starttext -%D \definetypeface[test][rm][serif][pagella][default] -%D \setupbodyfont[test] -%D test -%D \stoptext -%D -%D This is why we need the check. At the cost of some extra checking we gain a -%D little in restoring global states and, what's more important, we get rid of large -%D math parameter push/pop in tracingall when not needed. - -\def\font_helpers_preset_math_family_indeed#fam#familytag% - {\expandafter\let\expandafter\v_font_math_one\csname\??fontinstanceclass\fontclass-\fontbody-\s!mm-#familytag-\fontsize-1\endcsname - \ifx\v_font_math_one\relax - \font_helpers_preset_math_family_warning - \orelse\ifnum\fontid\textfont#fam=\fontid\v_font_math_one\else - \font_helpers_preset_math_family_indeed_changed#fam#familytag% - \fi} - -\def\font_helpers_preset_math_family_warning - {\writestatus{fonts}{math: unset for global bodyfont \fontclass\space at \fontbody}} - -\def\font_helpers_preset_math_family_indeed_changed#fam#familytag% - {\scriptscriptfont#fam\csname\??fontinstanceclass\fontclass-\fontbody-\s!mm-#familytag-\fontsize-3\endcsname - \scriptfont #fam\csname\??fontinstanceclass\fontclass-\fontbody-\s!mm-#familytag-\fontsize-2\endcsname - \textfont #fam\v_font_math_one} - -\let\font_helpers_reset_fontclass_math_families\gobbleoneargument - -%D It would be nice if characters could be defined in a neutral way (say fam 255) -%D and be mapped to a real family during noad list construction. However, this -%D changes tex in critical places so for the moment we simulate this using -%D manipulation. -%D -%D For tracing purposes we use three families but in l2r mode 1 and 2 are copies of -%D 0 while in rl mode 0 is a copy of 1. There is no real overhead involved in this. -%D This also permits different font definitions for normal and mixed. - -\let\m_font_class_direction\empty -\let\m_font_class_features \empty -\let\m_font_class_fallbacks\empty -\let\m_font_class_goodies \empty - -\let\m_font_direction\empty -\let\m_font_features \empty -\let\m_font_fallbacks\empty -\let\m_font_goodies \empty - -\appendtoks % can be analyzed once - % why here .. - %\edef\m_font_class_direction{\ifcsname\??fontclass\fontclass\s!mm\s!direction\endcsname\csname\??fontclass\fontclass\s!mm\s!direction\endcsname\fi}% - \edef\m_font_class_direction{\begincsname\??fontclass\fontclass\s!mm\s!direction\endcsname}% - % ... - \ifx\m_font_class_direction\v!both - \settrue\c_font_bidirectional_mathstrategy - \else - \setfalse\c_font_bidirectional_mathstrategy - \fi -\to \t_font_math_strategies - -\def\font_helpers_bidirectional_mathstrategy_yes - {\font_helpers_set_math_family\c_font_fam_mr_lr\s!mrlr - \font_helpers_set_math_family\c_font_fam_mr_rl\s!mrrl - \ifnum\fontid\textfont\c_font_fam_mr=\fontid\textfont\c_font_fam_mr_lr\else - \font_helpers_bidirectional_mathstrategy_yes_changed - \fi} - -\def\font_helpers_bidirectional_mathstrategy_yes_changed - {\textfont \c_font_fam_mr\textfont \c_font_fam_mr_lr - \scriptfont \c_font_fam_mr\scriptfont \c_font_fam_mr_lr - \scriptscriptfont\c_font_fam_mr\scriptscriptfont\c_font_fam_mr_lr} - -\def\font_helpers_bidirectional_mathstrategy_nop - {\font_helpers_set_math_family\c_font_fam_mr\s!mr - \ifnum\fontid\textfont\c_font_fam_mr_rl=\fontid\textfont\c_font_fam_mr\else - \font_helpers_bidirectional_mathstrategy_nop_changed - \fi} - -\def\font_helpers_bidirectional_mathstrategy_nop_changed - {\textfont \c_font_fam_mr_lr\textfont \c_font_fam_mr - \scriptfont \c_font_fam_mr_lr\scriptfont \c_font_fam_mr - \scriptscriptfont\c_font_fam_mr_lr\scriptscriptfont\c_font_fam_mr - \textfont \c_font_fam_mr_rl\textfont \c_font_fam_mr - \scriptfont \c_font_fam_mr_rl\scriptfont \c_font_fam_mr - \scriptscriptfont\c_font_fam_mr_rl\scriptscriptfont\c_font_fam_mr} - -\appendtoks - \ifconditional\c_font_bidirectional_mathstrategy - \font_helpers_bidirectional_mathstrategy_yes - \else - \font_helpers_bidirectional_mathstrategy_nop - \fi -\to \t_font_math_strategies - -\def\font_helpers_complete_bold_mathstrategy_yes_bidi - {\font_helpers_set_math_family_bold\c_font_fam_mb_lr\s!mblr\c_font_fam_mr_lr - \font_helpers_set_math_family_bold\c_font_fam_mb_rl\s!mbrl\c_font_fam_mr_rl - \ifnum\fontid\textfont\c_font_fam_mb=\fontid\textfont\c_font_fam_mb_lr\else - \font_helpers_complete_bold_mathstrategy_yes_bidi_changed - \fi} - -\def\font_helpers_complete_bold_mathstrategy_yes_bidi_changed - {\textfont \c_font_fam_mb\textfont \c_font_fam_mb_lr - \scriptfont \c_font_fam_mb\scriptfont \c_font_fam_mb_lr - \scriptscriptfont\c_font_fam_mb\scriptscriptfont\c_font_fam_mb_lr} - -\def\font_helpers_complete_bold_mathstrategy_yes - {\font_helpers_set_math_family_bold\c_font_fam_mb\s!mb\c_font_fam_mr\relax - \ifnum\fontid\textfont\c_font_fam_mb_rl=\fontid\textfont\c_font_fam_mb\else - \font_helpers_complete_bold_mathstrategy_yes_changed - \fi} - -\def\font_helpers_complete_bold_mathstrategy_yes_changed - {\textfont \c_font_fam_mb_rl\textfont \c_font_fam_mb - \scriptfont \c_font_fam_mb_rl\scriptfont \c_font_fam_mb - \scriptscriptfont\c_font_fam_mb_rl\scriptscriptfont\c_font_fam_mb - \textfont \c_font_fam_mb_lr\textfont \c_font_fam_mb - \scriptfont \c_font_fam_mb_lr\scriptfont \c_font_fam_mb - \scriptscriptfont\c_font_fam_mb_lr\scriptscriptfont\c_font_fam_mb} - -\def\font_helpers_complete_bold_mathstrategy_nop - {\ifnum\fontid\textfont\c_font_fam_mb=\fontid\textfont\c_font_fam_mr\else - \font_helpers_complete_bold_mathstrategy_nop_changed - \fi} - -\def\font_helpers_complete_bold_mathstrategy_nop_changed - {\textfont \c_font_fam_mb \textfont \c_font_fam_mr - \scriptfont \c_font_fam_mb \scriptfont \c_font_fam_mr - \scriptscriptfont\c_font_fam_mb \scriptscriptfont\c_font_fam_mr - \textfont \c_font_fam_mb_lr\textfont \c_font_fam_mr_lr - \scriptfont \c_font_fam_mb_lr\scriptfont \c_font_fam_mr_lr - \scriptscriptfont\c_font_fam_mb_lr\scriptscriptfont\c_font_fam_mr_lr - \textfont \c_font_fam_mb_rl\textfont \c_font_fam_mr_rl - \scriptfont \c_font_fam_mb_rl\scriptfont \c_font_fam_mr_rl - \scriptscriptfont\c_font_fam_mb_rl\scriptscriptfont\c_font_fam_mr_rl} - -\def\font_helpers_apply_complete_bold_mathstrategy - {\ifconditional\c_font_complete_bold_mathstrategy - \ifconditional\c_font_bidirectional_mathstrategy - \font_helpers_complete_bold_mathstrategy_yes_bidi - \else - \font_helpers_complete_bold_mathstrategy_yes - \fi - \else - \font_helpers_complete_bold_mathstrategy_nop - \fi} - -\appendtoks - \font_helpers_apply_complete_bold_mathstrategy -\to \t_font_math_strategies - -\ifdefined\defaultmathfamily \else - \setnewconstant\defaultmathfamily\zerocount -\fi - -\appendtoks - \fam\defaultmathfamily % all characters and symbols are in this family -\to \everymathematics - -\protected\def\font_helpers_synchronize_math_family_mr - {\c_attr_mathfamily\ifconditional\c_font_bidirectional_mathstrategy - \ifconditional\c_math_right_to_left - \plustwo - \else - \plusone - \fi - \else - \zerocount - \fi} - -\protected\def\font_helpers_synchronize_math_family_mb - {\c_attr_mathfamily\ifconditional\c_font_bidirectional_mathstrategy - \ifconditional\c_math_right_to_left - \ifconditional\c_font_pseudo_bold_math_state\pluseight\else\plusfive\fi - \else - \ifconditional\c_font_pseudo_bold_math_state\plusseven\else\plusfour\fi - \fi - \else - \ifconditional\c_font_pseudo_bold_math_state\plussix\else\plusthree\fi - \fi} - -\installcorenamespace{fontmathsynchronizer} -\installcorenamespace{fontmathstoredstrategy} - -\letvalue{\??fontmathsynchronizer\s!tf }\font_helpers_synchronize_math_family_mr -\letvalue{\??fontmathsynchronizer\s!sl }\font_helpers_synchronize_math_family_mr -\letvalue{\??fontmathsynchronizer\s!it }\font_helpers_synchronize_math_family_mr -\letvalue{\??fontmathsynchronizer\s!bf }\font_helpers_synchronize_math_family_mb -\letvalue{\??fontmathsynchronizer\s!bs }\font_helpers_synchronize_math_family_mb -\letvalue{\??fontmathsynchronizer\s!bi }\font_helpers_synchronize_math_family_mb -\letvalue{\??fontmathsynchronizer\empty}\font_helpers_synchronize_math_family_mr - -% \def\font_helpers_synchronize_math_family -% {\csname\??fontmathsynchronizer\ifcsname\??fontmathsynchronizer\fontalternative\endcsname\fontalternative\fi\endcsname} - -\def\font_helpers_synchronize_math_family - {\ifcsname\??fontmathsynchronizer\fontalternative\endcsname - \lastnamedcs - \else - \font_helpers_synchronize_math_family_mr - \fi} - -\appendtoks - \ifnum\fontid\textfont\zerocount=\fontid\textfont\plusthree - \letvalue{\??fontmathstoredstrategy\fontclass}\font_helpers_set_math_partial_bold_strategy - \else - \letvalue{\??fontmathstoredstrategy\fontclass}\font_helpers_set_math_full_bold_strategy - \fi -\to \t_font_math_strategies - -%def\font_helpers_synchronize_math_bold_strategy{\csname\??fontmathstoredstrategy\fontclass\endcsname} -\def\font_helpers_synchronize_math_bold_strategy{\begincsname\??fontmathstoredstrategy\fontclass\endcsname} - -\newconditional\c_font_pseudo_bold_math_state - -\def\font_helpers_set_math_partial_bold_strategy{\settrue \c_font_pseudo_bold_math_state} -\def\font_helpers_set_math_full_bold_strategy {\setfalse\c_font_pseudo_bold_math_state} - -\appendtoks - \font_helpers_synchronize_math_bold_strategy -\to \everymathematics - -%D Bold is somewhat special as we might want both full-bold-math mixed regular-math, -%D as well as automatic adaption to outer bold (in titles and inline text bold) so -%D we will need explicit switches as well as an automatic one. (We will use lucida -%D as an example.) - -\ifdefined\mathdefault \else \let\mathdefault\relax \fi - -\newconditional\c_math_bold - -\protected\def\mr % math regular - {\ifmmode - \font_helpers_synchronize_math_family_mr - \else - \font_helpers_set_current_font_alternative\s!mr - \fi - \mathdefault - \setfalse\c_math_bold} - -\protected\def\mb % math bold - {\ifmmode - \font_helpers_synchronize_math_family_mb - \else - \font_helpers_set_current_font_alternative\s!mb - \fi - \mathdefault - \settrue\c_math_bold} - -\appendtoks - \font_helpers_synchronize_math_family % auto bold -\to \everymathematics - -\appendtoks - \ifconditional\c_math_bold\mb\fi -\to \everymathematics - -%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 - -\setnewconstant\synchronizebigmathflag\plusone - -\appendtoks - \ifcase\synchronizebigmathflag - % never - \or - \synchronizebigmath - \or - % always - \fi -\to \everymathematics - -\protected\def\nobigmath {\synchronizebigmathflag\zerocount} -\protected\def\autobigmath{\synchronizebigmathflag\plusone\synchronizebigmath} -\protected\def\bigmath {\synchronizebigmathflag\plustwo\synchronizebigmath} - -\let\bigmathfontsize\empty - -\protected\def\synchronizebigmath - {\ifx\bigmathfontsize\fontsize - % already in sync - \else - \let\bigmathfontsize\fontsize - \font_helpers_synchronize_math - \fi} - -\protected\def\font_helpers_check_big_math_synchronization - {\ifcase\synchronizebigmathflag - % never - \or - \ifmmode \synchronizebigmath \fi - \or - \synchronizebigmath - \fi} - -\protect \endinput |