-- General use functions for texdoc --[[ Copyright 2008, 2009 Manuel Pégourié-Gonnard Distributed under the terms of the GNU GPL version 3 or later. See texdoc.tlu for details. --]] -- Load a private environment for this submodule (see texdoc.tlu). local L = {} load_env(L, { 'io', 'os', 'print', 'config', }) -- 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 error_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() local default, files = {}, {} for _, param in ipairs(C.usage_settings) do local display = param[config[param.name]] if config[param.name..'_src'] == 'def' then table.insert(default, display) elseif config[param.name..'_src'] == 'file' then table.insert(files, display) end end def = table.concat(default, ', ') conf = table.concat(files, ', ') if not (def == '') then def = def..' (default)' end if not (conf == '') then conf = conf..' (user config)' end local sep = (def == '' or conf == '') and '' or '; ' local settings = C.usage_settings_ph..' '..def..sep..conf..'.' local usage_msg = string.gsub(C.usage_msg, C.usage_settings_ph, settings) print(usage_msg) end -- finally export a few symbols export_symbols(L, { 'err_print', 'deb_print', 'w32_path', 'parse_zip', 'print_usage', 'path_parent', })