diff options
| author | Khaled Hosny <khaledhosny@eglug.org> | 2010-03-01 00:08:58 +0200 | 
|---|---|---|
| committer | Khaled Hosny <khaledhosny@eglug.org> | 2010-03-01 00:27:08 +0200 | 
| commit | c1247bc8dd0f1072485d0b300e0c4a21d16d8b15 (patch) | |
| tree | 5021f01cd011b8c8be7a5ed492adaa8b852d56ee | |
| parent | 4fa1adf0cf2eccb58b55730a9cae888249b8230c (diff) | |
| download | luaotfload-c1247bc8dd0f1072485d0b300e0c4a21d16d8b15.tar.gz | |
Rewrite logging
| -rw-r--r-- | otfl-font-nms.lua | 90 | ||||
| -rw-r--r-- | update-luatex-font-database.lua | 12 | 
2 files changed, 62 insertions, 40 deletions
diff --git a/otfl-font-nms.lua b/otfl-font-nms.lua index 7e08919..92d0243 100644 --- a/otfl-font-nms.lua +++ b/otfl-font-nms.lua @@ -17,25 +17,22 @@ fonts.names = fonts.names or { }  local names = fonts.names  local splitpath, expandpath, glob, basename = file.split_path, kpse.expand_path, dir.glob, file.basename -local upper, format, rep = string.upper, string.format, string.rep +local upper, format = string.upper, string.format --- Log facilities: --- - level 0 is quiet --- - level 1 is the progress bar --- - level 2 prints the searched directories --- - level 3 prints all the loaded fonts --- - level 4 prints all informations when searching directories (debug only) -names.log_level  = 1 +local trace_progress = true  --trackers.register("names.progress", function(v) trace_progress = v end) +local trace_search   = false --trackers.register("names.search",   function(v) trace_search   = v end) +local trace_loading  = false --trackers.register("names.loading",  function(v) trace_loading  = v end)  local lastislog = 0 -function names.log(lvl, fmt, ...) -    if lvl <= names.log_level then -        lastislog = 1 -        texio.write_nl(format("luaotfload | %s", format(fmt,...))) -    end +function log(fmt, ...) +    lastislog = 1 +    texio.write_nl(format("luaotfload | %s", format(fmt,...)))  end +logs        = logs or { } +logs.report = logs.report or log +  local log = names.log  -- The progress bar @@ -101,15 +98,19 @@ function fontloader.fullinfo(...)  end  local function load_font(filename, fontnames, texmf) -    log(3, "Loading font: %s", filename)      local database  = fontnames      local mappings  = database.mappings  or { }      local families  = database.families  or { }      local checksums = database.checksums or { }      if filename then +        if trace_loading then +            logs.report("loading font: %s", filename) +        end          local checksum = file.checksum(filename)          if checksums[checksum] and checksums[checksum] == filename then -            log(3, "Font already indexed: %s", filename) +            if trace_loading then +                logs.report("font already indexed: %s", filename) +            end              return fontnames          end          checksums[checksum] = filename @@ -128,7 +129,9 @@ local function load_font(filename, fontnames, texmf)                          end                          table.insert(families[fullinfo.names.family], #mappings)                      else -                        log(3, "Warning: font with broken names table: %s, ignored", filename) +                        if trace_loading then +                            logs.report("font with broken names table: %s, ignored", filename) +                        end                      end                  end              else @@ -143,11 +146,15 @@ local function load_font(filename, fontnames, texmf)                      end                      table.insert(families[fullinfo.names.family], #mappings)                  else -                    log(3, "Warning: font with broken names table: %s, ignored", filename) +                    if trace_loading then +                        logs.report("font with broken names table: %s, ignored", filename) +                    end                  end              end          else -            log(1, "Failed to load %s", filename) +            if trace_loading then +               logs.report("failed to load %s", filename) +            end          end      end      return database @@ -166,7 +173,6 @@ if system then  else      system = 'unix' -- ?  end -log(2, "Detecting system: %s", system)  -- path normalization:  -- - a\b\c  -> a/b/c @@ -197,19 +203,27 @@ local function scan_dir(dirname, fontnames, recursive, texmf)      local nbfound = 0      for _,ext in ipairs { "otf", "ttf", "ttc", "dfont" } do          if recursive then pat = "/**." else pat = "/*." end -        log(4, "Scanning '%s' for '%s' fonts", dirname, ext) +        if trace_search then +            logs.report("scanning '%s' for '%s' fonts", dirname, ext) +        end          found = glob(dirname .. pat .. ext)          -- note that glob fails silently on broken symlinks, which happens          -- sometimes in TeX Live. -        log(4, "%s fonts found", #found) +        if trace_search then +            logs.report("%s fonts found", #found) +        end          nbfound = nbfound + #found          table.append(list, found) -        log(4, "Scanning '%s' for '%s' fonts", dirname, upper(ext)) +        if trace_search then +            logs.report("scanning '%s' for '%s' fonts", dirname, upper(ext)) +        end          found = glob(dirname .. pat .. upper(ext))          table.append(list, found)          nbfound = nbfound + #found      end -    log(2, "%d fonts found in '%s'", nbfound, dirname) +    if trace_search then +        logs.report("%d fonts found in '%s'", nbfound, dirname) +    end      for _,fnt in ipairs(list) do          fnt = path_normalize(fnt)          fontnames = load_font(fnt, fontnames, texmf) @@ -220,10 +234,12 @@ end  -- The function that scans all fonts in the texmf tree, through kpathsea  -- variables OPENTYPEFONTS and TTFONTS of texmf.cnf  local function scan_texmf_tree(fontnames) -    if expandpath("$OSFONTDIR"):is_empty() then -        log(1, "Scanning TEXMF fonts:") -    else -        log(1, "Scanning TEXMF and OS fonts:") +    if trace_progress then +        if expandpath("$OSFONTDIR"):is_empty() then +            logs.report("scanning TEXMF fonts:") +        else +            logs.report("scanning TEXMF and OS fonts:") +        end      end      local fontdirs = expandpath("$OPENTYPEFONTS")      fontdirs = fontdirs .. string.gsub(expandpath("$TTFONTS"), "^\.", "") @@ -265,14 +281,18 @@ end  -- already been scanned, and thus we don't scan them again.  local function scan_os_fonts(fontnames)      if expandpath("$OSFONTDIR"):is_empty() then  -        log(1, "Scanning system fonts:") -        log(2, "Executing 'fc-list : file'") +        if trace_progress then +            logs.report("scanning OS fonts:") +        end +        if trace_search then +            logs.report("executing 'fc-list : file' and parsing its result...") +        end          local data = io.popen("fc-list : file", 'r') -        log(2, "Parsing the result...")          local list = read_fcdata(data)          data:close() -        log(2, "%d fonts found", #list) -        log(2, "Scanning...", #list) +        if trace_search then +            logs.report("%d fonts found", #list) +        end          count = 0          for _,fnt in ipairs(list) do              count = count + 1 @@ -297,10 +317,12 @@ local function update(fontnames,force)      if force then          fontnames = fontnames_init()      else -	if fontnames and fontnames.version and fontnames.version == names.version then +        if fontnames and fontnames.version and fontnames.version == names.version then          else -            log(2, "Old font names database version, generating new one")              fontnames = fontnames_init() +            if trace_search then +                logs.report("no font names database or old one found, generating new one") +            end          end      end      fontnames = scan_texmf_tree(fontnames) diff --git a/update-luatex-font-database.lua b/update-luatex-font-database.lua index e236033..0363f00 100644 --- a/update-luatex-font-database.lua +++ b/update-luatex-font-database.lua @@ -29,7 +29,7 @@ local names    = fonts.names  names.basename = names.basename or "otfl-names.lua"  names.version  = names.version  or 2.004 -local log      = names.log +local log      = logs.report  local function help_msg()      texio.write_nl(string.format([[Usage: %s [OPTION]... @@ -92,7 +92,7 @@ local function do_run_fc_cache(c)      if system == 'windows' then          toexec = 'fc-cache.exe' -- TODO: to test on a non-cygwin Windows      end -    names.log(1, 'Executing %s...\n', toexec) +    log('executing %s...\n', toexec)      os.execute(toexec)  end @@ -148,10 +148,10 @@ mkluatexfontdb.directory = kpse.expand_var("$TEXMFVAR") .. mkluatexfontdb.subtex  local function generate(force) -    texio.write("luaotfload | Generating font names database.") +    log("generating font names database.")      local savepath = mkluatexfontdb.directory      if not lfs.isdir(savepath) then -        log(1, "Creating directory %s", savepath) +        log("creating directory %s", savepath)          lfs.mkdir(savepath)          if not lfs.isdir(savepath) then              texio.write_nl(string.format("Error: cannot create directory '%s', exiting.\n", savepath)) @@ -168,10 +168,10 @@ local function generate(force)      local fontnames      fontnames = dofile(kpse.find_file(names.basename))      fontnames = names.update   (fontnames, force) -    log(1, "%s fonts in %s families saved in the database",  +    log("%s fonts in %s families saved in the database",          #fontnames.mappings, #table.keys(fontnames.families))      io.savedata(savepath, table.serialize(fontnames, true)) -    log(1, "Saved font names database in %s\n", savepath) +    log("saved font names database in %s\n", savepath)  end  generate(force_reload)  | 
