diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty')
-rw-r--r-- | Master/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty | 372 |
1 files changed, 56 insertions, 316 deletions
diff --git a/Master/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty b/Master/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty index f9a16b5bc2e..6ff76866446 100644 --- a/Master/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty +++ b/Master/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty @@ -24,7 +24,8 @@ %% %% This work consists of the main source file pdftexcmds.dtx %% and the derived files -%% pdftexcmds.sty, pdftexcmds.pdf, pdftexcmds.ins, pdftexcmds.drv. +%% pdftexcmds.sty, pdftexcmds.pdf, pdftexcmds.ins, pdftexcmds.drv, +%% oberdiek.pdftexcmds.lua, pdftexcmds.lua. %% \begingroup \catcode44 12 % , @@ -84,7 +85,7 @@ \fi \expandafter\x\csname ver@pdftexcmds.sty\endcsname \ProvidesPackage{pdftexcmds}% - [2007/11/12 v0.2 LuaTeX support for pdfTeX utility functions (HO)] + [2007/12/12 v0.3 LuaTeX support for pdfTeX utility functions (HO)] \begingroup \catcode123 1 % { \catcode125 2 % } @@ -108,6 +109,7 @@ }% \catcode#1 #2\relax } +\TMP@EnsureCode{10}{12}% ^^J \TMP@EnsureCode{33}{12}% ! \TMP@EnsureCode{34}{12}% " \TMP@EnsureCode{39}{12}% ' @@ -123,6 +125,7 @@ \TMP@EnsureCode{60}{12}% < \TMP@EnsureCode{61}{12}% = \TMP@EnsureCode{62}{12}% > +\TMP@EnsureCode{94}{7}% ^ (superscript) \TMP@EnsureCode{95}{12}% _ (other) \TMP@EnsureCode{126}{12}% ~ (other) \begingroup\expandafter\expandafter\expandafter\endgroup @@ -188,383 +191,120 @@ \pdftexcmds@AtEnd \expandafter\endinput \fi -\chardef\pdftexcmds@luastate=0 % +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname RequirePackage\endcsname\relax + \input luatex-loader.sty\relax +\else + \RequirePackage{luatex-loader}[2007/12/12]% +\fi +\directlua0{% + require("oberdiek.pdftexcmds")% +} \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname newtoks\endcsname\relax \toksdef\pdftexcmds@toks=0 % \else \csname newtoks\endcsname\pdftexcmds@toks \fi -\begingroup - \escapechar=92 % - \edef\\{\string\\}% - \catcode35=12 % # - \catcode37=12\relax - \directlua\pdftexcmds@luastate{ - pdftexcmds = {} - function pdftexcmds.strcmp(A, B) - if A == B then - tex.write("0") - elseif A < B then - tex.write("-1") - else - tex.write("1") - end - end - function pdftexcmds.utf8_to_byte(str) - local i = 0 - local n = string.len(str) - local t = {} - while i < n do - i = i + 1 - local a = string.byte(str, i) - if a < 128 then - table.insert(t, string.char(a)) - else - if a >= 192 and i < n then - i = i + 1 - local b = string.byte(str, i) - if b < 128 or b >= 192 then - i = i - 1 - elseif a == 194 then - table.insert(t, string.char(b)) - elseif a == 195 then - table.insert(t, string.char(b + 64)) - end - end - end - end - return table.concat(t) - end - function pdftexcmds.escapehex(str, mode) - if mode == "byte" then - str = pdftexcmds.utf8_to_byte(str) - end - tex.write((string.gsub(str, ".", - function (ch) - return string.format("%02X", string.byte(ch)) - end - ))) - end - function pdftexcmds.unescapehex(str, mode) - local a = 0 - local first = true - local result = {} - for i = 1, string.len(str), 1 do - local ch = string.byte(str, i) - if ch >= 48 and ch <= 57 then - ch = ch - 48 - elseif ch >= 65 and ch <= 70 then - ch = ch - 55 - elseif ch >= 97 and ch <= 102 then - ch = ch - 87 - else - ch = nil - end - if ch then - if first then - a = ch * 16 - first = false - else - table.insert(result, a + ch) - first = true - end - end - end - if not first then - table.insert(result, a) - end - if mode == "byte" then - local utf8 = {} - for i, a in ipairs(result) do - if a < 128 then - table.insert(utf8, a) - else - if a < 192 then - table.insert(utf8, 194) - a = a - 128 - else - table.insert(utf8, 195) - a = a - 192 - end - table.insert(utf8, a + 128) - end - end - result = utf8 - end - tex.settoks(pdftexcmds.toks, string.char(unpack(result))) - end - function pdftexcmds.escapestring(str, mode) - if mode == "byte" then - str = pdftexcmds.utf8_to_byte(str) - end - tex.write((string.gsub(str, ".", - function (ch) - local b = string.byte(ch) - if b < 33 or b > 126 then - return string.format("\\%.3o", b) - end - if b == 40 or b == 41 or b == 92 then - return "\\" .. ch - end - return nil - end - ))) - end - function pdftexcmds.escapename(str, mode) - if mode == "byte" then - str = pdftexcmds.utf8_to_byte(str) - end - tex.write((string.gsub(str, ".", - function (ch) - local b = string.byte(ch) - if b == 0 then - return "" - end - if b <= 32 or b >= 127 - or b == 35 or b == 37 or b == 40 or b == 41 - or b == 47 or b == 60 or b == 62 or b == 91 - or b == 93 or b == 123 or b == 125 then - return string.format("#%.2X", b) - else - return nil - end - end - ))) - end - function pdftexcmds.filesize(filename) - local foundfile = kpse.find_file(filename, "tex", true) - if foundfile then - local size = lfs.attributes(foundfile, "size") - if size then - tex.write(size) - end - end - end - function pdftexcmds.filemoddate(filename) - local foundfile = kpse.find_file(filename, "tex", true) - if foundfile then - local date = lfs.attributes(foundfile, "modification") - if date then - local d = os.date("*t", date) - if d.sec >= 60 then - d.sec = 59 - end - local u = os.date("!*t", date) - local off = 60 * (d.hour - u.hour) + d.min - u.min - if d.year ~= u.year then - if d.year > u.year then - off = off + 1440 - else - off = off - 1440 - end - elseif d.yday ~= u.yday then - if d.yday > u.yday then - off = off + 1440 - else - off = off - 1440 - end - end - local timezone - if off == 0 then - timezone = "Z" - else - local hours = math.floor(off / 60) - local mins = math.abs(off - hours * 60) - timezone = string.format("%+03d'%02d'", hours, mins) - end - tex.write(string.format("D:%04d%02d%02d%02d%02d%02d%s", - d.year, d.month, d.day, d.hour, d.min, d.sec, timezone)) - end - end - end - function pdftexcmds.filedump(offset, length, filename) - length = tonumber(length) - if length and length > 0 then - local foundfile = kpse.find_file(filename, "tex", true) - if foundfile then - offset = tonumber(offset) - if not offset then - offset = 0 - end - local filehandle = io.open(foundfile, "r") - if filehandle then - if offset > 0 then - filehandle:seek("set", offset) - end - local dump = filehandle:read(length) - pdftexcmds.escapehex(dump) - end - end - end - end - function pdftexcmds.mdfivesum(str, mode) - if mode == "byte" then - str = pdftexcmds.utf8_to_byte(str) - end - pdftexcmds.escapehex(md5.sum(str)) - end - function pdftexcmds.filemdfivesum(filename) - local foundfile = kpse.find_file(filename, "tex", true) - if foundfile then - local filehandle = io.open(foundfile, "r") - if filehandle then - local contents = filehandle:read("*a") - pdftexcmds.escapehex(md5.sum(contents)) - end - end - end - function pdftexcmds.shellescape() - if os.execute then - tex.write("1") - else - tex.write("0") - end - end - function pdftexcmds.system(cmdline) - pdftexcmds.systemexitstatus = nil - texio.write_nl("log", "system(" .. cmdline .. ") ") - if os.execute then - texio.write("log", "executed.") - pdftexcmds.systemexitstatus = os.execute(cmdline) - else - texio.write("log", "disabled.") - end - end - function pdftexcmds.lastsystemstatus() - local result = tonumber(pdftexcmds.systemexitstatus) - if result then - local x = math.floor(result / 256) - tex.write(result - 256 * math.floor(result / 256)) - end - end - function pdftexcmds.lastsystemexit() - local result = tonumber(pdftexcmds.systemexitstatus) - if result then - tex.write(math.floor(result / 256)) - end - end - function pdftexcmds.pipe(cmdline) - local result - pdftexcmds.systemexitstatus = nil - texio.write_nl("log", "pipe(" .. cmdline ..") ") - if io.popen then - texio.write("log", "executed.") - local handle = io.popen(cmdline, "r") - if handle then - result = handle:read("*a") - handle:close() - end - else - texio.write("log", "disabled.") - end - if result then - tex.settoks(pdftexcmds.toks, result) - else - tex.settoks(pdftexcmds.toks, "") - end - end - } -\endgroup \long\def\pdf@strcmp#1#2{% - \directlua\pdftexcmds@luastate{% - pdftexcmds.strcmp("\luaescapestring{#1}",% + \directlua0{% + oberdiek.pdftexcmds.strcmp("\luaescapestring{#1}",% "\luaescapestring{#2}")% }% }% \long\def\pdf@escapehex#1{% - \directlua\pdftexcmds@luastate{% - pdftexcmds.escapehex("\luaescapestring{#1}", "byte")% + \directlua0{% + oberdiek.pdftexcmds.escapehex("\luaescapestring{#1}", "byte")% }% }% \long\def\pdf@escapehexnative#1{% - \directlua\pdftexcmds@luastate{% - pdftexcmds.escapehex("\luaescapestring{#1}")% + \directlua0{% + oberdiek.pdftexcmds.escapehex("\luaescapestring{#1}")% }% }% \def\pdf@unescapehex#1{% \the\expandafter\pdftexcmds@toks - \directlua\pdftexcmds@luastate{% - pdftexcmds.toks="pdftexcmds@toks"% - pdftexcmds.unescapehex("\luaescapestring{#1}", "byte")% + \directlua0{% + oberdiek.pdftexcmds.toks="pdftexcmds@toks"% + oberdiek.pdftexcmds.unescapehex("\luaescapestring{#1}", "byte")% }% }% \def\pdf@unescapehexnative#1{% \the\expandafter\pdftexcmds@toks - \directlua\pdftexcmds@luastate{% - pdftexcmds.toks="pdftexcmds@toks"% - pdftexcmds.unescapehex("\luaescapestring{#1}")% + \directlua0{% + oberdiek.pdftexcmds.toks="pdftexcmds@toks"% + oberdiek.pdftexcmds.unescapehex("\luaescapestring{#1}")% }% }% \long\def\pdf@escapestring#1{% - \directlua\pdftexcmds@luastate{% - pdftexcmds.escapestring("\luaescapestring{#1}", "byte")% + \directlua0{% + oberdiek.pdftexcmds.escapestring("\luaescapestring{#1}", "byte")% }% } \long\def\pdf@escapename#1{% - \directlua\pdftexcmds@luastate{% - pdftexcmds.escapename("\luaescapestring{#1}", "byte")% + \directlua0{% + oberdiek.pdftexcmds.escapename("\luaescapestring{#1}", "byte")% }% } \long\def\pdf@escapenamenative#1{% - \directlua\pdftexcmds@luastate{% - pdftexcmds.escapename("\luaescapestring{#1}")% + \directlua0{% + oberdiek.pdftexcmds.escapename("\luaescapestring{#1}")% }% } \def\pdf@filesize#1{% - \directlua\pdftexcmds@luastate{% - pdftexcmds.filesize("\luaescapestring{#1}")% + \directlua0{% + oberdiek.pdftexcmds.filesize("\luaescapestring{#1}")% }% } \def\pdf@filemoddate#1{% - \directlua\pdftexcmds@luastate{% - pdftexcmds.filemoddate("\luaescapestring{#1}")% + \directlua0{% + oberdiek.pdftexcmds.filemoddate("\luaescapestring{#1}")% }% } \def\pdf@filedump#1#2#3{% - \directlua\pdftexcmds@luastate{% - pdftexcmds.filedump("\luaescapestring{\number#1}",% + \directlua0{% + oberdiek.pdftexcmds.filedump("\luaescapestring{\number#1}",% "\luaescapestring{\number#2}",% "\luaescapestring{#3}")% }% }% \long\def\pdf@mdfivesum#1{% - \directlua\pdftexcmds@luastate{% - pdftexcmds.mdfivesum("\luaescapestring{#1}", "byte")% + \directlua0{% + oberdiek.pdftexcmds.mdfivesum("\luaescapestring{#1}", "byte")% }% }% \long\def\pdf@mdfivesumnative#1{% - \directlua\pdftexcmds@luastate{% - pdftexcmds.mdfivesum("\luaescapestring{#1}")% + \directlua0{% + oberdiek.pdftexcmds.mdfivesum("\luaescapestring{#1}")% }% }% \def\pdf@filemdfivesum#1{% - \directlua\pdftexcmds@luastate{% - pdftexcmds.filemdfivesum("\luaescapestring{#1}")% + \directlua0{% + oberdiek.pdftexcmds.filemdfivesum("\luaescapestring{#1}")% }% }% \def\pdf@shellescape{% - \directlua\pdftexcmds@luastate{% - pdftexcmds.shellescape()% + \directlua0{% + oberdiek.pdftexcmds.shellescape()% }% } \def\pdf@system#1{% - \directlua\pdftexcmds@luastate{% - pdftexcmds.system("\luaescapestring{#1}")% + \directlua0{% + oberdiek.pdftexcmds.system("\luaescapestring{#1}")% }% } \def\pdf@lastsystemstatus{% - \directlua\pdftexcmds@luastate{% - pdftexcmds.lastsystemstatus()% + \directlua0{% + oberdiek.pdftexcmds.lastsystemstatus()% }% } \def\pdf@lastsystemexit{% - \directlua\pdftexcmds@luastate{% - pdftexcmds.lastsystemexit()% + \directlua0{% + oberdiek.pdftexcmds.lastsystemexit()% }% } \ifnum0% - \directlua\pdftexcmds@luastate{% + \directlua0{% if io.popen then % tex.write("1")% end% @@ -572,9 +312,9 @@ =1 % \def\pdf@pipe#1{% \the\expandafter\pdftexcmds@toks - \directlua\pdftexcmds@luastate{% - pdftexcmds.toks="pdftexcmds@toks"% - pdftexcmds.pipe("\luaescapestring{#1}")% + \directlua0{% + oberdiek.pdftexcmds.toks="pdftexcmds@toks"% + oberdiek.pdftexcmds.pipe("\luaescapestring{#1}")% }% }% \fi |