diff options
author | Norbert Preining <preining@logic.at> | 2007-11-16 11:24:40 +0000 |
---|---|---|
committer | Norbert Preining <preining@logic.at> | 2007-11-16 11:24:40 +0000 |
commit | 55ae6e504d04d806c4c5ac253dedb98196fc1c35 (patch) | |
tree | 5200a08eba158000f26a357a2a54a0923dd189de /Master/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty | |
parent | a7dfc63af349a5ea5fb37b110f584cc878308ea7 (diff) |
oberdiek update 11/11
git-svn-id: svn://tug.org/texlive/trunk@5458 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty')
-rw-r--r-- | Master/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty | 584 |
1 files changed, 584 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty b/Master/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty new file mode 100644 index 00000000000..f9a16b5bc2e --- /dev/null +++ b/Master/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty @@ -0,0 +1,584 @@ +%% +%% This is file `pdftexcmds.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% pdftexcmds.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% Copyright (C) 2007 by Heiko Oberdiek <oberdiek@uni-freiburg.de> +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either +%% version 1.3 of this license or (at your option) any later +%% version. The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of +%% LaTeX version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status "maintained". +%% +%% This Current Maintainer of this work is Heiko Oberdiek. +%% +%% This work consists of the main source file pdftexcmds.dtx +%% and the derived files +%% pdftexcmds.sty, pdftexcmds.pdf, pdftexcmds.ins, pdftexcmds.drv. +%% +\begingroup + \catcode44 12 % , + \catcode45 12 % - + \catcode46 12 % . + \catcode58 12 % : + \catcode64 11 % @ + \expandafter\let\expandafter\x\csname ver@pdftexcmds.sty\endcsname + \ifcase 0% + \ifx\x\relax % plain + \else + \ifx\x\empty % LaTeX + \else + 1% + \fi + \fi + \else + \catcode35 6 % # + \catcode123 1 % { + \catcode125 2 % } + \expandafter\ifx\csname PackageInfo\endcsname\relax + \def\x#1#2{% + \immediate\write-1{Package #1 Info: #2.}% + }% + \else + \def\x#1#2{\PackageInfo{#1}{#2, stopped}}% + \fi + \x{pdftexcmds}{The package is already loaded}% + \endgroup + \expandafter\endinput + \fi +\endgroup +\begingroup + \catcode35 6 % # + \catcode40 12 % ( + \catcode41 12 % ) + \catcode44 12 % , + \catcode45 12 % - + \catcode46 12 % . + \catcode47 12 % / + \catcode58 12 % : + \catcode64 11 % @ + \catcode123 1 % { + \catcode125 2 % } + \expandafter\ifx\csname ProvidesPackage\endcsname\relax + \def\x#1#2#3[#4]{\endgroup + \immediate\write-1{Package: #3 #4}% + \xdef#1{#4}% + }% + \else + \def\x#1#2[#3]{\endgroup + #2[{#3}]% + \ifx#1\relax + \xdef#1{#3}% + \fi + }% + \fi +\expandafter\x\csname ver@pdftexcmds.sty\endcsname +\ProvidesPackage{pdftexcmds}% + [2007/11/12 v0.2 LuaTeX support for pdfTeX utility functions (HO)] +\begingroup + \catcode123 1 % { + \catcode125 2 % } + \def\x{\endgroup + \expandafter\edef\csname pdftexcmds@AtEnd\endcsname{% + \catcode35 \the\catcode35\relax + \catcode64 \the\catcode64\relax + \catcode123 \the\catcode123\relax + \catcode125 \the\catcode125\relax + }% + }% +\x +\catcode35 6 % # +\catcode64 11 % @ +\catcode123 1 % { +\catcode125 2 % } +\def\TMP@EnsureCode#1#2{% + \edef\pdftexcmds@AtEnd{% + \pdftexcmds@AtEnd + \catcode#1 \the\catcode#1\relax + }% + \catcode#1 #2\relax +} +\TMP@EnsureCode{33}{12}% ! +\TMP@EnsureCode{34}{12}% " +\TMP@EnsureCode{39}{12}% ' +\TMP@EnsureCode{40}{12}% ( +\TMP@EnsureCode{41}{12}% ) +\TMP@EnsureCode{42}{12}% * +\TMP@EnsureCode{43}{12}% + +\TMP@EnsureCode{44}{12}% , +\TMP@EnsureCode{45}{12}% - +\TMP@EnsureCode{46}{12}% . +\TMP@EnsureCode{47}{12}% / +\TMP@EnsureCode{58}{12}% : +\TMP@EnsureCode{60}{12}% < +\TMP@EnsureCode{61}{12}% = +\TMP@EnsureCode{62}{12}% > +\TMP@EnsureCode{95}{12}% _ (other) +\TMP@EnsureCode{126}{12}% ~ (other) +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname RequirePackage\endcsname\relax + \input infwarerr.sty\relax +\else + \RequirePackage{infwarerr}[2007/09/09]% +\fi +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname directlua\endcsname\relax + \@PackageInfo{pdftexcmds}{LuaTeX not detected}% + \def\pdftexcmds@nopdftex{% + \@PackageInfoNoLine{pdftexcmds}{pdfTeX >= 1.30 not detected}% + \let\pdftexcmds@nopdftex\relax + }% + \def\pdftexcmds@temp#1{% + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname pdf#1\endcsname\relax + \pdftexcmds@nopdftex + \else + \expandafter\def\csname pdf@#1\expandafter\endcsname + \expandafter##\expandafter{% + \csname pdf#1\endcsname + }% + \fi + }% + \pdftexcmds@temp{strcmp}% + \pdftexcmds@temp{escapehex}% + \let\pdf@escapehexnative\pdf@escapehex + \pdftexcmds@temp{unescapehex}% + \let\pdf@unescapehexnative\pdf@unescapehex + \pdftexcmds@temp{escapestring}% + \pdftexcmds@temp{escapename}% + \pdftexcmds@temp{filesize}% + \pdftexcmds@temp{filemoddate}% + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname pdfshellescape\endcsname\relax + \pdftexcmds@nopdftex + \else + \def\pdf@shellescape{% + \pdfshellescape + }% + \fi + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname pdffiledump\endcsname\relax + \pdftexcmds@nopdftex + \else + \def\pdf@filedump#1#2#3{% + \pdffiledump offset#1 length#2{#3}% + }% + \fi + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname pdfmdfivesum\endcsname\relax + \pdftexcmds@nopdftex + \else + \def\pdf@mdfivesum#{\pdfmdfivesum}% + \let\pdf@mdfivesumnative\pdf@mdfivesum + \def\pdf@filemdfivesum#{\pdfmdfivesum file}% + \fi + \def\pdf@system#{% + \immediate\write18% + }% + \pdftexcmds@AtEnd + \expandafter\endinput +\fi +\chardef\pdftexcmds@luastate=0 % +\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}",% + "\luaescapestring{#2}")% + }% +}% +\long\def\pdf@escapehex#1{% + \directlua\pdftexcmds@luastate{% + pdftexcmds.escapehex("\luaescapestring{#1}", "byte")% + }% +}% +\long\def\pdf@escapehexnative#1{% + \directlua\pdftexcmds@luastate{% + pdftexcmds.escapehex("\luaescapestring{#1}")% + }% +}% +\def\pdf@unescapehex#1{% + \the\expandafter\pdftexcmds@toks + \directlua\pdftexcmds@luastate{% + pdftexcmds.toks="pdftexcmds@toks"% + pdftexcmds.unescapehex("\luaescapestring{#1}", "byte")% + }% +}% +\def\pdf@unescapehexnative#1{% + \the\expandafter\pdftexcmds@toks + \directlua\pdftexcmds@luastate{% + pdftexcmds.toks="pdftexcmds@toks"% + pdftexcmds.unescapehex("\luaescapestring{#1}")% + }% +}% +\long\def\pdf@escapestring#1{% + \directlua\pdftexcmds@luastate{% + pdftexcmds.escapestring("\luaescapestring{#1}", "byte")% + }% +} +\long\def\pdf@escapename#1{% + \directlua\pdftexcmds@luastate{% + pdftexcmds.escapename("\luaescapestring{#1}", "byte")% + }% +} +\long\def\pdf@escapenamenative#1{% + \directlua\pdftexcmds@luastate{% + pdftexcmds.escapename("\luaescapestring{#1}")% + }% +} +\def\pdf@filesize#1{% + \directlua\pdftexcmds@luastate{% + pdftexcmds.filesize("\luaescapestring{#1}")% + }% +} +\def\pdf@filemoddate#1{% + \directlua\pdftexcmds@luastate{% + pdftexcmds.filemoddate("\luaescapestring{#1}")% + }% +} +\def\pdf@filedump#1#2#3{% + \directlua\pdftexcmds@luastate{% + pdftexcmds.filedump("\luaescapestring{\number#1}",% + "\luaescapestring{\number#2}",% + "\luaescapestring{#3}")% + }% +}% +\long\def\pdf@mdfivesum#1{% + \directlua\pdftexcmds@luastate{% + pdftexcmds.mdfivesum("\luaescapestring{#1}", "byte")% + }% +}% +\long\def\pdf@mdfivesumnative#1{% + \directlua\pdftexcmds@luastate{% + pdftexcmds.mdfivesum("\luaescapestring{#1}")% + }% +}% +\def\pdf@filemdfivesum#1{% + \directlua\pdftexcmds@luastate{% + pdftexcmds.filemdfivesum("\luaescapestring{#1}")% + }% +}% +\def\pdf@shellescape{% + \directlua\pdftexcmds@luastate{% + pdftexcmds.shellescape()% + }% +} +\def\pdf@system#1{% + \directlua\pdftexcmds@luastate{% + pdftexcmds.system("\luaescapestring{#1}")% + }% +} +\def\pdf@lastsystemstatus{% + \directlua\pdftexcmds@luastate{% + pdftexcmds.lastsystemstatus()% + }% +} +\def\pdf@lastsystemexit{% + \directlua\pdftexcmds@luastate{% + pdftexcmds.lastsystemexit()% + }% +} +\ifnum0% + \directlua\pdftexcmds@luastate{% + if io.popen then % + tex.write("1")% + end% + }% + =1 % + \def\pdf@pipe#1{% + \the\expandafter\pdftexcmds@toks + \directlua\pdftexcmds@luastate{% + pdftexcmds.toks="pdftexcmds@toks"% + pdftexcmds.pipe("\luaescapestring{#1}")% + }% + }% +\fi +\pdftexcmds@AtEnd +\endinput +%% +%% End of file `pdftexcmds.sty'. |