%% %% This is file `stringenc.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% stringenc.dtx (with options: `package') %% %% This is a generated file. %% %% Copyright (C) 2007 by Heiko Oberdiek %% %% 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 stringenc.dtx %% and the derived files %% stringenc.sty, stringenc.pdf, stringenc.ins, stringenc.drv, %% se-utf32be.def, se-utf32le.def, se-utf8.def, se-utf16le.def, %% se-pdfdoc.def, se-iso-8859-1.def, se-cp1252.def, %% se-ascii.def, se-iso-8859-2.def, se-iso-8859-3.def, %% se-iso-8859-4.def, se-iso-8859-5.def, se-iso-8859-6.def, %% se-iso-8859-7.def, se-iso-8859-8.def, se-iso-8859-9.def, %% se-iso-8859-10.def, se-iso-8859-11.def, se-iso-8859-13.def, %% se-iso-8859-14.def, se-iso-8859-15.def, se-iso-8859-16.def, %% se-koi8-r.def, se-nextstep.def, se-mac-centeuro.def, %% se-mac-cyrillic.def, se-mac-roman.def, se-dec-mcs.def, %% se-cp437.def, se-cp850.def, se-cp852.def, se-cp855.def, %% se-cp858.def, se-cp865.def, se-cp866.def, se-cp1250.def, %% se-cp1251.def, se-cp1257.def, stringenc-test1.tex, %% stringenc-test2.tex. %% \begingroup \catcode44 12 % , \catcode45 12 % - \catcode46 12 % . \catcode58 12 % : \catcode64 11 % @ \expandafter\let\expandafter\x\csname ver@stringenc.sty\endcsname \ifcase 0% \ifx\x\relax % plain \else \ifx\x\empty % LaTeX \else 1% \fi \fi \else \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{stringenc}{The package is already loaded}% \endgroup \expandafter\endinput \fi \endgroup \begingroup \catcode40 12 % ( \catcode41 12 % ) \catcode44 12 % , \catcode45 12 % - \catcode46 12 % . \catcode47 12 % / \catcode58 12 % : \catcode64 11 % @ \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@stringenc.sty\endcsname \ProvidesPackage{stringenc}% [2007/06/14 v1.0 Converts strings between encodings (HO)] \expandafter\edef\csname SE@AtEnd\endcsname{% \catcode64 \the\catcode64\relax } \catcode64 11 % @ \def\SE@EnsureCode#1#2#3{% \edef\SE@AtEnd{% \SE@AtEnd #1#2 \the#1#2\relax }% #1#2 #3\relax } \SE@EnsureCode\catcode{34}{12}% " \SE@EnsureCode\catcode{36}{3}% $ \SE@EnsureCode\catcode{38}{4}% & \SE@EnsureCode\catcode{39}{12}% ' \SE@EnsureCode\catcode{40}{12}% ( \SE@EnsureCode\catcode{41}{12}% ) \SE@EnsureCode\catcode{42}{12}% * \SE@EnsureCode\catcode{43}{12}% + \SE@EnsureCode\catcode{44}{12}% , \SE@EnsureCode\catcode{45}{12}% - \SE@EnsureCode\catcode{46}{12}% . \SE@EnsureCode\catcode{58}{12}% : \SE@EnsureCode\catcode{60}{12}% < \SE@EnsureCode\catcode{61}{12}% = \SE@EnsureCode\catcode{62}{12}% > \SE@EnsureCode\catcode{91}{12}% [ \SE@EnsureCode\catcode{93}{12}% ] \SE@EnsureCode\catcode{94}{7}% ^ \SE@EnsureCode\catcode{96}{12}% ` \SE@EnsureCode\uccode{34}{0}% " \SE@EnsureCode\uccode{48}{0}% 0 \SE@EnsureCode\uccode{61}{0}% = \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname RequirePackage\endcsname\relax \input infwarerr.sty\relax \input pdfescape.sty\relax \else \RequirePackage{infwarerr}% \RequirePackage{pdfescape}% \fi \def\SE@Empty{} \long\def\SE@FirstOfOne#1{#1} \long\def\SE@FirstOfTwo#1#2{#1} \long\def\SE@SecondOfTwo#1#2{#2} \long\def\SE@GobbleTwo#1#2{} \long\def\SE@GobbleFour#1#2#3#4{} \long\def\SE@GobbleEight#1#2#3#4#5#6#7#8{} \long\def\SE@CarTwo#1#2#3\@nil{#1#2} \def\SE@PrefixFrom{SE<} \def\SE@PrefixSurrogateFrom{SE<<} \def\SE@PrefixTo{SE>} \def\SE@PrefixSurrogateTo{SE>>} \chardef\SE@zero=0 % \chardef\SE@one=1 % \def\SE@ResultAdd#1{% \edef\SE@result{\SE@result#1}% } \newif\ifSE@invalid \def\SE@InvalidCharacter{% \SE@invalidtrue } \def\SE@ConvertTo#1#2#3{% \let\SE@result\SE@Empty \PE@sanitize\SE@encoding{#3}% \expandafter\ifx\csname\SE@PrefixTo\SE@encoding\endcsname\relax \StringEncodingLoad\SE@encoding \fi \expandafter\ifx\csname\SE@PrefixTo\SE@encoding\endcsname\relax \@PackageError{stringenc}{% Conversion to encoding `\SE@encoding'\MessageBreak is not supported% }\@ehc \else \expandafter\let\expandafter\SE@ConvertNormal \csname\SE@PrefixTo\SE@encoding\endcsname \expandafter\let\expandafter\SE@ConvertSurrogate \csname\SE@PrefixSurrogateTo\SE@encoding\endcsname \SE@@ConvertTo#2\relax\relax\relax\relax \fi \let#1\SE@result } \def\SE@@ConvertTo#1#2#3#4{% \ifx#1\relax \let\SE@next\relax \else \ifx#4\relax \let\SE@next\relax \SE@InvalidCharacter \else \let\SE@next\SE@@ConvertTo \ifnum"#1#2#3#4<"D800 % \SE@ConvertNormal#1#2#3#4% \else \ifnum"#1#2#3#4>"DFFF % \SE@ConvertNormal#1#2#3#4% \else \ifnum"#1#2#3#4>"DBFF % \SE@InvalidCharacter \else \def\SE@high{#1#2#3#4}% \let\SE@next\SE@@ScanLow \fi \fi \fi \fi \fi \SE@next } \def\SE@@ScanLow#1#2#3#4{% \ifx#4\relax \SE@InvalidCharacter \let\SE@next\relax \else \ifcase\ifnum"#1#2#3#4<"DC00 % \SE@zero \else \ifnum"#1#2#3#4>"DFFF % \SE@zero \else \SE@one \fi \fi \SE@InvalidCharacter \def\SE@next{% SE@@ConvertTo#1#2#3#4% }% \else \ifx\SE@ConvertSurrogate\relax \else \expandafter\SE@ConvertSurrogate\SE@high#1#2#3#4% \fi \let\SE@next\SE@@ConvertTo \fi \fi \SE@next } \def\SE@ConvertFrom#1#2#3{% \let\SE@result\SE@Empty \PE@sanitize\SE@encoding{#3}% \expandafter\ifx\csname\SE@PrefixFrom\SE@encoding\endcsname\relax \StringEncodingLoad\SE@encoding \fi \expandafter\ifx\csname\SE@PrefixFrom\SE@encoding\endcsname\relax \@PackageError{stringenc}{% Conversion from encoding `\SE@encoding'\MessageBreak is not supported% }\@ehc \else \csname\SE@PrefixFrom\SE@encoding\endcsname{#2}% \fi \let#1\SE@result } \def\StringEncodingLoad#1{% \begingroup \catcode32=10 % space/space \catcode34=12 % " \catcode35=6 % #/parameter \catcode37=14 % percent/comment character \catcode45=12 % - \catcode46=12 % . \catcode47=12 % / \catcode58=12 % : \catcode60=12 % < \catcode61=12 % = \catcode62=12 % > \catcode64=11 % @ \catcode91=12 % [ \catcode92=0 % backslash/escape character \catcode93=12 % ] \catcode123=1 % {/beginning of group \catcode125=2 % }/end of group \endlinechar=-1 % \expandafter\ifx\csname ProvidesFile\endcsname\relax \def\ProvidesFile##1[##2]{% \immediate\write-1{File: ##1 ##2}% }% \fi \SE@InputIfFileExists{se-#1.def}% \endgroup } \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname IfFileExists\endcsname\relax \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname pdffilesize\endcsname\relax \def\SE@InputIfFileExists#1{% \expandafter\ifx\csname @inputcheck\endcsname\relax \csname newread\endcsname\@inputcheck \fi \openin\@inputcheck#1\relax \ifeof\@inputcheck \SE@FileNotFound{#1}% \else \SE@Input{#1}% \fi }% \else \def\SE@InputIfFileExists#1{% \expandafter\ifx\expandafter\\\pdffilesize{#1}\\% \SE@FileNotFound{#1}% \else \SE@Input{#1}% \fi }% \fi \else \def\SE@InputIfFileExists#1{% \IfFileExists{#1}{% \SE@Input{#1}% }{% \SE@FileNotFound{#1}% }% }% \fi \def\SE@FileNotFound#1{% \@PackageWarning{stringenc}{% Encoding file `#1'\MessageBreak not found% }% } \def\SE@Input{% \@ifnextchar\bgroup\@iinput\@@input } \ifx\input\SE@Input \def\SE@Input#1{% \input{#1}% }% \else \def\SE@Input#1{% \input#1\relax }% \fi \newif\ifSE@numexpr \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname numexpr\endcsname\relax \else \SE@numexprtrue \fi \ifSE@numexpr \catcode36=9 % $ ignore \catcode38=14 % & comment \else \catcode36=14 % $ comment \catcode38=9 % & ignore \fi \def\SE@Nibble@NumToHex#1{% $ \ifcase\numexpr#1\relax & \expandafter\ifcase\expandafter\SE@FirstOfOne\expandafter{\number#1} % 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or 8\or 9\or A\or B\or C\or D\or E\or F% \fi } \def\SE@Nibble@NumToBin#1{% $ \ifcase\numexpr#1\relax & \expandafter & \ifcase\expandafter\SE@FirstOfOne\expandafter{\number#1} % 0000\or 0001\or 0010\or 0011\or 0100\or 0101\or 0110\or 0111\or 1000\or 1001\or 1010\or 1011\or 1100\or 1101\or 1110\or 1111% \fi } \def\SE@Nibbles@BinToHex#1{% \expandafter\SE@@Nibbles@BinToHex#1\SE@Empty\SE@Empty \SE@Empty\SE@Empty } \def\SE@@Nibbles@BinToHex#1#2#3#4{% \ifx#1\SE@Empty \else $ \SE@Nibble@NumToHex{% $ \numexpr#4+2*(#3+2*(#2+2*#1))\relax $ }% & \ifnum#1>\SE@zero & \ifnum#2>\SE@zero & \ifnum#3>\SE@zero & \ifnum#4>\SE@zero & F% & \else & E% & \fi & \else & \ifnum#4>\SE@zero & D% & \else & C% & \fi & \fi & \else & \ifnum#3>\SE@zero & \ifnum#4>\SE@zero & B% & \else & A% & \fi & \else & \ifnum#4>\SE@zero & 9% & \else & 8% & \fi & \fi & \fi & \else & \ifnum#2>\SE@zero & \ifnum#3>\SE@zero & \ifnum#4>\SE@zero & 7% & \else & 6% & \fi & \else & \ifnum#4>\SE@zero & 5% & \else & 4% & \fi & \fi & \else & \ifnum#3>\SE@zero & \ifnum#4>\SE@zero & 3% & \else & 2% & \fi & \else & \ifnum#4>\SE@zero & 1% & \else & 0% & \fi & \fi & \fi & \fi \expandafter\SE@@Nibbles@BinToHex \fi } \def\SE@Add#1#2#3{% $ \edef#1{\the\numexpr(#2)+(#3)\relax}% & \begingroup & \count\SE@zero=#2\relax & \advance\count\SE@zero by#3\relax & \edef\x{\endgroup & \def\noexpand#1{\the\count\SE@zero}% & }% & \x } \def\SE@MapDeclare#1#2#3{% \SE@MapDeclareFrom{#1}{#2}{#3}% \SE@MapDeclareTo{#1}{#2}{#3}% } \def\SE@MapDeclareFrom#1#2#3{% \expandafter\gdef\csname SE->#1@#2\endcsname{#3}% } \def\SE@MapDeclareTo#1#2#3{% \expandafter\gdef\csname SE<-#1@#3\endcsname{#2}% } \def\SE@MapConvertFrom#1#2{% $ \ifcsname SE->#1@#2\endcsname $ \SE@ResultAdd{\csname SE->#1@#2\endcsname}% $ \else $ \SE@InvalidCharacter $ \fi & \begingroup\expandafter\expandafter\expandafter\endgroup & \expandafter\ifx\csname SE->#1@#2\endcsname\relax & \SE@InvalidCharacter & \else & \SE@ResultAdd{\csname SE->#1@#2\endcsname}% & \fi } \def\SE@MapConvertTo#1#2{% $ \ifcsname SE<-#1@#2\endcsname $ \SE@ResultAdd{\csname SE<-#1@#2\endcsname}% $ \else $ \SE@InvalidCharacter $ \fi & \begingroup\expandafter\expandafter\expandafter\endgroup & \expandafter\ifx\csname SE<-#1@#2\endcsname\relax & \SE@InvalidCharacter & \else & \SE@ResultAdd{\csname SE<-#1@#2\endcsname}% & \fi } \def\StringEncodingConvert#1#2#3#4{% \PE@sanitize\SE@from{#3}% \PE@sanitize\SE@to{#4}% \expandafter\ifx\csname SE@alias@\SE@from\endcsname\relax \else \PE@sanitize\SE@from{\csname SE@alias@\SE@from\endcsname}% \fi \expandafter\ifx\csname SE@alias@\SE@to\endcsname\relax \else \PE@sanitize\SE@to{\csname SE@alias@\SE@to\endcsname}% \fi \ifx\SE@to\SE@utfxvi \let\SE@to\SE@utfxvibe \else \ifx\SE@to\SE@utfxxxii \let\SE@to\SE@utfxxxiibe \fi \fi \SE@invalidfalse \EdefEscapeHex\SE@result{#2}% \ifx\SE@from\SE@utfxvi \SE@CheckByteOrderTwo \else \ifx\SE@from\SE@utfxvibe \SE@RemoveByteOrderTwo{FEFF}% \else \ifx\SE@from\SE@utfxvile \SE@RemoveByteOrderTwo{FFFE}% \else \ifx\SE@from\SE@utfxxxii \SE@CheckByteOrderFour \else \ifx\SE@from\SE@utfxxxiibe \SE@RemoveByteOrderFour{0}{FEFF}% \else \ifx\SE@from\SE@utfxxxiile \SE@RemoveByteOrderFour{FFFE}{0}% \fi \fi \fi \fi \fi \fi \ifx\SE@from\SE@to \else \ifx\SE@from\SE@utfxvibe \else \expandafter\SE@ConvertFrom\expandafter\SE@result \expandafter{\SE@result}\SE@from \fi \ifx\SE@to\SE@utfxvibe \else \expandafter\SE@ConvertTo\expandafter\SE@result \expandafter{\SE@result}\SE@to \fi \fi \EdefUnescapeHex#1\SE@result } \def\StringEncodingSuccessFailure{% \ifSE@invalid \expandafter\SE@SecondOfTwo \else \expandafter\SE@FirstOfTwo \fi } \PE@sanitize\SE@utfxvi{utf16} \PE@sanitize\SE@utfxvibe{utf16be} \PE@sanitize\SE@utfxvile{utf16le} \PE@sanitize\SE@utfxxxii{utf32} \PE@sanitize\SE@utfxxxiibe{utf32be} \PE@sanitize\SE@utfxxxiile{utf32le} \def\SE@CheckByteOrderTwo{% \expandafter\SE@@CheckByteOrderTwo\SE@result0000\@nil } \def\SE@@CheckByteOrderTwo#1#2#3#4#5\@nil{% \ifnum"#1#2#3#4="FEFF % \let\SE@from\SE@utfxvibe \edef\SE@result{\expandafter\SE@GobbleFour\SE@result}% \else \ifnum"#3#4#1#2="FEFF % \let\SE@from\SE@utfxvile \edef\SE@result{\expandafter\SE@GobbleFour\SE@result}% \else \let\SE@from\SE@utfxvibe \fi \fi } \def\SE@CheckByteOrderFour{% \expandafter\SE@@CheckByteOrderFour\SE@result00000000\@nil } \def\SE@@CheckByteOrderFour#1#2#3#4#5#6#7#8#9\@nil{% \let\SE@from\SE@utfxxxiibe \ifnum"#1#2#3#4=\SE@zero \ifnum"#5#6#7#8="FEFF % \edef\SE@result{\expandafter\SE@GobbleEight\SE@result}% \fi \else \ifnum"#7#8#5#6=\SE@zero \ifnum"#3#4#1#2="FEFF % \let\SE@from\SE@utfxxxiile \edef\SE@result{\expandafter\SE@GobbleEight\SE@result}% \fi \fi \fi } \def\SE@RemoveByteOrderTwo{% \expandafter\SE@@RemoveByteOrderTwo\SE@result \SE@Empty\SE@Empty\SE@Empty\SE@Empty\@nil } \def\SE@@RemoveByteOrderTwo#1#2#3#4#5\@nil#6{% \ifnum"0#1#2#3#4="#6 % \edef\SE@result{#5}% \fi } \def\SE@RemoveByteOrderFour#1#2{% \def\SE@a{"#1 }% \def\SE@b{"#2 }% \expandafter\SE@@RemoveByteOrderFour\SE@result \SE@Empty\SE@Empty\SE@Empty\SE@Empty \SE@Empty\SE@Empty\SE@Empty\SE@Empty \@nil } \def\SE@@RemoveByteOrderFour#1#2#3#4#5#6#7#8#9\@nil{% \ifnum"0#1#2#3#4=\SE@a \ifnum"0#5#6#7#8=\SE@b \edef\SE@result{#9}% \fi \fi } \def\SE@EncodingAlias#1#2{% \expandafter\def\csname SE@alias@#1\endcsname{#2}% } \SE@EncodingAlias{ansinew}{cp1252} \SE@EncodingAlias{applemac}{mac-roman} \SE@EncodingAlias{cp437de}{cp437} \SE@EncodingAlias{decmulti}{dec-mcs} \SE@EncodingAlias{latin1}{iso-8859-1} \SE@EncodingAlias{latin2}{iso-8859-2} \SE@EncodingAlias{latin3}{iso-8859-3} \SE@EncodingAlias{latin4}{iso-8859-4} \SE@EncodingAlias{latin5}{iso-8859-9} \SE@EncodingAlias{latin6}{iso-8859-10} \SE@EncodingAlias{latin7}{iso-8859-13} \SE@EncodingAlias{latin8}{iso-8859-14} \SE@EncodingAlias{latin9}{iso-8859-15} \SE@EncodingAlias{latin10}{iso-8859-16} \SE@EncodingAlias{mac-ce}{mac-centeuro} \SE@EncodingAlias{mac-ukrainian}{mac-cyrillic} \SE@EncodingAlias{macce}{mac-centeuro} \SE@EncodingAlias{maccyr}{mac-cyrillic} \SE@EncodingAlias{macukr}{mac-cyrillic} \SE@EncodingAlias{next}{nextstep} \SE@EncodingAlias{us-ascii}{ascii} \SE@EncodingAlias{utf-8}{utf8} \SE@EncodingAlias{utf-16}{utf16} \SE@EncodingAlias{utf-16be}{utf16be} \SE@EncodingAlias{utf-16le}{utf16le} \SE@EncodingAlias{utf-32}{utf32} \SE@EncodingAlias{utf-32be}{utf32be} \SE@EncodingAlias{utf-32le}{utf32le} \def\SE@temp#1{% \SE@EncodingAlias{x-#1}{#1}% } \SE@temp{ascii} \SE@temp{cp437} \SE@temp{cp850} \SE@temp{cp852} \SE@temp{cp855} \SE@temp{cp858} \SE@temp{cp865} \SE@temp{cp866} \SE@temp{cp1250} \SE@temp{cp1251} \SE@temp{cp1252} \SE@temp{cp1257} \SE@temp{dec-mcs} \SE@temp{koi8-r} \SE@temp{iso-8859-1} \SE@temp{iso-8859-2} \SE@temp{iso-8859-3} \SE@temp{iso-8859-4} \SE@temp{iso-8859-5} \SE@temp{iso-8859-6} \SE@temp{iso-8859-7} \SE@temp{iso-8859-8} \SE@temp{iso-8859-9} \SE@temp{iso-8859-10} \SE@temp{iso-8859-11} \SE@temp{iso-8859-13} \SE@temp{iso-8859-14} \SE@temp{iso-8859-15} \SE@temp{iso-8859-16} \SE@temp{mac-centeuro} \SE@temp{mac-cyrillic} \SE@temp{mac-roman} \SE@temp{mac-nextstep} \def\SE@EncodingFileList{% ascii,% cp437,% cp850,% cp852,% cp855,% cp858,% cp865,% cp866,% cp1250,% cp1251,% cp1252,% cp1257,% dec-mcs,% iso-8859-1,% iso-8859-2,% iso-8859-3,% iso-8859-4,% iso-8859-5,% iso-8859-6,% iso-8859-7,% iso-8859-8,% iso-8859-9,% iso-8859-10,% iso-8859-11,% iso-8859-13,% iso-8859-14,% iso-8859-15,% iso-8859-16,% koi8-r,% mac-centeuro,% mac-cyrillic,% mac-roman,% nextstep,% pdfdoc,% utf8,% utf16le,% utf32be,% utf32le% } \def\SE@to@general#1#2#3#4{% \ifnum"#1#2#3#4<128 % \SE@ResultAdd{#3#4}% \else \SE@MapConvertTo\SE@encoding{#1#2#3#4}% \fi } \def\SE@to@general@surrogate#1#2#3#4#5#6#7#8{% \SE@InvalidCharacter } \def\SE@from@general#1{% \expandafter\SE@@from@general#1\relax\relax } \def\SE@@from@general#1#2{% \ifx#1\relax \else \ifnum"#1<8 % "#1#2<128 \SE@ResultAdd{00#1#2}% \else \SE@MapConvertFrom\SE@encoding{#1#2}% \fi \expandafter\SE@@from@general \fi } \SE@AtEnd \endinput %% %% End of file `stringenc.sty'.