diff options
-rw-r--r-- | luaotfload-fonts.lua | 76 |
1 files changed, 52 insertions, 24 deletions
diff --git a/luaotfload-fonts.lua b/luaotfload-fonts.lua index a86aa84..71f9a1c 100644 --- a/luaotfload-fonts.lua +++ b/luaotfload-fonts.lua @@ -13,11 +13,7 @@ luaotfload.fonts.module = { kpse.set_program_name("luatex") -if status and status.luatex_version and status.luatex_version > 44 then - require("luaextra.lua") -else - dofile(kpse.find_file("luaextra.lua")) -end +dofile(kpse.find_file("luaextra.lua")) local upper, splitpath, expandpath, glob, basename = string.upper, file.split_path, kpse.expand_path, dir.glob, file.basename @@ -192,19 +188,6 @@ local function scan_dir(dirname, names, recursive, texmf) end end ---[[ -local function scan_os_fonts(names) - local fontdirs - fontdirs = expandpath("$OSFONTDIR") - if not fontdirs:is_empty() then - fontdirs = splitpath(fontdirs, ":") - for _,d in ipairs(fontdirs) do - scan_dir(d, names, true) - end - end -end ---]] - local texmfdist = kpse.expand_var("$TEXMFDIST") local texmfmain = kpse.expand_var("$TEXMFMAIN") local texmflocal = kpse.expand_var("$TEXMFLOCAL") @@ -216,17 +199,62 @@ local function is_texmf(dir) return false end +local function read_fcdata(fontdirs, data) + local to_add = nil + local done = nil + for line in data:lines() do + if not done then done = true end + local match = line:match("^Directory: (.+)") + if match then + if match:find("ype1") then + to_add = nil + else + to_add = match + end + elseif to_add then + match = line:match('^"[^"]+%.[^"]+"') + if match then + if to_add then + fontdirs[to_add] = true + to_add = nil + end + end + end + end + if not done then + return nil + else + return fontdirs + end +end + +local function append_fccatdirs(fontdirs) + log(1, "executing `fc-cat -v'\n") + local data = io.popen("fc-cat -v", 'r') + local result = read_fcdata(fontdirs, data) + data:close() + if not result then + log(1, "fail, now trying `fc-cat.exe -v'\n") + data = io.popen("fc-cat.exe -v", 'r') + result = read_fcdata(fontdirs, data) + data:close() + if not result then + info("Unable to execute fc-cat nor fc-cat.exe, system fonts may not be available") + return fontdirs + end + end + return result +end + local function scan_all(names) local fontdirs = string.gsub(expandpath("$OPENTYPEFONTS"), "^\.[;:]", "") fontdirs = fontdirs .. string.gsub(expandpath("$TTFONTS"), "^\.", "") if not fontdirs:is_empty() then - local explored_dirs = {} fontdirs = splitpath(fontdirs) - for _,d in ipairs(fontdirs) do - if not explored_dirs[d] then - scan_dir(d, names, false, is_texmf(d)) - explored_dirs[d] = true - end + fontdirs = table.tohash(fontdirs) + fontdirs = append_fccatdirs(fontdirs) + for d,_ in pairs(fontdirs) do + scan_dir(d, names, false, is_texmf(d)) end end end |