summaryrefslogtreecommitdiff
path: root/otfl-fonts.lua
diff options
context:
space:
mode:
Diffstat (limited to 'otfl-fonts.lua')
-rw-r--r--otfl-fonts.lua68
1 files changed, 68 insertions, 0 deletions
diff --git a/otfl-fonts.lua b/otfl-fonts.lua
new file mode 100644
index 0000000..3152a07
--- /dev/null
+++ b/otfl-fonts.lua
@@ -0,0 +1,68 @@
+otfl = otfl or { }
+otfl.fonts = { }
+
+otfl.fonts.module = {
+ name = "otfl.fonts",
+ version = 1.001,
+ date = "2010/01/10",
+ description = "luaotfload font database.",
+ author = "Khaled Hosny",
+ copyright = "Khaled Hosny",
+ license = "CC0"
+}
+
+kpse.set_program_name("luatex")
+
+require("l-table.lua")
+require("l-io.lua")
+
+local fnames = fnames or { }
+fnames.mappings = fnames.mappings or { }
+fnames.version = 1.001
+
+local function clean(str)
+ if str then
+ return string.gsub(string.lower(str),"[^%a%d]","")
+ end
+end
+
+function otfl.fonts.load(filename,names,force)
+ local mappings = names.mappings
+ local key
+ if filename then
+ local i = fontloader.info(filename)
+ if i then
+ if type(i) == "table" and #i > 1 then
+ for k,v in ipairs(i) do
+ key = clean(v.fullname)
+ if not mappings[key] or force then
+ mappings[key] = { v.fullname, filename, k }
+ end
+ end
+
+ else
+ key = clean(i.fullname)
+ if not mappings[key] or force then
+ mappings[key] = { i.fullname, filename }
+ end
+ end
+ end
+ end
+end
+
+function otfl.fonts.reload(list,names)
+ for _,v in ipairs(list) do
+ otfl.fonts.load(v,names,force)
+ end
+end
+
+function otfl.fonts.fontlist()
+ local fc = io.popen("fc-list : file")
+ local l = {}
+ string.gsub(fc:read("*a"), "(.-): \n", function(h) table.insert(l, h) return "" end)
+ fc:close()
+ return l
+end
+
+otfl.fonts.reload(otfl.fonts.fontlist(),fnames)
+io.savedata("otfl-names.lua", table.serialize(fnames, true))