From dc7195d9c40c947f61bd001635de6e8b2cb99167 Mon Sep 17 00:00:00 2001 From: Context Git Mirror Bot Date: Tue, 7 Jul 2015 22:15:04 +0200 Subject: 2015-07-07 21:45:00 --- scripts/context/lua/mtx-fonts.lua | 83 +++++++++++++++++++++++++++++++++------ 1 file changed, 70 insertions(+), 13 deletions(-) (limited to 'scripts/context/lua/mtx-fonts.lua') diff --git a/scripts/context/lua/mtx-fonts.lua b/scripts/context/lua/mtx-fonts.lua index dde145e50..db2f06120 100644 --- a/scripts/context/lua/mtx-fonts.lua +++ b/scripts/context/lua/mtx-fonts.lua @@ -23,7 +23,8 @@ local helpinfo = [[ - save open type font in raw table + save open type font in raw table (ff format) + save open type font in raw table (ctx format) save a tma file in a more readable format @@ -42,6 +43,7 @@ local helpinfo = [[ give more details enable trackers some info about the database + uise name instead of unicodes @@ -69,6 +71,11 @@ local helpinfo = [[ mtxrun --script font --list --file --all somename mtxrun --script font --list --file --pattern=*somename* + + mtxrun --script font --save --texgyrepagella-regular.otf + mtxrun --script font --convert --texgyrepagella-regular.otf + mtxrun --script font --convert --names --texgyrepagella-regular.otf + @@ -86,17 +93,31 @@ local report = application.report if not fontloader then fontloader = fontforge end -dofile(resolvers.findfile("font-otr.lua","tex")) -dofile(resolvers.findfile("font-cff.lua","tex")) -dofile(resolvers.findfile("font-ttf.lua","tex")) -dofile(resolvers.findfile("font-tmp.lua","tex")) -------(resolvers.findfile("font-dsp.lua","tex")) -------(resolvers.findfile("font-off.lua","tex")) +local function loadmodule(filename) + local fullname = resolvers.findfile(filename,"tex") + if fullname and fullname ~= "" then + dofile(fullname) + end +end + +-- old loader code + +loadmodule("font-otp.lua") -- we need to unpack the font for analysis + +-- new loader code + +loadmodule("font-otr.lua") +loadmodule("font-cff.lua") +loadmodule("font-ttf.lua") +loadmodule("font-tmp.lua") +loadmodule("font-dsp.lua") -- not yet in distribution +loadmodule("font-oup.lua") -- not yet in distribution -dofile(resolvers.findfile("font-otp.lua","tex")) -- we need to unpack the font for analysis -dofile(resolvers.findfile("font-syn.lua","tex")) -dofile(resolvers.findfile("font-trt.lua","tex")) -dofile(resolvers.findfile("font-mis.lua","tex")) +-- extra code + +loadmodule("font-syn.lua") +loadmodule("font-trt.lua") +loadmodule("font-mis.lua") scripts = scripts or { } scripts.fonts = scripts.fonts or { } @@ -403,13 +424,17 @@ end function scripts.fonts.unpack() local name = file.removesuffix(file.basename(givenfiles[1] or "")) if name and name ~= "" then - local cache = containers.define("fonts", "otf", otfversion, true) + local cache = containers.define("fonts", getargument("cache") or "otf", otfversion, true) -- cache is temp local cleanname = containers.cleanname(name) local data = containers.read(cache,cleanname) if data then local savename = file.addsuffix(cleanname .. "-unpacked","tma") report("fontsave, saving data in %s",savename) - fonts.handlers.otf.enhancers.unpack(data) + if data.creator == "context mkiv" then + fonts.handlers.otf.readers.unpack(data) + else + fonts.handlers.otf.enhancers.unpack(data) + end io.savedata(savename,table.serialize(data,true)) else report("unknown file %a",name) @@ -462,6 +487,36 @@ function scripts.fonts.save() end end +function scripts.fonts.convert() -- new save + local name = givenfiles[1] or "" + local sub = givenfiles[2] or "" + if name and name ~= "" then + local filename = resolvers.findfile(name) -- maybe also search for opentype + if filename and filename ~= "" then + local suffix = string.lower(file.suffix(filename)) + if suffix == 'ttf' or suffix == 'otf' or suffix == 'ttc' then + local data = fonts.handlers.otf.readers.loadfont(filename,sub) + if data then + fonts.handlers.otf.readers.compact(data) + fonts.handlers.otf.readers.rehash(data,getargument("names") and "names" or "unicodes") + local savename = file.replacesuffix(string.lower(data.metadata.fullname or filename),"lua") + table.save(savename,data) + report("font: %a saved as %a",filename,savename) + else + report("font: %a not loaded",filename) + end + else + report("font: %a not saved",filename) + end + else + report("font: %a not found",name) + end + else + report("font: no name given") + end +end + + if getargument("names") then setargument("reload",true) setargument("simple",true) @@ -473,6 +528,8 @@ elseif getargument("reload") then scripts.fonts.reload() elseif getargument("save") then scripts.fonts.save() +elseif getargument("convert") then + scripts.fonts.convert() elseif getargument("justload") then scripts.fonts.justload() elseif getargument("unpack") then -- cgit v1.2.3