You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
859 lines
21 KiB
859 lines
21 KiB
%%
|
|
%% 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.
|
|
%%
|
|
%% Project: stringenc
|
|
%% Version: 2019/11/29 v1.12
|
|
%%
|
|
%% Copyright (C)
|
|
%% 2007-2011 Heiko Oberdiek
|
|
%% 2016-2019 Oberdiek Package Support Group
|
|
%%
|
|
%% This work may be distributed and/or modified under the
|
|
%% conditions of the LaTeX Project Public License, either
|
|
%% version 1.3c of this license or (at your option) any later
|
|
%% version. This version of this license is in
|
|
%% https://www.latex-project.org/lppl/lppl-1-3c.txt
|
|
%% and the latest version of this license is in
|
|
%% https://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".
|
|
%%
|
|
%% The Current Maintainers of this work are
|
|
%% Heiko Oberdiek and the Oberdiek Package Support Group
|
|
%% https://github.com/ho-tex/stringenc/issues
|
|
%%
|
|
%%
|
|
%% The Base Interpreter refers to any `TeX-Format',
|
|
%% because some files are installed in TDS:tex/generic//.
|
|
%%
|
|
%% 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-ascii-print.def, se-clean7bit.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\catcode61\catcode48\catcode32=10\relax%
|
|
\catcode13=5 % ^^M
|
|
\endlinechar=13 %
|
|
\catcode35=6 % #
|
|
\catcode39=12 % '
|
|
\catcode44=12 % ,
|
|
\catcode45=12 % -
|
|
\catcode46=12 % .
|
|
\catcode58=12 % :
|
|
\catcode64=11 % @
|
|
\catcode123=1 % {
|
|
\catcode125=2 % }
|
|
\expandafter\let\expandafter\x\csname ver@stringenc.sty\endcsname
|
|
\ifx\x\relax % plain-TeX, first loading
|
|
\else
|
|
\def\empty{}%
|
|
\ifx\x\empty % LaTeX, first loading,
|
|
% variable is initialized, but \ProvidesPackage not yet seen
|
|
\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}%
|
|
\aftergroup\endinput
|
|
\fi
|
|
\fi
|
|
\endgroup%
|
|
\begingroup\catcode61\catcode48\catcode32=10\relax%
|
|
\catcode13=5 % ^^M
|
|
\endlinechar=13 %
|
|
\catcode35=6 % #
|
|
\catcode39=12 % '
|
|
\catcode40=12 % (
|
|
\catcode41=12 % )
|
|
\catcode44=12 % ,
|
|
\catcode45=12 % -
|
|
\catcode46=12 % .
|
|
\catcode47=12 % /
|
|
\catcode58=12 % :
|
|
\catcode64=11 % @
|
|
\catcode91=12 % [
|
|
\catcode93=12 % ]
|
|
\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\@undefined
|
|
\xdef#1{#3}%
|
|
\fi
|
|
\ifx#1\relax
|
|
\xdef#1{#3}%
|
|
\fi
|
|
}%
|
|
\fi
|
|
\expandafter\x\csname ver@stringenc.sty\endcsname
|
|
\ProvidesPackage{stringenc}%
|
|
[2019/11/29 v1.12 Convert strings between diff. encodings (HO)]%
|
|
\begingroup\catcode61\catcode48\catcode32=10\relax%
|
|
\catcode13=5 % ^^M
|
|
\endlinechar=13 %
|
|
\catcode123 1 % {
|
|
\catcode125 2 % }
|
|
\catcode64 11 %
|
|
\def\x{\endgroup
|
|
\expandafter\edef\csname SE@AtEnd\endcsname{%
|
|
\endlinechar=\the\endlinechar\relax
|
|
\catcode13=\the\catcode13\relax
|
|
\catcode32=\the\catcode32\relax
|
|
\catcode35=\the\catcode35\relax
|
|
\catcode61=\the\catcode61\relax
|
|
\catcode64=\the\catcode64\relax
|
|
\catcode123=\the\catcode123\relax
|
|
\catcode125=\the\catcode125\relax
|
|
}%
|
|
}%
|
|
\x\catcode61\catcode48\catcode32=10\relax%
|
|
\catcode13=5 % ^^M
|
|
\endlinechar=13 %
|
|
\catcode35=6 % #
|
|
\catcode64=11 % @
|
|
\catcode123=1 % {
|
|
\catcode125=2 % }
|
|
\def\TMP@EnsureCode#1#2#3{%
|
|
\edef\SE@AtEnd{%
|
|
\SE@AtEnd
|
|
#1#2=\the#1#2\relax
|
|
}%
|
|
#1#2=#3\relax
|
|
}
|
|
\TMP@EnsureCode\catcode{34}{12}% "
|
|
\TMP@EnsureCode\catcode{36}{3}% $
|
|
\TMP@EnsureCode\catcode{38}{4}% &
|
|
\TMP@EnsureCode\catcode{39}{12}% '
|
|
\TMP@EnsureCode\catcode{40}{12}% (
|
|
\TMP@EnsureCode\catcode{41}{12}% )
|
|
\TMP@EnsureCode\catcode{42}{12}% *
|
|
\TMP@EnsureCode\catcode{43}{12}% +
|
|
\TMP@EnsureCode\catcode{44}{12}% ,
|
|
\TMP@EnsureCode\catcode{45}{12}% -
|
|
\TMP@EnsureCode\catcode{46}{12}% .
|
|
\TMP@EnsureCode\catcode{47}{12}% /
|
|
\TMP@EnsureCode\catcode{58}{12}% :
|
|
\TMP@EnsureCode\catcode{60}{12}% <
|
|
\TMP@EnsureCode\catcode{62}{12}% >
|
|
\TMP@EnsureCode\catcode{91}{12}% [
|
|
\TMP@EnsureCode\catcode{93}{12}% ]
|
|
\TMP@EnsureCode\catcode{94}{7}% ^
|
|
\TMP@EnsureCode\catcode{96}{12}% `
|
|
\TMP@EnsureCode\uccode{34}{0}% "
|
|
\TMP@EnsureCode\uccode{48}{0}% 0
|
|
\TMP@EnsureCode\uccode{61}{0}% =
|
|
\edef\SE@AtEnd{\SE@AtEnd\noexpand\endinput}
|
|
\begingroup\expandafter\expandafter\expandafter\endgroup
|
|
\expandafter\ifx\csname RequirePackage\endcsname\relax
|
|
\input infwarerr.sty\relax
|
|
\input ltxcmds.sty\relax
|
|
\input pdfescape.sty\relax
|
|
\else
|
|
\RequirePackage{infwarerr}[2007/09/09]%
|
|
\RequirePackage{ltxcmds}[2010/03/01]%
|
|
\RequirePackage{pdfescape}[2010/03/01]%
|
|
\fi
|
|
\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>>}
|
|
\def\SE@ResultAdd#1{%
|
|
\edef\SE@result{\SE@result#1}%
|
|
}
|
|
\begingroup\expandafter\expandafter\expandafter\endgroup
|
|
\expandafter\ifx\csname newif\endcsname\relax
|
|
\def\SE@newif#1{%
|
|
\begingroup
|
|
\escapechar=-1 %
|
|
\expandafter\endgroup
|
|
\expandafter\SE@@newif\string#1\@nil
|
|
}%
|
|
\def\SE@@newif#1#2#3\@nil{%
|
|
\expandafter\edef\csname#3true\endcsname{%
|
|
\let
|
|
\expandafter\noexpand\csname if#3\endcsname
|
|
\expandafter\noexpand\csname iftrue\endcsname
|
|
}%
|
|
\expandafter\edef\csname#3false\endcsname{%
|
|
\let
|
|
\expandafter\noexpand\csname if#3\endcsname
|
|
\expandafter\noexpand\csname iffalse\endcsname
|
|
}%
|
|
\csname#3false\endcsname
|
|
}%
|
|
\else
|
|
\expandafter\let\expandafter\SE@newif\csname newif\endcsname
|
|
\fi
|
|
\SE@newif\ifSE@invalid
|
|
\def\SE@InvalidCharacter{%
|
|
\SE@invalidtrue
|
|
}
|
|
\def\SE@ConvertTo#1#2#3{%
|
|
\let\SE@result\ltx@empty
|
|
\EdefSanitize\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
|
|
\ifSE@TestMode
|
|
\ifSE@invalid
|
|
\let\SE@next\SE@SkipRemaining
|
|
\fi
|
|
\fi
|
|
\fi
|
|
\fi
|
|
\SE@next
|
|
}
|
|
\def\SE@SkipRemaining#1\relax{}
|
|
\def\SE@@ScanLow#1#2#3#4{%
|
|
\ifx#4\relax
|
|
\SE@InvalidCharacter
|
|
\let\SE@next\relax
|
|
\else
|
|
\ifcase\ifnum"#1#2#3#4<"DC00 %
|
|
\ltx@zero
|
|
\else
|
|
\ifnum"#1#2#3#4>"DFFF %
|
|
\ltx@zero
|
|
\else
|
|
\ltx@one
|
|
\fi
|
|
\fi
|
|
\SE@InvalidCharacter
|
|
\ifSE@TestMode
|
|
\let\SE@next\SE@SkipRemaining
|
|
\else
|
|
\def\SE@next{SE@@ConvertTo#1#2#3#4}%
|
|
\fi
|
|
\else
|
|
\ifx\SE@ConvertSurrogate\relax
|
|
\else
|
|
\expandafter\SE@ConvertSurrogate\SE@high#1#2#3#4%
|
|
\fi
|
|
\let\SE@next\SE@@ConvertTo
|
|
\ifSE@TestMode
|
|
\ifSE@invalid
|
|
\let\SE@next\SE@SkipRemaining
|
|
\fi
|
|
\fi
|
|
\fi
|
|
\fi
|
|
\SE@next
|
|
}
|
|
\def\SE@ConvertFrom#1#2#3{%
|
|
\let\SE@result\ltx@empty
|
|
\EdefSanitize\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
|
|
\catcode35=6 % #/parameter
|
|
\catcode37=14 % percent/comment character
|
|
\catcode92=0 % backslash/escape character
|
|
\catcode123=1 % {/beginning of group
|
|
\catcode125=2 % }/end of group
|
|
\endlinechar=-1 %
|
|
\SE@MakeLetters @ABCDEFGHIKLMNOPRSTU%
|
|
abcdefghiklmnoprstuvwxyz\relax
|
|
\SE@MakeOthers "-./:<=>[]0123456789\relax
|
|
\expandafter\ifx\csname ProvidesFile\endcsname\relax
|
|
\def\ProvidesFile##1[##2]{%
|
|
\immediate\write-1{File: ##1 ##2}%
|
|
}%
|
|
\fi
|
|
\SE@InputIfFileExists{se-#1.def}%
|
|
\endgroup
|
|
}
|
|
\def\SE@MakeLetters#1{%
|
|
\ifx#1\relax
|
|
\else
|
|
\catcode`#1=11 %
|
|
\expandafter\SE@MakeLetters
|
|
\fi
|
|
}
|
|
\def\SE@MakeOthers#1{%
|
|
\ifx#1\relax
|
|
\else
|
|
\catcode`#1=12 %
|
|
\expandafter\SE@MakeOthers
|
|
\fi
|
|
}
|
|
\begingroup\expandafter\expandafter\expandafter\endgroup
|
|
\expandafter\ifx\csname IfFileExists\endcsname\relax
|
|
\input pdftexcmds.sty\relax
|
|
\begingroup\expandafter\expandafter\expandafter\endgroup
|
|
\expandafter\ifx\csname pdf@filesize\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\expandafter\expandafter
|
|
\ifx\expandafter\expandafter\expandafter\\\pdf@filesize{#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
|
|
\SE@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
|
|
& \ifcase\expandafter\ltx@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
|
|
& \ifcase\expandafter\ltx@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\ltx@empty\ltx@empty
|
|
\ltx@empty\ltx@empty
|
|
}
|
|
\def\SE@@Nibbles@BinToHex#1#2#3#4{%
|
|
\ifx#1\ltx@empty
|
|
\else
|
|
$ \SE@Nibble@NumToHex{%
|
|
$ \numexpr#4+2*(#3+2*(#2+2*#1))\relax
|
|
$ }%
|
|
& \ifnum#1>\ltx@zero
|
|
& \ifnum#2>\ltx@zero
|
|
& \ifnum#3>\ltx@zero
|
|
& \ifnum#4>\ltx@zero
|
|
& F%
|
|
& \else
|
|
& E%
|
|
& \fi
|
|
& \else
|
|
& \ifnum#4>\ltx@zero
|
|
& D%
|
|
& \else
|
|
& C%
|
|
& \fi
|
|
& \fi
|
|
& \else
|
|
& \ifnum#3>\ltx@zero
|
|
& \ifnum#4>\ltx@zero
|
|
& B%
|
|
& \else
|
|
& A%
|
|
& \fi
|
|
& \else
|
|
& \ifnum#4>\ltx@zero
|
|
& 9%
|
|
& \else
|
|
& 8%
|
|
& \fi
|
|
& \fi
|
|
& \fi
|
|
& \else
|
|
& \ifnum#2>\ltx@zero
|
|
& \ifnum#3>\ltx@zero
|
|
& \ifnum#4>\ltx@zero
|
|
& 7%
|
|
& \else
|
|
& 6%
|
|
& \fi
|
|
& \else
|
|
& \ifnum#4>\ltx@zero
|
|
& 5%
|
|
& \else
|
|
& 4%
|
|
& \fi
|
|
& \fi
|
|
& \else
|
|
& \ifnum#3>\ltx@zero
|
|
& \ifnum#4>\ltx@zero
|
|
& 3%
|
|
& \else
|
|
& 2%
|
|
& \fi
|
|
& \else
|
|
& \ifnum#4>\ltx@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\ltx@zero=#2\relax
|
|
& \advance\count\ltx@zero by#3\relax
|
|
& \edef\x{\endgroup
|
|
& \def\noexpand#1{\the\count\ltx@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
|
|
$ \ifSE@TestMode
|
|
$ \let\SE@next\SE@SkipRemaining
|
|
$ \fi
|
|
$ \fi
|
|
& \begingroup\expandafter\expandafter\expandafter\endgroup
|
|
& \expandafter\ifx\csname SE->#1@#2\endcsname\relax
|
|
& \SE@InvalidCharacter
|
|
& \ifSE@TestMode
|
|
& \let\SE@next\SE@SkipRemaining
|
|
& \fi
|
|
& \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{%
|
|
\EdefSanitize\SE@from{#3}%
|
|
\EdefSanitize\SE@to{#4}%
|
|
\expandafter\ifx\csname SE@alias@\SE@from\endcsname\relax
|
|
\else
|
|
\EdefSanitize\SE@from{\csname SE@alias@\SE@from\endcsname}%
|
|
\fi
|
|
\expandafter\ifx\csname SE@alias@\SE@to\endcsname\relax
|
|
\else
|
|
\EdefSanitize\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\ltx@secondoftwo
|
|
\else
|
|
\expandafter\ltx@firstoftwo
|
|
\fi
|
|
}
|
|
\def\StringEncodingConvertTest#1#2#3#4{%
|
|
\SE@TestModetrue
|
|
\StringEncodingConvert{#1}{#2}{#3}{#4}%
|
|
\SE@TestModefalse
|
|
\StringEncodingSuccessFailure
|
|
}
|
|
\SE@newif\ifSE@TestMode
|
|
\EdefSanitize\SE@utfxvi{utf16}
|
|
\EdefSanitize\SE@utfxvibe{utf16be}
|
|
\EdefSanitize\SE@utfxvile{utf16le}
|
|
\EdefSanitize\SE@utfxxxii{utf32}
|
|
\EdefSanitize\SE@utfxxxiibe{utf32be}
|
|
\EdefSanitize\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\ltx@gobblefour\SE@result}%
|
|
\else
|
|
\ifnum"#3#4#1#2="FEFF %
|
|
\let\SE@from\SE@utfxvile
|
|
\edef\SE@result{\expandafter\ltx@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=\ltx@zero
|
|
\ifnum"#5#6#7#8="FEFF %
|
|
\edef\SE@result{\expandafter\SE@GobbleEight\SE@result}%
|
|
\fi
|
|
\else
|
|
\ifnum"#7#8#5#6=\ltx@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
|
|
\ltx@empty\ltx@empty\ltx@empty\ltx@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
|
|
\ltx@empty\ltx@empty\ltx@empty\ltx@empty
|
|
\ltx@empty\ltx@empty\ltx@empty\ltx@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{ascii-printable}{ascii-print}
|
|
\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{ascii-print}
|
|
\SE@temp{clean7bit}
|
|
\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{nextstep}
|
|
\def\StringEncodingList{%
|
|
ascii,%
|
|
ascii-print,%
|
|
clean7bit,%
|
|
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{%
|
|
\let\SE@next\SE@@from@general
|
|
\expandafter\SE@@from@general#1\relax\relax
|
|
}
|
|
\def\SE@@from@general#1#2{%
|
|
\ifx#1\relax
|
|
\let\SE@next\relax
|
|
\else
|
|
\ifnum"#1<8 % "#1#2<128
|
|
\SE@ResultAdd{00#1#2}%
|
|
\else
|
|
\SE@MapConvertFrom\SE@encoding{#1#2}%
|
|
\fi
|
|
\fi
|
|
\SE@next
|
|
}
|
|
\SE@AtEnd%
|
|
\endinput
|
|
%%
|
|
%% End of file `stringenc.sty'.
|
|
|