diff options
Diffstat (limited to 'luaotfload-tool.lua')
-rwxr-xr-x | luaotfload-tool.lua | 52 |
1 files changed, 45 insertions, 7 deletions
diff --git a/luaotfload-tool.lua b/luaotfload-tool.lua index af21445..27b3519 100755 --- a/luaotfload-tool.lua +++ b/luaotfload-tool.lua @@ -259,21 +259,52 @@ local val_fmt = [[%s]] local fieldseparator = ":" local info_fmt = key_fmt .. fieldseparator .. " " .. val_fmt +local currentdepth = 0 +local counterstack = { } -- counters per level +local counterformat = "%d" + +local format_counter = function (stack) + local acc = { } + for lvl=1, #stack do + acc[#acc+1] = stringformat(counterformat, stack[lvl]) + end + return tableconcat(acc, ".") +end local print_heading = function (title, level) + local structuredata + if currentdepth == level then -- top is current + counterstack[#counterstack] = counterstack[#counterstack] + 1 + elseif currentdepth < level then -- push new + counterstack[#counterstack+1] = 1 + else -- pop + local diff = currentdepth - level + while diff > 0 do + counterstack[#counterstack] = nil + diff = diff - 1 + end + counterstack[#counterstack] = counterstack[#counterstack] + 1 + end + currentdepth = level + + texiowrite_nl "" if not level or level > #head_adornchars then level = #head_adornchars end local adornchar = head_adornchars[level] - local s = adornchar .. adornchar .. " " .. title .. " " + local counter = format_counter(counterstack) + + local s = adornchar .. adornchar .. " " + .. counter .. " " + .. title .. " " texiowrite_nl (s .. stringrep(adornchar, textwidth-utf.len(s))) - texiowrite_nl "" end local show_info_items = function (fontinfo) - local items = table.sortedkeys(fontinfo) + local items = table.sortedkeys(fontinfo) print_heading(fontinfo.fullname, 1) + texiowrite_nl "" for n = 1, #items do local item = items[n] texiowrite_nl(stringformat( @@ -292,6 +323,7 @@ local show_fontloader_warnings = function (ws) print_heading(stringformat( [[the fontloader emitted %d warnings]], nws), 2) + texiowrite_nl "" for i=1, nws do local w = ws[i] texiowrite_nl (stringformat("%d:", i)) @@ -315,11 +347,14 @@ local reflow = function (text, width) local words if type(text) == "string" then words = lpegmatch(p_words, text) + if #words < 2 then + return { text } + end else words = text - end - if #words < 2 then - return { text } + if #words < 2 then + return words + end end local space = " " @@ -369,7 +404,8 @@ local display_names = function (names) print_heading("Font Metadata", 2) for i=1, #names do local lang, namedata = names[i].lang, names[i].names - print_heading(stringformat("%d) Language: %s ", i, lang), 3) + print_heading(stringformat("Language: %s ", i, lang), 3) + texiowrite_nl "" if namedata then for field, value in next, namedata do print_field(field, value) @@ -405,6 +441,7 @@ local general_fields = { local display_general = function (fullinfo) texiowrite_nl "" print_heading("General Information", 2) + texiowrite_nl "" for i=1, #general_fields do local field = general_fields[i] local key, mode, desc = unpack(field) @@ -432,6 +469,7 @@ local print_features = function (features) for script, languages in next, data do local field = stringformat(key_fmt, script).. fieldseparator .. " " local wd_field = #field + --inspect(languages.list) local lines = reflow(languages.list, textwidth - wd_field) local indent = stringrep(" ", wd_field) texiowrite_nl(field) |