1085168bbf
Sync with the latest html5lib. Having the Maruku unit tests on-hand may be useful for debugging; so let's include them.
749 lines
27 KiB
TeX
749 lines
27 KiB
TeX
%%
|
|
%% This is file `ucs.sty',
|
|
%% generated with the docstrip utility.
|
|
%%
|
|
%% The original source files were:
|
|
%%
|
|
%% ucs.dtx (with options: `ucs.sty')
|
|
%%
|
|
%% Copyright 2001 Dominique Unruh <dominique@unruh.de>
|
|
%%
|
|
%% This program is provided under the terms of the LaTeX Project Public
|
|
%% License with some modifications.
|
|
%% See the file LICENSE (http://www.unruh.de/DniQ/latex/unicode/content/LICENSE)
|
|
%% for information.
|
|
%%
|
|
\catcode`\@11
|
|
\ifx\@gobble\undefined\def\@gobble#1{}\fi
|
|
\ifx\@gobbletwo\undefined\def\@gobbletwo#1#2{}\fi
|
|
\ifx\@gobblethree\undefined\def\@gobblethree#1#2#3{}\fi
|
|
\ifx\@gobblefour\undefined\def\@gobblefour#1#2#3#4{}\fi
|
|
\ifx\@firstofone\undefined\def\@firstofone#1{#1}\fi
|
|
\ifx\@tempcnta\undefined\csname newcount\endcsname\@tempcnta\fi
|
|
\ifx\@tempcntb\undefined\csname newcount\endcsname\@tempcntb\fi
|
|
\ifx\@testopt\undefined
|
|
\def\@testopt#1#2{%
|
|
\@ifnextchar[{#1}{#1[{#2}]}}\fi
|
|
\ifx\@protected@testopt\undefined\def\@protected@testopt{\expandafter\@testopt\@gobble}\fi
|
|
\ifx\@ifnextchar\undefined
|
|
\def\@ifnextchar#1#2#3{%
|
|
\let\reserved@d=#1%
|
|
\def\reserved@a{#2}%
|
|
\def\reserved@b{#3}%
|
|
\futurelet\@let@token\@ifnch}\fi
|
|
\ifx\@ifnch\undefined
|
|
\def\@ifnch{%
|
|
\ifx\@let@token\@sptoken
|
|
\let\reserved@c\@xifnch
|
|
\else
|
|
\ifx\@let@token\reserved@d
|
|
\let\reserved@c\reserved@a
|
|
\else
|
|
\let\reserved@c\reserved@b
|
|
\fi
|
|
\fi
|
|
\reserved@c}\fi
|
|
\ifx\@inputcheck\undefined\newread\@inputcheck\fi
|
|
\ifx\IfFileExists\undefined
|
|
\long\def\IfFileExists#1#2#3{%
|
|
\openin\@inputcheck#1 %SPACE
|
|
\ifeof\@inputcheck\def\reserved@a{#3}%
|
|
\else\closein\@inputcheck\def\reserved@a{#2}%
|
|
\fi
|
|
\reserved@a}%
|
|
\fi
|
|
\ifx\InputIfFileExists\undefined
|
|
\long\def\InputIfFileExists#1#2{%
|
|
\IfFileExists{#1}{#2\input #1 }}
|
|
\fi
|
|
\ifx\protect\undefined\let\protect\relax\fi
|
|
\ifx\@typeset@protect\undefined\let\@typeset@protect\relax\fi
|
|
\ifx\IeC\undefined\def\IeC{\ifx\protect\@typeset@protect
|
|
\expandafter\@firstofone\else\noexpand\IeC\fi}\fi
|
|
\def\unicode@knownoptions{}
|
|
\def\XDeclareUnicodeOption#1#2#3#4#5{%
|
|
\expandafter\let\csname ifUnicodeOption#2\endcsname\iffalse
|
|
\expandafter\def\csname UnicodeOption#2true%
|
|
\expandafter\endcsname\expandafter{%
|
|
\expandafter\let\csname ifUnicodeOption#2\endcsname\iftrue}%
|
|
\expandafter\def\csname UnicodeOption#2false%
|
|
\expandafter\endcsname\expandafter{%
|
|
\expandafter\let\csname ifUnicodeOption#2\endcsname\iffalse}%
|
|
\expandafter\def\csname @unicode@option@#2\endcsname{%
|
|
#3\uni@activate@option{#2}{}{#4}{#5}}%
|
|
\expandafter\def\csname @unicode@option@no#2\endcsname{%
|
|
#3\uni@activate@option{#2}{no}{#4}{#5}}%
|
|
\ifx~#1~\else\LinkUnicodeOptionToPkg{#2}{#1}\fi
|
|
\let\uc@tempa\\\let\\\relax
|
|
\edef\unicode@knownoptions{\\{#2}\unicode@knownoptions}%
|
|
\let\\\uc@tempa
|
|
}%
|
|
\let\uc@newcommand\def
|
|
\uc@newcommand\DeclareUnicodeOption{\@protected@testopt\DeclareUnicodeOption\DeclareUnicodeOption@{}}
|
|
\uc@newcommand\DeclareUnicodeOption@[#1]#2{%
|
|
\XDeclareUnicodeOption{#1}{#2}{}{}{}}%
|
|
\uc@newcommand\uc@errormsg#1#2{%
|
|
\ifx\PackageError\undefined
|
|
{\newlinechar`\^^J\def\MessageBreak{^^J}%
|
|
\errhelp{#2}\errmessage{Package ucs: #1}}%
|
|
\else
|
|
\PackageError{ucs}{#1}{#2}%
|
|
\fi
|
|
}%
|
|
\uc@newcommand\uc@warnmsg#1{%
|
|
\ifx\PackageWarning\undefined
|
|
{\newlinechar`\^^J\def\MessageBreak{^^J}%
|
|
\message{Package ucs: #1\MessageBreak}}%
|
|
\else
|
|
\PackageWarning{ucs}{#1}%
|
|
\fi
|
|
}%
|
|
\def\uni@activate@option#1#2#3#4#5{%
|
|
\ifx\uni@dataloaded\undefined
|
|
\global\expandafter\def\csname @unicode@option@#1\endcsname##1{%
|
|
\csname UnicodeOption#1true\endcsname
|
|
\expandafter\def\csname uo-prio-#1\endcsname{##1}#3}%
|
|
\global\expandafter\def\csname @unicode@option@no#1\endcsname##1%
|
|
{\csname UnicodeOption#1false\endcsname#4}%
|
|
\global\expandafter\let\csname uni@active@#1\endcsname1%
|
|
\csname @unicode@option@#2#1\endcsname{#5}\else
|
|
\uc@errormsg{Option #1 must be activated or deactivated %SPACE
|
|
at least once in the preamble before using it in the document}{%
|
|
For optimization causes I must know all %SPACE
|
|
options before loading any unicode data.\MessageBreak
|
|
Try e.g. #1 or no#1 as package option to ucs.}\fi}
|
|
\def\LinkUnicodeOptionToPkg#1#2{%
|
|
\AtBeginDocument{\@ifpackageloaded{#2}{\SetUnicodeOption{#1}}{}}}%
|
|
\uc@newcommand\SetUnicodeOption{\@protected@testopt\SetUnicodeOption\SetUnicodeOption@{100}}
|
|
\uc@newcommand\SetUnicodeOption@[#1]#2{%
|
|
\edef\uc@temp@a{@unicode@option@#2}%
|
|
\expandafter\ifx\csname\uc@temp@a\endcsname\relax
|
|
\PackageError{ucs}{Unknown unicode option #2}{}%
|
|
\else
|
|
\csname\uc@temp@a\endcsname{#1}%
|
|
\fi}
|
|
\ifx\ProvidesPackage\undefined\else
|
|
\ProvidesPackage{ucs}[2004/10/17 UCS: Unicode input support]%
|
|
\fi
|
|
\ifx\@@input\undefined\input uni-global.def \else\input{uni-global.def}\fi
|
|
\DeclareUnicodeOption{fasterrors}
|
|
\DeclareUnicodeOption{warnunknown}
|
|
\DeclareUnicodeOption{graphics}
|
|
\DeclareUnicodeOption{savemem}
|
|
\DeclareUnicodeOption{document}
|
|
\SetUnicodeOption[1000]{document}
|
|
\DeclareUnicodeOption{default}
|
|
\SetUnicodeOption[0]{default}
|
|
\XDeclareUnicodeOption{}{combine}{}{%
|
|
\let\uc@cmb\empty}{%
|
|
\ifx\unicodecombine\undefined\else\unicodecombine\fi
|
|
\def\uc@cmb{\uc@warn@nocombine}}%
|
|
\ifx\AtBeginDocument\undefined\else
|
|
\AtEndDocument{\unicodecombine}\fi
|
|
\SetUnicodeOption{nocombine}%
|
|
\def\uc@cmb{\uc@warn@nocombine}%
|
|
\ifx\DeclareOption\undefined\else
|
|
\DeclareOption{showmagickern}{\def\uc@magic@glue{6805678}}%
|
|
\DeclareOption{hyperref}{\AtEndOfPackage{\RequirePackage{ucshyper}}}%
|
|
\DeclareOption*{\SetUnicodeOption{\CurrentOption}}\ProcessOptions*
|
|
\fi
|
|
\ifx\AtBeginDocument\undefined
|
|
\uc@warnmsg{Not loading ucsencs.def automatically.\MessageBreak
|
|
Please load it after initializing fontencodings}%
|
|
\else
|
|
\AtBeginDocument{\input{ucsencs.def}}\fi
|
|
\AtBeginDocument{\ifUnicodeOptiongraphics\RequirePackage{graphicx}\fi}%
|
|
\uc@newcommand\unicode@numtohex{\protect\unicode@numtohex@}%
|
|
\uc@newcommand\unicode@numtohex@#1#2#3{%
|
|
{%\let\empty\relax\relax
|
|
%\ifx\empty\relax\def\empty{}%
|
|
\count255=#2\relax\gdef#1{}%
|
|
\count252=#3%
|
|
\loop
|
|
\count253=\count252\advance\count253by\count255\relax
|
|
\ifnum\count253>0%
|
|
\ifnum\count252>0\advance\count252by-1\relax\fi
|
|
\count254=\count255%
|
|
\divide\count255by16%
|
|
\multiply\count255by16%
|
|
\advance\count254by-\count255%
|
|
\xdef#1{\ifcase\count254 0\or1\or2\or3\or4\or5\or6\or7\or
|
|
8\or9\or A\or B\or C\or D\or E\or F\fi#1}%
|
|
\divide\count255by16\relax
|
|
\repeat
|
|
%\else
|
|
% \def#1{dec:#2}%
|
|
%\fi
|
|
}}
|
|
\let\uc@spc\space
|
|
\newcount\uc@secondtry
|
|
\uc@newcommand\unicode@invalid#1{%
|
|
\unicode@combine%
|
|
\ifUnicodeOptiongraphics{%
|
|
\ifx\unicode@graphicsdir\undefined
|
|
\def\unicode@graphicsdir{ucs-glyphs}\fi
|
|
\ifx\unicode@graphicscmd\undefined
|
|
\def\unicode@graphicscmd{ucs-getglyph \hex\space \dec\space \path\space}\fi
|
|
\unicode@numtohex\hex{#1}4%
|
|
\count255=#1\relax
|
|
\divide\count255 by256\relax
|
|
\unicode@numtohex\uc@temp@b{\count255}2%
|
|
\edef\path{\unicode@graphicsdir/\uc@temp@b/U\hex.ps}%
|
|
\edef\dec{\number#1}%
|
|
\IfFileExists{\uc@temp@c}{}{%
|
|
\typeout{Running: \unicode@graphicscmd}%
|
|
\immediate\write18{\unicode@graphicscmd}%
|
|
}%
|
|
\IfFileExists{\path}{%
|
|
\setbox255=\hbox{X}%
|
|
\edef\uc@temp@b{\begingroup\noexpand\uni@resetcatcodes
|
|
\noexpand\includegraphics[height=\the\ht255, trim=0 22.5 0 17.5]%
|
|
{\path}%
|
|
\noexpand\ProvidesFile{U\hex.ps}%
|
|
[Downloaded glyph for U+\hex]%
|
|
\endgroup}%
|
|
\typeout{\meaning\uc@temp@b}%
|
|
\expandafter\unicodevirtual\expandafter{\uc@temp@b}%
|
|
}{%
|
|
\PackageWarning{ucs}{File \uc@temp@d\uc@temp@c.ps %SPACE
|
|
not found.\MessageBreak
|
|
Use\MessageBreak
|
|
\space\space\space\space\unicode@graphicscmd\MessageBreak
|
|
or start latex with option -shell-escape\MessageBreak
|
|
if you have not already done so.}%
|
|
\unicodevirtual{\unicode@invalidglyph{#1}}}}\else
|
|
\unicodevirtual{\unicode@invalidglyph{#1}}\fi}
|
|
\uc@newcommand\unicode@invalidglyph#1{%
|
|
{\unicode@numtohex\uc@temp@d{#1}4%
|
|
\fontencoding{OT1}\texttt{[U+\uc@temp@d]}}}
|
|
\uc@newcommand\uni@char#1{%
|
|
\ucs@protected@unichar\iftrue
|
|
\expandafter\ifx\csname u-\number#1-h/o\endcsname\relax
|
|
% \end{macrocode}
|
|
% If the character is not defined yet, load it.
|
|
% \begin{macrocode}
|
|
\begingroup
|
|
% In case \let is not executed, this (until ===) expands
|
|
% to \let\relax\relax,
|
|
% otherwise we have \let\uc@notloaderr\@gobble
|
|
% Number of \empty's must equal number of args of \uc@char@notloaded
|
|
\let\uc@notloaderr\@gobble\empty\@gobbletwo\relax\relax
|
|
% ===
|
|
\expandafter\endgroup
|
|
% If \let not executed: Warning is emitted (see |\uc@notloaderr|)
|
|
% otherwise: |\uc@char@notloaded| is called.
|
|
\uc@notloaderr{\number#1}\uc@char@notloaded{#1}%
|
|
\else
|
|
% \end{macrocode}
|
|
% If the character is loaded, run |\uc@checkopts|
|
|
% with the options of this character
|
|
% as first arg and the code position as second; this will
|
|
% display the character with
|
|
% the correct option.
|
|
% \begin{macrocode}
|
|
\expandafter\expandafter\expandafter\uc@checkopts
|
|
\expandafter\expandafter\expandafter
|
|
{\csname u-\number#1-h/o\endcsname}{#1}%
|
|
\fi
|
|
\else
|
|
\noexpand\unichar{#1}%
|
|
\fi
|
|
}
|
|
\begingroup
|
|
\lccode`\A=`\{\lccode`\B=`\}\lccode`\C=`\\%
|
|
\lccode`\P=`\P\lccode`\U=`\U%
|
|
\lowercase{%
|
|
\endgroup
|
|
\uc@newcommand\uc@notloaderr#1#2#3{%
|
|
\ifx\@gobble#1\else[Please insert %SPACE
|
|
CPrerenderUnicodeACunicharA#1BB into preamble]\fi}}
|
|
\uc@newcommand\uc@checkopts#1#2{%
|
|
\expandafter\uc@checkopt@error\expandafter{\number#2}%
|
|
{error}{error}{infinity}#1\@nil
|
|
}
|
|
\expandafter\uc@newcommand\csname uo-prio-infinity\endcsname{-2100000000}
|
|
%% === BEGIN AUTOGENERATED CODE
|
|
\uc@newcommand\uc@checkopt@stick#1#2#3#4#5{%
|
|
\ifx\@nil#5%
|
|
\expandafter\ifx\csname u-#2-#1\endcsname\relax
|
|
\uc@localdeferr{#1}{#2}%
|
|
\else
|
|
\uc@output{\csname u-#2-#1\endcsname}{#1}%
|
|
\fi
|
|
\expandafter\@gobblefour
|
|
\else
|
|
\iftrue\csname fi\endcsname
|
|
\csname ifUnicodeOption#5\endcsname
|
|
\ifnum\csname uo-prio-#2\endcsname>\csname uo-prio-#5\endcsname\uc@spc
|
|
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
|
|
\uc@checkopt@stick
|
|
\else
|
|
\ifnum\csname uo-prio-#2\endcsname<\csname uo-prio-#5\endcsname\uc@spc
|
|
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
|
|
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
|
|
\uc@checkopt@change
|
|
\else
|
|
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
|
|
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
|
|
\uc@checkopt@error
|
|
\fi
|
|
\fi
|
|
\else
|
|
\expandafter\expandafter\expandafter\uc@checkopt@stick
|
|
\fi
|
|
\fi
|
|
{#1}{#2}{#5}{#2}%
|
|
}
|
|
\uc@newcommand\uc@checkopt@change#1#2#3#4#5{%
|
|
\ifx\@nil#5%
|
|
\expandafter\ifx\csname u-#3-#1\endcsname\relax
|
|
\uc@localdeferr{#1}{#3}%
|
|
\else
|
|
\uc@output{\csname u-#3-#1\endcsname}{#1}%
|
|
\fi
|
|
\expandafter\@gobblefour
|
|
\else
|
|
\iftrue\csname fi\endcsname
|
|
\csname ifUnicodeOption#5\endcsname
|
|
\ifnum\csname uo-prio-#3\endcsname>\csname uo-prio-#5\endcsname\uc@spc
|
|
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
|
|
\uc@checkopt@stick
|
|
\else
|
|
\ifnum\csname uo-prio-#3\endcsname<\csname uo-prio-#5\endcsname\uc@spc
|
|
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
|
|
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
|
|
\uc@checkopt@change
|
|
\else
|
|
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
|
|
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
|
|
\uc@checkopt@error
|
|
\fi
|
|
\fi
|
|
\else
|
|
\expandafter\expandafter\expandafter\uc@checkopt@stick
|
|
\fi
|
|
\fi
|
|
{#1}{#3}{#5}{#3}%
|
|
}
|
|
\uc@newcommand\uc@checkopt@error#1#2#3#4#5{%
|
|
\ifx\@nil#5%
|
|
\uc@errordrawopt{#1}{#2, #3}{#4}%
|
|
\expandafter\@gobblefour
|
|
\else
|
|
\iftrue\csname fi\endcsname
|
|
\csname ifUnicodeOption#5\endcsname
|
|
\ifnum\csname uo-prio-#4\endcsname>\csname uo-prio-#5\endcsname\uc@spc
|
|
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
|
|
\uc@checkopt@errorstick
|
|
\else
|
|
\ifnum\csname uo-prio-#4\endcsname<\csname uo-prio-#5\endcsname\uc@spc
|
|
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
|
|
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
|
|
\uc@checkopt@change
|
|
\else
|
|
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
|
|
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
|
|
\uc@checkopt@error
|
|
\fi
|
|
\fi
|
|
\else
|
|
\expandafter\expandafter\expandafter\uc@checkopt@errorstick
|
|
\fi
|
|
\fi
|
|
{#1}{#2, #3}{#5}{#4}%
|
|
}
|
|
\uc@newcommand\uc@checkopt@errorstick#1#2#3#4#5{%
|
|
\ifx\@nil#5%
|
|
\uc@errordrawopt{#1}{#2}{#4}%
|
|
\expandafter\@gobblefour
|
|
\else
|
|
\iftrue\csname fi\endcsname
|
|
\csname ifUnicodeOption#5\endcsname
|
|
\ifnum\csname uo-prio-#4\endcsname>\csname uo-prio-#5\endcsname\uc@spc
|
|
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
|
|
\uc@checkopt@errorstick
|
|
\else
|
|
\ifnum\csname uo-prio-#4\endcsname<\csname uo-prio-#5\endcsname\uc@spc
|
|
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
|
|
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
|
|
\uc@checkopt@change
|
|
\else
|
|
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
|
|
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
|
|
\uc@checkopt@error
|
|
\fi
|
|
\fi
|
|
\else
|
|
\expandafter\expandafter\expandafter\uc@checkopt@errorstick
|
|
\fi
|
|
\fi
|
|
{#1}{#2}{#5}{#4}%
|
|
}
|
|
\let\unicode@empty\empty
|
|
\uc@newcommand\uc@errordrawopt#1#2#3{%
|
|
\let\unicode@empty\relax\relax
|
|
\ifx\unicode@empty\relax\let\unicode@empty\empty
|
|
\unicode@numtohex\uc@temp@b{#1}4%
|
|
\ifnum\csname uo-prio-#3\endcsname=-2100000000\relax
|
|
\expandafter\ifx\csname
|
|
missing-unicode-warned-\number#1\endcsname\relax
|
|
\global\expandafter\let\csname
|
|
missing-unicode-warned-\number#1\endcsname\@ne
|
|
\unicode@error@unknown\@ne{Character \number#1\uc@spc
|
|
\uc@spc= U+\uc@temp@b\uc@spc
|
|
matches no activated options.\MessageBreak
|
|
Type H to see available options}{#1}%
|
|
\else
|
|
\PackageWarning{ucs}{Character % SPACE
|
|
\number#1 \uc@spc= 0x\uc@temp@b\uc@spc
|
|
appeared again.}%
|
|
\fi
|
|
\else
|
|
\@getcharinfo\uc@temp@c{#1}%
|
|
\PackageWarning{ucs}{Character %SPACE
|
|
\number#1 \uc@spc= 0x\uc@temp@b\uc@spc
|
|
matches options\MessageBreak
|
|
\uc@spc\uc@spc\uc@spc#2\MessageBreak
|
|
with same priority \csname uo-prio-#3\endcsname. %SPACE
|
|
Selecting option #3.\MessageBreak
|
|
\uc@temp@c}%
|
|
\uc@output{\csname u-#3-#1\endcsname}{#1}%
|
|
\fi
|
|
\else
|
|
\noexpand\unichar{#1}%
|
|
\fi
|
|
}
|
|
\uc@newcommand\uc@output#1#2{%
|
|
\ifx\unicode@delay1\let\unicode@delay\relax\else
|
|
\ifUnicodeOptioncombine
|
|
\expandafter\uc@combine\expandafter{#1}{#2}%
|
|
\else
|
|
\uc@prechar@exec{#2}%
|
|
\unicode@charfilter{#1{}}%
|
|
\fi
|
|
\ifx\uc@throw\undefined\else
|
|
\def\uc@got{#2}\uc@throw\global\let\uc@throw\undefined\fi
|
|
\fi
|
|
}%
|
|
\uc@newcommand\uc@prechar@exec#1{%
|
|
\ifx\uc@prechar\undefined\else\uc@prechar{#1}\fi}
|
|
\uc@newcommand\uc@localdeferr#1#2{%
|
|
\@getcharinfo\uc@temp@a{#1}%
|
|
\PackageError{ucs}{Internal error in character \number#1, %SPACE
|
|
option #2}{I probably got confused by intermixed local %SPACE
|
|
and global definitions.\MessageBreak Try to load the needed %SPACE
|
|
code page via \noexpand\PreloadUnicodePage
|
|
before declaring anything by yourself.}{\uc@temp@a}%
|
|
\unicode@invalid{#1}%
|
|
}%
|
|
\uc@newcommand\uc@warn@nocombine{%
|
|
\PackageError{ucs}{Please activate option 'combine'}{Composed %SPACE
|
|
characters can only be rendered correctly, when the option %SPACE
|
|
'combine' is activated}}
|
|
\newtoks\uc@combtoks
|
|
\newtoks\uc@combtoksb
|
|
\newtoks\uc@temptokena
|
|
\uc@newcommand\unicode@combine{%
|
|
\uc@check@magicglue%
|
|
\ifx\uc@combining@prechar\undefined\global\let\uc@comb@code\undefined\fi
|
|
\ifx\uc@comb@code\undefined\uc@temptokena{}\else
|
|
\uc@temptokena\expandafter{\expandafter\uc@prechar@exec
|
|
\expandafter{\uc@comb@code}}\fi%
|
|
\global\let\uc@comb@code\undefined
|
|
\global\expandafter\expandafter\expandafter\expandafter\expandafter
|
|
\expandafter\expandafter\uc@combtoksb
|
|
\expandafter\expandafter\expandafter
|
|
\expandafter\expandafter\expandafter\expandafter{%
|
|
\expandafter\expandafter\expandafter\the
|
|
\expandafter\expandafter\expandafter\uc@combtoksb
|
|
\expandafter\the\expandafter\uc@temptokena\the\uc@combtoks}%
|
|
\global\uc@combtoks{}}
|
|
\def\uc@magic@glue{5381}
|
|
\uc@newcommand\uc@check@magicglue{%
|
|
\ifnum\lastskip=\uc@magic@glue\unskip\else
|
|
\begingroup
|
|
\edef\uc@temp@a{\the\uc@combtoks}%
|
|
\ifx\uc@temp@a\empty\else
|
|
\PackageWarning{ucs}{Magic kern expected. Probably some %SPACE
|
|
non-unicode characters mixed in while option combine was %SPACE
|
|
in effect.}\fi\endgroup
|
|
\fi}
|
|
\uc@newcommand\unicodevirtual#1{%
|
|
\def\uc@temp@a##1{#1}\uc@output{\csname uc@temp@a\endcsname}{"FFFF}}
|
|
\uc@newcommand\unicodecombine{%
|
|
\ifx\protect\@typeset@protect
|
|
\unicode@combine%
|
|
%\typeout{WRITING: \the\uc@combtoksb}%
|
|
\the\uc@combtoksb
|
|
\uc@prechar@exec{-1}%
|
|
\global\uc@combtoksb{}%
|
|
\ifx\uc@throw\undefined\else
|
|
\def\uc@got{-1}\uc@throw\global\let\uc@throw\undefined\fi
|
|
\else
|
|
\noexpand\unicodecombine\fi
|
|
}
|
|
\uc@newcommand\uc@combine#1#2{%
|
|
\ifx\protect\@typeset@protect
|
|
\@temptokena\expandafter{#1{}}%
|
|
\expandafter\expandafter\expandafter\ifx
|
|
\expandafter\uc@firstofmany\the\@temptokena\uc@firstofmany\uc@cmb
|
|
\uc@check@magicglue%
|
|
\uc@combtoks\expandafter\expandafter\expandafter\expandafter
|
|
\expandafter\expandafter\expandafter{%
|
|
\expandafter\expandafter\expandafter\@gobble
|
|
\expandafter#1\expandafter{\the\uc@combtoks}}%
|
|
\else
|
|
\unicode@combine%
|
|
\xdef\uc@comb@code{\number#2}%
|
|
\global\uc@combtoks\expandafter{#1{}}%
|
|
\fi
|
|
%\typeout{->COMBTOKS: \the\uc@combtoks}%
|
|
\hskip\uc@magic@glue spplus0ptminus0pt %SPACE ; Insert magic glue
|
|
\else
|
|
\noexpand\unichar{\number#2}\fi
|
|
}
|
|
\uc@newcommand\uc@char@notloaded#1{%
|
|
\count255=#1\divide\count255 by 256%
|
|
\edef\uc@temp@a{uni-\number\count255.def}%
|
|
\expandafter\ifx\csname\uc@temp@a\endcsname\relax\else
|
|
\uc@secondtry#1\relax\fi
|
|
\ifnum\uc@secondtry=#1\relax
|
|
% If the file has already been loaded, but the character is unknown,
|
|
% output an error and show the replacement glyph
|
|
\unicode@numtohex\uc@temp@b{#1}4%
|
|
\expandafter\ifx\csname
|
|
missing-unicode-warned-\number#1\endcsname\relax
|
|
\global\expandafter\let\csname
|
|
missing-unicode-warned-\number#1\endcsname\@ne
|
|
\unicode@error@unknown\@ne{Unknown Unicode character % SPACE
|
|
\number#1 \uc@spc= U+\uc@temp@b,\MessageBreak
|
|
possibly declared in \uc@temp@a.\MessageBreak
|
|
Type H to see if it is available with options}{#1}%
|
|
\else
|
|
\PackageWarning{ucs}{Unknown character % SPACE
|
|
\number#1 \uc@spc = 0x\uc@temp@b\uc@spc
|
|
appeared again.}%
|
|
\unicode@invalid{#1}%
|
|
\fi
|
|
\else
|
|
\begingroup
|
|
\ifUnicodeOptionsavemem
|
|
\else
|
|
\global\expandafter\let\csname\uc@temp@a\endcsname\@ne
|
|
\fi
|
|
\def\uc@got{#1}%
|
|
\uni@resetcatcodes
|
|
\expandafter\InputIfFileExists\expandafter{\uc@temp@a}{%
|
|
\global\let\uni@dataloaded1%
|
|
}{%
|
|
}%
|
|
% End of local group for inputted file
|
|
\endgroup
|
|
% Retry displaying character. This won't cause infinite recursion,
|
|
% because we have marked this file as loaded (globally or, if
|
|
% |savemem| is set, at least here).
|
|
\uc@secondtry#1\relax%
|
|
\uni@char{#1}%
|
|
\fi
|
|
}
|
|
\uc@newcommand\PreloadUnicodePage#1{%
|
|
\begingroup
|
|
\global\expandafter\let\csname uni-#1.def\endcsname\@ne
|
|
\uni@resetcatcodes
|
|
\InputIfFileExists{uni-#1.def}{\let\uni@dataloaded1}{%
|
|
\PackageError{ucs}{Could not find uni-#1.def}{}}%
|
|
\endgroup}
|
|
\uc@newcommand\PrerenderUnicode{%
|
|
\@ifstar{\@prerenderunicode\unichar}{\@prerenderunicode\@gobble}}%
|
|
\uc@newcommand\@prerenderunicode#1#2{%
|
|
\begingroup
|
|
\UnicodeCharFilter\@gobble
|
|
\let#1\@gobble\setbox0\hbox{#2}\endgroup}
|
|
\uc@newcommand\DeclareUnicodeCharacter#1#2{%
|
|
\DeclareUnicodeCharacterAsOptional{#1}{document}{#2}}
|
|
\uc@newcommand\DeclareUnicodeCharacterAsOptional{%
|
|
\let\uc@temp@a\relax\uni@declcharopt}
|
|
\uc@newcommand\uc@dclc#1#2{%
|
|
\let\next=\uni@declcharopt
|
|
\ifUnicodeOptionsavemem
|
|
\ifnum\uc@got=#1\else
|
|
\let\next=\@gobblethree\fi
|
|
\fi
|
|
\ifx\next\uni@declcharopt
|
|
\expandafter\ifx\csname uni@active@#2\endcsname\relax
|
|
\let\next\@gobblethree\else
|
|
\expandafter\ifx\csname u-#2-\number#1\endcsname\relax\else
|
|
\let\next\@gobblethree\fi\fi
|
|
\let\uc@temp@a\global
|
|
\fi
|
|
\next{#1}{#2}}
|
|
\uc@newcommand\uni@declcharopt#1#2#3{%
|
|
%\typeout{Defining: u-#2-\number#1 (\meaning\uc@temp@a)}%
|
|
\ifx\utf@viii@map\undefined\else
|
|
\expandafter\utf@viii@map\expandafter{\number#1}\fi
|
|
\expandafter\uc@temp@a\expandafter\def
|
|
\csname u-#2-\number#1\endcsname##1{#3}%\fi
|
|
\expandafter\ifx\csname u-\number#1-h/o\endcsname\relax
|
|
\expandafter\def\csname u-\number#1-h/o\endcsname{}\fi
|
|
\expandafter\uc@temp@a\expandafter\edef
|
|
\csname u-\number#1-h/o\endcsname{%
|
|
{#2}\csname u-\number#1-h/o\endcsname}%
|
|
}%
|
|
\let\unichar\uni@char
|
|
\uc@newcommand\unicodesuper#1{\textsuperscript{#1}}%
|
|
\uc@newcommand\@getcharinfo#1#2{%
|
|
\begingroup
|
|
\countdef\uc@got0\relax\uc@got#2\relax
|
|
\global\def#1{Character's name unknown}%
|
|
\def\info##1{\xdef#1{##1}}%
|
|
\uni@resetcatcodes
|
|
\ifUnicodeOptionfasterrors
|
|
\global\def#1{No further informations known % SPACE
|
|
because of option fasterrors.}\else
|
|
{\InputIfFileExists{uninames.dat}{}{%
|
|
\global\def#1{Character database uninames.dat not found. %SPACE
|
|
\MessageBreak Character \number#2 \uc@spc unknown}}}%
|
|
\fi
|
|
\toks255{}%
|
|
\def\uc@dclc##1##2##3{\ifnum##1=\uc@got
|
|
\toks255\expandafter{\the\toks255, ##2}\fi}%
|
|
\count255\uc@got\divide\count255by256\relax
|
|
%\edef\temp@a{uni-\number\count255.def}%
|
|
\InputIfFileExists{uni-\number\count255.def}{}{}%
|
|
\expandafter\ifx\expandafter\@nil\the\toks255 \@nil
|
|
\xdef#1{#1\noexpand\MessageBreak
|
|
Character is not defined in uni-*.def files}%
|
|
\else
|
|
\expandafter\expandafter\expandafter\@getcharinfo@
|
|
\expandafter\expandafter\expandafter#1%
|
|
\expandafter\expandafter\expandafter
|
|
{\expandafter#1\expandafter}\the\toks255 \@nil%
|
|
\fi
|
|
\endgroup}
|
|
\def\@getcharinfo@#1#2, #3\@nil{\gdef#1{#2\MessageBreak
|
|
Character available with following options:\MessageBreak
|
|
\uc@spc\uc@spc\uc@spc #3}}
|
|
\uc@newcommand\PrintUnicodeName#1{{%
|
|
\@getcharinfo{\ci}{#1}%
|
|
\def\MessageBreak{^^J}%
|
|
\typeout{^^J\ci^^J}}}
|
|
\uc@newcommand\UnicodeCharFilter#1{\let\unicode@charfilter=#1}
|
|
\uc@newcommand\UCSProtectionNone{%
|
|
\def\ucs@protected@unichar{}%
|
|
\UnicodeCharFilter\@firstofone}
|
|
\uc@newcommand\UCSProtectionIeC{%
|
|
\def\ucs@protected@unichar{}%
|
|
\UnicodeCharFilter\IeC}
|
|
\uc@newcommand\UCSProtectionUnichar{%
|
|
\def\ucs@protected@unichar##1{\ifx\protect\@typeset@protect}%
|
|
\UnicodeCharFilter\@firstofone}
|
|
\UCSProtectionIeC
|
|
\uc@newcommand\uni@resetcatcodes{%
|
|
\endlinechar=13\relax
|
|
\def\reserved@a##1##2{%
|
|
\@tempcnta##1\relax
|
|
\@tempcntb##2\relax
|
|
\reserved@b
|
|
}%
|
|
\def\reserved@b{%
|
|
\ifnum\@tempcnta>\@tempcntb\else
|
|
\reserved@c\@tempcnta
|
|
\advance\@tempcnta\@ne
|
|
\expandafter\reserved@b
|
|
\fi
|
|
}%
|
|
\catcode`\ =10\relax
|
|
\catcode`\#=6\relax
|
|
\catcode`\$=3\relax
|
|
\catcode`\%=14\relax
|
|
\catcode`\&=4\relax
|
|
\catcode`\\=0\relax
|
|
\catcode`\^=7\relax
|
|
\catcode`\_=8\relax
|
|
\catcode`\{=1\relax
|
|
\catcode`\}=2\relax
|
|
\catcode`\~=13\relax
|
|
\catcode`\@=11\relax
|
|
\catcode`\^^I=10\relax
|
|
\catcode`\^^J=12\relax
|
|
\catcode`\^^L=12\relax
|
|
\catcode`\^^M=5\relax
|
|
\def\reserved@c##1{\catcode##1=12\relax}%
|
|
\reserved@c{`\!}%
|
|
\reserved@c{`\"}%
|
|
\reserved@a{`\'}{`\?}%
|
|
\reserved@c{`\[}%
|
|
\reserved@c{`\]}%
|
|
\reserved@c{`\`}%
|
|
\reserved@c{`\|}%
|
|
\def\reserved@c##1{\catcode##1=11\relax}%
|
|
\reserved@a{`\A}{`\Z}%
|
|
\reserved@a{`\a}{`\z}%
|
|
\def\reserved@c##1{\catcode##1=15\relax}%
|
|
\reserved@a{0}{`\^^H}%
|
|
\reserved@c{`\^^K}%
|
|
\reserved@a{`\^^N}{31}%
|
|
\catcode"7F=15\relax
|
|
\relax}
|
|
\catcode`\!13\relax
|
|
\uc@newcommand\unicode@error@unknown{\protect\unicode@error@unknown@}%
|
|
\uc@newcommand\unicode@error@unknown@#1#2#3{%
|
|
{\expandafter\countdef\expandafter\uc@got\expandafter0%
|
|
\expandafter\relax\expandafter\uc@got\number#3\relax
|
|
\ifx\measuring@false\undefined\else\measuring@false\fi
|
|
\@getcharinfo\uc@temp@c{#3}%
|
|
\ifUnicodeOptionwarnunknown
|
|
\PackageWarning{ucs}{#2\MessageBreak\uc@temp@c.\MessageBreak
|
|
Enter I\noexpand!<RET> to define the glyph.}%
|
|
\ifx#1\@ne\unicode@invalid{#3}\fi
|
|
\else
|
|
\let!\unicode@read@definition\catcode`\!13\relax
|
|
\let\uc@read@definition\undefined
|
|
\PackageError{ucs}{#2}{\uc@temp@c.\MessageBreak
|
|
Enter I\noexpand!<RET> to define the glyph.}%
|
|
\ifx#1\@ne
|
|
\ifx\uc@read@definition\undefined\unicode@invalid{#3}%
|
|
\else\uc@read@definition\fi\fi
|
|
\fi}}
|
|
\catcode`\!12\relax
|
|
\uc@newcommand\unicode@read@definition{%
|
|
\uni@resetcatcodes
|
|
\typein[\definition]{Please enter definition for %SPACE
|
|
unicode character \number\uc@got}%
|
|
\global\let\uc@read@definition\definition
|
|
\toks255\expandafter{\definition}%
|
|
\edef\definition{\noexpand\DeclareUnicodeCharacter%
|
|
{\number\uc@got}{\the\toks255}}%
|
|
\toks255\expandafter{\definition}%
|
|
\typeout{Tip:\MessageBreak You may include\MessageBreak
|
|
\uc@spc\uc@spc\the\toks255\MessageBreak
|
|
into your document source.}%
|
|
\the\toks255\relax
|
|
}
|
|
\def\uc@firstofmany#1#2\uc@firstofmany{#1}
|
|
\ifx\AtBeginDocument\undefined\else
|
|
\AtBeginDocument{\def\uc@tempa{\@inpenc@undefined@{utf8}}%
|
|
\ifx\@inpenc@undefined\uc@tempa
|
|
\ifx\restore@utf@viii@actives\undefined
|
|
\PackageWarning{ucs}{***************************\MessageBreak You %SPACE
|
|
seem to have loaded inputencoding utf8\MessageBreak (LaTeX kernel %SPACE
|
|
UTF-8) instead of utf8x (ucs.sty UTF-8).\MessageBreak Probably you %SPACE
|
|
are compiling a document written for a\MessageBreak
|
|
pre-august-2004 ucs.sty.\MessageBreak
|
|
***************************\MessageBreak Please use %SPACE
|
|
\string\usepackage[utf8x]{inputenc} instead of\MessageBreak
|
|
\string\usepackage[utf8]{inputenc}.\MessageBreak
|
|
***************************\MessageBreak If you should really want %SPACE
|
|
to use ucs.sty and kernel's\MessageBreak utf8.def together, use %SPACE
|
|
\string\usepackage[utf8x,utf8]{inputenc}\MessageBreak to disable %SPACE
|
|
compatibility mode\MessageBreak
|
|
***************************\MessageBreak Activating compatibility %SPACE
|
|
mode.\MessageBreak ***************************\MessageBreak}%
|
|
\global\let\uc@inputencoding\inputencoding
|
|
\inputencoding{utf8x}%
|
|
\def\inputencoding#1{%
|
|
{\def\uc@tempa{#1}\def\uc@tempb{utf8}\ifx\uc@tempa\uc@tempb
|
|
\aftergroup\@firstoftwo\else\aftergroup\@secondoftwo\fi}%
|
|
{\restore@utf@viii@actives}{\uc@inputencoding{#1}}}%
|
|
\fi\fi
|
|
}\fi
|