diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/base/ltunicode.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/base/ltunicode.dtx | 860 |
1 files changed, 0 insertions, 860 deletions
diff --git a/Master/texmf-dist/source/latex/base/ltunicode.dtx b/Master/texmf-dist/source/latex/base/ltunicode.dtx deleted file mode 100644 index 957883ccc21..00000000000 --- a/Master/texmf-dist/source/latex/base/ltunicode.dtx +++ /dev/null @@ -1,860 +0,0 @@ -% \iffalse meta-comment -% -% Copyright 2014-2015 -% The LaTeX3 Project and any individual authors listed elsewhere -% in this file. -% -% This file is part of the LaTeX base system. -% ------------------------------------------- -% -% It 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. -% The latest version of this license is in -% http://www.latex-project.org/lppl.txt -% and version 1.3c or later is part of all distributions of LaTeX -% version 2005/12/01 or later. -% -% This file has the LPPL maintenance status "maintained". -% -% The list of all files belonging to the LaTeX base distribution is -% given in the file `manifest.txt'. See also `legal.txt' for additional -% information. -% -% The list of derived (unpacked) files belonging to the distribution -% and covered by LPPL is defined by the unpacking scripts (with -% extension .ins) which are part of the distribution. -% -% ----------------------------------------------------------------------------- -% -% The same approach as used in \pkg{DocStrip}: if \cs{documentclass} -% is undefined then skip the driver, allowing the file to be used directly. -% This works as the \cs{fi} is only seen if \LaTeX{} is not in use. The odd -% \cs{jobname} business allows the extraction to work with \LaTeX{} provided -% an appropriate \texttt{.ins} file is set up. -%<*gobble> -\ifx\jobname\relax - \let\documentclass\undefined -\fi -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname documentclass\endcsname\relax -\else - \csname fi\endcsname -%</gobble> -% -%<*driver> -\ProvidesFile{ltunicode.dtx} - [2015/08/10 v1.0l LaTeX Kernel (Unicode data)] -\documentclass{ltxdoc} -\begin{document} -\DocInput{\jobname.dtx} -\end{document} -%<*gobble> -\fi -%</gobble> -%</driver> -% \fi -% -% \GetFileInfo{ltunicode.dtx} -% \title{The \texttt{ltunicode.dtx} file\thanks -% {This file has version number \fileversion, dated \filedate.}\\ -% for use with \LaTeXe} -% \author{The \LaTeX3 Project} -% -% \MaintainedByLaTeXTeam{latex} -% \maketitle -% -% This script extracts data from the Unicode Consortium files -% |UnicodeData.txt|, |EastAsianWidth.txt| and |LineBreak.txt| to be used for -% setting up \LaTeXe{} (or plain \TeX{}) with sane default settings when using -% the Xe\TeX{} and Lua\TeX{} engines. Details of the process are included in -% the code comments. -% -% To create the extracted file, run this file in a location containing -% the three input data files using \texttt{pdftex}. (The code requires -% \cs{pdfmdfivesum} and the e-\TeX{} extensions: it could be adapted for -% Lua\TeX{}). -% -% \StopEventually{} -% -% \begin{macrocode} -%<*script> -% \end{macrocode} -% -% \section{General set up} -% -% The script is designed to work with plain \TeX{} and so |@| is made into -% a `letter' using the primitive approach. -% \begin{macrocode} -\catcode`\@=11 % -% \end{macrocode} -% -% \begin{macro}{\gobble} -% \begin{macro}{\gobblethree} -% \begin{macro}{\firsttoken} -% Standard utilities. -% \begin{macrocode} -\long\def\gobble#1{} -\long\def\gobblethree#1#2#3{} -\long\def\firsttoken#1#2\relax{#1} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\storedpar} -% A simple piece of test set up: the final line of the read file will be -% tokenized by \TeX{} as \cs{par} which can be tested by \cs{ifx} provided -% we have an equivalent available. -% \begin{macrocode} -\def\storedpar{\par} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\return} -% A stored |^^M| for string comparisons. -% \begin{macrocode} -\begingroup - \catcode`\^^M=12 % - \gdef\return{^^M}% -\endgroup% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\sourceforhex} -% \begin{macro}{\sethex} -% \begin{macro}{\dohex} -% \begin{macro}{\hexdigit} -% Some parts of the code here will need to be able to convert integers -% to their hexadecimal equivalent. That is easiest to do for the requirements -% here using a modified version of some code from Appendix~D of \emph{The -% \TeX{}book}. -% \begin{macrocode} -\newcount\sourceforhex -\def\sethex#1#2{% - \def#1{}% - \sourceforhex=#2\relax - \ifnum\sourceforhex=0 % - \def#1{0}% - \else - \dohex#1% - \fi -} -\def\dohex#1{% - \begingroup - \count0=\sourceforhex - \divide\sourceforhex by 16 % - \ifnum\sourceforhex>0 % - \dohex#1% - \fi - \count2=\sourceforhex - \multiply\count2 by -16 % - \advance\count0 by\count2 - \hexdigit#1% - \expandafter\endgroup - \expandafter\def\expandafter#1\expandafter{#1}% -} -\def\hexdigit#1{% - \ifnum\count0<10 % - \edef#1{#1\number\count0}% - \else - \advance\count0 by -10 % - \edef#1{#1\ifcase\count0 A\or B\or C\or D\or E\or F\fi}% - \fi -} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\unicoderead, \unicodewrite} -% Set up the streams for data. -% \begin{macrocode} -\newread\unicoderead -\newwrite\unicodewrite -% \end{macrocode} -% \end{macro} -% -% \section{Verbatim copying} -% -% \begin{macro}{\verbatimcopy} -% \begin{macro}{\endverbatimcopy} -% \begin{macro}{\verbatimcopy@auxii} -% \begin{macro}{\verbatimcopy@auxii} -% \begin{macro}{\verbatim@endmarker} -% Set up to read some material verbatim and write it to the output stream. -% There needs to be a dedicated `clean up first line' macro, but other than -% that life is simple enough. -% \begin{macrocode} -\begingroup - \catcode`\^^M=12 % - \gdef\verbatimcopy{% - \begingroup% - \catcode`\^^M=12 % - \catcode`\\=12 % - \catcode`\{=12 % - \catcode`\}=12 % - \catcode`\#=12 % - \catcode`\%=12 % - \catcode`\ =12 % - \endlinechar=`\^^M % - \verbatimcopy@auxi - }% - \gdef\verbatimcopy@auxi#1^^M{% - \expandafter\verbatimcopy@auxii\gobble#1^^M% - }% - \gdef\verbatimcopy@auxii#1^^M{% - \def\temp{#1}% - \ifx\temp\verbatim@endmarker% - \expandafter\endgroup% - \else% - \ifx\temp\empty\else% - \immediate\write\unicodewrite{#1}% - \fi% - \expandafter\verbatimcopy@auxii% - \fi% - }% -\endgroup% -\edef\verbatim@endmarker{\expandafter\gobble\string\\} -\edef\verbatim@endmarker{\verbatim@endmarker endverbatimcopy} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \section{File header section} -% -% \changes{v1.0d}{2015/03/26}{Renamed data file to -% \texttt{unicode-letters.def}} -% With the mechanisms set up, open the data file for writing. -% \begin{macrocode} -\immediate\openout\unicodewrite=unicode-letters.def % -% \end{macrocode} -% There are various lines that now need to go at the start of the file. -% First, there is some header information. Parts of it are auto-generated, -% so there is some interspersing of verbatim and non-verbatim parts. -% \begin{macrocode} -\verbatimcopy -%% This is the file `unicode-letters.def', -%% generated using the script ltunicode.dtx. -%% -%% The data here are derived from the files -\endverbatimcopy -% \end{macrocode} -% -% \changes{v1.0b}{2015/03/25}{Include Unicode version data in generated -% file} -% \changes{v1.0c}{2015/03/25}{Include MD5 sums for sources in generated -% file} -% \changes{v1.0f}{2015/03/26}{Include dates for sources in generated -% file} -% \begin{macro}{\parseunicodedata} -% \begin{macro}{\parseunicodedata@auxi} -% \begin{macro}{\parseunicodedata@auxii} -% \begin{macro}{\mdfiveinfo} -% To ensure that there is a full audit trail for the data, we record -% both the reported file version (if available) and the checksum for each -% of the source files. This is done by reading the first line of each file -% and parsing for the version string and if found reading the second line -% for a date/time, and then `catching' the entire files inside a macro to -% work out the checksums. -% \begin{macrocode} -\def\parseunicodedata#1{% - \openin\unicoderead=#1.txt % - \ifeof\unicoderead - \errmessage{Data file missing: #1.txt}% - \fi - \immediate\write\unicodewrite{% - \expandafter\gobble\string\%\expandafter\gobble\string\% - - #1.txt - }% - \readline\unicoderead to \unicodedataline - \edef\unicodedataline{\unicodedataline\detokenize{-.txt}}% - \expandafter\parseunicodedata@auxi\unicodedataline\relax{#1}% -} -\begingroup -\catcode`\T=12 % -\catcode`\X=12 % -\lowercase{% - \endgroup - \def\parseunicodedata@auxi#1-#2.TXT#3\relax#4}% -{% - \ifx\relax#2\relax - \else - \readline\unicoderead to \unicodedataline - \expandafter\parseunicodedata@auxii\unicodedataline\relax - \fi - \closein\unicoderead - \begingroup - \everyeof{\noexpand}% - \catcode`\#=12 % - \edef\mdfiveinfo{\input#4.txt\space}% - \expandafter\endgroup - \expandafter\def\expandafter\mdfiveinfo\expandafter{\mdfiveinfo}% - \immediate\write\unicodewrite{% - \expandafter\gobble\string\%\expandafter\gobble\string\% - \space\space - \ifx\relax#2\relax - \else - Version #2 dated \temp^^J% - \expandafter\gobble\string\%\expandafter\gobble\string\% - \space\space - \fi - MD5 sum \pdfmdfivesum\expandafter{\mdfiveinfo}% - }% -} -\def\parseunicodedata@auxii#1: #2, #3 #4\relax{% - \def\temp{#2, #3}% -} -\parseunicodedata{UnicodeData} -\parseunicodedata{EastAsianWidth} -\parseunicodedata{LineBreak} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macrocode} -\verbatimcopy -%% which are maintained by the Unicode Consortium. -%% -\endverbatimcopy -% \end{macrocode} -% -% Automatically include the current date. -% \begin{macrocode} -\immediate\write\unicodewrite{% - \expandafter\gobble\string\%\expandafter\gobble\string\% - Generated on \the\year - -\ifnum\month>9 \else 0\fi \the\month - -\ifnum\day>9 \else 0\fi \the\day. -} -% \end{macrocode} -% -% Back to simple text copying -% \begin{macrocode} -\verbatimcopy -%% -%% Copyright 2014-2015 -%% The LaTeX3 Project and any individual authors listed elsewhere -%% in this file. -%% -%% This file is part of the LaTeX base system. -%% ------------------------------------------- -%% -%% It 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. -%% The latest version of this license is in -%% http://www.latex-project.org/lppl.txt -%% and version 1.3c or later is part of all distributions of LaTeX -%% version 2005/12/01 or later. -%% -%% This file has the LPPL maintenance status "maintained". -%% -%% The list of all files belonging to the LaTeX base distribution is -%% given in the file `manifest.txt'. See also `legal.txt' for additional -%% information. -\endverbatimcopy -% \end{macrocode} -% -% \section{Unicode character data} -% -% \changes{v1.0e}{2015/03/26}{Correctly parse ranges in -% \texttt{UnicodeData.txt}} -% \begin{macro}{\parseunicodedata} -% \begin{macro}{\parseunicodedata@auxi} -% \begin{macro}{\parseunicodedata@auxii} -% \begin{macro}{\parseunicodedata@auxiii} -% \begin{macro}{\parseunicodedata@auxiv} -% \begin{macro}{\parseunicodedata@auxv} -% \begin{macro}{\parseunicodedata@auxvi} -% The first step of parsing a line of data is to check that it's not come -% from a blank in the source, which will have been tokenized as \cs{par}. -% Assuming that is not the case, there are lots of data items separated by -% |;|. Of those, only a few are needed so they are picked out and everything -% else is dropped. There is one complication: there are a few cases in the -% data file of ranges which are marked by the descriptor |First| and a -% matching |Last|. A separate routine is used to handle these cases. -% \begin{macrocode} -\def\parseunicodedata#1{% - \ifx#1\storedpar - \else - \expandafter\parseunicodedata@auxi#1\relax - \fi -} -\def\parseunicodedata@auxi#1;#2;#3;#4;#5;#6;#7;#8;#9;{% - \parseunicodedata@auxii#1;#3;#2 First>\relax -} -\def\parseunicodedata@auxii#1;#2;#3 First>#4\relax{% - \ifx\relax#4\relax - \expandafter\parseunicodedata@auxiii - \else - \expandafter\parseunicodedata@auxv - \fi - #1;#2;% -} -\def\parseunicodedata@auxiii#1;#2;#3;#4;#5;#6;#7;#8\relax{% - \parseunicodedata@auxiv{#1}{#2}{#6}{#7}% -} -% \end{macrocode} -% At this stage we have only four pieces of data -% \begin{enumerate} -% \item The code value -% \item The general class -% \item The uppercase mapping -% \item The lowercase mapping -% \end{enumerate} -% where both one or both of the last two may be empty. Everything here could -% be done in a single conditional within a \cs{write}, but that would be -% tricky to follow. Instead, a series of defined auxiliaries are used to -% show the flow. Notice that combining marks are treated as letters here -% (the second `letter' test). -% \begin{macrocode} -\def\parseunicodedata@auxiv#1#2#3#4{% - \if L\firsttoken#2?\relax - \expandafter\unicodeletter - \else - \if M\firsttoken#2?\relax - \expandafter\expandafter\expandafter\unicodeletter - \else - \expandafter\expandafter\expandafter\unicodenonletter - \fi - \fi - {#1}{#3}{#4}% -} -% \end{macrocode} -% \changes{v1.0i}{2015/06/20}{Include first code point in a range in output} -% In the case where the first code point for a range was found, we -% assume the next line is the last code point (it always is). It's then -% a question of checking if the range is a set of letters or not, and if -% so going though them all and adding to the data file. -% \begin{macrocode} -\def\parseunicodedata@auxv#1;#2;#3\relax{% - \read\unicoderead to \unicodedataline - \expandafter\parseunicodedata@auxvi\unicodedataline\relax#1;#2\relax -} -\def\parseunicodedata@auxvi#1;#2\relax#3;#4\relax{% - \if L\firsttoken#4?\relax - \count@="#3 % - \begingroup - \loop - \unless\ifnum\count@>"#1 % - \sethex\temp{\count@}% - \unicodeletter\temp\temp\temp - \advance\count@\@ne - \repeat - \endgroup - \fi -} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \changes{v1.0g}{2015/03/26}{Add missing \cs{global} in definition of \cs{C}} -% \changes{v1.0j}{2015/08/05}{Compress data for caseless letters} -% \changes{v1.0j}{2015/08/05}{Save some space by dropping end-of-line -% percent chars} -% \begin{macro}{\unicodeletter, \unicodenonletter} -% \begin{macro}{\writeunicodedatafull} -% \begin{macro}{\writeunicodedatacompact} -% For `letters', we always want to write the data to file, and the only -% question here is if the character has case mappings or these point back -% to the character itself. If there are no mappings or the mappings are -% all equivalent to the same code point then use a shorter version of -% the write macro. -% \begin{macrocode} -\def\unicodeletter#1#2#3{% - \ifx\relax#2#3\relax - \writeunicodedatacompact\l{#1}% - \else - \ifnum 0% - \ifnum"#1="\ifx\relax#2\relax#1 \else#2 \fi\else1\fi - \ifnum"#1="\ifx\relax#3\relax#1 \else#3 \fi\else1\fi - >0 % - \writeunicodedatafull\L{#1}{#2}{#3}% - \else - \writeunicodedatacompact\l{#1}% - \fi - \fi -} -% \end{macrocode} -% Cased non-letters can also exist: they can be detected as they have at -% least one case mapping. Write these in much the same way as letters, -% but always with a full mapping (must be the case to require the entry -% at all). -% \begin{macrocode} -\def\unicodenonletter#1#2#3{% - \ifx\relax#2#3\relax - \else - \writeunicodedatafull\C{#1}{#2}{#3}% - \fi -} -% \end{macrocode} -% Actually write the data. In all cases both upper- and lower-case mappings -% are given, so there is a need to test that both were actually available and -% if not set up to do nothing. Cases where both mappings are no-ops will -% already have been filtered out and are written in a shorter form: this -% saves a significant amount of space in the file. -% \begin{macrocode} -\def\writeunicodedatafull#1#2#3#4{% - \immediate\write\unicodewrite{% - \space\space - \string#1\space - #2 % - \ifx\relax#3\relax - #2 % - \else - #3 % - \fi - \ifx\relax#4\relax - #2% - \else - #4% - \fi - }% -} -\def\writeunicodedatacompact#1#2{% - \immediate\write\unicodewrite{% - \space\space - \string#1\space - #2% - }% -} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% There is now a lead-in section which creates the macros which take the -% processed data and do the code assignments. Everything is done within a -% group so that there is no need to worry about names. -% \begin{macrocode} -\verbatimcopy -\begingroup -\endverbatimcopy -% \end{macrocode} -% Cased non-letters simply need to have the case mappings set. -% For letters, there are a few things to sort out. First, the case mappings are -% defined as for non-letters. Category code is then set to $11$ before a check -% to see if this is an upper case letter. If it is then the \cs{sfcode} is set -% to $999$. Finally there is a need to deal with Unicode math codes, where base -% plane letters are class $7$ but supplementary plane letters are class~$1$. -% Older versions of Xe\TeX{} used a different name here: easy to pick up as -% we know that this primitive must be defined in some way. There is also an issue -% with the supplementary plane and older Xe\TeX{} versions, which is dealt with -% using a check at run time. -% \begin{macrocode} -\verbatimcopy - \def\C#1 #2 #3 {% - \XeTeXcheck{#1}% - \global\uccode"#1="#2 % - \global\lccode"#1="#3 % - } - \def\L#1 #2 #3 {% - \C #1 #2 #3 % - \global\catcode"#1=11 % - \ifnum"#1="#3 % - \else - \global\sfcode"#1=999 % - \fi - \ifnum"#1<"10000 % - \global\Umathcode"#1="7"01"#1 % - \else - \global\Umathcode"#1="0"01"#1 % - \fi - } - \def\l#1 {\L#1 #1 #1 } - \ifx\Umathcode\undefined - \let\Umathcode\XeTeXmathcode - \fi - \def\XeTeXcheck#1{} - \ifx\XeTeXversion\undefined - \else - \def\XeTeXcheck.#1.#2-#3\relax{#1} - \ifnum\expandafter\XeTeXcheck\XeTeXrevision.-\relax>996 % - \def\XeTeXcheck#1{} - \else - \def\XeTeXcheck#1{% - \ifnum"#1>"FFFF % - \long\def\XeTeXcheck##1\endgroup{\endgroup} - \expandafter\XeTeXcheck - \fi - } - \fi - \fi -\endverbatimcopy -% \end{macrocode} -% Read the data and write the resulting code assignments to the file. -% \begin{macrocode} -\openin\unicoderead=UnicodeData.txt % -\loop\unless\ifeof\unicoderead - \read\unicoderead to \unicodedataline - \parseunicodedata\unicodedataline -\repeat -% \end{macrocode} -% End the group for setting character codes and assign a couple of special -% cases. -% \begin{macrocode} -\verbatimcopy -\endgroup -\global\sfcode"2019=0 % -\global\sfcode"201D=0 % -\endverbatimcopy -% \end{macrocode} -% -% \section{Xe\TeX{} Character classes} -% -% The Xe\TeX{} engine includes the concept of character classes, which allow -% insertion of tokens into the input stream at defined boundaries. Setting -% up this data requires a two-part process as the information is split over -% two input files. -% -% \begin{macro}{\parseunicodedata} -% \begin{macro}{\parseunicodedata@auxi} -% \begin{macro}{\parseunicodedata@auxii} -% The parsing system is redefined to parse a detokenized input line which -% may be a comment starting with |#|. Assuming that is not the case, the -% data line with start with a code point potentially forming part of a range. -% The range is extracted and the width stored for each code point. -% \begin{macrocode} -\def\parseunicodedata#1{% - \ifx#1\return - \else - \if\expandafter\gobble\string\#\expandafter\firsttoken#1?\relax - \else - \expandafter\parseunicodedata@auxi#1\relax - \fi - \fi -} -\def\parseunicodedata@auxi#1;#2 #3\relax{% - \parseunicodedata@auxii#1....\relax{#2}% -} -\def\parseunicodedata@auxii#1..#2..#3\relax#4{% - \expandafter\gdef\csname EAW@#1\endcsname{#4}% - \ifx\relax#2\relax - \else - \count@="#1 % - \begingroup - \loop - \ifnum\count@<"#2 % - \advance\count@\@ne - \sethex\temp{\count@}% - \expandafter\gdef\csname EAW@\temp\endcsname{#4}% - \repeat - \endgroup - \fi -} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% With the right parser in place, read the data file. -% \begin{macrocode} -\openin\unicoderead=EastAsianWidth.txt % -\loop\unless\ifeof\unicoderead - \readline\unicoderead to \unicodedataline - \parseunicodedata\unicodedataline -\repeat -% \end{macrocode} -% -% \changes{v1.0j}{2015/08/05}{Compress East Asian width data by recording -% ranges for code points of type \texttt{ID}} -% \begin{macro}{\parseunicodedata@auxii} -% \begin{macro}{\parseunicodedata@auxiii} -% \begin{macro}{\parseunicodedata@auxiv} -% \begin{macro}{\parseunicodedata@auxv} -% \begin{macro}{\ID} -% \begin{macro}{\OP} -% \begin{macro}{\CL} -% \begin{macro}{\EX} -% \begin{macro}{\IS} -% \begin{macro}{\NS} -% \begin{macro}{\CM} -% The final file to read, |LineBreak.txt|, uses the same format as\\ -% |EastAsianWidth.txt|. As such, only the final parts of the parser have to be -% redefined. The first stage here is to check if the line breaking class -% is known, and if so if it is equal to |ID| (class one). -% \begin{macrocode} -\def\parseunicodedata@auxii#1..#2..#3\relax#4{% - \ifcsname #4\endcsname - \ifnum\csname #4\endcsname=\@ne - \expandafter\expandafter\expandafter\parseunicodedata@auxiii - \else - \expandafter\expandafter\expandafter\parseunicodedata@auxiv - \fi - \else - \expandafter\gobblethree - \fi - {#1}{#2}{#4}% -} -% \end{macrocode} -% For ranges of class \texttt{ID}, the entire range is written to the data -% file as a single block: no need to check on the width data. -% \begin{macrocode} -\def\parseunicodedata@auxiii#1#2#3{% - \immediate\write\unicodewrite{% - \space\space - \expandafter\string\csname #3\endcsname - \space - #1 \ifx\relax#2\relax#1\else#2\fi - }% -} -% \end{macrocode} -% For other cases, loop over each code point separately. If the -% code point is of width |F|, |H| or |W| then the line breaking -% property is written to the data file. The earlier check means that -% this only happens for characters of classes \texttt{OP} (opener), -% \texttt{CL} (closer), \texttt{EX} (exclamation), \texttt{IS} (infix sep), -% \texttt{NS} (non-starter) and \texttt{CM} (combining marks) characters -% (the latter need to be transparent to the mechanism). -% \begin{macrocode} -\def\parseunicodedata@auxiv#1#2#3{% - \parseunicodedata@auxv{#1}{#3}% - \ifx\relax#2\relax - \else - \count@="#1 % - \begingroup - \loop - \ifnum\count@<"#2 % - \advance\count@\@ne - \sethex\temp{\count@}% - \expandafter\parseunicodedata@auxv\expandafter{\temp}{#3}% - \repeat - \endgroup - \fi -} -\def\parseunicodedata@auxv#1#2{% - \ifnum 0% - \if F\csname EAW@#1\endcsname 1\fi - \if H\csname EAW@#1\endcsname 1\fi - \if W\csname EAW@#1\endcsname 1\fi - >0 % - \immediate\write\unicodewrite{% - \space\space - \expandafter\string\csname #2\endcsname - \space - #1% - }% - \fi -} -% \end{macrocode} -% The East Asian width class mappings. -% \begin{macrocode} -\def\ID{1} -\def\OP{2} -\def\CL{3} -\let\EX\CL -\let\IS\CL -\let\NS\CL -\def\CM{256} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \changes{v1.0h}{2015/05/11}{Apply category codes to East Asian -% chars in all cases} -% \changes{v1.0j}{2015/08/05}{Move the stop point for Lua\TeX{}} -% \changes{v1.0j}{2015/08/05}{Only set \cs{XeTeXcharclass} from -% East Asian char data} -% \changes{v1.0k}{2015/08/06}{Add missing \cs{endgroup}} -% \changes{v1.0l}{2015/08/10}{Add missing \cs{endgroup}} -% Before actually reading the line breaking data file, the appropriate -% temporary code is added to the output. As described above, only a limited -% number of classes need to be covered: they are hard-coded as classes -% $1$, $2$ and $3$ following the convention adopted by plain Xe\TeX{}. -% \begin{macrocode} -\verbatimcopy -\begingroup - \ifx\XeTeXchartoks\XeTeXcharclass - \endgroup\expandafter\endinput - \else - \def\setclass#1#2#3{% - \ifnum#1>#2 % - \expandafter\gobble - \else - \expandafter\firstofone - \fi - {% - \global\XeTeXcharclass#1=#3 % - \expandafter\setclass\expandafter - {\number\numexpr#1+1\relax}{#2}{#3}% - }% - }% - \def\gobble#1{} - \def\firstofone#1{#1} - \def\ID#1 #2 {\setclass{"#1}{"#2}{1}} - \def\OP#1 {\setclass{"#1}{"#1}{2}} - \def\CL#1 {\setclass{"#1}{"#1}{3}} - \def\EX#1 {\setclass{"#1}{"#1}{3}} - \def\IS#1 {\setclass{"#1}{"#1}{3}} - \def\NS#1 {\setclass{"#1}{"#1}{3}} - \def\CM#1 {\setclass{"#1}{"#1}{256}} - \fi -\endverbatimcopy -% \end{macrocode} -% -% Read the line breaking data and save to the output. -% \begin{macrocode} -\openin\unicoderead=LineBreak.txt % -\loop\unless\ifeof\unicoderead - \readline\unicoderead to \unicodedataline - \parseunicodedata\unicodedataline -\repeat -% \end{macrocode} -% -% \changes{v1.0a}{2015/03/25}{Use \cs{hskip} rather than \cs{hspace} -% in glue settings} -% Set up material to be inserted between character classes. -% that provided by plain Xe\TeX{}. Using \cs{hskip} here means the code will -% work with plain as well as \LaTeXe{}. -% \begin{macrocode} -\verbatimcopy -\endgroup -\gdef\xtxHanGlue{\hskip0pt plus 0.1em\relax} -\gdef\xtxHanSpace{\hskip0.2em plus 0.2em minus 0.1em\relax} -\global\XeTeXinterchartoks 0 1 = {\xtxHanSpace} -\global\XeTeXinterchartoks 0 2 = {\xtxHanSpace} -\global\XeTeXinterchartoks 0 3 = {\nobreak\xtxHanSpace} -\global\XeTeXinterchartoks 1 0 = {\xtxHanSpace} -\global\XeTeXinterchartoks 2 0 = {\nobreak\xtxHanSpace} -\global\XeTeXinterchartoks 3 0 = {\xtxHanSpace} -\global\XeTeXinterchartoks 1 1 = {\xtxHanGlue} -\global\XeTeXinterchartoks 1 2 = {\xtxHanGlue} -\global\XeTeXinterchartoks 1 3 = {\nobreak\xtxHanGlue} -\global\XeTeXinterchartoks 2 1 = {\nobreak\xtxHanGlue} -\global\XeTeXinterchartoks 2 2 = {\nobreak\xtxHanGlue} -\global\XeTeXinterchartoks 2 3 = {\xtxHanGlue} -\global\XeTeXinterchartoks 3 1 = {\xtxHanGlue} -\global\XeTeXinterchartoks 3 2 = {\xtxHanGlue} -\global\XeTeXinterchartoks 3 3 = {\nobreak\xtxHanGlue} -\endverbatimcopy -% \end{macrocode} -% -% Done: end the script. -% \begin{macrocode} -\bye -% \end{macrocode} -% -% \begin{macrocode} -%</script> -% \end{macrocode} |