summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/scripts/tex4ebook/list-fonts.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/scripts/tex4ebook/list-fonts.lua')
-rwxr-xr-xMaster/texmf-dist/scripts/tex4ebook/list-fonts.lua145
1 files changed, 145 insertions, 0 deletions
diff --git a/Master/texmf-dist/scripts/tex4ebook/list-fonts.lua b/Master/texmf-dist/scripts/tex4ebook/list-fonts.lua
new file mode 100755
index 00000000000..9acd1665f60
--- /dev/null
+++ b/Master/texmf-dist/scripts/tex4ebook/list-fonts.lua
@@ -0,0 +1,145 @@
+kpse.set_program_name("luatex")
+local function exists(fn)
+ local f = io.open(fn,"r")
+ if f~=nil then io.close(f) return true else return false end
+end
+local function load_fontbase(pathtable)
+ -- path should point to possible location of luaotfload font database
+ -- pathtable should be array of strings
+ -- each path should not end with lua
+
+ local path = pathtable
+ if type(pathtable) =="string" then path = {pathtable} end
+ if #path == 0 then return nil end
+ local currentpath = table.remove(path,1)
+ if exists(currentpath ..".lua") then return require(currentpath)
+ else return load_fontbase(path) end
+end
+
+--local fontbase = require(kpse.expand_var("$TEXMFSYSVAR") .. "/luatex-cache/generic/names/luaotfload-names.lua")
+local sysvar = kpse.expand_var("$TEXMFSYSVAR")
+local var = kpse.expand_var("$TEXMFVAR")
+local namespath = "/luatex-cache/generic/names/"
+local oldnames = "otfl-names"
+local newnames = "luaotfload-names"
+local compose_path = function(path, name) return path .. namespath .. name end
+local fontbase_path = {
+ compose_path(sysvar, newnames),
+ compose_path(var, newnames),
+ compose_path(sysvar, oldnames),
+ compose_path(var,oldnames)
+}
+
+local fontbase = load_fontbase(fontbase_path) or {}
+fontbase.mappings = fontbase.mappings or {}
+-- assert(fontbase, "Cannot load font names")
+
+
+-- [[
+-- This is code for querying the database
+--
+local search = arg[1] or ""
+search = unicode.utf8.lower(search)
+--]]
+local fonts = {}
+for _,record in pairs(fontbase.mappings) do
+ local familyname = record.familyname
+ local styles = fonts[familyname] or {}
+ local sanitized = record.sanitized or record.names
+ local subfamily = sanitized.subfamily --record.sanitized.subfamily or record.names.subfamily
+ styles[subfamily] = record -- We add subfamily as key to prevent duplicates
+ fonts[familyname] = styles
+end
+
+local FontLoader = {}
+
+FontLoader.__index = FontLoader
+
+FontLoader.load_family = function(familyname)
+ local self = setmetatable({},FontLoader)
+ local family = fonts[familyname]
+ --[[ for _, record in pairs(fontbase.mappings) do
+ if record.familyname == familyname then
+ local style = record.sanitized.subfamily
+ family[style] = record
+ end
+ end
+ --]]
+ self.family = family
+ return self
+end
+FontLoader.get_path =function(self,style)
+ local rec = self.family[style]
+ local filename = rec.filename
+ if type(filename) == "table" then
+ filename = filename[1]
+ end
+ return kpse.find_file(filename,'opentype fonts') or kpse.find_file(filename,'truetype fonts')
+end
+
+
+FontLoader.list = function(self)
+ for style,rec in pairs(self.family) do
+ print(style, self:get_path(style))
+ end
+end
+
+
+local FontNames = {}
+FontNames.__index = FontNames
+
+FontNames.new = function()
+ self = setmetatable({},FontNames)
+ self.names = {}
+ return self
+end
+
+FontNames.add_family = function(self,properties)
+ local properties = properties or {}
+ return function(names)
+ local names = names or {}
+ for _,n in pairs(names) do
+ self.names[n] = properties
+ end
+ end
+end
+
+FontNames.list = function(self)
+ for name,prop in pairs(self.names) do
+ local p = {}
+ for k,v in pairs(prop) do
+ table.insert(p,k..'='..v)
+ end
+ print(name, table.concat(p))
+ end
+end
+
+--[[
+local fontnames = {}
+for fontname,_ in pairs(fonts) do
+ local lowername = unicode.utf8.lower(fontname)
+ if lowername:find(search) then
+ table.insert(fontnames, fontname)
+ end
+end
+
+table.sort(fontnames)
+--for fontname, styles in pairs (fonts) do
+for _, name in pairs(fontnames) do
+ local fontname = name
+ local styles = fonts[fontname]
+ local t = {}
+ for n,_ in pairs(styles) do table.insert(t,n) end
+ print(fontname, table.concat(t,', '))
+end
+--]]
+
+local testfont = FontLoader.load_family("math")
+--testfont:list()
+
+local n= FontNames.new()
+n:add_family {type = "serif", name = "LMMono10"} {"cmr"}
+n:add_family {type = "serif", name = "TeXGyreTermes"} {"ts1-qtmr", "ec-qtmr","ec-qtmri"}
+--n:list()
+
+return {FontLoader = FontLoader, FontNames = n}