%D \module %D [ file=t-simplefonts, %D version=2013.02.03, %D title=\CONTEXT\ User Module, %D subtitle=Simplefonts, %D author=Wolfgang Schuster, %D date=\currentdate, %D copyright=Wolfgang Schuster, %D email=schuster.wolfgang@googlemail.com, %D license=GNU General Public License] %C Copyright (C) 2010 Wolfgang Schuster %C %C This program is free software: you can redistribute it and/or modify %C it under the terms of the GNU General Public License as published by %C the Free Software Foundation, either version 3 of the License, or %C (at your option) any later version. %C %C This program is distributed in the hope that it will be useful, %C but WITHOUT ANY WARRANTY; without even the implied warranty of %C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %C GNU General Public License for more details. %C %C You should have received a copy of the GNU General Public License %C along with this program. If not, see . \writestatus{loading}{ConTeXt User Module / Simplefonts} \unprotect \startmodule[simplefonts] %D Constants and variables \startinterface all \setinterfaceconstant {regular} {regular} \setinterfaceconstant {italic} {italic} \setinterfaceconstant {slanted} {slanted} \setinterfaceconstant {bold} {bold} \setinterfaceconstant {bolditalic} {bolditalic} \setinterfaceconstant {boldslanted} {boldslanted} \setinterfaceconstant {caps} {caps} \setinterfaceconstant {italiccaps} {italiccaps} \setinterfaceconstant {slantedcaps} {slantedcaps} \setinterfaceconstant {boldcaps} {boldcaps} \setinterfaceconstant {bolditaliccaps} {bolditaliccaps} \setinterfaceconstant {boldslantedcaps} {boldslantedcaps} \setinterfaceconstant {scale} {scale} \setinterfaceconstant {range} {range} \setinterfaceconstant {weight} {weight} \setinterfaceconstant {features} {features} \setinterfaceconstant {regularfont} {regularfont} \setinterfaceconstant {italicfont} {italicfont} \setinterfaceconstant {slantedfont} {slantedfont} \setinterfaceconstant {boldfont} {boldfont} \setinterfaceconstant {bolditalicfont} {bolditalicfont} \setinterfaceconstant {boldslantedfont} {boldslantedfont} \setinterfaceconstant {capsfont} {capsfont} \setinterfaceconstant {italiccapsfont} {italiccapsfont} \setinterfaceconstant {slantedcapsfont} {slantedcapsfont} \setinterfaceconstant {boldcapsfont} {boldcapsfont} \setinterfaceconstant {bolditaliccapsfont} {bolditaliccapsfont} \setinterfaceconstant {boldslantedcapsfont} {boldslantedcapsfont} \setinterfaceconstant {regularfeatures} {regularfeatures} \setinterfaceconstant {italicfeatures} {italicfeatures} \setinterfaceconstant {slantedfeatures} {slantedfeatures} \setinterfaceconstant {boldfeatures} {boldfeatures} \setinterfaceconstant {bolditalicfeatures} {bolditalicfeatures} \setinterfaceconstant {boldslantedfeatures} {boldslantedfeatures} \setinterfaceconstant {smallcapsfeatures} {smallcapsfeatures} \setinterfaceconstant {capsfeatures} {capsfeatures} \setinterfaceconstant {italiccapsfeatures} {italiccapsfeatures} \setinterfaceconstant {slantedcapsfeatures} {slantedcapsfeatures} \setinterfaceconstant {boldcapsfeatures} {boldcapsfeatures} \setinterfaceconstant {bolditaliccapsfeatures} {bolditaliccapsfeatures} \setinterfaceconstant {boldslantedcapsfeatures} {boldslantedcapsfeatures} \setinterfaceconstant {typeface} {typeface} \setinterfaceconstant {protrusion} {protrusion} \setinterfaceconstant {contextversion} {contextversion} \setinterfaceconstant {sf} {sf} \setinterfaceconstant {bc} {bc} \setinterfaceconstant {mode} {mode} \setinterfaceconstant {check} {check} \stopinterface \startinterface all \setinterfacevariable {simplefonts} {simplefonts} \setinterfacevariable {simplefont} {simplefont} \setinterfacevariable {style} {style} \setinterfacevariable {suffix} {suffix} \setinterfacevariable {serif} {serif} \setinterfacevariable {sans} {sans} \setinterfacevariable {mono} {mono} \setinterfacevariable {math} {math} \setinterfacevariable {mainfont} {mainfont} \setinterfacevariable {sansfont} {sansfont} \setinterfacevariable {monofont} {monofont} \setinterfacevariable {mathfont} {mathfont} \setinterfacevariable {handwritingfont} {handwritingfont} \setinterfacevariable {calligraphicfont} {calligraphicfont} \setinterfacevariable {cjk} {cjk} \setinterfacevariable {fallback} {fallback} \setinterfacevariable {condensed} {condensed} \setinterfacevariable {light} {light} \setinterfacevariable {heavy} {heavy} \setinterfacevariable {feature} {feature} \setinterfacevariable {handwriting} {handwriting} \setinterfacevariable {calligraphy} {calligraphy} \setinterfacevariable {fontfamily} {fontfamily} \setinterfacevariable {node} {node} \stopinterface \startinterface all \setinterfaceelement {set} {set} \stopinterface %D System constants \definesystemconstant {Handwriting} \definesystemconstant {Calligraphy} \definesystemconstant {Simplefont} %D Messages \definemessageconstant {simplefonts} \startinterface all \setinterfacemessage{simplefonts}{title}{simplefonts} \setinterfacemessage{simplefonts}{1} {font '--' not found} \setinterfacemessage{simplefonts}{2} {feature '--' is not defined} \setinterfacemessage{simplefonts}{3} {your context is too old, you need at last version '--'} \setinterfacemessage{simplefonts}{4} {script '--' is not defined} \setinterfacemessage{simplefonts}{5} {language '--' is not defined} \stopinterface %D Module setup \setupmodule [ \c!size=12pt, \c!style=rm] %D Lua code \ctxloadluafile{t-simplefonts}{} %D Namespace \installnamespace {simplefonts} \installbasicautosetuphandler \????simplefonts {simplefonts} \????simplefonts %D Counter \newcount\c_simplefonts_typeface \newcount\c_simplefonts_fontfamily \newcount\c_simplefonts_mainfont \newcount\c_simplefonts_sansfont \newcount\c_simplefonts_monofont \newcount\c_simplefonts_handwritingfont \newcount\c_simplefonts_calligraphicfont %D Boolean \newconditional\c_simplefonts_done %D Tracing \def\enablesimplefonts {\settrue\c_simplefonts_done } \def\disablesimplefonts{\setfalse\c_simplefonts_done} %D Comma value lists \let\m_simplefonts_features \empty \let\m_simplefonts_localfeatures \empty \let\m_simplefonts_globalfeatures\empty \def\m_simplefonts_commands {\v!mainfont,\v!sansfont,\v!monofont,\v!mathfont,\v!handwritingfont,\v!calligraphicfont} \def\m_simplefonts_weight {\v!condensed,\v!light,\v!normal,\v!medium,\v!heavy} \def\m_simplefonts_alternative {\c!regular,\c!italic,\c!slanted,\c!bold,\c!bolditalic,\c!boldslanted,\c!caps, \c!italiccaps,\c!slantedcaps,\c!boldcaps,\c!bolditaliccaps,\c!boldslantedcaps} %D Simplefont style \definefontstyle [\c!sf,\v!simplefont] [\c!sf] \starttypescript [simplefont] [default] [size] \definebodyfont [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [sf] [default] \stoptypescript \definebodyfont [default] [sf] [tf=Simplefont sa 1, bf=SimplefontBold sa 1, it=SimplefontItalic sa 1, sl=SimplefontSlanted sa 1, bi=SimplefontBoldItalic sa 1, bs=SimplefontBoldSlanted sa 1, sc=SimplefontCaps sa 1] %D \macros %D {setupsimplefonts,presetsimplefonts} %D %D Internal helper macros \def\setupsimplefonts {\dosingleempty\dosetupsimplefonts} \def\dosetupsimplefonts[#1]% first argument is optional {\iffirstargument \getparameters[\????sf][#1]% \simplefonts_features{#1}\v!global \fi \ifconditional\c_simplefonts_done\simplefonts_bodyfont\fi} \def\presetsimplefonts[#1]% {\getparameters [#1] [\c!regularfont=, \c!italicfont=, \c!slantedfont=, \c!boldfont=, \c!bolditalicfont=, \c!boldslantedfont=, \c!capsfont=, \c!italiccapsfont=, \c!slantedcapsfont=, \c!boldcapsfont=, \c!bolditaliccapsfont=, \c!boldslantedcapsfont=, \c!features=\@@@@sffeatures, \c!regularfeatures=\simplefontsparameter\c!features, \c!italicfeatures=\simplefontsparameter\c!features, \c!slantedfeatures=\simplefontsparameter\c!features, \c!boldfeatures=\simplefontsparameter\c!features, \c!bolditalicfeatures=\simplefontsparameter\c!features, \c!boldslantedfeatures=\simplefontsparameter\c!features, \c!smallcapsfeatures=\@@@@sfsmallcapsfeatures, \c!capsfeatures=\simplefontsparameter\c!smallcapsfeatures, \c!italiccapsfeatures=\simplefontsparameter\c!smallcapsfeatures, \c!slantedcapsfeatures=\simplefontsparameter\c!smallcapsfeatures, \c!boldcapsfeatures=\simplefontsparameter\c!smallcapsfeatures, \c!bolditaliccapsfeatures=\simplefontsparameter\c!smallcapsfeatures, \c!boldslantedcapsfeatures=\simplefontsparameter\c!smallcapsfeatures, \c!weight=\v!normal, \c!mode=, % the three keys mode, expansion and protrusion \c!expansion=, % are reset for font command when you select \c!protrusion=, % a new font to avoid conflicts or unwanted effects \c!scale=1.0]} \setvalue{\????sf:\v!style :\v!serif }{rm} \setvalue{\????sf:\v!style :\v!sans }{ss} \setvalue{\????sf:\v!style :\v!mono }{tt} \setvalue{\????sf:\v!style :\v!math }{mm} \setvalue{\????sf:\v!style :\v!handwriting}{hw} \setvalue{\????sf:\v!style :\v!calligraphy}{cg} \setvalue{\????sf:\v!style :\v!simplefont }{sf} \letvalue{\????sf:\v!suffix:\v!serif }\s!Serif \letvalue{\????sf:\v!suffix:\v!sans }\s!Sans \letvalue{\????sf:\v!suffix:\v!mono }\s!Mono \letvalue{\????sf:\v!suffix:\v!handwriting}\s!Handwriting \letvalue{\????sf:\v!suffix:\v!calligraphy}\s!Calligraphy \letvalue{\????sf:\v!suffix:\v!simplefont }\s!Simplefont \definetypescriptsynonym[latinmodernmath][latin-modern] \definetypescriptsynonym[asanamath] [asana] \def\sf_style #1{\csname\????sf:\v!style :#1\endcsname} \def\sf_suffix#1{\csname\????sf:\v!suffix:#1\endcsname} \starttexdefinition simplefonts_typeface #1#2#3 \definetypeface [#1] [\sf_style{\namedsimplefontsparameter{#3}\c!style}] [\namedsimplefontsparameter{#3}\c!style] [#2] [\s!default] [rscale=\namedsimplefontsparameter{#3}\c!scale] \stoptexdefinition \starttexdefinition simplefonts_family #1 \simplefonts_typeface{#1}{\v!mainfont :\number\c_simplefonts_mainfont }{\v!mainfont } \simplefonts_typeface{#1}{\v!sansfont :\number\c_simplefonts_sansfont }{\v!sansfont } \simplefonts_typeface{#1}{\v!monofont :\number\c_simplefonts_monofont }{\v!monofont } \simplefonts_typeface{#1}{\namedsimplefontsparameter\v!mathfont\c!typeface }{\v!mathfont } \simplefonts_typeface{#1}{\v!handwritingfont :\number\c_simplefonts_handwritingfont }{\v!handwritingfont } \simplefonts_typeface{#1}{\v!calligraphicfont :\number\c_simplefonts_calligraphicfont}{\v!calligraphicfont} \stoptexdefinition \starttexdefinition simplefonts_typescript #1#2 \startexpanded \starttypescript[#1][#2] \simplefonts_fontsynonym{\sf_suffix{#1}\empty }{\c!regular } \simplefonts_fontsynonym{\sf_suffix{#1}\s!Italic }{\c!italic } \simplefonts_fontsynonym{\sf_suffix{#1}\s!Slanted }{\c!slanted } \simplefonts_fontsynonym{\sf_suffix{#1}\s!Bold }{\c!bold } \simplefonts_fontsynonym{\sf_suffix{#1}\s!BoldItalic }{\c!bolditalic } \simplefonts_fontsynonym{\sf_suffix{#1}\s!BoldSlanted }{\c!boldslanted } \simplefonts_fontsynonym{\sf_suffix{#1}\s!Caps }{\c!caps } \simplefonts_fontsynonym{\sf_suffix{#1}\s!Italic\s!Caps }{\c!italiccaps } \simplefonts_fontsynonym{\sf_suffix{#1}\s!Slanted\s!Caps }{\c!slantedcaps } \simplefonts_fontsynonym{\sf_suffix{#1}\s!Bold\s!Caps }{\c!boldcaps } \simplefonts_fontsynonym{\sf_suffix{#1}\s!BoldItalic\s!Caps }{\c!bolditaliccaps } \simplefonts_fontsynonym{\sf_suffix{#1}\s!BoldSlanted\s!Caps}{\c!boldslantedcaps} \stoptypescript \stopexpanded \stoptexdefinition \starttexdefinition simplefonts_scripttypescript #1#2 \startexpanded \starttypescript[#1][#2] \simplefonts_fontsynonym{\sf_suffix{#1}}{\c!regular} \stoptypescript \stopexpanded \stoptexdefinition \starttexdefinition simplefonts_fontsynonym #1#2 \definefontsynonym [#1] [\simplefontsparameter{#2}] [\s!fallbacks=\currentsimplefont#2\s!fallbacks, \s!features=\currentsimplefont#2\s!features ] \stoptexdefinition \starttexdefinition simplefonts_fontfallback #1#2#3 \definefontfallback [#1#3\s!fallbacks] [\namedsimplefontsparameter{#2}{#3}*#2#3\s!features] [\namedsimplefontsparameter{#2}\c!range] [\s!rscale=\namedsimplefontsparameter{#2}\c!scale, \c!force=\namedsimplefontsparameter{#2}\c!force, \c!check=\namedsimplefontsparameter{#2}\c!check] \stoptexdefinition \starttexdefinition simplefonts_bodyfont \global\advance\c_simplefonts_typeface\plusone \simplefonts_family{\v!simplefonts:\number\c_simplefonts_typeface} \edef\@@@@sfstyle{\@@@@sfstyle} \edef\@@@@sfsize {\@@@@sfsize } \setupbodyfont [\v!simplefonts:\number\c_simplefonts_typeface \ifx\@@@@sfstyle\empty\else,\@@@@sfstyle\fi \ifx\@@@@sfsize \empty\else,\@@@@sfsize \fi] \stoptexdefinition \starttexdefinition simplefonts_fontfeature #1#2 \let\m_simplefonts_features\empty % expansion and protrusion could bet se either global for all styles or local for only one style \doifvaluesomething{\????sf\c!mode }{\appendtocommalist{\c!mode =\csname\????sf\c!mode \endcsname }\m_simplefonts_features} \doifvaluesomething{\????sf\c!expansion }{\appendtocommalist{\c!expansion =\csname\????sf\c!expansion \endcsname }\m_simplefonts_features} \doifvaluesomething{\????sf\c!protrusion }{\appendtocommalist{\c!protrusion=\csname\????sf\c!protrusion\endcsname }\m_simplefonts_features} \doifvaluesomething{\????sf#1\c!mode }{\appendtocommalist{\c!mode =\csname\????sf#1\c!mode \endcsname }\m_simplefonts_features} \doifvaluesomething{\????sf#1\c!expansion }{\appendtocommalist{\c!expansion =\csname\????sf#1\c!expansion \endcsname }\m_simplefonts_features} \doifvaluesomething{\????sf#1\c!protrusion}{\appendtocommalist{\c!protrusion=\csname\????sf#1\c!protrusion\endcsname }\m_simplefonts_features} \appendtocommalist\m_simplefonts_globalfeatures\m_simplefonts_features \appendtocommalist\m_simplefonts_localfeatures \m_simplefonts_features \normalexpanded{\definefontfeature[#1#2\s!features][\namedsimplefontsparameter{#1}{#2\s!features}][\m_simplefonts_features]} \stoptexdefinition \starttexdefinition simplefonts_features #1#2 \letvalueempty{m_simplefonts_#2features} \startprocessassignmentcommand[#1] \ctxlua{thirddata.simplefonts.parameter("##1","##2","m_simplefonts_#2features")} \stopprocessassignmentcommand \stoptexdefinition \starttexdefinition simplefonts_definetextfont [#1][#2][#3][#4] \edef\currentsimplefont{#1}\edef\currenttypeface{#2} \presetsimplefonts[\????sf\currentsimplefont] \getparameters[\????sf\currentsimplefont][#4] \simplefonts_features{#4}\v!local % parse assignment list for font features \startprocesscommacommand[\m_simplefonts_alternative] \simplefonts_fontfeature{#1}{##1} \ctxlua{thirddata.simplefonts.selectfont("#1","#3","\simplefontsparameter{##1\s!font}","##1","\simplefontsparameter\c!weight")} \stopprocesscommacommand \ifx\currenttypeface\v!simplefonts \ifx\currentsimplefont\v!mainfont \global\advance\c_simplefonts_mainfont\plusone \simplefonts_typescript{\simplefontsparameter\c!style}{\v!mainfont:\number\c_simplefonts_mainfont} \else\ifx\currentsimplefont\v!sansfont \global\advance\c_simplefonts_sansfont\plusone \simplefonts_typescript{\simplefontsparameter\c!style}{\v!sansfont:\number\c_simplefonts_sansfont} \else\ifx\currentsimplefont\v!monofont \global\advance\c_simplefonts_monofont\plusone \simplefonts_typescript{\simplefontsparameter\c!style}{\v!monofont :\number\c_simplefonts_monofont} \fi\fi\fi % don't create a typeface and set bodyfont when the module is loaded \ifconditional\c_simplefonts_done\simplefonts_bodyfont\fi \else \simplefonts_typescript{\simplefontsparameter\c!style}{#1} \simplefonts_typeface{#2}{#1}{#1} \fi \stoptexdefinition \starttexdefinition simplefonts_definescriptfont [#1][#2][#3][#4] \edef\currentsimplefont{#1}\edef\currenttypeface{#2} \presetsimplefonts[\????sf\currentsimplefont] \getparameters[\????sf\currentsimplefont][#4] \simplefonts_features{#4}\v!local % parse assignment list for font features \startprocesscommacommand[\c!regular] \simplefonts_fontfeature{#1}{##1} \ctxlua{thirddata.simplefonts.selectfont("#1","#3","\simplefontsparameter{##1\s!font}","##1","\simplefontsparameter\c!weight")} \stopprocesscommacommand \ifx\currenttypeface\v!simplefonts \ifx\currentsimplefont\v!handwritingfont \global\advance\c_simplefonts_handwritingfont\plusone \simplefonts_scripttypescript{\simplefontsparameter\c!style}{\v!handwritingfont :\number\c_simplefonts_handwritingfont} \else\ifx\currentsimplefont\v!calligraphicfont \global\advance\c_simplefonts_calligraphicfont\plusone \simplefonts_scripttypescript{\simplefontsparameter\c!style}{\v!calligraphicfont:\number\c_simplefonts_calligraphicfont} \fi\fi % don't create a typeface and set bodyfont when the module is loaded \ifconditional\c_simplefonts_done\simplefonts_bodyfont\fi \else \simplefonts_scripttypescript{\simplefontsparameter\c!style}{#1} \simplefonts_typeface{#2}{#1}{#1} \fi \stoptexdefinition \starttexdefinition simplefonts_definemathfont [#1][#2][#3][#4] \edef\currentsimplefont{#1}\edef\currenttypeface{#2} \presetsimplefonts[\????sf\currentsimplefont] \getparameters[\????sf\currentsimplefont][#4] % no fonts are searched for the math fonts, all what happens is to normalize % the given name and save it in a macro is is later used to load a predefined % typescript \setvalue{\????sf\currentsimplefont\c!typeface}{\ctxlua{thirddata.simplefonts.normalizefontname("#3")}} \ifx\currenttypeface\v!simplefonts % don't create a typeface and set bodyfont when the module is loaded \ifconditional\c_simplefonts_done\simplefonts_bodyfont\fi \else \simplefonts_typeface{#2}{\namedsimplefontsparameter\currentsimplefont\c!typeface}{#1} \fi \stoptexdefinition \starttexdefinition simplefonts_setfallbackfont [#1][#2][#3][#4] \edef\currentsimplefont{#1}\edef\currentmainfont{#2} \presetsimplefonts[\????sf\currentsimplefont] \getparameters[\????sf\currentsimplefont][#4] \simplefonts_features{#4}\v!local % parse assignment list for font features \startprocesscommacommand[\m_simplefonts_alternative] \simplefonts_fontfeature{#1}{##1} \ctxlua{thirddata.simplefonts.selectfont("#1","#3","\simplefontsparameter{##1\s!font}","##1","\simplefontsparameter\c!weight")} \simplefonts_fontfallback{#2}{#1}{##1} \stopprocesscommacommand \stoptexdefinition \starttexdefinition simplefonts_definefallbackfont [#1][#2][#3][#4] \edef\currentsimplefont{#1}\edef\currentmainfont{#2} % to allow more than one fallback font I save the settings % in a token register and set then all fallbacks in one turn % i should wrap this in a macro which checks if a register % is already defined, append the setting and flush all \unless\ifcsname\currentmainfont\s!fallbacks\endcsname\expandafter\newtoks\csname\currentmainfont\s!fallbacks\endcsname\fi \csname\currentmainfont\s!fallbacks\endcsname\expandafter{\the\expandafter\csname\currentmainfont\s!fallbacks\endcsname\simplefonts_setfallbackfont[#1][#2][#3][#4]} \the\expandafter\csname\currentmainfont\s!fallbacks\endcsname % the only way to make fallback fonts working with the module % is to create a new typeface and enable it as bodyfont % don't create a typeface or set the bodyfont when the module code is loaded \ifconditional\c_simplefonts_done \startprocesscommacommand[\m_simplefonts_commands] % why not \doifinset? \ifx\currentcommalistitem\currentmainfont\simplefonts_bodyfont\quitcommalist\fi \stopprocesscommacommand \fi \stoptexdefinition %D \macros %D {definefontcommand,definesubfontcommand} \def\definefontcommand {\dotripleempty\dodefinefontcommand} \def\dodefinefontcommand[#1][#2][#3]% {\getparameters[\????sf#1][\c!style=\v!serif,#3]% \processaction [\namedsimplefontsparameter{#1}\c!style] [ \v!serif=>\setvalue{\e!set#1}{\doquadrupleempty\simplefonts_definetextfont [#1][#2]}, \v!sans=>\setvalue{\e!set#1}{\doquadrupleempty\simplefonts_definetextfont [#1][#2]}, \v!mono=>\setvalue{\e!set#1}{\doquadrupleempty\simplefonts_definetextfont [#1][#2]}, \v!math=>\setvalue{\e!set#1}{\doquadrupleempty\simplefonts_definemathfont [#1][#2]}, \v!handwriting=>\setvalue{\e!set#1}{\doquadrupleempty\simplefonts_definescriptfont[#1][#2]}, \v!calligraphy=>\setvalue{\e!set#1}{\doquadrupleempty\simplefonts_definescriptfont[#1][#2]}, \s!unknown=>\setvalue{\e!set#1}{\doquadrupleempty\simplefonts_definetextfont [#1][#2]}]} \definefontcommand[\v!mainfont ][\v!simplefonts][\c!style=\v!serif ] \definefontcommand[\v!sansfont ][\v!simplefonts][\c!style=\v!sans ] \definefontcommand[\v!monofont ][\v!simplefonts][\c!style=\v!mono ] \definefontcommand[\v!mathfont ][\v!simplefonts][\c!style=\v!math ] \definefontcommand[\v!handwritingfont ][\v!simplefonts][\c!style=\v!handwriting] \definefontcommand[\v!calligraphicfont][\v!simplefonts][\c!style=\v!calligraphy] \def\definesubfontcommand {\dotripleempty\dodefinesubfontcommand} \def\dodefinesubfontcommand[#1][#2][#3]% {\getparameters[\????sf#1][\c!range=,#3]% \setvalue{\e!set#1}{\doquadrupleempty\simplefonts_definefallbackfont[#1][#2]}} \definesubfontcommand[\v!cjk\v!mainfont][\v!mainfont][\c!range={0x00400-0x2FA1F}] \definesubfontcommand[\v!cjk\v!sansfont][\v!sansfont][\c!range={0x00400-0x2FA1F}] \definesubfontcommand[\v!cjk\v!monofont][\v!monofont][\c!range={0x00400-0x2FA1F}] \definesubfontcommand[\v!mainfont\v!fallback][\v!mainfont][\c!range=] \definesubfontcommand[\v!sansfont\v!fallback][\v!sansfont][\c!range=] \definesubfontcommand[\v!monofont\v!fallback][\v!monofont][\c!range=] %D \macros %D {simplefont,definesimplefont} \def\simplefont {\dodoubleempty\dosimplefont} \def\dosimplefont[#1][#2]% {\getparameters[\????sf\v!default][\c!features=\v!default,\c!alternative=\v!regular,\c!weight=\v!normal,\c!size=,#2]% \edef\p_simplefont_size{\namedsimplefontsparameter\v!default\c!size}% \ifx\p_simplefont_size\empty\else \doifdimenstringelse\p_simplefont_size {\edef\simplefontsize{ at \p_simplefont_size}} {\edef\simplefontsize{ \p_simplefont_size}}% \fi \ctxlua{thirddata.simplefonts.selectfont("\v!default","#1","","\@@@@sfdefaultalternative","\@@@@sfdefaultweight")}% \normalexpanded{\definedfont[\csname\????sf\v!default\@@@@sfdefaultalternative\endcsname*\@@@@sfdefaultfeatures\p_simplefont_size]}} \def\definesimplefont {\dotripleempty\dodefinesimplefont} \def\dodefinesimplefont[#1][#2][#3]% {\getparameters[\????sf\v!default][\c!features=\v!default,\c!alternative=\v!regular,\c!weight=\v!normal,\c!size=,#3]% \edef\simplefontsize{\namedsimplefontsparameter\v!default\c!size}% \ifx\simplefontsize\empty\else \doifdimenstringelse\simplefontsize {\edef\simplefontsize{ at \simplefontsize}} {\edef\simplefontsize{ \simplefontsize}}% \fi \ctxlua{thirddata.simplefonts.selectfont("\v!default","#2","","\@@@@sfdefaultalternative","\@@@@sfdefaultweight")}% \normalexpanded{\definefont[#1][\csname\????sf\v!default\@@@@sfdefaultalternative\endcsname*\@@@@sfdefaultfeatures\simplefontsize][#3]}} %D \macros %D {simplefonttypeface,definesimplefonttypeface} \def\simplefonttypeface {\dodoubleempty\dosimplefonttypeface} \def\dosimplefonttypeface[#1][#2]% {\global\advance\c_simplefonts_fontfamily\plusone \simplefonts_definetextfont[\v!fontfamily][\v!fontfamily:\number\c_simplefonts_fontfamily][#1][\c!style=\v!simplefont,#2]% \switchtobodyfont[\v!fontfamily:\number\c_simplefonts_fontfamily]} \def\definesimplefonttypeface {\dotripleempty\dodefinesimplefonttypeface} \def\dodefinesimplefonttypeface[#1][#2][#3]% {\getparameters[\????sf#1][\c!style=\v!serif,#3]% \processaction [\namedsimplefontsparameter{#1}\c!style] [ \v!serif=>{\simplefonts_definetextfont [#1][#1][#2][#3]}, \v!sans=>{\simplefonts_definetextfont [#1][#1][#2][#3]}, \v!mono=>{\simplefonts_definetextfont [#1][#1][#2][#3]}, \v!math=>{\simplefonts_definemathfont [#1][#1][#2][#3]}, \v!handwriting=>{\simplefonts_definescriptfont[#1][#1][#2][#3]}, \v!calligraphy=>{\simplefonts_definescriptfont[#1][#1][#2][#3]}, \s!unknown=>{\simplefonts_definetextfont [#1][#1][#2][#3]}]} %D Font extensions \getparameters [\????sf\v!condensed] [ \c!regular={condensedregular,condregular,condensed}, \c!italic={condenseditalic,condensedoblique,conditalic,\namedsimplefontsparameter\v!condensed\c!regular}, \c!slanted={\namedsimplefontsparameter\v!condensed\c!italic}, \c!bold={condensedbold,condbold,\namedsimplefontsparameter\v!condensed\c!regular}, \c!bolditalic={condensedbolditalic,condensedboldoblique,condbolditalic,\namedsimplefontsparameter\v!condensed\c!bold}, \c!boldslanted={\namedsimplefontsparameter\v!condensed\c!bolditalic}, \c!caps={\namedsimplefontsparameter\v!condensed\c!regular}, \c!italiccaps={\namedsimplefontsparameter\v!condensed\c!caps}, \c!slantedcaps={\namedsimplefontsparameter\v!condensed\c!italiccaps}, \c!boldcaps={\namedsimplefontsparameter\v!condensed\c!caps}, \c!bolditaliccaps={\namedsimplefontsparameter\v!condensed\c!boldcaps}, \c!boldslantedcaps={\namedsimplefontsparameter\v!condensed\c!bolditaliccaps}] \getparameters [\????sf\v!light] [ \c!regular={lightregular,light}, \c!italic={lightitalic,lightit,lightoblique,\namedsimplefontsparameter\v!light\c!regular}, \c!slanted={\namedsimplefontsparameter\v!light\c!italic}, \c!bold={bookregular,regular,book,\namedsimplefontsparameter\v!light\c!regular}, \c!bolditalic={bookitalic,bookit,italic,oblique,\namedsimplefontsparameter\v!light\c!bold}, \c!boldslanted={\namedsimplefontsparameter\v!light\c!bolditalic}, \c!caps={smallcapslight,\namedsimplefontsparameter\v!light\c!regular}, \c!italiccaps={\namedsimplefontsparameter\v!light\c!caps}, \c!slantedcaps={\namedsimplefontsparameter\v!light\c!italiccaps}, \c!boldcaps={\namedsimplefontsparameter\v!light\c!caps}, \c!bolditaliccaps={\namedsimplefontsparameter\v!light\c!boldcaps}, \c!boldslantedcaps={\namedsimplefontsparameter\v!light\c!bolditaliccaps}] \getparameters [\????sf\v!normal] [ \c!regular={roman,regular,book,\empty}, \c!italic={italic,it,oblique,kursiv,bookitalic,bookit,\namedsimplefontsparameter\v!normal\c!regular}, \c!slanted={\namedsimplefontsparameter\v!normal\c!italic}, \c!bold={bold,bd,kraeftig,mediumregular,semibold,demi,\namedsimplefontsparameter\v!normal\c!regular}, \c!bolditalic={bolditalic,boldit,bdit,boldoblique,mediumitalic,semibolditalic,demiitalic,\namedsimplefontsparameter\v!normal\c!bold}, \c!boldslanted={\namedsimplefontsparameter\v!normal\c!bolditalic}, \c!caps={smallcaps,capitals,sc,\namedsimplefontsparameter\v!normal\c!regular}, \c!italiccaps={\namedsimplefontsparameter\v!normal\c!caps}, \c!slantedcaps={\namedsimplefontsparameter\v!normal\c!italiccaps}, \c!boldcaps={scbold,\namedsimplefontsparameter\v!normal\c!caps}, \c!bolditaliccaps={\namedsimplefontsparameter\v!normal\c!boldcaps}, \c!boldslantedcaps={\namedsimplefontsparameter\v!normal\c!bolditaliccaps}] \getparameters [\????sf\v!medium] [ \c!regular={mediumregular,medregular,medium}, \c!italic={mediumitalic,meditalic,\namedsimplefontsparameter\v!medium\c!regular}, \c!slanted={\namedsimplefontsparameter\v!medium\c!italic}, \c!bold={heavyregular,heavy,\namedsimplefontsparameter\v!medium\c!regular}, \c!bolditalic={heavyitalic,\namedsimplefontsparameter\v!medium\c!bold}, \c!boldslanted={\namedsimplefontsparameter\v!medium\c!bolditalic}, \c!caps={mediumcaps,\namedsimplefontsparameter\v!medium\c!regular}, \c!italiccaps={\namedsimplefontsparameter\v!medium\c!caps}, \c!slantedcaps={\namedsimplefontsparameter\v!medium\c!italiccaps}, \c!boldcaps={\namedsimplefontsparameter\v!medium\c!caps}, \c!bolditaliccaps={\namedsimplefontsparameter\v!medium\c!boldcaps}, \c!boldslantedcaps={\namedsimplefontsparameter\v!medium\c!bolditaliccaps}] \getparameters [\????sf\v!heavy] [ \c!regular={heavyregular,heavy}, \c!italic={heavyitalic,\namedsimplefontsparameter\v!heavy\c!regular}, \c!slanted={\namedsimplefontsparameter\v!heavy\c!italic}, \c!bold={\namedsimplefontsparameter\v!heavy\c!regular}, \c!bolditalic={\namedsimplefontsparameter\v!heavy\c!bold}, \c!boldslanted={\namedsimplefontsparameter\v!heavy\c!bolditalic}, \c!caps={\namedsimplefontsparameter\v!heavy\c!regular}, \c!italiccaps={\namedsimplefontsparameter\v!heavy\c!caps}, \c!slantedcaps={\namedsimplefontsparameter\v!heavy\c!italiccaps}, \c!boldcaps={\namedsimplefontsparameter\v!heavy\c!caps}, \c!bolditaliccaps={\namedsimplefontsparameter\v!heavy\c!boldcaps}, \c!boldslantedcaps={\namedsimplefontsparameter\v!heavy\c!bolditaliccaps}] \startprocesscommacommand[\m_simplefonts_weight] \ctxlua{thirddata.simplefonts.extlist["#1"] = { }} { \startprocesscommacommand[\m_simplefonts_alternative] \ctxlua{thirddata.simplefonts.extlist["#1"]["##1"] = { }} { \startprocesscommacommand[\namedsimplefontsparameter{#1}{##1}] \ctxlua{table.insert(thirddata.simplefonts.extlist["#1"]["##1"],"####1")} \stopprocesscommacommand } \stopprocesscommacommand } \stopprocesscommacommand %D Default setup \enabledirectives[fonts.autoreload] \setupsimplefonts [\c!size=\moduleparameter\v!simplefonts\c!size, \c!style=\moduleparameter\v!simplefonts\c!style, \c!features=\v!default, \c!smallcapsfeatures=\v!smallcaps, \c!mode=\v!node, \c!force=\v!yes, \c!check=\v!no, \c!expansion=\v!no, \c!protrusion=\v!no] %D Default fonts \setmainfont [Latin Modern Roman] \setsansfont [Latin Modern Sans] \setmonofont [Latin Modern Mono][\s!features=\s!none] \setmathfont [Latin Modern Math] \sethandwritingfont [Latin Modern Roman] % neither handwritten nor calligraphic are available \setcalligraphicfont[Latin Modern Roman] % for Latin Modern but I need a default font for them \settrue\c_simplefonts_done \stopmodule \protect \endinput