* Re: 2013.03.21 broken nightly?
2013-03-22 21:51 ` Hans Hagen
@ 2013-03-22 21:58 ` Kip Warner
2013-03-22 22:58 ` Hans Hagen
0 siblings, 1 reply; 13+ messages in thread
From: Kip Warner @ 2013-03-22 21:58 UTC (permalink / raw)
To: Hans Hagen; +Cc: mailing list for ConTeXt users
[-- Attachment #1.1.1: Type: text/plain, Size: 592 bytes --]
On Fri, 2013-03-22 at 22:51 +0100, Hans Hagen wrote:
> I have no clue as I use the garden distribution. Last year most
> mechanisms have been move to the new namespace model and I'm pretty sure
> that Wolfgang, as he's involved in that, has adapted simplefonts so the
> question is what version of context/simplefonts do you really run?
I'm actually not sure either. But I've attached some source files
associated with the simplefonts module which may give an indication.
--
Kip Warner -- Software Engineer
OpenPGP encrypted/signed mail preferred
http://www.thevertigo.com
[-- Attachment #1.1.2: t-simplefonts.lua --]
[-- Type: text/x-lua, Size: 8987 bytes --]
if not modules then modules = { } end modules ['t-simplefonts'] = {
version = 1.000,
comment = "Simplefonts",
author = "Wolfgang Schuster",
copyright = "Wolfgang Schuster",
email = "schuster.wolfgang@googlemail.com",
license = "GNU General Public License"
}
local texsprint, ctxcatcodes, prtcatcodes, format, lower, gsub, find = tex.sprint, tex.ctxcatcodes, tex.prtcatcodes, string.format, string.lower, string.gsub, string.find
thirddata = thirddata or { }
thirddata.simplefonts = thirddata.simplefonts or { }
local simplefonts = thirddata.simplefonts
simplefonts.fontlist = simplefonts.fontlist or { }
simplefonts.extlist = simplefonts.extlist or { }
simplefonts.features = simplefonts.features or { }
simplefonts.scripts = simplefonts.scripts or { }
simplefonts.languages = simplefonts.languages or { }
simplefonts.fontlist = {
["hiraginokakugothicpro"] = -- Hiragino Kaku Gothic Pro
{
["normal"] =
{
regular = "hirakakuprow3" ,
italic = "hirakakuprow3" ,
bold = "hirakakuprow6" ,
bolditalic = "hirakakuprow6" ,
} ,
} ,
["hiraginokakugothicpron"] = -- Hiragino Kaku Gothic ProN
{
["normal"] =
{
regular = "hirakakupronw3" ,
italic = "hirakakupronw3" ,
bold = "hirakakupronw6" ,
bolditalic = "hirakakupronw6" ,
} ,
} ,
["hiraginokakugothicstd"] = -- Hiragino Kaku Gothic Std
{
["normal"] =
{
regular = "hirakakustdw8" ,
italic = "hirakakustdw8" ,
bold = "hirakakustdw8" ,
bolditalic = "hirakakustdw8" ,
} ,
} ,
["hiraginokakugothicstdn"] = -- Hiragino Kaku Gothic StdN
{
["normal"] =
{
regular = "hirakakustdnw8" ,
italic = "hirakakustdnw8" ,
bold = "hirakakustdnw8" ,
bolditalic = "hirakakustdnw8" ,
} ,
} ,
["hiraginomarugothicpro"] = -- Hiragino Maru Gothic Pro
{
["normal"] =
{
regular = "hiramaruprow4" ,
italic = "hiramaruprow4" ,
bold = "hiramaruprow4" ,
bolditalic = "hiramaruprow4" ,
} ,
} ,
["hiraginomarugothicpron"] = -- Hiragino Maru Gothic ProN
{
["normal"] =
{
regular = "hiramarupronw4" ,
italic = "hiramarupronw4" ,
bold = "hiramarupronw4" ,
bolditalic = "hiramarupronw4" ,
} ,
} ,
["hiraginominchopro"] = -- Hiragino Mincho Pro
{
["normal"] =
{
regular = "hiraminprow3" ,
italic = "hiraminprow3" ,
bold = "hiraminprow6" ,
bolditalic = "hiraminprow6" ,
} ,
} ,
["hiraginominchopron"] = -- Hiragino Mincho ProN
{
["normal"] =
{
regular = "hiraminpronw3" ,
italic = "hiraminpronw3" ,
bold = "hiraminpronw6" ,
bolditalic = "hiraminpronw6" ,
} ,
} ,
["latinmodernmono"] = -- Latin Modern Mono
{
["normal"] =
{
regular = "lmmono10regular" ,
bold = "lmmonolt10bold" ,
italic = "lmmono10italic" ,
slanted = "lmmono10italic" ,
bolditalic = "lmmonolt10boldoblique" ,
boldslanted = "lmmonolt10boldoblique" ,
caps = "lmmonocaps10regular" ,
slantedcaps = "lmmonocaps10oblique" ,
} ,
} ,
["latinmodernroman"] = -- Latin Modern Roman
{
["normal"] =
{
regular = "lmroman10regular" ,
bold = "lmroman10bold" ,
italic = "lmroman10italic" ,
slanted = "lmromanslant10regular" ,
bolditalic = "lmroman10bolditalic" ,
boldslanted = "lmromanslant10bold" ,
caps = "lmromancaps10regular" ,
slantedcaps = "lmromancaps10oblique" ,
} ,
} ,
["latinmodernsans"] = -- Latin Modern Sans
{
["normal"] =
{
regular = "lmsans10regular" ,
bold = "lmsans10bold" ,
italic = "lmsans10oblique" ,
slanted = "lmsans10oblique" ,
bolditalic = "lmsans10boldoblique" ,
boldslanted = "lmsans10boldoblique" ,
} ,
} ,
}
function simplefonts.selectfont(font,name,extension,style,weight)
local fontname = {}
local truename = name
local name = lower(gsub(name,"[^a-zA-Z0-9]",""))
if extension ~= "" then
ext = find(extension,"*")
if ext ~= nil then
fontname = gsub(extension,"*",name)
else
fontname = extension
end
fontname = "name:" .. lower(gsub(fontname,"[^a-zA-Z0-9]",""))
else
if string.match(truename,"file:") then -- can't i check for 'file:' and 'name:' with one string.match?
fontname = truename
elseif string.match(truename,"name:") then
fontname = truename
elseif simplefonts.fontlist[name] then
if simplefonts.fontlist[name][weight] then
if simplefonts.fontlist[name][weight][style] then
fontname = simplefonts.fontlist[name][weight][style]
else
fontname = simplefonts.fontlist[name][weight]["regular"]
end
elseif simplefonts.fontlist[name]["normal"] then
if simplefonts.fontlist[name]["normal"][style] then
fontname = simplefonts.fontlist[name]["normal"][style]
else
fontname = simplefonts.fontlist[name]["normal"]["regular"]
end
end
fontname = "name:" .. fontname
else
-- use comma list
for _, v in ipairs(simplefonts.extlist[weight][style]) do
fontname = name .. v
if global.fonts.names.exists(fontname) then
fontname = "name:" .. fontname
break
else
--~ interfaces.showmessage("simplefonts","1",fontname) -- wrong place
fontname = "DefaultFont" -- no font is found
end
end
end
end
--~ print(fontname)
if fontname == "DefaultFont" then
interfaces.showmessage("simplefonts","1",name)
end
texsprint(prtcatcodes,format("\\setvalue{\\????sf %s%s}{%s}",font,style,fontname))
end
function simplefonts.normalizefontname(name)
local fontname = lower(gsub(name,"[^a-zA-Z0-9]","")) -- remove spaces and hyphens etc. from the user specified name
texsprint(ctxcatcodes,fontname)
end
function simplefonts.parameter(key,value,list)
local feature = simplefonts.features [key]
local script = simplefonts.scripts [value]
local language = simplefonts.languages [value]
if feature then
texsprint(format("\\addvalue{%s}{%s=%s}",list,feature,value))
--~ print("feature: " .. feature .. " = " .. value)
else
if key == "script" then
if script then
texsprint(format("\\addvalue{%s}{%s=%s}",list,key,script))
--~ print("script: " script)
else
interfaces.showmessage("simplefonts","4",value)
end
elseif key == "language" then
if language then
texsprint(format("\\addvalue{%s}{%s=%s}",list,key,language))
--~ print("language: " language)
else
interfaces.showmessage("simplefonts","5",value)
end
end
end
end
[-- Attachment #1.1.3: t-simplefonts.mkiv --]
[-- Type: text/x-matlab, Size: 33640 bytes --]
%D \module
%D [ file=t-simplefonts,
%D version=2012.01.09,
%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 <http://www.gnu.org/licenses/>.
\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
\def\????sf{@@@@sf}
%D Counter
\newcounter\simplefonts!typeface
\newcounter\simplefonts!fontfamily
\newcounter\simplefonts!mainfont
\newcounter\simplefonts!sansfont
\newcounter\simplefonts!monofont
\newcounter\simplefonts!handwritingfont
\newcounter\simplefonts!calligraphicfont
%D Boolean
\newif\if!!donesimplefonts
%D Tracing
\let\enablesimplefonts \!!donesimplefontstrue
\let\disablesimplefonts\!!donesimplefontsfalse
%D Comma value lists
\letempty\simplefont!features
\letempty\simplefont!localfeatures
\letempty\simplefont!globalfeatures
\def\simplefonts!commands
{\v!mainfont,\v!sansfont,\v!monofont,\v!mathfont,\v!handwritingfont,\v!calligraphicfont}
\def\simplefonts!weight
{\v!condensed,\v!light,\v!normal,\v!medium,\v!heavy}
\def\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 {simplefontparameter,namedsimplefontparameter,
%D setupsimplefonts,presetsimplefonts}
%D
%D Internal helper macros
\def\simplefontparameter #1{\csname\????sf\currentsimplefont#1\endcsname}
\def\namedsimplefontparameter#1#2{\csname\????sf #1#2\endcsname}
\def\setupsimplefonts
{\dosingleempty\dosetupsimplefonts}
\def\dosetupsimplefonts[#1]% first argument is optional
{\iffirstargument
\getparameters[\????sf][#1]%
\simplefonts@features{#1}\v!global
\fi
\if!!donesimplefonts\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=\simplefontparameter\c!features,
\c!italicfeatures=\simplefontparameter\c!features,
\c!slantedfeatures=\simplefontparameter\c!features,
\c!boldfeatures=\simplefontparameter\c!features,
\c!bolditalicfeatures=\simplefontparameter\c!features,
\c!boldslantedfeatures=\simplefontparameter\c!features,
\c!smallcapsfeatures=\@@@@sfsmallcapsfeatures,
\c!capsfeatures=\simplefontparameter\c!smallcapsfeatures,
\c!italiccapsfeatures=\simplefontparameter\c!smallcapsfeatures,
\c!slantedcapsfeatures=\simplefontparameter\c!smallcapsfeatures,
\c!boldcapsfeatures=\simplefontparameter\c!smallcapsfeatures,
\c!bolditaliccapsfeatures=\simplefontparameter\c!smallcapsfeatures,
\c!boldslantedcapsfeatures=\simplefontparameter\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{\namedsimplefontparameter{#3}\c!style}]
[\namedsimplefontparameter{#3}\c!style]
[#2]
[\s!default]
[rscale=\namedsimplefontparameter{#3}\c!scale]
\stoptexdefinition
\starttexdefinition simplefonts@family #1
\simplefonts@typeface{#1}{\v!mainfont :\simplefonts!mainfont }{\v!mainfont }
\simplefonts@typeface{#1}{\v!sansfont :\simplefonts!sansfont }{\v!sansfont }
\simplefonts@typeface{#1}{\v!monofont :\simplefonts!monofont }{\v!monofont }
\simplefonts@typeface{#1}{\namedsimplefontparameter\v!mathfont\c!typeface }{\v!mathfont }
\simplefonts@typeface{#1}{\v!handwritingfont :\simplefonts!handwritingfont }{\v!handwritingfont }
\simplefonts@typeface{#1}{\v!calligraphicfont :\simplefonts!calligraphicfont}{\v!calligraphicfont}
\stoptexdefinition
\starttexdefinition simplefonts@typescript #1#2
\startexpanded
\@NX\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}
\@NX\stoptypescript
\stopexpanded
\stoptexdefinition
\starttexdefinition simplefonts@scripttypescript #1#2
\startexpanded
\@NX\starttypescript[#1][#2]
\simplefonts@fontsynonym{\sf@suffix{#1}}{\c!regular}
\@NX\stoptypescript
\stopexpanded
\stoptexdefinition
\starttexdefinition simplefonts@fontsynonym #1#2
\@NX\definefontsynonym
[#1]
[\simplefontparameter{#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]
[\namedsimplefontparameter{#2}{#3}*#2#3\s!features]
[\namedsimplefontparameter{#2}\c!range]
[\s!rscale=\namedsimplefontparameter{#2}\c!scale,
\c!force=\namedsimplefontparameter{#2}\c!force,
\c!check=\namedsimplefontparameter{#2}\c!check]
\stoptexdefinition
\starttexdefinition simplefonts@bodyfont
\doglobal\increment\simplefonts!typeface
\simplefonts@family{\v!simplefonts:\simplefonts!typeface}
\edef\@@@@sfstyle{\@@@@sfstyle}
\edef\@@@@sfsize {\@@@@sfsize }
\setupbodyfont
[\v!simplefonts:\simplefonts!typeface
\ifx\@@@@sfstyle\empty\else,\@@@@sfstyle\fi
\ifx\@@@@sfsize \empty\else,\@@@@sfsize \fi]
\stoptexdefinition
\starttexdefinition simplefonts@fontfeature #1#2
\letempty\simplefont!features
% 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 }\simplefont!features}
\doifvaluesomething{\????sf\c!expansion }{\appendtocommalist{\c!expansion =\csname\????sf\c!expansion \endcsname }\simplefont!features}
\doifvaluesomething{\????sf\c!protrusion }{\appendtocommalist{\c!protrusion=\csname\????sf\c!protrusion\endcsname }\simplefont!features}
\doifvaluesomething{\????sf#1\c!mode }{\appendtocommalist{\c!mode =\csname\????sf#1\c!mode \endcsname }\simplefont!features}
\doifvaluesomething{\????sf#1\c!expansion }{\appendtocommalist{\c!expansion =\csname\????sf#1\c!expansion \endcsname }\simplefont!features}
\doifvaluesomething{\????sf#1\c!protrusion}{\appendtocommalist{\c!protrusion=\csname\????sf#1\c!protrusion\endcsname }\simplefont!features}
\appendtocommalist\simplefont!globalfeatures\simplefont!features
\appendtocommalist\simplefont!localfeatures \simplefont!features
\normalexpanded{\@NX\definefontfeature[#1#2\s!features][\namedsimplefontparameter{#1}{#2\s!features}][\simplefont!features]}
\stoptexdefinition
\starttexdefinition simplefonts@features #1#2
\letvalueempty{simplefont!#2features}
\startprocessassignmentcommand[#1]
\ctxlua{thirddata.simplefonts.parameter("##1","##2","simplefont!#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[\simplefonts!alternative]
\simplefonts@fontfeature{#1}{##1}
\ctxlua{thirddata.simplefonts.selectfont("#1","#3","\simplefontparameter{##1\s!font}","##1","\simplefontparameter\c!weight")}
\stopprocesscommacommand
\ifx\currenttypeface\v!simplefonts
\ifx\currentsimplefont\v!mainfont
\doglobal\increment\simplefonts!mainfont
\simplefonts@typescript{\simplefontparameter\c!style}{\v!mainfont:\simplefonts!mainfont}
\else\ifx\currentsimplefont\v!sansfont
\doglobal\increment\simplefonts!sansfont
\simplefonts@typescript{\simplefontparameter\c!style}{\v!sansfont:\simplefonts!sansfont}
\else\ifx\currentsimplefont\v!monofont
\doglobal\increment\simplefonts!monofont
\simplefonts@typescript{\simplefontparameter\c!style}{\v!monofont :\simplefonts!monofont}
\fi\fi\fi
% don't create a typeface and set bodyfont when the module is loaded
\if!!donesimplefonts\simplefonts@bodyfont\fi
\else
\simplefonts@typescript{\simplefontparameter\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","\simplefontparameter{##1\s!font}","##1","\simplefontparameter\c!weight")}
\stopprocesscommacommand
\ifx\currenttypeface\v!simplefonts
\ifx\currentsimplefont\v!handwritingfont
\doglobal\increment\simplefonts!handwritingfont
\simplefonts@scripttypescript{\simplefontparameter\c!style}{\v!handwritingfont :\simplefonts!handwritingfont}
\else\ifx\currentsimplefont\v!calligraphicfont
\doglobal\increment\simplefonts!calligraphicfont
\simplefonts@scripttypescript{\simplefontparameter\c!style}{\v!calligraphicfont:\simplefonts!calligraphicfont}
\fi\fi
% don't create a typeface and set bodyfont when the module is loaded
\if!!donesimplefonts\simplefonts@bodyfont\fi
\else
\simplefonts@scripttypescript{\simplefontparameter\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
\if!!donesimplefonts\simplefonts@bodyfont\fi
\else
\simplefonts@typeface{#2}{\namedsimplefontparameter\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[\simplefonts!alternative]
\simplefonts@fontfeature{#1}{##1}
\ctxlua{thirddata.simplefonts.selectfont("#1","#3","\simplefontparameter{##1\s!font}","##1","\simplefontparameter\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\@EA\newtoks\csname\currentmainfont\s!fallbacks\endcsname\fi
\csname\currentmainfont\s!fallbacks\endcsname\@EA{\the\@EA\csname\currentmainfont\s!fallbacks\endcsname\simplefonts@setfallbackfont[#1][#2][#3][#4]}
\the\@EA\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
\if!!donesimplefonts
\startprocesscommacommand[\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
[\namedsimplefontparameter{#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\simplefontsize{\namedsimplefontparameter\v!default\c!size}%
\ifx\simplefontsize\empty\else
\doifdimenstringelse\simplefontsize
{\edef\simplefontsize{ at \simplefontsize}}
{\edef\simplefontsize{ \simplefontsize}}%
\fi
\ctxlua{thirddata.simplefonts.selectfont("\v!default","#1","","\@@@@sfdefaultalternative","\@@@@sfdefaultweight")}%
\expanded{\definedfont[\csname\????sf\v!default\@@@@sfdefaultalternative\endcsname*\@@@@sfdefaultfeatures\simplefontsize]}}
\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{\namedsimplefontparameter\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")}%
\expanded{\definefont[#1][\csname\????sf\v!default\@@@@sfdefaultalternative\endcsname*\@@@@sfdefaultfeatures\simplefontsize][#3]}}
%D \macros
%D {simplefonttypeface,definesimplefonttypeface}
\def\simplefonttypeface
{\dodoubleempty\dosimplefonttypeface}
\def\dosimplefonttypeface[#1][#2]%
{\doglobal\increment\simplefonts!fontfamily
\simplefonts@definetextfont[\v!fontfamily][\v!fontfamily:\simplefonts!fontfamily][#1][\c!style=\v!simplefont,#2]%
\switchtobodyfont[\v!fontfamily:\simplefonts!fontfamily]}
\def\definesimplefonttypeface
{\dotripleempty\dodefinesimplefonttypeface}
\def\dodefinesimplefonttypeface[#1][#2][#3]%
{\getparameters[\????sf#1][\c!style=\v!serif,#3]%
\processaction
[\namedsimplefontparameter{#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,\namedsimplefontparameter\v!condensed\c!regular},
\c!slanted={\namedsimplefontparameter\v!condensed\c!italic},
\c!bold={condensedbold,condbold,\namedsimplefontparameter\v!condensed\c!regular},
\c!bolditalic={condensedbolditalic,condensedboldoblique,condbolditalic,\namedsimplefontparameter\v!condensed\c!bold},
\c!boldslanted={\namedsimplefontparameter\v!condensed\c!bolditalic},
\c!caps={\namedsimplefontparameter\v!condensed\c!regular},
\c!italiccaps={\namedsimplefontparameter\v!condensed\c!caps},
\c!slantedcaps={\namedsimplefontparameter\v!condensed\c!italiccaps},
\c!boldcaps={\namedsimplefontparameter\v!condensed\c!caps},
\c!bolditaliccaps={\namedsimplefontparameter\v!condensed\c!boldcaps},
\c!boldslantedcaps={\namedsimplefontparameter\v!condensed\c!bolditaliccaps}]
\getparameters
[\????sf\v!light]
[ \c!regular={lightregular,light},
\c!italic={lightitalic,lightit,lightoblique,\namedsimplefontparameter\v!light\c!regular},
\c!slanted={\namedsimplefontparameter\v!light\c!italic},
\c!bold={bookregular,regular,book,\namedsimplefontparameter\v!light\c!regular},
\c!bolditalic={bookitalic,bookit,italic,oblique,\namedsimplefontparameter\v!light\c!bold},
\c!boldslanted={\namedsimplefontparameter\v!light\c!bolditalic},
\c!caps={smallcapslight,\namedsimplefontparameter\v!light\c!regular},
\c!italiccaps={\namedsimplefontparameter\v!light\c!caps},
\c!slantedcaps={\namedsimplefontparameter\v!light\c!italiccaps},
\c!boldcaps={\namedsimplefontparameter\v!light\c!caps},
\c!bolditaliccaps={\namedsimplefontparameter\v!light\c!boldcaps},
\c!boldslantedcaps={\namedsimplefontparameter\v!light\c!bolditaliccaps}]
\getparameters
[\????sf\v!normal]
[ \c!regular={roman,regular,book,\empty},
\c!italic={italic,it,oblique,kursiv,bookitalic,bookit,\namedsimplefontparameter\v!normal\c!regular},
\c!slanted={\namedsimplefontparameter\v!normal\c!italic},
\c!bold={bold,bd,kraeftig,mediumregular,semibold,demi,\namedsimplefontparameter\v!normal\c!regular},
\c!bolditalic={bolditalic,boldit,bdit,boldoblique,mediumitalic,semibolditalic,demiitalic,\namedsimplefontparameter\v!normal\c!bold},
\c!boldslanted={\namedsimplefontparameter\v!normal\c!bolditalic},
\c!caps={smallcaps,capitals,sc,\namedsimplefontparameter\v!normal\c!regular},
\c!italiccaps={\namedsimplefontparameter\v!normal\c!caps},
\c!slantedcaps={\namedsimplefontparameter\v!normal\c!italiccaps},
\c!boldcaps={scbold,\namedsimplefontparameter\v!normal\c!caps},
\c!bolditaliccaps={\namedsimplefontparameter\v!normal\c!boldcaps},
\c!boldslantedcaps={\namedsimplefontparameter\v!normal\c!bolditaliccaps}]
\getparameters
[\????sf\v!medium]
[ \c!regular={mediumregular,medregular,medium},
\c!italic={mediumitalic,meditalic,\namedsimplefontparameter\v!medium\c!regular},
\c!slanted={\namedsimplefontparameter\v!medium\c!italic},
\c!bold={heavyregular,heavy,\namedsimplefontparameter\v!medium\c!regular},
\c!bolditalic={heavyitalic,\namedsimplefontparameter\v!medium\c!bold},
\c!boldslanted={\namedsimplefontparameter\v!medium\c!bolditalic},
\c!caps={mediumcaps,\namedsimplefontparameter\v!medium\c!regular},
\c!italiccaps={\namedsimplefontparameter\v!medium\c!caps},
\c!slantedcaps={\namedsimplefontparameter\v!medium\c!italiccaps},
\c!boldcaps={\namedsimplefontparameter\v!medium\c!caps},
\c!bolditaliccaps={\namedsimplefontparameter\v!medium\c!boldcaps},
\c!boldslantedcaps={\namedsimplefontparameter\v!medium\c!bolditaliccaps}]
\getparameters
[\????sf\v!heavy]
[ \c!regular={heavyregular,heavy},
\c!italic={heavyitalic,\namedsimplefontparameter\v!heavy\c!regular},
\c!slanted={\namedsimplefontparameter\v!heavy\c!italic},
\c!bold={\namedsimplefontparameter\v!heavy\c!regular},
\c!bolditalic={\namedsimplefontparameter\v!heavy\c!bold},
\c!boldslanted={\namedsimplefontparameter\v!heavy\c!bolditalic},
\c!caps={\namedsimplefontparameter\v!heavy\c!regular},
\c!italiccaps={\namedsimplefontparameter\v!heavy\c!caps},
\c!slantedcaps={\namedsimplefontparameter\v!heavy\c!italiccaps},
\c!boldcaps={\namedsimplefontparameter\v!heavy\c!caps},
\c!bolditaliccaps={\namedsimplefontparameter\v!heavy\c!boldcaps},
\c!boldslantedcaps={\namedsimplefontparameter\v!heavy\c!bolditaliccaps}]
\startprocesscommacommand[\simplefonts!weight]
\ctxlua{thirddata.simplefonts.extlist["#1"] = { }}
{
\startprocesscommacommand[\simplefonts!alternative]
\ctxlua{thirddata.simplefonts.extlist["#1"]["##1"] = { }}
{
\startprocesscommacommand[\namedsimplefontparameter{#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
\!!donesimplefontstrue
\stopmodule
\protect \endinput
[-- Attachment #1.1.4: t-simplefonts.mkvi --]
[-- Type: text/x-matlab, Size: 34025 bytes --]
%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 <http://www.gnu.org/licenses/>.
\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
[-- Attachment #1.2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
[-- Attachment #2: Type: text/plain, Size: 485 bytes --]
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage : http://www.pragma-ade.nl / http://tex.aanhet.net
archive : http://foundry.supelec.fr/projects/contextrev/
wiki : http://contextgarden.net
___________________________________________________________________________________
^ permalink raw reply [flat|nested] 13+ messages in thread