diff options
Diffstat (limited to 'scripts/context/lua/mtx-fonts.lua')
-rw-r--r-- | scripts/context/lua/mtx-fonts.lua | 205 |
1 files changed, 105 insertions, 100 deletions
diff --git a/scripts/context/lua/mtx-fonts.lua b/scripts/context/lua/mtx-fonts.lua index b42627c95..b1e5f2dde 100644 --- a/scripts/context/lua/mtx-fonts.lua +++ b/scripts/context/lua/mtx-fonts.lua @@ -6,6 +6,49 @@ if not modules then modules = { } end modules ['mtx-fonts'] = { license = "see context related readme files" } +local helpinfo = [[ +--save save open type font in raw table + +--reload generate new font database +--reload --simple generate 'luatex-fonts-names.lua' (not for context!) + +--list --name list installed fonts, filter by name [--pattern] +--list --spec list installed fonts, filter by spec [--filter] +--list --file list installed fonts, filter by file [--pattern] + +--pattern=str filter files using pattern +--filter=list key-value pairs +--all show all found instances +--info give more details +--track=list enable trackers +--statistics some info about the database + +examples of searches: + +mtxrun --script font --list somename (== --pattern=*somename*) + +mtxrun --script font --list --name somename +mtxrun --script font --list --name --pattern=*somename* + +mtxrun --script font --list --spec somename +mtxrun --script font --list --spec somename-bold-italic +mtxrun --script font --list --spec --pattern=*somename* +mtxrun --script font --list --spec --filter="fontname=somename" +mtxrun --script font --list --spec --filter="familyname=somename,weight=bold,style=italic,width=condensed" +mtxrun --script font --list --spec --filter="familyname=crap*,weight=bold,style=italic" + +mtxrun --script font --list --file somename +mtxrun --script font --list --file --pattern=*somename* +]] + +local application = logs.application { + name = "mtx-fonts", + banner = "ConTeXt Font Database Management 0.21", + helpinfo = helpinfo, +} + +local report = application.report + -- todo: fc-cache -v en check dirs, or better is: fc-cat -v | grep Directory if not fontloader then fontloader = fontforge end @@ -31,29 +74,29 @@ function fonts.names.statistics() return table.sequenced(n) end - logs.simple("cache uuid : %s", data.cache_uuid) - logs.simple("cache version : %s", data.cache_version) - logs.simple("number of trees : %s", #data.datastate) - logs.simpleline() - logs.simple("number of fonts : %s", statistics.fonts or 0) - logs.simple("used files : %s", statistics.readfiles or 0) - logs.simple("skipped files : %s", statistics.skippedfiles or 0) - logs.simple("duplicate files : %s", statistics.duplicatefiles or 0) - logs.simple("specifications : %s", #data.specifications) - logs.simple("families : %s", table.count(data.families)) - logs.simpleline() - logs.simple("mappings : %s", counted(data.mappings)) - logs.simple("fallbacks : %s", counted(data.fallbacks)) - logs.simpleline() - logs.simple("used styles : %s", table.sequenced(statistics.used_styles)) - logs.simple("used variants : %s", table.sequenced(statistics.used_variants)) - logs.simple("used weights : %s", table.sequenced(statistics.used_weights)) - logs.simple("used widths : %s", table.sequenced(statistics.used_widths)) - logs.simpleline() - logs.simple("found styles : %s", table.sequenced(statistics.styles)) - logs.simple("found variants : %s", table.sequenced(statistics.variants)) - logs.simple("found weights : %s", table.sequenced(statistics.weights)) - logs.simple("found widths : %s", table.sequenced(statistics.widths)) + report("cache uuid : %s", data.cache_uuid) + report("cache version : %s", data.cache_version) + report("number of trees : %s", #data.datastate) + report() + report("number of fonts : %s", statistics.fonts or 0) + report("used files : %s", statistics.readfiles or 0) + report("skipped files : %s", statistics.skippedfiles or 0) + report("duplicate files : %s", statistics.duplicatefiles or 0) + report("specifications : %s", #data.specifications) + report("families : %s", table.count(data.families)) + report() + report("mappings : %s", counted(data.mappings)) + report("fallbacks : %s", counted(data.fallbacks)) + report() + report("used styles : %s", table.sequenced(statistics.used_styles)) + report("used variants : %s", table.sequenced(statistics.used_variants)) + report("used weights : %s", table.sequenced(statistics.used_weights)) + report("used widths : %s", table.sequenced(statistics.used_widths)) + report() + report("found styles : %s", table.sequenced(statistics.styles)) + report("found variants : %s", table.sequenced(statistics.variants)) + report("found weights : %s", table.sequenced(statistics.weights)) + report("found widths : %s", table.sequenced(statistics.widths)) end @@ -63,7 +106,7 @@ function fonts.names.simple() local name = "luatex-fonts-names.lua" fonts.names.filters.list = simplelist fonts.names.version = simpleversion -- this number is the same as in font-dum.lua - logs.report("fontnames","generating font database for 'luatex-fonts' version %s",fonts.names.version) + report("generating font database for 'luatex-fonts' version %s",fonts.names.version) fonts.names.identify(true) local data = fonts.names.data if data then @@ -80,12 +123,12 @@ function fonts.names.simple() simplemappings[tag] = { s.rawname, s.filename, s.subfont } end end - logs.report("fontnames","saving names in '%s'",name) + report("saving names in '%s'",name) io.savedata(name,table.serialize(simplified,true)) local data = io.loaddata(resolvers.findfile("font-dum.lua","tex")) local dummy = string.match(data,"fonts%.names%.version%s*=%s*([%d%.]+)") if tonumber(dummy) ~= simpleversion then - logs.report("fontnames","warning: version number %s in 'font-dum' does not match database version number %s",dummy or "?",simpleversion) + report("warning: version number %s in 'font-dum' does not match database version number %s",dummy or "?",simpleversion) end elseif lfs.isfile(name) then os.remove(name) @@ -117,28 +160,29 @@ local function fontweight(fw) end local function showfeatures(tag,specification) - logs.simple("mapping : %s",tag) - logs.simple("fontname: %s",specification.fontname) - logs.simple("fullname: %s",specification.fullname) - logs.simple("filename: %s",specification.filename) - logs.simple("family : %s",specification.familyname or "<nofamily>") - logs.simple("weight : %s",specification.weight or "<noweight>") - logs.simple("style : %s",specification.style or "<nostyle>") - logs.simple("width : %s",specification.width or "<nowidth>") - logs.simple("variant : %s",specification.variant or "<novariant>") - logs.simple("subfont : %s",subfont(specification.subfont)) - logs.simple("fweight : %s",fontweight(specification.fontweight)) + report() + report("mapping : %s",tag) + report("fontname: %s",specification.fontname) + report("fullname: %s",specification.fullname) + report("filename: %s",specification.filename) + report("family : %s",specification.familyname or "<nofamily>") + report("weight : %s",specification.weight or "<noweight>") + report("style : %s",specification.style or "<nostyle>") + report("width : %s",specification.width or "<nowidth>") + report("variant : %s",specification.variant or "<novariant>") + report("subfont : %s",subfont(specification.subfont)) + report("fweight : %s",fontweight(specification.fontweight)) -- maybe more local features = fonts.get_features(specification.filename,specification.format) if features then for what, v in table.sortedhash(features) do local data = features[what] if data and next(data) then - logs.simple() - logs.simple("%s features:",what) - logs.simple() - logs.simple("feature script languages") - logs.simple() + report() + report("%s features:",what) + report() + report("feature script languages") + report() for f,ff in table.sortedhash(data) do local done = false for s, ss in table.sortedhash(ff) do @@ -149,24 +193,22 @@ local function showfeatures(tag,specification) else done = true end - logs.simple("% -8s % -8s % -8s",f,s,table.concat(table.sortedkeys(ss), " ")) -- todo: padd 4 + report("% -8s % -8s % -8s",f,s,table.concat(table.sortedkeys(ss), " ")) -- todo: padd 4 end end end end else - logs.simple() - logs.simple("no features") - logs.simple() + report("no features") end - logs.reportline() + report() end local function reloadbase(reload) if reload then - logs.simple("fontnames, reloading font database") + report("fontnames, reloading font database") names.load(true) - logs.simple("fontnames, done\n\n") + report("fontnames, done\n\n") end end @@ -245,17 +287,17 @@ function scripts.fonts.list() --~ mtxrun --script font --list --name --pattern=*somename* list_matches(fonts.names.list(string.topattern(pattern,true),reload,all),info) elseif filter then - logs.report("fontnames","not supported: --list --name --filter",name) + report("not supported: --list --name --filter",name) elseif given then --~ mtxrun --script font --list --name somename list_matches(fonts.names.list(given,reload,all),info) else - logs.report("fontnames","not supported: --list --name <no specification>",name) + report("not supported: --list --name <no specification>",name) end elseif environment.argument("spec") then if pattern then --~ mtxrun --script font --list --spec --pattern=*somename* - logs.report("fontnames","not supported: --list --spec --pattern",name) + report("not supported: --list --spec --pattern",name) elseif filter then --~ mtxrun --script font --list --spec --filter="fontname=somename" list_specifications(fonts.names.getlookups(filter),info) @@ -263,19 +305,19 @@ function scripts.fonts.list() --~ mtxrun --script font --list --spec somename list_specifications(fonts.names.collectspec(given,reload,all),info) else - logs.report("fontnames","not supported: --list --spec <no specification>",name) + report("not supported: --list --spec <no specification>",name) end elseif environment.argument("file") then if pattern then --~ mtxrun --script font --list --file --pattern=*somename* list_specifications(fonts.names.collectfiles(string.topattern(pattern,true),reload,all),info) elseif filter then - logs.report("fontnames","not supported: --list --spec",name) + report("not supported: --list --spec",name) elseif given then --~ mtxrun --script font --list --file somename list_specifications(fonts.names.collectfiles(given,reload,all),info) else - logs.report("fontnames","not supported: --list --file <no specification>",name) + report("not supported: --list --file <no specification>",name) end elseif pattern then --~ mtxrun --script font --list --pattern=*somename* @@ -287,7 +329,7 @@ function scripts.fonts.list() pattern = "*" list_matches(fonts.names.list(string.topattern(pattern,true),reload,all),info) else - logs.report("fontnames","not supported: --list <no specification>",name) + report("not supported: --list <no specification>",name) end end @@ -298,7 +340,7 @@ function scripts.fonts.save() local function save(savename,fontblob) if fontblob then savename = savename:lower() .. ".lua" - logs.simple("fontsave, saving data in %s",savename) + report("fontsave, saving data in %s",savename) table.tofile(savename,fontloader.to_table(fontblob),"return") fontloader.close(fontblob) end @@ -310,7 +352,7 @@ function scripts.fonts.save() if suffix == 'ttf' or suffix == 'otf' or suffix == 'ttc' or suffix == "dfont" then local fontinfo = fontloader.info(filename) if fontinfo then - logs.simple("font: %s located as %s",name,filename) + report("font: %s located as %s",name,filename) if fontinfo[1] then for k=1,#fontinfo do local v = fontinfo[k] @@ -320,56 +362,19 @@ function scripts.fonts.save() save(fontinfo.fullname,fontloader.open(filename)) end else - logs.simple("font: %s cannot be read",filename) + report("font: %s cannot be read",filename) end else - logs.simple("font: %s not saved",filename) + report("font: %s not saved",filename) end else - logs.simple("font: %s not found",name) + report("font: %s not found",name) end else - logs.simple("font: no name given") + report("font: no name given") end end -logs.extendbanner("ConTeXt Font Database Management 0.21") - -messages.help = [[ ---save save open type font in raw table - ---reload generate new font database ---reload --simple generate 'luatex-fonts-names.lua' (not for context!) - ---list --name list installed fonts, filter by name [--pattern] ---list --spec list installed fonts, filter by spec [--filter] ---list --file list installed fonts, filter by file [--pattern] - ---pattern=str filter files using pattern ---filter=list key-value pairs ---all show all found instances ---info give more details ---track=list enable trackers ---statistics some info about the database - -examples of searches: - -mtxrun --script font --list somename (== --pattern=*somename*) - -mtxrun --script font --list --name somename -mtxrun --script font --list --name --pattern=*somename* - -mtxrun --script font --list --spec somename -mtxrun --script font --list --spec somename-bold-italic -mtxrun --script font --list --spec --pattern=*somename* -mtxrun --script font --list --spec --filter="fontname=somename" -mtxrun --script font --list --spec --filter="familyname=somename,weight=bold,style=italic,width=condensed" -mtxrun --script font --list --spec --filter="familyname=crap*,weight=bold,style=italic" - -mtxrun --script font --list --file somename -mtxrun --script font --list --file --pattern=*somename* -]] - local track = environment.argument("track") if track then trackers.enable(track) end @@ -388,5 +393,5 @@ elseif environment.argument("save") then elseif environment.argument("statistics") then fonts.names.statistics() else - logs.help(messages.help) + application.help() end |