diff options
Diffstat (limited to 'tex/context/base/mkiv/font-log.lua')
-rw-r--r-- | tex/context/base/mkiv/font-log.lua | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/tex/context/base/mkiv/font-log.lua b/tex/context/base/mkiv/font-log.lua new file mode 100644 index 000000000..092b5a62e --- /dev/null +++ b/tex/context/base/mkiv/font-log.lua @@ -0,0 +1,88 @@ +if not modules then modules = { } end modules ['font-log'] = { + version = 1.001, + comment = "companion to font-ini.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +local next, format, lower, concat = next, string.format, string.lower, table.concat + +local trace_defining = false trackers.register("fonts.defining", function(v) trace_defining = v end) +local report_defining = logs.reporter("fonts","defining") + +local basename = file.basename + +local fonts = fonts +local loggers = { } +fonts.loggers = loggers +local usedfonts = utilities.storage.allocate() +----- loadedfonts = utilities.storage.allocate() + +--[[ldx-- +<p>The following functions are used for reporting about the fonts +used. The message itself is not that useful in regular runs but since +we now have several readers it may be handy to know what reader is +used for which font.</p> +--ldx]]-- + +function loggers.onetimemessage(font,char,message,reporter) + local tfmdata = fonts.hashes.identifiers[font] + local shared = tfmdata.shared + local messages = shared.messages + if not messages then + messages = { } + shared.messages = messages + end + local category = messages[message] + if not category then + category = { } + messages[message] = category + end + if not category[char] then + if not reporter then + reporter = report_defining + end + reporter("char %U in font %a with id %s: %s",char,tfmdata.properties.fullname,font,message) + category[char] = true + end +end + +function loggers.register(tfmdata,source,specification) -- save file name in spec here ! ! ! ! ! ! + if tfmdata and specification and specification.specification then + local name = lower(specification.name) + if trace_defining and not usedfonts[name] then + report_defining("registering %a as %a, used %a",file.basename(specification.name),source,file.basename(specification.filename)) + end + specification.source = source + -- loadedfonts[lower(specification.specification)] = specification + usedfonts[lower(specification.filename or specification.name)] = source + end +end + +function loggers.format(name) -- should be avoided + return usedfonts[name] or "unknown" +end + +-- maybe move this to font-ctx.lua + +statistics.register("loaded fonts", function() + if next(usedfonts) then + local t, n = { }, 0 + local treatmentdata = fonts.treatments.data + for name, used in table.sortedhash(usedfonts) do + n = n + 1 + local base = basename(name) + if complete then + t[n] = format("%s -> %s",used,base) + else + t[n] = base + end + local treatment = treatmentdata[base] + if treatment and treatment.comment then + t[n] = format("%s (%s)",t[n],treatment.comment) + end + end + return n > 0 and format("%s files: %s",n,concat(t,", ")) or "none" + end +end) |