summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/scripts/texdoc/functions.tlu
blob: 88b66b2ca40992abf124cf010310e476a1f6ce83 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
-- 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: