summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/oberdiek/pdfescape.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2007-04-28 00:47:40 +0000
committerKarl Berry <karl@freefriends.org>2007-04-28 00:47:40 +0000
commiteb20b1a58efdf85ed1ef1c7091bcb414a7a60a32 (patch)
tree80972c25ace1916fc7b72d86dc8e3edf99f12824 /Master/texmf-dist/tex/generic/oberdiek/pdfescape.sty
parente376078a88d46cc66692baeb43f83a235f9b52a3 (diff)
oberdiek as always, infwarerr v1.0 new and updates
git-svn-id: svn://tug.org/texlive/trunk@4200 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/oberdiek/pdfescape.sty')
-rw-r--r--Master/texmf-dist/tex/generic/oberdiek/pdfescape.sty449
1 files changed, 363 insertions, 86 deletions
diff --git a/Master/texmf-dist/tex/generic/oberdiek/pdfescape.sty b/Master/texmf-dist/tex/generic/oberdiek/pdfescape.sty
index b8d7f6b126a..1612f48aa5e 100644
--- a/Master/texmf-dist/tex/generic/oberdiek/pdfescape.sty
+++ b/Master/texmf-dist/tex/generic/oberdiek/pdfescape.sty
@@ -28,7 +28,36 @@
%% pdfescape-test1.tex, pdfescape-test2.tex,
%% pdfescape-test3.tex.
%%
+\expandafter\edef\csname PE@AtEnd\endcsname{%
+ \catcode64 \the\catcode64\relax
+}
+\catcode64 11 % @
+\def\PE@EnsureCode#1#2#3{%
+ \edef\PE@AtEnd{%
+ \PE@AtEnd
+ #1#2 \the#1#2\relax
+ }%
+ #1#2 #3\relax
+}
+\PE@EnsureCode\catcode{0}{12}% ^^@
+\PE@EnsureCode\catcode{34}{12}% "
+\PE@EnsureCode\catcode{42}{12}% *
+\PE@EnsureCode\catcode{45}{12}% -
+\PE@EnsureCode\catcode{46}{12}% .
+\PE@EnsureCode\catcode{60}{12}% <
+\PE@EnsureCode\catcode{61}{12}% =
+\PE@EnsureCode\catcode{62}{12}% >
+\PE@EnsureCode\catcode{94}{7}% ^
+\PE@EnsureCode\catcode{96}{12}% `
+\PE@EnsureCode\uccode{34}{0}% "
+\PE@EnsureCode\uccode{48}{0}% 0
+\PE@EnsureCode\uccode{61}{0}% =
\begingroup
+ \catcode44 12 % ,
+ \catcode45 12 % -
+ \catcode46 12 % .
+ \catcode58 12 % :
+ \catcode64 11 % @
\expandafter\let\expandafter\x\csname ver@pdfescape.sty\endcsname
\ifcase 0%
\ifx\x\relax % plain
@@ -52,6 +81,11 @@
\fi
\endgroup
\begingroup
+ \catcode44 12 % ,
+ \catcode45 12 % -
+ \catcode46 12 % .
+ \catcode58 12 % :
+ \catcode64 11 % @
\expandafter\ifx\csname ProvidesPackage\endcsname\relax
\def\x#1#2#3[#4]{\endgroup
\immediate\write-1{Package: #3 #4}%
@@ -67,36 +101,294 @@
\fi
\expandafter\x\csname ver@pdfescape.sty\endcsname
\ProvidesPackage{pdfescape}%
- [2007/04/11 v1.3 Provides hex, PDF name and string conversions (HO)]
-\expandafter\edef\csname PE@AtEnd\endcsname{%
- \catcode64 \the\catcode64\relax
+ [2007/04/21 v1.4 Provides hex, PDF name and string conversions (HO)]
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname detokenize\endcsname\relax
+ \long\def\PE@sanitize#1#2{%
+ \begingroup
+ \csname @safe@activestrue\endcsname
+ \edef#1{#2}%
+ \PE@onelevel@sanitize#1%
+ \expandafter\endgroup
+ \expandafter\def\expandafter#1\expandafter{#1}%
+ }%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname @onelevel@sanitize\endcsname\relax
+ \def\PE@onelevel@sanitize#1{%
+ \edef#1{\expandafter\PE@strip@prefix\meaning#1}%
+ }%
+ \def\PE@strip@prefix#1>{}%
+ \else
+ \let\PE@onelevel@sanitize\@onelevel@sanitize
+ \fi
+\else
+ \long\def\PE@sanitize#1#2{%
+ \begingroup
+ \csname @safe@activestrue\endcsname
+ \edef#1{#2}%
+ \PE@onelevel@sanitize#1%
+ \expandafter\endgroup
+ \expandafter\def\expandafter#1\expandafter{#1}%
+ }%
+ \def\PE@onelevel@sanitize#1{%
+ \edef#1{\detokenize\expandafter{#1}}%
+ }%
+\fi
+\begingroup
+ \catcode`\ =12\relax%
+\def\x{\endgroup\def\PE@space@other{ }}\x\relax
+\def\PE@space@space{ }
+\def\PE@SanitizeSpaceOther#1{%
+ \edef#1{\expandafter\PE@SpaceToOther#1 \relax}%
}
-\catcode64 11 % @
-\def\PE@EnsureCode#1#2#3{%
- \edef\PE@AtEnd{%
- \PE@AtEnd
- #1#2 \the#1#2\relax
+\def\PE@SpaceToOther#1 #2\relax{%
+ #1%
+ \ifx\\#2\\%
+ \else
+ \PE@space@other
+ \@ReturnAfterFi{%
+ \PE@SpaceToOther#2\relax
+ }%
+ \fi
+}
+\long\def\@ReturnAfterFi#1\fi{\fi#1}
+\def\EdefUnescapeName#1#2{%
+ \PE@sanitize#1{#2}%
+ \PE@SanitizeSpaceOther#1%
+ \PE@UnescapeName#1%
+ \PE@onelevel@sanitize#1%
+}
+\begingroup
+ \catcode`\$=6 % hash
+ \catcode`\#=12 % other
+ \gdef\PE@UnescapeName$1{%
+ \begingroup
+ \PE@InitUccodeHexDigit
+ \def\PE@result{}%
+ \expandafter\PE@DeName$1#\relax\relax
+ \expandafter\endgroup
+ \expandafter\def\expandafter$1\expandafter{\PE@result}%
}%
- #1#2 #3\relax
+ \gdef\PE@DeName$1#$2$3{%
+ \ifx\relax$2%
+ \edef\PE@result{\PE@result$1}%
+ \let\PE@next\relax
+ \else
+ \ifx\relax$3%
+ % wrong escape sequence in input
+ \edef\PE@result{\PE@result$1#}%
+ \let\PE@next\relax
+ \else
+ \uppercase{%
+ \def\PE@testA{$2}%
+ \def\PE@testB{$3}%
+ }%
+ \ifcase\ifcase\expandafter\PE@TestUcHexDigit\PE@testA
+ \ifcase\expandafter\PE@TestUcHexDigit\PE@testB
+ \z@
+ \else
+ \@ne
+ \fi
+ \else
+ \@ne
+ \fi
+ \uccode\z@="\PE@testA\PE@testB\relax
+ \uppercase{%
+ \def\PE@temp{^^@}%
+ }%
+ \uccode\z@=\z@
+ \edef\PE@result{\PE@result$1\PE@temp}%
+ \let\PE@next\PE@DeName
+ \else
+ % wrong escape sequence in input
+ \edef\PE@result{\PE@result$1#}%
+ \def\PE@next{\PE@DeName$2$3}%
+ \fi
+ \fi
+ \fi
+ \PE@next
+ }%
+\endgroup
+\def\PE@InitUccodeHexDigit{%
+ \uccode`a=`A\relax
+ \uccode`b=`B\relax
+ \uccode`c=`C\relax
+ \uccode`d=`D\relax
+ \uccode`e=`E\relax
+ \uccode`f=`F\relax
+ \uccode`A=\z@
+ \uccode`B=\z@
+ \uccode`C=\z@
+ \uccode`D=\z@
+ \uccode`E=\z@
+ \uccode`F=\z@
+ \uccode`0=\z@
+ \uccode`1=\z@
+ \uccode`2=\z@
+ \uccode`3=\z@
+ \uccode`4=\z@
+ \uccode`5=\z@
+ \uccode`6=\z@
+ \uccode`7=\z@
+ \uccode`8=\z@
+ \uccode`9=\z@
+}
+\def\PE@TestUcHexDigit#1{%
+ \ifnum`#1<48 % 0
+ \@ne
+ \else
+ \ifnum`#1>70 % F
+ \@ne
+ \else
+ \ifnum`#1>57 % 9
+ \ifnum`#1<65 % A
+ \@ne
+ \else
+ \z@
+ \fi
+ \else
+ \z@
+ \fi
+ \fi
+ \fi
+}
+\def\EdefUnescapeString#1#2{%
+ \PE@sanitize#1{#2}%
+ \PE@SanitizeSpaceOther#1%
+ \PE@NormalizeLineEnd#1%
+ \PE@UnescapeString#1%
+ \PE@onelevel@sanitize#1%
+}
+\begingroup
+ \uccode`\8=10 % lf
+ \uccode`\9=13 % cr
+\def\x#1#2{\endgroup
+ \def\PE@NormalizeLineEnd##1{%
+ \def\PE@result{}%
+ \expandafter\PE@@NormalizeLineEnd##1#2\relax
+ \let##1\PE@result
+ }%
+ \def\PE@@NormalizeLineEnd##1#2##2{%
+ \ifx\relax##2%
+ \edef\PE@result{\PE@result##1}%
+ \let\PE@next\relax
+ \else
+ \edef\PE@result{\PE@result##1#1}%
+ \ifx#1##2% lf
+ \let\PE@next\PE@@NormalizeLineEnd
+ \else
+ \def\PE@next{\PE@@NormalizeLineEnd##2}%
+ \fi
+ \fi
+ \PE@next
+ }%
+}%
+\uppercase{%
+ \x 89%
+}
+\begingroup
+ \catcode`\|=0 %
+ \catcode`\\=12 %
+ |gdef|PE@UnescapeString#1{%
+ |begingroup
+ |def|PE@result{}%
+ |expandafter|PE@DeString#1\|relax
+ |expandafter|endgroup
+ |expandafter|def|expandafter#1|expandafter{|PE@result}%
+ }%
+ |gdef|PE@DeString#1\#2{%
+ |ifx|relax#2%
+ |edef|PE@result{|PE@result#1}%
+ |let|PE@next|relax
+ |else
+ |if n#2%
+ |uccode|z@=10 %
+ |else|if r#2%
+ |uccode|z@=13 %
+ |else|if t#2%
+ |uccode|z@=9 %
+ |else|if b#2%
+ |uccode|z@=8 %
+ |else|if f#2%
+ |uccode|z@=12 %
+ |else
+ |uccode|z@=|z@
+ |fi|fi|fi|fi|fi
+ |ifnum|uccode|z@>|z@
+ |uppercase{%
+ |edef|PE@temp{^^@}%
+ }%
+ |edef|PE@result{|PE@result#1|PE@temp}%
+ |let|PE@next|PE@DeString
+ |else
+ |if\#2% backslash
+ |edef|PE@result{|PE@result#1}%
+ |let|PE@next|PE@CheckEndBackslash
+ |else
+ |ifnum`#2=10 % linefeed
+ |edef|PE@result{|PE@result#1}%
+ |let|PE@next|PE@DeString
+ |else
+ |ifcase|PE@TestOctDigit#2%
+ |edef|PE@result{|PE@result#1}%
+ |def|PE@next{|PE@OctI#2}%
+ |else
+ |edef|PE@result{|PE@result#1#2}%
+ |let|PE@next|PE@DeString
+ |fi
+ |fi
+ |fi
+ |fi
+ |fi
+ |PE@next
+ }%
+ |gdef|PE@CheckEndBackslash#1{%
+ |ifx|relax#1%
+ |else
+ |edef|PE@result{|PE@result\}%
+ |expandafter|PE@DeString|expandafter#1%
+ |fi
+ }%
+|endgroup
+\def\PE@TestOctDigit#1{%
+ \ifnum`#1<48 % 0
+ \@ne
+ \else
+ \ifnum`#1>55 % 7
+ \@ne
+ \else
+ \z@
+ \fi
+ \fi
+}
+\def\PE@OctI#1#2{%
+ \ifcase\PE@TestOctDigit#2%
+ \def\PE@next{\PE@OctII{#1#2}}%
+ \else
+ \def\PE@next{\PE@OctAll#1#2}%
+ \fi
+ \PE@next
+}
+\def\PE@OctII#1#2{%
+ \ifcase\PE@TestOctDigit#2%
+ \def\PE@next{\PE@OctAll{#1#2}}%
+ \else
+ \def\PE@next{\PE@OctAll{#1}#2}%
+ \fi
+ \PE@next
+}
+\def\PE@OctAll#1{%
+ \uccode\z@='#1\relax
+ \uppercase{%
+ \edef\PE@result{\PE@result^^@}%
+ }%
+ \PE@DeString
}
-\PE@EnsureCode\catcode{0}{12}% ^^@
-\PE@EnsureCode\catcode{34}{12}% "
-\PE@EnsureCode\catcode{42}{12}% *
-\PE@EnsureCode\catcode{45}{12}% -
-\PE@EnsureCode\catcode{46}{12}% .
-\PE@EnsureCode\catcode{60}{12}% <
-\PE@EnsureCode\catcode{61}{12}% =
-\PE@EnsureCode\catcode{62}{12}% >
-\PE@EnsureCode\catcode{94}{7}% ^
-\PE@EnsureCode\catcode{96}{12}% `
-\PE@EnsureCode\uccode{34}{0}% "
-\PE@EnsureCode\uccode{48}{0}% 0
-\PE@EnsureCode\uccode{61}{0}% =
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname pdfescapehex\endcsname\relax
\long\def\EdefEscapeHex#1#2{%
\PE@sanitize#1{#2}%
- \edef#1{\expandafter\PE@SpaceToOther#1 \relax}%
+ \PE@SanitizeSpaceOther#1%
\PE@EscapeHex#1%
}%
\def\EdefUnescapeHex#1#2{%
@@ -105,22 +397,22 @@
}%
\long\def\EdefEscapeName#1#2{%
\PE@sanitize#1{#2}%
- \edef#1{\expandafter\PE@SpaceToOther#1 \relax}%
+ \PE@SanitizeSpaceOther#1%
\PE@EscapeName#1%
}%
\long\def\EdefEscapeString#1#2{%
\PE@sanitize#1{#2}%
- \edef#1{\expandafter\PE@SpaceToOther#1 \relax}%
+ \PE@SanitizeSpaceOther#1%
\PE@EscapeString#1%
}%
\else
-\long\def\PE@edefbabel#1#2#3{%
- \begingroup
- \csname @save@activestrue\endcsname
- \edef#1{#2{#3}}%
- \expandafter\endgroup
- \expandafter\def\expandafter#1\expandafter{#1}%
-}
+ \long\def\PE@edefbabel#1#2#3{%
+ \begingroup
+ \csname @save@activestrue\endcsname
+ \edef#1{#2{#3}}%
+ \expandafter\endgroup
+ \expandafter\def\expandafter#1\expandafter{#1}%
+ }%
\long\def\EdefEscapeHex#1#2{%
\PE@edefbabel#1\pdfescapehex{#2}%
}%
@@ -138,14 +430,9 @@
\fi
\edef\PE@hash{\string#}
\begingroup
- \catcode`\ =12\relax%
-\def\x{\endgroup\def\PE@space@other{ }}\x\relax
-\def\PE@space@space{ }
-\begingroup
- \long\def\@gobble#1{}%
- \escapechar=92 %
+ \escapechar=-1 %
\edef\x{\endgroup
- \def\noexpand\PE@backslash{\expandafter\@gobble\string\\}%
+ \def\noexpand\PE@backslash{\string\\}%
}
\x
\newif\ifPE@etex
@@ -154,46 +441,6 @@
\else
\PE@etextrue
\fi
-\begingroup\expandafter\expandafter\expandafter\endgroup
-\expandafter\ifx\csname detokenize\endcsname\relax
- \long\def\PE@sanitize#1#2{%
- \begingroup
- \csname @safe@activestrue\endcsname
- \edef#1{#2}%
- \PE@onelevel@sanitize#1%
- \expandafter\endgroup
- \expandafter\def\expandafter#1\expandafter{#1}%
- }%
- \begingroup\expandafter\expandafter\expandafter\endgroup
- \expandafter\ifx\csname @onelevel@sanitize\endcsname\relax
- \def\PE@onelevel@sanitize#1{%
- \edef#1{\expandafter\PE@strip@prefix\meaning#1}%
- }%
- \def\PE@strip@prefix#1>{}%
- \else
- \let\PE@onelevel@sanitize\@onelevel@sanitize
- \fi
-\else
- \long\def\PE@sanitize#1#2{%
- \begingroup
- \csname @safe@activestrue\endcsname
- \edef#1{#2}%
- \edef#1{\detokenize\expandafter{#1}}%
- \expandafter\endgroup
- \expandafter\def\expandafter#1\expandafter{#1}%
- }%
-\fi
-\def\PE@SpaceToOther#1 #2\relax{%
- #1%
- \ifx\\#2\\%
- \else
- \PE@space@other
- \@ReturnAfterFi{%
- \PE@SpaceToOther#2\relax
- }%
- \fi
-}
-\long\def\@ReturnAfterFi#1\fi{\fi#1}
\ifPE@etex
\def\PE@EscapeHex#1{%
\edef#1{\expandafter\PE@ToHex#1\relax}%
@@ -272,6 +519,7 @@
\fi
\def\PE@UnescapeHex#1{%
\begingroup
+ \PE@InitUccodeHexDigit
\def\PE@result{}%
\expandafter\PE@DeHex#1\relax\relax
\expandafter\endgroup
@@ -280,19 +528,48 @@
\def\PE@DeHex#1#2{%
\ifx#2\relax
\ifx#1\relax
+ \let\PE@next\relax
\else
- \PE@DeHex#10\relax\relax
+ \uppercase{%
+ \def\PE@testA{#1}%
+ }%
+ \ifcase\expandafter\PE@TestUcHexDigit\PE@testA
+ \def\PE@next{%
+ \PE@DeHex#10\relax\relax
+ }%
+ \else
+ \let\PE@next\relax
+ \fi
\fi
\else
- \uppercase{\lccode0="#1#2}\relax
- \ifnum\lccode0=32 %
- \edef\PE@result{\PE@result\PE@space@space}%
+ \uppercase{%
+ \def\PE@testA{#1}%
+ \def\PE@testB{#2}%
+ }%
+ \ifcase\expandafter\PE@TestUcHexDigit\PE@testA
+ \ifcase\expandafter\PE@TestUcHexDigit\PE@testB
+ \uccode\z@="\PE@testA\PE@testB\relax
+ \ifnum\uccode\z@=32 %
+ \let\PE@temp\PE@space@space
+ \else
+ \uppercase{%
+ \def\PE@temp{^^@}%
+ }%
+ \fi
+ \edef\PE@result{\PE@result\PE@temp}%
+ \let\PE@next\PE@DeHex
+ \else
+ % invalid input sequence
+ \def\PE@next{%
+ \PE@DeHex#1%
+ }%
+ \fi
\else
- \lowercase{\def\PE@temp{^^@}}%
- \edef\PE@result{\PE@result\PE@temp}%
+ % invalid input sequence
+ \def\PE@next{\PE@DeHex#2}%
\fi
- \expandafter\PE@DeHex
\fi
+ \PE@next
}
\ifPE@etex
\def\PE@EscapeName#1{%