-- texdoclib-const.tlu: global constants for texdoc
--
-- The TeX Live team, GPLv3, see texdoclib.tlu for details
-- use an empty environment that will become texdoc_env.C (see EOF)
local constants = {}
local kpse = kpse or require 'kpse'
local os = os or require 'os'
local setfenv = setfenv
local texdoc_env
if setfenv then -- Lua <5.2
texdoc_env = getfenv()
setfenv(1, constants)
else
texdoc_env = _ENV
_ENV = constants
end
-- BEGIN constants
-- progname and version
fullname = kpse.find_file('texdoc/texdoclib', 'lua')
progname = 'Texdoc'
version = '4.1'
release_date = '2024-03-10'
-- make sure to update setup_config_from_cl() accordingly
-- and set a default value in setup_config_from_defaults() if relevant
usage_msg = [[
Usage: texdoc [OPTION]... NAME...
or: texdoc [OPTION]... ACTION
Try to find appropriate TeX documentation for the specified NAME(s).
Alternatively, perform the given ACTION and exit.
Options:
{{mode}}
{{interaction}}
{{debug}}
Actions:
{{action}}
Full manual available via `texdoc texdoc'.
Website:
Repository:
Please email bugs to .]]
zsh_completion = [=[
#compdef texdoc
__texdoc() {
local options=(
{{action}}
+ mode
{{mode}}
+ interaction
{{interaction}}
+ debug
{{debug}}
)
_arguments -C -A $options \
'*: :->arguments' && return
case $state in
arguments)
local tlpdb="$(kpsewhich -var-value TEXMFROOT)/tlpkg/texlive.tlpdb"
_values package $(awk '/^name[^.]*$/ {print $2}' $tlpdb)
;;
esac
}
if [[ $zsh_eval_context[-1] == loadautofunc ]]; then
# autoload from fpath, call function directly
__texdoc "$@"
else
# eval/source/. command, register function for later
compdef __texdoc texdoc
fi
]=]
--[[ structure of the options table
options = {
{
desc = description,
long = long option name,
short = short option name,
type = argument type (boolean|string),
group = group of the option, -- also used for shell completion
action = to be called
},
...
}
--]]
options = {
-- action
{
desc = 'Print this help message.',
long = 'help',
short = 'h',
type = 'boolean',
group = 'action'
},
{
desc = 'Print the version number.',
long = 'version',
short = 'V',
type = 'boolean',
group = 'action'
},
{
desc = 'Print the list of configuration files used.',
long = 'files',
short = 'f',
type = 'boolean',
group = 'action'
},
{
desc = 'Display FILE, given with full path (no searching).',
long = 'just-view',
type = 'string',
metavar = 'FILE',
complete = 'files',
group = 'action'
},
{
desc = 'Print SHELL completion.',
long = 'print-completion',
type = 'string',
metavar = 'SHELL',
complete = {'zsh'},
group = 'action',
},
-- mode
{
desc = 'Use view mode: start a viewer. (default)',
long = 'view',
short = 'w',
type = 'boolean',
group = 'mode',
action = function(cl_config, opt_name)
table.insert(cl_config, {'mode', 'view', opt_name})
end
},
{
desc = 'Use mixed mode (view or list).',
long = 'mixed',
short = 'm',
type = 'boolean',
group = 'mode',
action = function(cl_config, opt_name)
table.insert(cl_config, {'mode', 'mixed', opt_name})
end
},
{
desc = 'Use list mode: show a list of results.',
long = 'list',
short = 'l',
type = 'boolean',
group = 'mode',
action = function(cl_config, opt_name)
table.insert(cl_config, {'mode', 'list', opt_name})
end
},
{
desc = 'Use showall mode: show also "bad" results.',
long = 'showall',
short = 's',
type = 'boolean',
group = 'mode',
action = function(cl_config, opt_name)
table.insert(cl_config, {'mode', 'showall', opt_name})
end
},
-- interaction
{
desc = 'Use interactive menus. (default)',
long = 'interact',
short = 'i',
type = 'boolean',
group = 'interaction',
action = function(cl_config, opt_name)
table.insert(cl_config, {'interact_switch', 'true', opt_name})
end
},
{
desc = 'Use plain lists, no interaction required.',
long = 'nointeract',
short = 'I',
type = 'boolean',
group = 'interaction',
action = function(cl_config, opt_name)
table.insert(cl_config, {'interact_switch', 'false', opt_name})
end
},
-- output format
{
desc = 'Machine-readable output for lists (implies -I).',
long = 'machine',
short = 'M',
type = 'boolean',
group = 'interaction',
action = function(cl_config, opt_name)
table.insert(cl_config, {'machine_switch', 'true', opt_name})
end
},
-- verbosity
{
desc = 'Suppress warnings and most error messages.',
long = 'quiet',
short = 'q',
type = 'boolean',
group = 'debug',
action = function(cl_config, opt_name)
table.insert(cl_config, {'verbosity_level', '0', opt_name})
end
},
{
desc = 'Print additional information (e.g., viewer command).',
long = 'verbose',
short = 'v',
type = 'boolean',
group = 'debug',
action = function(cl_config, opt_name)
table.insert(cl_config, {'verbosity_level', '3', opt_name})
end
},
-- debug
{
desc = 'Activate all debug output (equal to "--debug=all").',
short = 'D',
type = 'boolean',
group = 'debug',
action = function(cl_config, opt_name)
table.insert(cl_config, {'debug_list', 'all', opt_name})
end
},
{
desc = 'Activate debug output restricted to LIST.',
long = 'debug',
short = 'd',
metavar = 'LIST',
type = 'string',
complete = 'debugs',
group = 'debug',
action = function(cl_config, opt_name, val)
if val == true then val = 'all' end
table.insert(cl_config, {'debug_list', val, opt_name})
end
},
-- config
{
desc = 'Set configuration item NAME to VALUE.',
short = 'c',
metavar = 'NAME=VALUE',
type = 'string',
complete = 'options',
group = 'debug',
action = function(cl_config, opt_name, val)
table.insert(cl_config, {val, nil, opt_name})
end
},
}
copyright_msg = [[
Copyright 2008-2024 Manuel Pégourié-Gonnard, Takuto Asakura, the TeX Live Team.
License GPLv3+: GNU GPL version 3 or later .
This is free software: you are free to change and redistribute it.]]
actions_ph = 'Actions:\n'
known_options = {
'viewer_.*',
'mode',
'interact_switch',
'machine_switch',
'ext_list',
'basename_list',
'badext_list',
'badbasename_list',
'suffix_list',
'verbosity_level',
'debug_list',
'lastfile_switch',
'rm_dir',
'rm_file',
'unzip_.*',
'zipext_list',
'max_lines',
'lang',
'fuzzy_level',
'texlive_tlpdb',
'online_url',
}
error_msg = [[
Try `texdoc --help' for short help, `texdoc texdoc' for full manual.]]
notfound_msg = [[
Sorry, no local documentation found for "PKGNAME".
You can try the online version of Texdoc at .
If you are unsure about the name, try full-text searching on CTAN.
Search form: ]]
notfound_msg_ph = 'PKGNAME'
badmatch_msg = [[
Unfortunately, there are no good matches for "PKGNAME".
Here are the top three matches:
]]
badmatch_msg_ph = 'PKGNAME'
badmatch_prompt = [[
Enter number of file to view, Y to search online, or any other key to exit: ]]
nomatch_msg = [[
Unfortunately, there are no good matches for "PKGNAME".
]]
nomatch_msg_ph = 'PKGNAME'
nolocaldocs_msg = [[
You don't appear to have any local documentation installed.
]]
nolocaldocs_prompt = [[
Would you like to search online? (y/N) ]]
online_msg = [[
There may be online documentation available for "PKGNAME" at
URL
This documentation may be for a different version than you have installed.
]]
online_msg_url = 'URL'
online_msg_ph = 'PKGNAME'
online_baseurl_ph = 'PKGNAME'
-- exit codes
exit_ok = 0
exit_error = 1 -- apparently hard-coded in Lua
exit_usage = 2
exit_notfound = 3
err_priority = {
error = 1,
warning = 2,
info = 3,
}
min_verbosity = '0' -- (nothing at all)
max_verbosity = '3'
def_verbosity = '2'
known_debugs = {
config = {'files'},
files = {},
search = {},
score = {},
texdocs = {},
tlpdb = {},
version = {},
view = {},
}
-- various cache or non-cache files
cache_name = 'texdoc/cache-tlpdb.lua' -- relative to TEXMFVAR
data_tlpdb_name = 'texdoc/Data.tlpdb.lua'
place_holder = '%%s' -- used for viewer commands
-- kpse path separator
kpse_sep = (os.type == 'windows') and ';' or ':'
-- language codes
-- Note: corrected with `find $TEXMFDIST/doc/ | awk 'match(
-- $0, /(.*)-(\w{2}).pdf/, a){print a[2]}'`
lang_codes = {
cn = 'zh', -- Chinese (alias)
cz = 'cz', -- Chech/Slovak
de = 'de', -- German
ee = 'et', -- Estonian
en = 'en', -- English
es = 'es', -- Spanish
fr = 'fr', -- French
it = 'it', -- Italian
ja = 'ja', -- Japanese
nl = 'nl', -- Dutch
pl = 'pl', -- Polish
ro = 'ro', -- Romanian
ru = 'ru', -- Russian
sr = 'sr', -- Serbian
zh = 'zh', -- Chinese
}
-- END constants
-- get our previous environment back
if setfenv then
setfenv(1, texdoc_env)
else
_ENV = texdoc_env
end
-- Make table C a read-only proxy to the local .
-- Note this is not deep read-only: C.known_debugs is read-only, but
-- C.known_debugs.version isn't, for instance.
local C = {}
setmetatable(C, {
__index = constants,
__newindew = function()
error('Internal error: attempt to modify a constant.')
end
})
return C
-- vim: ft=lua: