%D \module %D [ file=font-col, %D version=2008.06.11, %D title=\CONTEXT\ Font Macros, %D subtitle=Fallbacks (collections), %D author=Hans Hagen, %D date=\currentdate, %D copyright=PRAGMA] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. % ! EXPERIMENTAL ! code will be made more nice % % actually we can now do more at the lua end % todo: missing only, force always, multiple fallbacks with test, scale % % \resetfontfallback [whatever] % % \definefontfallback [whatever] [Slanted] [0x0060-0x007F] [force=yes] % \definefontfallback [whatever] [Bold] [0x0080-0x00FF,0x00A0-0x00AF] [rscale=1.2] % \definefontfallback [whatever] [BoldSlanted] [0x00C0-0x00C7] [check=yes,force=yes] \writestatus{loading}{ConTeXt Font Macros / Collections} \registerctxluafile{font-col}{1.001} \unprotect \unexpanded\def\definefontfallback {\doquadrupleempty\dodefinefontfallback} \def\dodefinefontfallback[#1][#2][#3][#4]% {\ctxlua{fonts.collections.define("#1","#2",\!!bs#3\!!es,\!!bs#4\!!es)}} \def\resetfontfallback {\dodoubleempty\doresetfontfallback} \def\doresetfontfallback[#1][#2]% {\ctxlua{fonts.collections.reset("#1","#2")}} % add fallbacks to last font \def\dodefinefontfallbacks#1% {\ctxlua{fonts.collections.prepare("#1")}} % we might as well move the handling to lua but then we need to pass the % fallbacks, skewchar etc. \setfalse\doingfontfallbacks \def\dodefinefontfallbacksindeed#1% {\begingroup \settrue\doingfontfallbacks \lastrawfontcall % sets current font id \dodefinefontfallbacks#1% \endgroup} \appendtoks \ifconditional\doingfontfallbacks\else \ifx\@@fontfallbacks\empty \ifx\@@fontclassfallbacks\empty \else \dodefinefontfallbacksindeed\@@fontclassfallbacks \fi \else \dodefinefontfallbacksindeed\@@fontfallbacks \fi \fi \to\everydefinefont \def\dostartcloningfonts {\bgroup \let\savedfontspec\somefontspec} \def\dostopcloningfonts {\egroup} \def\doclonefonta#1#2% kind of dododefinefont {\ctxlua{fonts.collections.message("defining #1 (relative scale: #2)")}% \autofontsizefalse \let\lastfontidentifier\s!dummy \def\localrelativefontsize{#2}% \let\localabsolutefontsize\fontbody \lowleveldefinefont{#1}\rawfontidentifier \csname\rawfontidentifier\endcsname \autofontsizefalse %\setfontcharacteristics }%\the\everyfontswitch} \def\doclonefontb#1% #2 {\doclonefonta{#1 \savedfontspec}} % check : only replace when present in replacement font (default: no) % force : force replacent even when basefont has glyph (default: yes) % \definefontfallback [whatever] [Slanted] [0x0060-0x007F] [force=yes] % \definefontfallback [whatever] [Bold] [0x0080:0x00FF,0x00A0:0x00AF] [rscale=2.0] % \definefontfallback [whatever] [BoldSlanted] ["00C0-"00C7] [check=yes,force=yes] % \definefontfallback [whatever] [Mono] [latinextendeda] [force=yes] % 0x0100:0x017F % \definefontfallback [whatever] [Mono] [latin extended a] [force=yes] % 0x0100:0x017F % % \definefontsynonym[SerifPlus][Serif][fallbacks=whatever] % % \definefont[MySerif][SerifPlus at 10pt] % % \startcolumns[n=6] % \MySerif % \dostepwiserecurse {0} {65000} {1} { % \iffontchar\font\recurselevel % {\tttf\uchexnumbers\recurselevel:} \char\recurselevel\par % \fi % } % \stopcolumns % \definefontfeature[zh][mode=node,script=hang,lang=zhs] % \definefontfallback[serifwhatever] [lmroman10-regular] [0x0000-0x0400][force=yes] % \definefontfallback[serifboldwhatever] [lmroman10-bold] [0x0000-0x0400][force=yes] % \definefontfallback[serifitalicwhatever] [lmroman10-italic] [0x0000-0x0400][force=yes] % \definefontfallback[serifbolditalicwhatever][lmroman10-bolditalic][0x0000-0x0400][force=yes] % % \starttypescript [serif] [zhfont] % \definefontsynonym [zhserif] [AdobeSongStd-Light] [features=zh,fallbacks=serifwhatever] % \definefontsynonym [zhserifbold] [AdobeHeitiStd-Regular][features=zh,fallbacks=serifboldwhatever] % \definefontsynonym [zhserifitalic] [AdobeKaitiStd-Regular][features=zh,fallbacks=serifitalicwhatever] % \definefontsynonym [zhserifbolditalic][AdobeHeitiStd-Regular][features=zh,fallbacks=serifbolditalicwhatever] % \stoptypescript % % \starttypescript [serif][zhfont][name] % \definefontsynonym[Serif] [zhserif] % [fallbacks=serifwhatever] % \definefontsynonym[SerifBold] [zhserifbold] % [fallbacks=serifboldwhatever] % \definefontsynonym[SerifItalic] [zhserifitalic] % [fallbacks=serifitalicwhatever] % \definefontsynonym[SerifBoldItalic] [zhserifbolditalic] % [fallbacks=serifbolditalicwhatever] % \stoptypescript % % \starttypescript[myfont] % \definetypeface[myfont][rm][serif][zhfont] % \stoptypescript % % \usetypescript[myfont] \setupbodyfont[myfont,rm,12pt] % % \starttext % fonts {\bf fonts} {\bi fonts} {\it fonts} % \stoptext \protect \endinput