summaryrefslogtreecommitdiff
path: root/tex/context/base/font-col.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/font-col.mkiv')
-rw-r--r--tex/context/base/font-col.mkiv148
1 files changed, 148 insertions, 0 deletions
diff --git a/tex/context/base/font-col.mkiv b/tex/context/base/font-col.mkiv
new file mode 100644
index 000000000..181b985f6
--- /dev/null
+++ b/tex/context/base/font-col.mkiv
@@ -0,0 +1,148 @@
+%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