-- functions.tlu: general-use functions for texdoc -- -- Manuel Pégourié-Gonnard and the TeX Live team, GPLv3, -- see texdoclib.tlu for details -- change '/' to '\' on windows -- Use: internal representation of files always use forward slashes. -- This function should be called only before displaying a file name. if os.type == "windows" then function w32_path (path) return (string.gsub (path, '/', '\\')) end else function w32_path (path) return path end end -- remove the last direcory component of a path if os.type == 'windows' then function path_parent(path) return string.match(path, '^(.*)[\\/]') end else function path_parent(path) return string.match(path, '^(.*)/') end end -- generic error display function (see the err_priority constant) function err_print (lvl, msg) -- be careful: maybe config.verbosity_level is not set yet local verbosity_level = config.verbosity_level or tonumber(C.def_verbosity) if C.err_priority[lvl] <= verbosity_level then io.stderr:write ("texdoc "..lvl..": "..msg.."\n") end end do --scope of active_debugs local active_debugs -- generic debug function function deb_print(cat, msg) -- make sure active_debugs is set if not active_debugs then set_active_debugs() end -- print message it belongs to an active category if active_debugs and active_debugs[cat] or cat == 'XXX' then io.stderr:write ("texdoc debug-"..cat..": "..msg.."\n") end end -- set active_debugs function set_active_debugs() if not config.debug_list then return end active_debugs = {} -- all debug options imply version info if config.debug_list[1] then active_debugs.version = true else return end -- if 'all' is the first keyword, just activate all categories if config.debug_list[1] == 'all' then for deb in pairs(C.known_debugs) do active_debugs[deb] = true end return end -- activate options from the list for _, deb in ipairs(config.debug_list) do local deps = C.known_debugs[deb] if deps then active_debugs[deb] = true for _, d in ipairs(deps) do active_debugs[d] = true end else err_print('warning', "Unknown debug category '"..deb.."'.") end end end end -- scope of active_debugs -- if file is base..'.'..zip with zip in zipext_list, return: base, zip -- otherwise, return: file, nil function parse_zip(file) local zip for _, zip in ipairs(config.zipext_list) do local l = #zip + 1 if string.sub(file, -l, -1) == '.'..zip then return string.sub(file, 1, -l - 1), zip end end return file, nil end -- print a usage message, with the proper 'active values' line function print_usage(actions) local usage_msg = C.usage_msg -- include actions if any if actions then usage_msg = usage_msg:gsub(C.actions_ph, C.actions_ph .. actions .. '\n\n') else usage_msg = usage_msg:gsub(C.actions_ph, '') end -- finally print it print(usage_msg) end return { err_print = err_print, deb_print = deb_print, w32_path = w32_path, parse_zip = parse_zip, print_usage = print_usage, path_parent = path_parent, } -- vim: ft=lua: