diff options
| -rw-r--r-- | otfl-font-nms.lua | 52 | 
1 files changed, 51 insertions, 1 deletions
| diff --git a/otfl-font-nms.lua b/otfl-font-nms.lua index 2ad6898..86ceae8 100644 --- a/otfl-font-nms.lua +++ b/otfl-font-nms.lua @@ -19,9 +19,21 @@ names.path           = {      systemdir = file.join(kpse.expand_var("$TEXMFSYSVAR"), names_dir),  } +local success = pcall(require, "luatexbase.modutils") +if success then +   success = pcall(luatexbase.require_module, "lualatex-platform", "2011/03/30") +end +local get_installed_fonts +if success then +   get_installed_fonts = lualatex.platform.get_installed_fonts +else +   function get_installed_fonts() +   end +end  local splitpath, expandpath = file.split_path, kpse.expand_path  local glob, basename        = dir.glob, file.basename +local extname               = file.extname  local upper, lower, format  = string.upper, string.lower, string.format  local gsub, match, rpadd    = string.gsub, string.match, string.rpadd  local gmatch, sub, find     = string.gmatch, string.sub, string.find @@ -444,6 +456,42 @@ local function read_blacklist()  end  local font_extensions = { "otf", "ttf", "ttc", "dfont" } +local font_extensions_set = {} +for key, value in ipairs(font_extensions) do +   font_extensions_set[value] = true +end + +local installed_fonts_scanned = false + +local function scan_installed_fonts(fontnames, newfontnames) +   -- Try to query and add font list from operating system. +   -- This uses the lualatex-platform module. +   logs.info("Scanning fonts known to operating system...") +   local fonts = get_installed_fonts() +   if fonts and #fonts > 0 then +      installed_fonts_scanned = true +      if trace_search then +         logs.report("%d operating system fonts found", #fonts) +      end +      for key, value in ipairs(fonts) do +         local file = value.path +         if file then +            local ext = extname(file) +            if ext and font_extensions_set[ext] then +               file = path_normalize(file) +               if trace_loading then +                  logs.report("loading font: %s", file) +               end +               load_font(file, fontnames, newfontnames, false) +            end +         end +      end +   else +      if trace_search then +         logs.report("Could not retrieve list of installed fonts") +      end +   end +end  local function scan_dir(dirname, fontnames, newfontnames, texmf)      --[[ @@ -647,8 +695,10 @@ local function update_names(fontnames, force)      end      local newfontnames = fontnames_init()      read_blacklist() +    installed_font_scanned = false +    scan_installed_fonts(fontnames, newfontnames)      scan_texmf_fonts(fontnames, newfontnames) -    if expandpath("$OSFONTDIR"):is_empty() then +    if not installed_fonts_scanned and expandpath("$OSFONTDIR"):is_empty() then          scan_os_fonts(fontnames, newfontnames)      end      return newfontnames | 
