summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/font-sel.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/font-sel.lua')
-rw-r--r--Master/texmf-dist/tex/context/base/font-sel.lua102
1 files changed, 80 insertions, 22 deletions
diff --git a/Master/texmf-dist/tex/context/base/font-sel.lua b/Master/texmf-dist/tex/context/base/font-sel.lua
index 86300c2dbcb..c3431a213ca 100644
--- a/Master/texmf-dist/tex/context/base/font-sel.lua
+++ b/Master/texmf-dist/tex/context/base/font-sel.lua
@@ -20,6 +20,8 @@ local v_simplefonts = interfaces.variables.simplefonts
local v_selectfont = interfaces.variables.selectfont
local v_default = interfaces.variables.default
+local implement = interfaces.implement
+
local selectfont = fonts.select or { }
fonts.select = selectfont
@@ -299,12 +301,12 @@ local mathsettings = {
},
}
-function commands.defineselectfont(settings)
+function selectfont.define(settings)
local index = #data + 1
data[index] = settings
selectfont.searchfiles(index)
selectfont.filterinput(index)
- context(index)
+ return index
end
local function savefont(data,alternative,entries)
@@ -493,6 +495,14 @@ function selectfont.filterinput(index)
end
end
+local ctx_definefontsynonym = context.definefontsynonym
+local ctx_resetfontfallback = context.resetfontfallback
+local ctx_startfontclass = context.startfontclass
+local ctx_stopfontclass = context.stopfontclass
+local ctx_loadfontgoodies = context.loadfontgoodies
+local ctx_definefontfallback = context.definefontfallback
+local ctx_definetypeface = context.definetypeface
+
local function definefontsynonym(data,alternative,index,fallback)
local fontdata = data.fonts and data.fonts[alternative]
local style = data.metadata.style
@@ -526,20 +536,24 @@ local function definefontsynonym(data,alternative,index,fallback)
local designsize = entry["designsize"] or 100
if designsize == 100 or designsize == 110 or designsize == 120 or designsize == 0 or #fontdata == 1 then
local filepath, filename = splitbase(entry["filename"])
+ if entry["format"] == "ttc" or entry["format"] == "dfont" then
+ filename = formatters["%s(%s)"](filename, entry["rawname"])
+ end
registerdesignsizes( fontfile, "default", filename )
break
end
end
if fallback then
- context.definefontsynonym( { fontname }, { fontfile }, { features = features } )
+ -- can we use
+ ctx_definefontsynonym( { fontname }, { fontfile }, { features = features } )
else
- context.definefontsynonym( { fontname }, { fontfile }, { features = features, fallbacks = fontfile, goodies = goodies } )
+ ctx_definefontsynonym( { fontname }, { fontfile }, { features = features, fallbacks = fontfile, goodies = goodies } )
end
else
if fallback then
- context.definefontsynonym( { fontname }, { fontparent }, { features = features } )
+ ctx_definefontsynonym( { fontname }, { fontparent }, { features = features } )
else
- context.definefontsynonym( { fontname }, { fontparent }, { features = features, fallbacks = fontfile, goodies = goodies } )
+ ctx_definefontsynonym( { fontname }, { fontparent }, { features = features, fallbacks = fontfile, goodies = goodies } )
end
end
end
@@ -552,11 +566,11 @@ local function definetypescript(index)
local typeface = data.metadata.typeface
local style = data.metadata.style
if entry and entry["tf"] then
- context.startfontclass( { typeface } )
+ ctx_startfontclass( { typeface } )
if goodies ~= "" then
goodies = utilities.parsers.settings_to_array(goodies)
for _, goodie in next, goodies do
- context.loadfontgoodies( { goodie } )
+ ctx_loadfontgoodies( { goodie } )
end
end
for alternative, _ in next, alternatives do
@@ -564,7 +578,7 @@ local function definetypescript(index)
definefontsynonym(data,alternative)
end
end
- context.stopfontclass()
+ ctx_stopfontclass()
else
-- regular style not available, loading aborted
end
@@ -595,20 +609,20 @@ local function definetextfontfallback(data,alternative,index)
local synonym = formatters["%s-%s-%s-fallback-%s"](typeface, style, alternative, index)
local fallback = formatters["%s-%s-%s"] (typeface, style, alternative)
if index == 1 then
- context.resetfontfallback( { fallback } )
+ ctx_resetfontfallback( { fallback } )
end
- context.definefontfallback( { fallback }, { synonym }, { range }, { rscale = rscale, check = check, force = force } )
+ ctx_definefontfallback( { fallback }, { synonym }, { range }, { rscale = rscale, check = check, force = force } )
end
local function definetextfallback(entry,index)
local data = data[index]
local typeface = data.metadata.typeface
- context.startfontclass( { typeface } )
+ ctx_startfontclass( { typeface } )
for alternative, _ in next, alternatives do
definefontsynonym (data,alternative,entry,true)
definetextfontfallback(data,alternative,entry)
end
- context.stopfontclass()
+ ctx_stopfontclass()
-- inspect(data)
end
@@ -624,14 +638,14 @@ local function definemathfontfallback(data,alternative,index)
local fontdata = data.fonts and data.fonts[alternative]
local fallback = formatters["%s-%s-%s"](typeface, style, alternative)
if index == 1 then
- context.resetfontfallback( { fallback } )
+ ctx_resetfontfallback( { fallback } )
end
if fontdata and #fontdata > 0 then
for _, entry in next, fontdata do
local filename = entry["filename"]
local designsize = entry["designsize"] or 100
if designsize == 100 or designsize == 110 or designsize == 120 or designsize == 0 or #fontdata == 1 then
- context.definefontfallback( { fallback }, { formatters["file:%s*%s"](filename,features) }, { range }, { rscale = rscale, check = check, force = force, offset = offset } )
+ ctx_definefontfallback( { fallback }, { formatters["file:%s*%s"](filename,features) }, { range }, { rscale = rscale, check = check, force = force, offset = offset } )
break
end
end
@@ -642,13 +656,13 @@ local function definemathfallback(entry,index)
local data = data[index]
local typeface = data.metadata.typeface
local style = data.metadata.style
- context.startfontclass( { typeface } )
+ ctx_startfontclass( { typeface } )
for alternative, _ in next, alternatives do
if synonyms[style][alternative] then
definemathfontfallback(data,alternative,entry)
end
end
- context.stopfontclass()
+ ctx_stopfontclass()
-- inspect(data)
end
@@ -676,7 +690,7 @@ local function definetextfont(index)
local style = styles[data.metadata.style]
local designsize = data.options.opticals == v_yes and "auto" or "default"
local scale = data.options.scale ~= "" and data.options.scale or 1
- context.definetypeface( { fontclass }, { shortstyle }, { style }, { "" }, { "default" }, { designsize = designsize, rscale = scale } )
+ ctx_definetypeface( { fontclass }, { shortstyle }, { style }, { "" }, { "default" }, { designsize = designsize, rscale = scale } )
end
local function definemathfont(index)
@@ -688,9 +702,9 @@ local function definemathfont(index)
local typescript = cleanname(data.metadata.family)
local entries = data.fonts
if entries then
- context.definetypeface( { fontclass }, { shortstyle }, { style }, { "" }, { "default" }, { rscale = scale } )
+ ctx_definetypeface( { fontclass }, { shortstyle }, { style }, { "" }, { "default" }, { rscale = scale } )
else
- context.definetypeface( { fontclass }, { shortstyle }, { style }, { typescript }, { "default" }, { rscale = scale } )
+ ctx_definetypeface( { fontclass }, { shortstyle }, { style }, { typescript }, { "default" }, { rscale = scale } )
end
end
@@ -708,5 +722,49 @@ function selectfont.definetypeface(index)
-- inspect(data)
end
-commands.definefontfamily = selectfont.definetypeface
-commands.definefallbackfamily = selectfont.registerfallback
+local styles = {
+ { "tf" }, { "bf" }, { "it" }, { "sl" }, { "bi" }, { "bs" }, { "sc" },
+}
+
+implement {
+ name = "defineselectfont",
+ actions = { selectfont.define, context },
+ arguments = {
+ {
+ {
+ "metadata", {
+ { "typeface" },
+ { "style" },
+ { "family" },
+ }
+ },
+ {
+ "options", {
+ { "opticals" },
+ { "scale" },
+ { "goodies" },
+ { "alternative" },
+ { "range" },
+ { "offset" },
+ { "check" },
+ { "force" },
+ }
+ },
+ { "alternatives", styles },
+ { "files", styles },
+ { "features", styles },
+ }
+ }
+}
+
+implement {
+ name = "definefontfamily",
+ actions = selectfont.definetypeface,
+ arguments = "integer"
+}
+
+implement {
+ name = "definefallbackfamily",
+ actions = selectfont.registerfallback,
+ arguments = { "string", "string", "integer"}
+}