summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/l3kernel/ltunicode.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/l3kernel/ltunicode.dtx')
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/ltunicode.dtx669
1 files changed, 0 insertions, 669 deletions
diff --git a/Master/texmf-dist/source/latex/l3kernel/ltunicode.dtx b/Master/texmf-dist/source/latex/l3kernel/ltunicode.dtx
deleted file mode 100644
index 7dd0591d4b6..00000000000
--- a/Master/texmf-dist/source/latex/l3kernel/ltunicode.dtx
+++ /dev/null
@@ -1,669 +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/01/01 v1.0 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}
-%
-% \maketitle
-%
-% This script extracts data from the Unicode Consortium files
-% \texttt{UnicodeData.txt}, \texttt{EastAsianWidth.txt} and
-% \texttt{LineBreak.txt} to be used for setting up \LaTeXe{} 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 a plain \TeX{} system with the e-\TeX{}
-% extensions enabled (\texttt{pdftex}, \texttt{xetex} or \texttt{luatex}
-% in any modern \TeX{} distribution).
-%
-% \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}{\firsttoken}
-% Standard utilities.
-% \begin{macrocode}
-\long\def\gobble#1{}
-\long\def\firsttoken#1#2\relax{#1}
-% \end{macrocode}
-% \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}
-%
-% With the mechanisms set up, open the data file for writing.
-% \begin{macrocode}
-\immediate\openout\unicodewrite=ltunicode.ltx %
-% \end{macrocode}
-% There are various lines that now need to go at the start of the file.
-% First, there is some header information.
-% \begin{macrocode}
-\verbatimcopy
-%% This is the file `ltunicode.ltx',
-%% generated using the script ltunicode.dtx.
-%%
-%% The data here are derived from the files
-%% - UnicodeData.txt
-%% which are maintained by the Unicode Consortium.
-%%
-%% Copyright 2014
-%% 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}
-% Automatically include the current date.
-% \begin{macrocode}
-\immediate\write\unicodewrite{%
- \expandafter\gobble\string\%\expandafter\gobble\string\%
- Generated on \the\year-\the\month-\the\day.
-}
-\immediate\write\unicodewrite{%
- \expandafter\gobble\string\%\expandafter\gobble\string\%
-}
-% \end{macrocode}
-%
-% \section{Unicode character data}
-%
-% \begin{macro}{\parseunicodedata}
-% \begin{macro}{\parseunicodedata@auxi}
-% \begin{macro}{\parseunicodedata@auxii}
-% \begin{macro}{\parseunicodedata@auxiii}
-% 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.
-% \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;
-}
-\def\parseunicodedata@auxii#1;#2;#3;#4;#5;#6;#7;#8\relax{%
- \parseunicodedata@auxiii{#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@auxiii#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}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\unicodeletter, \unicodenonletter}
-% \begin{macro}{\writeunicodedata}
-% 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.
-% \begin{macrocode}
-\def\unicodeletter#1#2#3{%
- \writeunicodedata\L{#1}{#2}{#3}%
-}
-% \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.
-% \begin{macrocode}
-\def\unicodenonletter#1#2#3{%
- \ifx\relax#2#3\relax
- \else
- \writeunicodedata\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.
-% \begin{macrocode}
-\def\writeunicodedata#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
- \expandafter\gobble\string\%
- }%
-}
-% \end{macrocode}
-% \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 %
- \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
- }
- \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 %
-\ifeof\unicoderead
- \errmessage{Data file missing: UnicodeData.txt}%
-\fi
-\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}
-% Lua\TeX{} and older versions of Xe\TeX{} stop here: character classes are a
-% Xe\TeX{}-only concept.
-% \begin{macrocode}
-\verbatimcopy
-\ifx\XeTeXcharclass\@undefined
- \expandafter\endinput
-\fi
-\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
- \wlog{#1}%
- \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 %
-\ifeof\unicoderead
- \errmessage{Data file missing: EastAsianWidth.txt}%
-\fi
-\loop\unless\ifeof\unicoderead
- \readline\unicoderead to \unicodedataline
- \parseunicodedata\unicodedataline
-\repeat
-% \end{macrocode}
-%
-% \begin{macro}{\parseunicodedata@auxii}
-% \begin{macro}{\parseunicodedata@auxiii}
-% \begin{macro}{\parseunicodedata@auxiv}
-% \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, |LineBreaking.txt|, uses the same format as
-% |EastAsianWidth.txt|. As such, only the final parts of the parser have to be
-% redefined.
-% \begin{macrocode}
-\def\parseunicodedata@auxii#1..#2..#3\relax#4{%
- \parseunicodedata@auxiii{#1}{#4}%
- \ifx\relax#2\relax
- \else
- \count@="#1 %
- \begingroup
- \loop
- \ifnum\count@<"#2 %
- \advance\count@\@ne
- \sethex\temp{\count@}%
- \expandafter\parseunicodedata@auxiii\expandafter{\temp}{#4}%
- \repeat
- \endgroup
- \fi
-}
-% \end{macrocode}
-% Adding data to the processed file depends on two factors: the
-% classification in the line-breaking file and (possibly) the width data
-% too. Any characters of class \texttt{ID} (ideograph) are stored: they
-% always need special treatment. For characters of classes \texttt{OP}
-% (opener), \texttt{CL} (closer), \texttt{EX} (exclamation), \texttt{IS}
-% (infix sep) and \texttt{NS} (non-starter) the data is stored if the
-% character is full, half or wide width. The same is true for
-% \texttt{CM} (combining marks) characters, which need to be transparent
-% to the mechanism.
-% \begin{macrocode}
-\def\parseunicodedata@auxiii#1#2{%
- \ifcsname #2\endcsname
- \ifnum\csname #2\endcsname=1 %
- \parseunicodedata@auxiv{#1}{#2}%
- \else
- \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 %
- \parseunicodedata@auxiv{#1}{#2}%
- \fi
- \fi
- \fi
-}
-\def\parseunicodedata@auxiv#1#2{%
- \immediate\write\unicodewrite{%
- \space\space
- \expandafter\string\csname #2\endcsname
- \space
- #1 %
- \expandafter\gobble\string\%
- }%
-}
-\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}
-%
-% 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
- \def\ID#1 {\global\XeTeXcharclass"#1=1 \global\catcode"#1=11 }
- \def\OP#1 {\global\XeTeXcharclass"#1=2 }
- \def\CL#1 {\global\XeTeXcharclass"#1=3 }
- \def\EX#1 {\global\XeTeXcharclass"#1=3 }
- \def\IS#1 {\global\XeTeXcharclass"#1=3 }
- \def\NS#1 {\global\XeTeXcharclass"#1=3 }
- \def\CM#1 {\global\XeTeXcharclass"#1=256 }
-\endverbatimcopy
-% \end{macrocode}
-%
-% Read the line breaking data and save to the output.
-% \begin{macrocode}
-\openin\unicoderead=LineBreak.txt %
-\ifeof\unicoderead
- \errmessage{Data file missing: LineBreak.txt}%
-\fi
-\loop\unless\ifeof\unicoderead
- \readline\unicoderead to \unicodedataline
- \parseunicodedata\unicodedataline
-\repeat
-% \end{macrocode}
-%
-% Set up material to be inserted between character classes. Other than
-% using \cs{hspace} here in place of \cs{hskip} this code is identical to
-% that provided by plain Xe\TeX{}.
-% \begin{macrocode}
-\verbatimcopy
-\endgroup
-\gdef\xtxHanGlue{\hspace{0pt plus 0.1em}}
-\gdef\xtxHanSpace{\hspace{0.2em plus 0.2em minus 0.1em}}
-\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} \ No newline at end of file