summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty')
-rw-r--r--Master/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty584
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'.