diff options
author | Karl Berry <karl@freefriends.org> | 2007-04-28 00:47:40 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2007-04-28 00:47:40 +0000 |
commit | eb20b1a58efdf85ed1ef1c7091bcb414a7a60a32 (patch) | |
tree | 80972c25ace1916fc7b72d86dc8e3edf99f12824 /Master/texmf-dist/tex/generic/oberdiek/pdfescape.sty | |
parent | e376078a88d46cc66692baeb43f83a235f9b52a3 (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.sty | 449 |
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{% |