diff options
Diffstat (limited to 'Master/texmf-dist/tex/luatex/gregoriotex/gregoriotex.lua')
-rw-r--r-- | Master/texmf-dist/tex/luatex/gregoriotex/gregoriotex.lua | 77 |
1 files changed, 51 insertions, 26 deletions
diff --git a/Master/texmf-dist/tex/luatex/gregoriotex/gregoriotex.lua b/Master/texmf-dist/tex/luatex/gregoriotex/gregoriotex.lua index e87bbc553e0..abb26638701 100644 --- a/Master/texmf-dist/tex/luatex/gregoriotex/gregoriotex.lua +++ b/Master/texmf-dist/tex/luatex/gregoriotex/gregoriotex.lua @@ -24,13 +24,13 @@ local hpack, traverse, traverse_id, has_attribute, count, remove, insert_after, gregoriotex = gregoriotex or {} local gregoriotex = gregoriotex -local internalversion = '5.0.1' -- GREGORIO_VERSION (comment used by VersionManager.py) +local internalversion = '5.0.2' -- GREGORIO_VERSION (comment used by VersionManager.py) local err, warn, info, log = luatexbase.provides_module({ name = "gregoriotex", - version = '5.0.1', -- GREGORIO_VERSION + version = '5.0.2', -- GREGORIO_VERSION greinternalversion = internalversion, - date = "2017/04/16", -- GREGORIO_DATE_LTX + date = "2017/05/24", -- GREGORIO_DATE_LTX description = "GregorioTeX module.", author = "The Gregorio Project (see CONTRIBUTORS.md)", copyright = "2008-2017 - The Gregorio Project", @@ -84,6 +84,8 @@ local new_score_last_syllables = nil local state_hashes = nil local new_state_hashes = nil local auxname = nil +local tmpname = nil +local test_snippet_filename = nil local snippet_filename = nil local snippet_logname = nil @@ -120,33 +122,53 @@ local translation_mark = 1 local abovelinestext_mark = 2 log("marker whatsit id is %d", marker_whatsit_id) +local function get_prog_output(cmd, fmt) + cmd = string.format(cmd, tmpname) + local rc = os.execute(cmd) + local content = nil + if rc == 0 then + local f = io.open(tmpname, 'r'); + if f then + content = f:read(fmt) + f:close() + end + end + os.remove(tmpname) + return content +end + local function gregorio_exe() if real_gregorio_exe == nil then + local tmp_gabcfile = io.open(test_snippet_filename, 'w') + tmp_gabcfile:write("name:test;\n%%\n(c4)(g)\n") + tmp_gabcfile:close() + local exe_version -- first look for one with the exact version - real_gregorio_exe = 'gregorio-5_0_1' -- FILENAME_VERSION - exe_version = io.popen(real_gregorio_exe..' --version', 'r') - if exe_version then - exe_version = exe_version:read("*line") - end + real_gregorio_exe = 'gregorio-5_0_2' -- FILENAME_VERSION + local cmd = string.format("%s -o %%s %s", real_gregorio_exe, + test_snippet_filename) + exe_version = get_prog_output(cmd, '*line') if not exe_version then -- look for suffix-less executable real_gregorio_exe = 'gregorio' - exe_version = io.popen(real_gregorio_exe..' --version', 'r') - exe_version = exe_version:read("*line") - if not exe_version or string.match(exe_version,"%d+%.%d+%.") - ~= string.match(internalversion,"%d+%.%d+%.") then - real_gregorio_exe = nil - err("Unable to find gregorio executable.\n".. - "shell-escape mode may not be activated. Try\n\n".. - "%s --shell-escape %s.tex\n\n".. - "See the documentation of Gregorio or your TeX\n".. - "distribution to automatize it.", - tex.formatname, tex.jobname) - end + cmd = string.format("%s -o %%s %s", real_gregorio_exe, + test_snippet_filename) + exe_version = get_prog_output(cmd, '*line') + end + if not exe_version or string.match(exe_version,"%d+%.%d+%.") + ~= string.match(internalversion,"%d+%.%d+%.") then + real_gregorio_exe = nil + err("Unable to find gregorio executable.\n".. + "shell-escape mode may not be activated. Try\n\n".. + "%s --shell-escape %s.tex\n\n".. + "See the documentation of Gregorio or your TeX\n".. + "distribution to automatize it.", + tex.formatname, tex.jobname) end + os.remove(test_snippet_filename) log("will use %s", real_gregorio_exe) end @@ -334,10 +356,14 @@ local function init(arg, enable_height_computation) end if outputdir and lfs.isdir(outputdir) then auxname = outputdir..'/'..tex.jobname..'.gaux' + tmpname = outputdir..'/'..tex.jobname..'.gtmp' + test_snippet_filename = outputdir..'/'..tex.jobname..'.test.gsnippet' snippet_filename = outputdir..'/'..tex.jobname..'.gsnippet' snippet_logname = outputdir..'/'..tex.jobname..'.gsniplog' else auxname = tex.jobname..'.gaux' + tmpname = tex.jobname..'.gtmp' + test_snippet_filename = tex.jobname..'.test.gsnippet' snippet_filename = tex.jobname..'.gsnippet' snippet_logname = tex.jobname..'.gsniplog' end @@ -904,18 +930,17 @@ local function direct_gabc(gabc, header, allow_deprecated) gabc = gabc:match('^()%s*$') and '' or gabc:match('^%s*(.*%S)') f:write('name:direct-gabc;\n'..(header or '')..'\n%%\n'..gabc:gsub('\\par ', '\n')) f:close() - local cmd = string.format('%s -W %s-S -l %s %s', gregorio_exe(), deprecated, - snippet_logname, snippet_filename) - local p = io.popen(cmd, 'r') - if p == nil then + local cmd = string.format('%s -W %s-o %%s -l %s %s', gregorio_exe(), + deprecated, snippet_logname, snippet_filename) + local content = get_prog_output(cmd, '*a') + if content == nil then err("\nSomething went wrong when executing\n %s\n" .."shell-escape mode may not be activated. Try\n\n" .."%s --shell-escape %s.tex\n\n" .."See the documentation of Gregorio or your TeX\n" .."distribution to automatize it.", cmd, tex.formatname, tex.jobname) else - tex.print(p:read("*a"):explode('\n')) - p:close() + tex.print(content:explode('\n')) end local glog = io.open(snippet_logname, 'a+') if glog == nil then |