diff options
Diffstat (limited to 'Master/texmf-dist/scripts/texdoc/view.tlu')
-rw-r--r-- | Master/texmf-dist/scripts/texdoc/view.tlu | 226 |
1 files changed, 0 insertions, 226 deletions
diff --git a/Master/texmf-dist/scripts/texdoc/view.tlu b/Master/texmf-dist/scripts/texdoc/view.tlu deleted file mode 100644 index 15784ff7390..00000000000 --- a/Master/texmf-dist/scripts/texdoc/view.tlu +++ /dev/null @@ -1,226 +0,0 @@ --- view.tlu view a document and/or display the list of results in texdoc --- --- Manuel Pégourié-Gonnard and the TeX Live team, GPLv3, --- see texdoclib.tlu for details - ------------------------------ view a document ----------------------------- - --- view a document --- see search.tlu for the structure of the argument -function view_doc(docfile) - return view_file(docfile.realpath) -end - --- get viewer and viewer_replacement before calling try_viewing --- returns false of failure, true on success --- viewer_replacement is either: --- 1. the filename, quoted with " --- 2. the filename, quoted with " followed by some rm commands --- The second case happens when the doc was zipped. In the case, this function --- unzips it in a tempdir so that the viewer command can use the unzipped file. -function view_file (filename) - local viewer, viewer_replacement - -- check if the file is zipped - local nozipname, zipext = parse_zip(filename) - -- determine viewer_replacement - if zipext then - local unzip_cmd = config['unzip_'..zipext] - if not unzip_cmd then - err_print('error', - "No unzip command for ."..zipext..' files, skipping '..filename) - return false - end - local tmpdir = os.tmpdir("/tmp/texdoc.XXXXXX") - if not tmpdir then - err_print('error', 'Failed to create tempdir to unzip.') - return false - end - local basename = string.match(nozipname, '.*/(.*)$') or nozipname - local tmpfile = '"'..tmpdir..'/'..basename..'"' - local unzip = unzip_cmd..' "'..filename..'">'..tmpfile - deb_print('view', "Unzip command: "..unzip) - if not os.execute(unzip) then - err_print('error', "Failed to unzip '"..filename.."'") - os.remove(tmpfile) - os.remove(tmpdir) - return false - end - viewer_replacement = ''..tmpfile..'; ' - ..config.rm_file..' '..tmpfile..'; ' - ..config.rm_dir..' '..tmpdir - filename = nozipname - else - viewer_replacement = '"'..w32_path(filename)..'"' - end - -- files without extension are assumed to be text - local viewext = (filename:match('.*%.([^/]*)$') or 'txt'):lower() - -- special case : sty files use txt viewer - if viewext == 'sty' then viewext = 'txt' end - -- FIXME: hardcoding such cases this way is not very clean - if viewext == 'texlive' then viewext = 'txt' end - if viewext == 'htm' then viewext = 'html' end - -- get a viewer from built-in defaults if not already set - if not config['viewer_'..viewext] then - get_default_viewers() - end - -- still no viewers? use txt as a fallback - if not config['viewer_'..viewext] then - err_print('warning', - "No viewer_"..viewext.." defined, using viewer_txt.") - viewext = 'txt' - end - assert(config['viewer_'..viewext], 'Internal error: no viewer found.') - return try_viewing(config['viewer_'..viewext], viewer_replacement) -end - --- view a file, if possible -function try_viewing (view_command, viewer_replacement) - if string.match (view_command, C.place_holder) then - view_command = string.gsub( - view_command, C.place_holder, viewer_replacement) - else - view_command = view_command..' '..viewer_replacement - end - - -- try to catch problems with missing DISPLAY on Unix - if os.type == 'unix' and not (os.name == 'macosx') - and os.getenv('DISPLAY') == nil then - err_print('warning', - "DISPLAY is not set; your viewer will likely have problems.") - err_print('warning', - "Try --list to list results instead of displaying them.") - end - err_print('info', 'View command: '..view_command) - - -- See long comment below this function for the LC_CTYPE story. - -- We only want to reset the environment if we have the value - -- to reset it to. In older versions of luatex, status.lc_* will be nil. - local env_lc_ctype = status.lc_ctype - local luatex_lc_ctype = os.setlocale(nil, 'ctype') - if (env_lc_ctype) then - err_print('info', "Setting environment LC_CTYPE to: "..env_lc_ctype) - os.setenv("LC_CTYPE", env_lc_ctype) - end - - -- the big casino: run the external command. - if not os.execute(view_command) then - err_print('error', "Failed to execute: "..view_command) - return false - end - - -- reset back to "C" (should always be C and always happen, but in case...) - if (luatex_lc_ctype) then - os.setenv("LC_CTYPE", luatex_lc_ctype) - end - - return true -end - --- Explanation of locale madness: --- LuaTeX resets LC_CTYPE, LC_COLLATE, LC_NUMERIC to "C". That is good for --- inside luatex, but when we run an external program, if the user's --- environment is something else, we want to switch back to it. As of --- TL 2017 LuaTeX, we can inspect the user's locale with status.lc_ctype, etc. --- --- For texdoc purposes, what matters is LC_CTYPE (so we don't bother with --- the others). For example, with the less pager, when LC_CTYPE=C, --- non-ASCII bytes are displayed as "<xx>", where xx is the two hex --- digits for the byte. --- --- See <texdoc-dev-source>/tools/Makefile for a standalone test case. - ------------------------------ display results ----------------------------- - --- print a list of docfile objects (see search.tlu) as a menu --- if showall is false, stop as soon as a bad result is encountered -function print_menu(name, doclist, showall) - local max_lines = tonumber(config.max_lines) - if config.interact_switch and doclist[max_lines+1] then - -- there may be too many lines, count them - local n - if showall then - n = #doclist - else - n = 0 - while doclist[n+1] and doclist[n+1].quality == 'good' do - n = n + 1 - end - end - if n > max_lines then - io.write (n, " results. Display them all? (y/N) ") - local ans = io.read('*line') - if not ((ans == 'y') or (ans == 'Y') - -- io.read had a bug wrt windows eol on some versions of texlua - or (ans == '\ry') or (ans == '\rY')) then - return - end - end - end - local i, doc, last_i - for i, doc in ipairs (doclist) do - if doc.quality == 'killed' then break end - if doc.quality ~= 'good' and not showall then break end - if config.machine_switch == true then - print(name, doc.score, w32_path(doc.realpath), - doc.lang or '', doc.details or '') - else - last_i = i -- save for test below - print(string.format('%2d %s', i, w32_path(doc.realpath))) - if doc.details or doc.lang then - local line = ' = ' - if doc.lang then line = line..'['..doc.lang..'] ' end - if doc.details then line = line..doc.details end - print(line) - end - end - end - if config.interact_switch then - io.write ("Enter number of file to view, ", - "RET to view 1, anything else to skip: ") - local num_str = io.read('*line') - -- That returns the empty string on an empty line, nil on EOF. - -- We only want to default to viewing 1 on an empty line. - -- Use Lua's faked ternary operator for fun and brevity: - num = (num_str == "" and 1 or tonumber(num_str)) - if num and doclist[num] and num <= last_i then - view_doc(doclist[num]) - end - end -end - ------------------------ deliver results based on mode --------------------- - -function deliver_results(name, doclist, many) - -- ensure that results were found or apologize - if not doclist[1] or doclist[1].quality == 'killed' then - if not config.machine_switch then - local msg = string.gsub(C.notfound_msg, C.notfound_msg_ph, name) - print(msg) -- get rid of gsub's 2nd value - end - return - end - -- shall we show all of them or only the "good" ones? - local showall = (config.mode == 'showall') - if not showall and doclist[1].quality ~= 'good' then - showall = true - err_print('info', 'No good result found, showing all results.') - end - -- view result or show menu based on mode and number of results - if (config.mode == 'view') - or config.mode == 'mixed' and (not doclist[2] - or (doclist[2].quality ~= 'good' and not showall)) then - view_doc(doclist[1]) - else - if many and not config.machine_switch then - print ("*** Results for: "..name.." ***") - end - print_menu(name, doclist, showall) - end -end - -return { - view_file = view_file, - deliver_results = deliver_results, -} - --- vim: ft=lua: |