% \iffalse meta-comment
%
% Copyright (C) 1999 National Electronics and Computer Technology Center
% (NECTEC), Thailand.  All rights reserved.
% 
% It may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
% 
% This work has the LPPL maintenance status "maintained".
% 
% The Current Maintainer of this work is Theppitak Karoonboonyanan.
% 
% This work consists of the files thai.dtx and thai.ins
% and the derived file thai.ldf.
% 
% \fi
% \CheckSum{272}
% \iffalse
%    Tell the \LaTeX\ system who we are and write an entry on the
%    transcript.
%<*dtx>
\ProvidesFile{thai.dtx}
%</dtx>
%<code>\ProvidesLanguage{thai}
%\fi
%\ProvidesFile{thai.dtx}
        [2013/03/31 v1.8 Thai support from the babel system]
%\iffalse
%% File `thai.dtx'
%% Thai Language Definition File
%% Copyright (C) 1999 - 2013
%%           by Surapant Meknavin,
%%              Theppitak Karoonboonyanan (thep at linux.thai.net),
%%              Chanop Silpa-Anan (chanop at debian.org),
%%              Poonlap Veerathanabutr (poonlap at linux.thai.net)
%%              Thai Linux Working Group
%%              http://linux.thai.net/
%%
%% Please report errors to: Theppitak Karoonboonyanan
%%                          (thep at linux.thai.net)
%%
%%   This file is part of the babel system, it provides the source
%%   code for the Thai language definition file.  The original version
%%   was written by Surapant Meknavin.
%%
%%   It is currently maintained by Theppitak Karoonboonyanan 
%%   (thep at linux.thai.net), Chanop Silpa-Anan (chanop at debian.org)
%%   and Poonlap Veerathanabutr (poonlap at linux.thai.net).
%
%<*filedriver>
\documentclass{ltxdoc}
\newcommand*\TeXhax{\TeX hax}
\newcommand*\babel{\textsf{babel}}
\newcommand*\langvar{$\langle \it lang \rangle$}
\newcommand*\note[1]{}
\newcommand*\Lopt[1]{\textsf{#1}}
\newcommand*\file[1]{\texttt{#1}}
\begin{document}
 \DocInput{thai.dtx}
\end{document}
%</filedriver>
%\fi
% \GetFileInfo{thai.dtx}
%
% \changes{thai-1.0d}{2000/05/09}{Theppitak Karoonboonyanan:
%    Encoding changed from TIS to LTH, according to TeX convention.
%    Let `norasi' be Thai roman font, `dbttx' Thai sans serif.
%    Correct some Thai translations.}
% \changes{thai-1.0d}{2001/12/04}{Theppitak Karoonboonyanan:
%    Add checks for \cs{thechapter} existence before redefining
%    digits as Thai.
%    Move thaitoday definitions into thainumber and remove
%    thainumber option.
%    Use \cs{ifcase} instead of nested \cs{if} in \cs{thaitranslate}.
%    Fix wrong encoding in heading for book style (as suggested by Chanop).}
% \changes{thai-1.0d}{2001/12/04}{Chanop Silpa-Anan:
%    Add thainumber and thaitoday option}
% \changes{thai-1.0d}{2002/01/16}{Theppitak Karoonboonyanan:
%    Fix extra spaces appearing in \cs{selectlanguage\{thai\}}
%    (as suggested by C. Visavakul)}
% \changes{thai-1.0d}{2003/01/07}{Poonlap Veerathanabutr:
%    Change `dbttx' to `dbtt'}
% \changes{thai-1.0d}{2003/02/26}{Theppitak Karoonboonyanan:
%    Run Thai number in part, subsubsection, paragraph,
%    subparagraph also}
% \changes{thai-1.0d}{2003/06/02}{Chanop Silpa-Anan:
%    Use `garuda' for default Thai sans serif since
%    `dbtt' is still slightly buggy}
% \changes{thai-1.0d}{2003/08/10}{Theppitak Karoonboonyanan:
%    Fix translation of \cs{prefacename}.
%    Redefine \cs{frontmatter} and \cs{mainmatter} for book class
%    so thainumber option applies to the page numbering styles.
%    (Experimental:) Add initialization of Thai character codes
%    to fix the \cs{MakeUppercase} and \cs{MakeLowercase} problem
%    also comment out the old workarounds.}
% \changes{thai-1.0d}{2004/02/02}{Poonlap Veerathanabutr:
%    Fix \cs{lccode} and \cs{uccode}}
% \changes{thai-1.0d}{2004/02/28}{Theppitak Karoonboonyanan:
%    Always use Thai alphabets for appendix (as suggested by K. chakkree01)}
% \changes{thai-1.0d}{2004/03/04}{Theppitak Karoonboonyanan:
%    Use `pmono' as default Thai ttfamily}
% \changes{thai-1.0d}{2004/03/06}{Theppitak Karoonboonyanan:
%    Use `garuda' instead of `dbtt' as default Thai sffamily}
% \changes{thai-1.0d}{2004/03/18}{Theppitak Karoonboonyanan:
%    Move \cs{frontmatter} and \cs{mainmatter} redefinition back under 
%    `thainumber' option (wrongly moved along with previous 
%    appendix fix)}
% \changes{thai-1.0d}{2004/04/08}{Theppitak Karoonboonyanan:
%    Borrow code from previous encoding fix to inhibit capitalizing 
%    chapters \& sections in book headers. (proposed by P'Joy)}
% \changes{thai-1.0d}{2004/11/15}{Theppitak Karoonboonyanan:
%    `pmono' is now `ttype'}
% \changes{thai-1.1}{2006/07/05}{Theppitak Karoonboonyanan:
%    Create `thai.dtx' for documenting and generating `thai.ldf'.
%    Remove unnecessary workarounds for inhibition of capitalization
%    of headers, as the catcodes already do the job.
%    Also remove the mysterious redefinitions of figure and table counters.}
% \changes{thai-1.2}{2009/07/27}{Theppitak Karoonboonyanan:
%    Re-encode Thai messages with unicode symbolic names, instead of explicit
%    TIS-620 bytes.  Adjust documentation to cover UTF-8 support.  Make
%    \cs{ttypist} the default typewriter font instead of \cs{ttype}.
%    Drop the obsolete \cs{\backslash{}thai} command.}
% \changes{thai-1.3}{2011/03/17}{Theppitak Karoonboonyanan:
%    Add \cs{\backslash{}textpali} macro for typesetting Pali text with
%    descender-less Yo Ying and Tho Than.  Update translation for 
%    \cs{\backslash{}refname}}
% \changes{thai-1.4}{2011/10/18}{Theppitak Karoonboonyanan:
%    Remove font-specific macros}
% \changes{thai-1.4a}{2011/11/23}{Theppitak Karoonboonyanan:
%    Revise documentation}
% \changes{thai-1.4b}{2011/12/16}{Theppitak Karoonboonyanan:
%    Remove extra space in \cs{\backslash{}wbr}.  Word spacing is considered
%    suboptimal.}
% \changes{thai-1.4c}{2011/12/19}{Theppitak Karoonboonyanan:
%    Revise documentation}
% \changes{thai-1.4d}{2012/02/10}{Theppitak Karoonboonyanan:
%    Revise documentation.  Add documentation for Thai line stretching.}
% \changes{thai-1.5}{2013/01/29}{Theppitak Karoonboonyanan:
%    Add space stretching support.}
% \changes{thai-1.6}{2013/03/12}{Theppitak Karoonboonyanan:
%    Fix crash on \cs{\backslash{}renewcommand} when \cs{thainumber} option
%    is used with section-less document classes, such as letter.}
% \changes{thai-1.7}{2013/03/13}{Theppitak Karoonboonyanan:
%    Limit the scope of emergency stretch within Thai language by using
%    \cs{\backslash{}extrasthai} and \cs{\backslash{}noextrasthai}.}
% \changes{thai-1.8}{2013/03/31}{Pruet Boonma:
%    Add \Lopt{thaiindentfirst} option to force indentation on section's
%    first paragraph.}
%
%    \section{The Thai language}
%
%    The file \file{\filename}\footnote{The file described in this section has 
%    version number \fileversion\ and was last revised on \filedate.  The
%    original author was Surapant Meknavin, and it was composed into
%    \file{\filename} and maintained by Theppitak Karoonboonyanan
%    (\texttt{thep@linux.thai.net}).} 
%    defines language-specific macros for Thai language.
%
%    \subsection{Input encoding}
%
%    Thai documents supported by this language definition can be encoded in
%    either TIS-620 (ISO/IEC 8859-11) or UTF-8 with the aids of the
%    \texttt{inputenc} package.
%
%    \DescribeMacro{\thaitext}
%    \DescribeMacro{\latintext}
%      The commands |\thaitext| and |\latintext| can be used to switch to Thai
%      or Latin fonts.  These are declarations.
%
%    \DescribeMacro{\textthai}
%    \DescribeMacro{\textlatin}
%      The commands |\textthai| and |\textlatin| both take one text argument
%      which is then typeset using the requested language settings.
%
%    \DescribeMacro{\textpali}
%      The command |\textpali| takes one text argument which is then typeset
%      using Thai font, with special shapes for certain characters, such as
%      descender-less Yo Ying and Tho Than, as required by usual Pali-Sanskrit
%      transliteration.
%
%    \subsection{Word breaks}
%
%    Thai is written continuously without word delimitors.  The word boundary 
%    analysis is considered too complicated for rule-based approaches. 
%    Most available good-quality word analysis tools employ special matching
%    algorithms against pre-defined dictionaries.  Some even use
%    statistics-based contextual analysis to resolve ambiguities.  Therefore,
%    no good hyphenation pattern is found to be comparable with those tools
%    yet.  
%
%    \DescribeMacro{\wbr}
%      What provided here for the word boundary problem is the |\wbr| command
%      for separating words.  It delimits words without taking physical space,
%      so that the \TeX\ typesetter still wraps lines at word boundary like
%      when it typesets English text.
%
%    Therefore, one can preprocess their Thai document using Thai word analysis
%    tools which automatically insert the |\wbr| commands between words, such
%    as:
%      \begin{itemize}
%      \item \emph{cttex} by Vuthichai Ampornaramveth
%      \item \emph{swath} by Phaisarn Charoenpornsawat, now maintained by Thai 
%            Linux Working Group, which can be downloaded from:\\
%            \texttt{ftp://linux.thai.net/pub/thailinux/software/swath}
%
%            To compile \emph{swath}, you need \emph{libdatrie} as the
%            dependency, which is provided under the \emph{libthai} project:\\
%            \texttt{ftp://linux.thai.net/pub/thailinux/software/libthai}
%      \end{itemize}
%
%    \subsection{Thai paragraph}
%    \label{thai-paragraph}
%    Generally speaking, Thai paragraph uses the same rule as in English.
%    However, there are some differences, such as how to start the paragraph
%    in a new chapter or section.
%
%    \DescribeEnv{thaiindentfirst}
%    As suggested by English writing guideline, the first paragraph in each 
%    section shall not be indented.  However, for Thai language, indenting the
%    first paragraph is more popular and widely suggested.  The option 
%    \Lopt{thaiindentfirst} can be used to control this behavior.
%
%    \subsection{Thai numbering}
%    \label{thai-numbering}
%
%    Some certain Thai documents use Thai digits instead of Arabic.
%    And Thai alphabetic numbering is also commonly used for appendices.
%    This file provides a number of numbering styles that can be applied 
%    to \LaTeX\ |\pagenumbering| command:
%
%      \begin{itemize}
%      \item |\thainum| for plain Thai digits
%      \item |\thaibracenum| for Thai digits in parentheses
%      \item |\thaialph| for Thai alphabetic numbering, using a reduced set
%            (with three alphabets skipped: Kho Khuat, Kho Khon and Kho Rakhang)
%      \item |\thaiAlph| for Thai alphabetic numbering, using the full set
%            (with full alphabet set, plus two semi-vowels, Ru and Lu, in the
%            order defined in Thai official dictionary)
%      \end{itemize}
%
%    \DescribeEnv{thainumber}
%      The above numbering styles can be automatically chosen using the 
%      \Lopt{thainumber} option.  When this option is supplied to the \babel{}
%      package, Thai numberings will be applied to pages, sections,
%      enumerations, dates, etc.
%
% \StopEventually{}
%
%    \subsection{Thai language definition}
%
%    The macro |\LdfInit| takes care of preventing file from being
%    loaded more than once, checking the category code of the
%    \texttt{@} sign, etc.
%    \begin{macrocode}
%<*code>
\LdfInit\CurrentOption{captions\CurrentOption}
%    \end{macrocode}
%
%    When this file is read as an option, i.e. by the |\usepackage{babel}|
%    command, \texttt{thai} will be an `unknown' language, in which
%    case we have to make it known.  So, we check for the existence of
%    |\l@thai| to see whether we have to do something here.
%
%    \begin{macrocode}
\ifx\l@thai\@undefined
  \@nopatterns{thai}
  \adddialect\l@thai0\fi
%    \end{macrocode}
%
%    \subsubsection{Thai character encoding}
%
%    In this language definition, we support TIS-620, the national standard 
%    8-bit character encoding, and Unicode by means of \texttt{inputenc} 
%    package.
%
%    The encoding has been described in terms of TIS-620 as \texttt{LTH} in 
%    the \file{lthenc.def} file.  So, we require it.
%
%    \begin{macrocode}
\InputIfFileExists{lthenc.def}%
  {\message{Loading the definitions for the Thai font encoding}}%
  {%
    \errhelp{I can't find the lthenc.def file for the Thai fonts}%
    \errmessage{Since I do not know what the LTH encoding means^^J
      I can't typeset Thai.^^J
      I stop here, while you get a suitable lthenc.def file}\@@end
  }
%    \end{macrocode}
%
%    The next step consists of defining commands to switch to the Thai
%    language, for users to switch back and forth between languages.
%
% \begin{macro}{\thaitext}
%    We define |\thaitext| as a declarative switch to Thai font encoding.
%    \begin{macrocode}
\DeclareRobustCommand{\thaitext}{%
  \fontencoding{LTH}\selectfont%
  \def\encodingdefault{LTH}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\textthai}
%    This command takes one text argument which is then typeset using Thai font 
%    encoding.
%    \begin{macrocode}
\DeclareRobustCommand{\textthai}[1]{{\thaitext #1}}
%    \end{macrocode}
% \end{macro}
%
%    \subsubsection{Pali-Sanskrit Transliteration}
%
%    Thai script can also be used for writing Pali and Sanskrit.  Additional
%    conventions are applied when doing so: (a) Yo Ying and Tho Than must be
%    written without descender; (b) Phinthu is used for marking cluster;
%    (c) Nikhahit is used as a Pali-Sanskrit consonant.  
%
%    (b) is inherently applicable as combining character.  So is (c), with
%    an exception for the case in which it is combined over upper vowel
%    (namely, Sara I), where it must be shifted to higher position.  Nikhahit
%    shifting is implemented in the ligkern rules with the extra glyph
%    provision in the fonts.
%
%    What is left here is (a).  Yo Ying and Tho Than must be converted to
%    their descender-less variants.  The |\textpali| macro is defined
%    for this purpose.  Note that |\wbr| commands which are normally inserted
%    by automatic tools are ignored here, as most of such tools are not
%    designed for Pali/Sanskrit.  Besides, Pali/Sanskrit is already space
%    delimited.
%
% \begin{macro}{\textpali}
%    This command converts all Yo Ying and Tho Than in its argument to
%    their descender-less variations.
%    \begin{macrocode}
\DeclareRobustCommand{\textpali}[1]{%
  \begingroup
    \def\thaiYoYing{\textYoYingPali{}}%
    \def\thaiThoThan{\textThoThanPali{}}%
    \def\wbr{}%
    \scantokens\expandafter{#1}\relax
  \endgroup
}
%    \end{macrocode}
% \end{macro}
%
%    \subsubsection{Hyphenation}
%
%    We define |\thaihyphenmins| macro for hyphenation parameters.  This is 
%    one of the five macros required by \babel{}.
%
% \begin{macro}{\thaihyphenmins}
%    This macro is used to store the correct values of the hyphenation
%    parameters |\lefthyphenmin| and |\righthyphenmin|.  They are set to 11.
% \changes{thai-1.1}{2006/07/02}{Theppitak Karoonboonyanan:
%    Now use \cs{providehyphenmins} to provide a default value}
%    \begin{macrocode}
\providehyphenmins{thai}{11}
%    \end{macrocode}
% \end{macro}
%
%    \subsubsection{Captions translation}
%
%    We define |\captionsthai| macro for translations of strings.  This is 
%    one of the five macros required by \babel{}.
%
% \begin{macro}{\captionsthai}
%    The macro |\captionsthai| defines all strings used in the four
%    standard documentclasses provided with \LaTeX.
%    \begin{macrocode}
\addto\captionsthai{%
  \def\prefacename{\thaiKhoKhwai\thaiSaraAm\thaiNoNu\thaiSaraAm}%
  \def\refname{\thaiSaraE\thaiOAng\thaiKoKai\thaiSoSua\thaiSaraAa\thaiRoRua%
               \thaiOAng\thaiMaiTho\thaiSaraAa\thaiNgoNgu%
               \thaiOAng\thaiSaraI\thaiNgoNgu}%
  \def\abstractname{\thaiBoBaimai\thaiThoThahan%
                    \thaiKhoKhwai\thaiMaiHanakat\thaiDoDek%
                    \thaiYoYak\thaiMaiEk\thaiOAng}%
  \def\bibname{\thaiBoBaimai\thaiRoRua\thaiRoRua\thaiNoNen\thaiSaraAa%
               \thaiNoNu\thaiSaraU\thaiKoKai\thaiRoRua\thaiMoMa}%
  \def\chaptername{\thaiBoBaimai\thaiThoThahan%
                   \thaiThoThahan\thaiSaraIi\thaiMaiEk}%
  \def\appendixname{\thaiPhoSamphao\thaiSaraAa\thaiKhoKhwai%
                    \thaiPhoPhung\thaiNoNu\thaiWoWaen\thaiKoKai}%
  \def\contentsname{\thaiSoSua\thaiSaraAa\thaiRoRua%
                    \thaiBoBaimai\thaiMaiHanakat\thaiYoYing}%
  \def\listfigurename{\thaiSoSua\thaiSaraAa\thaiRoRua%
                      \thaiBoBaimai\thaiMaiHanakat\thaiYoYing%
                      \thaiRoRua\thaiSaraUu\thaiPoPla}%
  \def\listtablename{\thaiSoSua\thaiSaraAa\thaiRoRua%
                     \thaiBoBaimai\thaiMaiHanakat\thaiYoYing%
                     \thaiToTao\thaiSaraAa\thaiRoRua\thaiSaraAa\thaiNgoNgu}%
  \def\indexname{\thaiDoDek\thaiRoRua\thaiRoRua\thaiChoChang%
                 \thaiNoNu\thaiSaraIi}%
  \def\figurename{\thaiRoRua\thaiSaraUu\thaiPoPla%
                  \thaiThoThahan\thaiSaraIi\thaiMaiEk}%
  \def\tablename{\thaiToTao\thaiSaraAa\thaiRoRua\thaiSaraAa\thaiNgoNgu%
                 \thaiThoThahan\thaiSaraIi\thaiMaiEk}%
  \def\partname{\thaiPhoSamphao\thaiSaraAa\thaiKhoKhwai}%
  \def\enclname{\thaiSoSua\thaiSaraI\thaiMaiEk\thaiNgoNgu%
                \thaiThoThahan\thaiSaraIi\thaiMaiEk%
                \thaiSaraAe\thaiNoNu\thaiBoBaimai%
                \thaiMoMa\thaiSaraAa%
                \thaiDoDek\thaiMaiTho\thaiWoWaen\thaiYoYak}%
  \def\ccname{\thaiSoSua\thaiSaraAm\thaiSaraE\thaiNoNu\thaiSaraAa%
              \thaiThoThung\thaiSaraUe\thaiNgoNgu}%
  \def\headtoname{\thaiSaraE\thaiRoRua\thaiSaraIi\thaiYoYak\thaiNoNu}%
  \def\pagename{\thaiHoHip\thaiNoNu\thaiMaiTho\thaiSaraAa}%
  \def\seename{\thaiDoDek\thaiSaraUu}%
  \def\alsoname{\thaiDoDek\thaiSaraUu%
                \thaiSaraE\thaiPhoPhan\thaiSaraI\thaiMaiEk\thaiMoMa%
                \thaiSaraE\thaiToTao\thaiSaraI\thaiMoMa}%
  \def\proofname{\thaiPhoPhan\thaiSaraI%
                 \thaiSoSua\thaiSaraUu\thaiChoChan\thaiNoNu\thaiThanthakhat}%
  }
%    \end{macrocode}
% \end{macro}
%
%    \subsubsection{Date}
%
%    Here we define |\datethai| macro for Thai date format.  This is 
%    one of the five macros required by \babel{}.
%
%    First, let's define the months in Thai.
%
%    \begin{macrocode}
\def\th@month{%
  \ifcase\month\or
    \thaiMoMa\thaiKoKai\thaiRoRua\thaiSaraAa\thaiKhoKhwai\thaiMoMa \or 
    \thaiKoKai\thaiSaraU\thaiMoMa\thaiPhoSamphao\thaiSaraAa%
      \thaiPhoPhan\thaiMaiHanakat\thaiNoNu\thaiThoThong\thaiThanthakhat \or 
    \thaiMoMa\thaiSaraIi\thaiNoNu\thaiSaraAa\thaiKhoKhwai\thaiMoMa \or 
    \thaiSaraE\thaiMoMa\thaiSoRusi\thaiSaraAa\thaiYoYak\thaiNoNu \or 
    \thaiPhoPhan\thaiRu\thaiSoRusi\thaiPhoSamphao\thaiSaraAa%
      \thaiKhoKhwai\thaiMoMa \or 
    \thaiMoMa\thaiSaraI\thaiThoThung\thaiSaraU\thaiNoNu\thaiSaraAa%
      \thaiYoYak\thaiNoNu \or 
    \thaiKoKai\thaiRoRua\thaiKoKai\thaiDoChada\thaiSaraAa%
      \thaiKhoKhwai\thaiMoMa \or 
    \thaiSoSua\thaiSaraI\thaiNgoNgu\thaiHoHip\thaiSaraAa%
      \thaiKhoKhwai\thaiMoMa \or 
    \thaiKoKai\thaiMaiHanakat\thaiNoNu\thaiYoYak\thaiSaraAa%
      \thaiYoYak\thaiNoNu \or 
    \thaiToTao\thaiSaraU\thaiLoLing\thaiSaraAa\thaiKhoKhwai\thaiMoMa \or 
    \thaiPhoPhan\thaiRu\thaiSoSala\thaiChoChan\thaiSaraI\thaiKoKai\thaiSaraAa%
      \thaiYoYak\thaiNoNu \or 
    \thaiThoThong\thaiMaiHanakat\thaiNoNu\thaiWoWaen\thaiSaraAa%
      \thaiKhoKhwai\thaiMoMa
  \fi}
%    \end{macrocode}
%
%    Thai official calendar uses Buddhist Era, the era whose start is marked 
%    by Buddha's entry into Parinirvana.  In original form, it is a lunar 
%    calendar.  But in Thai contemporary calendar, it is synchronized to 
%    Gregorian calendar, with offset of 543 years back.
%
%    \begin{macrocode}
\newcount\th@year
\th@year=\year
\advance\th@year by 543
%    \end{macrocode}
%
%    Then, we come to the |\datethai| macro.
%
% \begin{macro}{\datethai}
%    Thai date format is in the day-month-year order, using Buddhist Era.
%    \begin{macrocode}
\def\datethai{%
  \def\today{\number\day \space \th@month\space %
             \thaiPhoPhan.\thaiSoSala.~\number\th@year}}
%    \end{macrocode}
% \end{macro}
%
%    \subsubsection{Extra definitions for language switching}
%
%    Then, the last two macros required by \babel{} are |\extrasthai| and 
%    |\noextrasthai| containing extra definitions needed for Thai language 
%    upon switching to and out of it, respectively.
%
%    \begin{macrocode}
\addto\extrasthai{\thaitext}
\addto\noextrasthai{\latintext}
%    \end{macrocode}
%
%    \subsection{Word break support}
%
%    As Thai script is written continuously without word delimitors, we define 
%    |\wbr| command to mark word boundaries without taking space, so that 
%    \TeX typesetter can wrap Thai lines at proper positions.
%
%    \begin{macrocode}
\def\wbr{\hskip0pt\relax}
%    \end{macrocode}
%
%    \subsection{Space stretching}
%
%    Since ordinary Thai text contains fewer spaces than English,
%    the \TeX{} justification is stressed with fewer places to stretch
%    to make the line reach the right margin.  This usually ends up with
%    overfull lines when \TeX{} decides to include the next word to fill
%    the space, instead of trying to manipulate spacing with appropriate
%    amount of text.  Possible solutions to this problem include:
%    \begin{itemize}
%      \item \emph{Use letter spacing.}  This is a common practice in Thai
%        publishing.  However, \TeX{} does not allow this, probably not to
%        shag sheep.\footnote{\emph{``Men who would letterspace blackletter
%        would shag sheep'' --- Frederick Goudy.}}
%      \item \emph{Allow stretching between words.}  This used to be a simple
%        hack in an old version of this module, until it was finally
%        dropped in version 1.4b, as it was considered suboptimal.
%      \item \emph{Allow more space stretching.}  This can be more acceptable,
%        compared to the ragged right margin.  And it is what we do here.
%    \end{itemize}
%
%    \begin{macrocode}
\addto\extrasthai{%
  \edef\th@restoreemstretch{\emergencystretch=\the\emergencystretch}
  \setlength{\emergencystretch}{0.6em}}
\addto\noextrasthai{\th@restoreemstretch}
%    \end{macrocode}
%
%    \subsection{Line spacing}
%
%    Due to multi-level combining character stacking, Thai text lines
%    can occupy more vertical space than English.  To prevent overlapping,
%    \TeX{} allocates more height for lines with combining characters
%    but not for those without.  This can cause irregular line spacing.
%    To avoid this problem, we need to stretch the line spacing.
%
%    \begin{macrocode}
\renewcommand{\baselinestretch}{1.2}
%    \end{macrocode}
%
%    \subsection{Paragraph}
%    This section provides Thai paragarph formating style as described in
%    \S\ref{thai-paragraph}.
%
%    \subsubsection{\Lopt{thaiindentfirst} option}
%
%    If \Lopt{thaiindentfirst} is supplied in the |\usepackage| command, the
%    first Thai paragraph in each section will be indented.  The other 
%    paragraphs will behave as default.
%
%    \begin{macrocode}
\DeclareOption{thaiindentfirst} {%
%    \end{macrocode}
%
%    When switching to Thai language, point |\@afterindentfalse| to 
%    |\@afterindentrue|, so that \LaTeX\ will never indent the first
%    paragraph. 
%
%    \begin{macrocode}
  \addto\extrasthai{%
    \let\th@afterindentfalse\@afterindentfalse
    \let\@afterindentfalse\@afterindenttrue
    \@afterindenttrue
  }
%    \end{macrocode}
%
%    When switching out of Thai language, point |\@afterindentfalse|
%    back to its original function.
%
%    \begin{macrocode}
  \addto\noextrasthai{%
    \let\@afterindentfalse\th@afterindentfalse
  }
}
%    \end{macrocode}
%
%    \subsection{Thai numbering support}
%
%    This section provides Thai numbering styles as described in
%    \S\ref{thai-numbering}: |\thainum|, |\thaibracenum|, |\thaialph| and
%    |\thaiAlph|.
%
%    First, we define a macro for translating decimal digits into Thai digits.
%
% \begin{macro}{\thaitranslate}
%    The |\thaitranslate| macro determines decimal digits in the argument and 
%    convert them to Thai digit one by one, until the `|@|' terminator is found.
%    \begin{macrocode}
\def\thaitranslate#1{\ifx @#1%
     \else\ifcase#1
       \thaizero \or \thaione \or \thaitwo \or \thaithree \or \thaifour \or 
       \thaifive \or \thaisix \or \thaiseven \or \thaieight \or \thainine
       \else\fi
       \expandafter\thaitranslate
     \fi
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\thainum}
%    The |\thainum| macro is to be used as a numbering style in \LaTeX\ 
%    |\pagenumbering| command.
%
%    It takes a counter name and converts its value into Thai digits.  
%    In details, it prepends the counter name with `|c@|' to access the counter 
%    value, then calls |\@thainum| to convert it into Thai digits.
%
%    The |\@thainum| macro converts a number into Thai digits.  It expands the 
%    argument into a number, terminates it with `|@|', and calls 
%    |\thaitranslate| to convert it into Thai digits.
%
%    \begin{macrocode}
\def\@thainum#1{\expandafter\thaitranslate\number#1@}
\def\thainum#1{\expandafter\@thainum\csname c@#1\endcsname}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\thaibracenum}
%    Similar to |\thainum|, the |\thaibracenum| macro is to be used as a 
%    numbering style in \LaTeX\ |\pagenumbering| command.
%
%    It provides Thai digits numbering, surrounded by parentheses.
%
%    \begin{macrocode}
\def\@thaibracenum#1{(\expandafter\thaitranslate\number#1@)}
\def\thaibracenum#1{\expandafter\@thaibracenum\csname c@#1\endcsname}
%    \end{macrocode}
% \end{macro}
%
%    Now come to Thai alphabetic numbering, beginning with the reduced set.
%
% \begin{macro}{\thaialph}
%    The |\thaialph| macro is to be used as a numbering style in \LaTeX\ 
%    |\pagenumbering| command.
%
%    It converts a number not greater than 41 into Thai alphabet in the
%    corresponding order in the reduced set.  In this set, 3 characters
%    are skipped: Kho Khuat, Kho Khon and Kho Rakhang.
%
%    \begin{macrocode}
\def\thaialph#1{\expandafter\@thaialph\csname c@#1\endcsname}
\def\@thaialph#1{%
  \ifcase#1\or \thaiKoKai\or \thaiKhoKhai\or \thaiKhoKhwai\or \thaiNgoNgu\or 
    \thaiChoChan\or \thaiChoChing\or \thaiChoChang\or \thaiSoSo\or 
    \thaiChoChoe\or \thaiYoYing\or \thaiDoChada\or \thaiToPatak\or 
    \thaiThoThan\or \thaiThoNangmontho\or \thaiThoPhuthao\or \thaiNoNen\or 
    \thaiDoDek\or \thaiToTao\or \thaiThoThung\or \thaiThoThahan\or 
    \thaiThoThong\or \thaiNoNu\or \thaiBoBaimai\or \thaiPoPla\or 
    \thaiPhoPhung\or \thaiFoFa\or \thaiPhoPhan\or \thaiFoFan\or 
    \thaiPhoSamphao\or \thaiMoMa\or \thaiYoYak\or \thaiRoRua\or 
    \thaiLoLing\or \thaiWoWaen\or \thaiSoSala\or \thaiSoRusi\or 
    \thaiSoSua\or \thaiHoHip\or \thaiLoChula\or \thaiOAng\or
    \thaiHoNokhuk\else\@ctrerr\fi}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\thaiAlph}
%    Similar to |\thaialph|, the |\thaiAlph| macro provides Thai alphabetic 
%    numbering with full alphabet set in the order defined in Thai official 
%    dictionary.  So, it supports up to 44 entries.
%
%    \begin{macrocode}
\def\thaiAlph#1{\expandafter\@thaiAlph\csname c@#1\endcsname}
\def\@thaiAlph#1{%
  \ifcase#1\or \thaiKoKai\or \thaiKhoKhai\or \thaiKhoKhuat\or \thaiKhoKhwai\or 
    \thaiKhoKhon\or \thaiKhoRakhang\or \thaiNgoNgu\or \thaiChoChan\or 
    \thaiChoChing\or \thaiChoChang\or \thaiSoSo\or \thaiChoChoe\or 
    \thaiYoYing\or \thaiDoChada\or \thaiToPatak\or \thaiThoThan\or 
    \thaiThoNangmontho\or \thaiThoPhuthao\or \thaiNoNen\or \thaiDoDek\or 
    \thaiToTao\or \thaiThoThung\or \thaiThoThahan\or \thaiThoThong\or 
    \thaiNoNu\or \thaiBoBaimai\or \thaiPoPla\or \thaiPhoPhung\or
    \thaiFoFa\or \thaiPhoPhan\or \thaiFoFan\or \thaiPhoSamphao\or 
    \thaiMoMa\or \thaiYoYak\or \thaiRoRua\or \thaiLoLing\or 
    \thaiWoWaen\or \thaiSoSala\or \thaiSoRusi\or \thaiSoSua\or 
    \thaiHoHip\or \thaiLoChula\or \thaiOAng\or \thaiHoNokhuk\else\@ctrerr\fi}
%    \end{macrocode}
% \end{macro}
%
%    \subsubsection{\Lopt{thainumber} option}
%
%    Not all Thai documents use Thai digits.  So, we support this as an 
%    option.  If \Lopt{thainumber} option is supplied in the |\usepackage| 
%    command, Thai digits will be used in all numberings.
%
%    \begin{macrocode}
\DeclareOption{thainumber}{
%    \end{macrocode}
%
%    We need to use the `|@|' character in macro implementations.  So, make it 
%    a normal charactor.
%
%    \begin{macrocode}
\catcode`\@=11
%    \end{macrocode}
%
%    Since |\renewcommand| will fail if the renewed command does not exist,
%    and we are redefining counters independently on the document class
%    being used, we had better check for the counters' existence before
%    redefining them.  To do so, we define a helper macro for this.
%
%    \begin{macrocode}
\def\@overridecommand#1#2{\ifdefined#1\renewcommand{#1}{#2}\fi}
%    \end{macrocode}
%
%    Then, set default page numbering to |thainum|, and redefine counters
%    to |thainum|.
%
%    \begin{macrocode}
\pagenumbering{thainum}
\@overridecommand\theenumi{\@thainum\c@enumi}
\@overridecommand\theenumii{\@thaialph\c@enumii}
%\@overridecommand\theenumiii{\@roman\c@enumiii}
%\@overridecommand\theenumiv{\@Alph\c@enumiv}
\@ifundefined{thechapter}%
  {\@overridecommand\thesection{\@thainum\c@section}%
   \@overridecommand\thesubsection{\thesection.\@thainum\c@subsection}%
   \@overridecommand\thesubsubsection{\thesubsection.\@thainum\c@subsubsection}%
   \@overridecommand\theparagraph    {\thesubsubsection.\@thainum\c@paragraph}%
   \@overridecommand\thesubparagraph {\theparagraph.\@thainum\c@subparagraph}%
   \@overridecommand\theequation{\@thainum\c@equation}%
   \@overridecommand\thetable{\@thainum\c@table}%
   \@overridecommand\thefigure{\@thainum\c@figure}}%
  {\@overridecommand\thepart{\@thainum\c@part}%
   \@overridecommand\thechapter{\@thainum\c@chapter}%
   \@overridecommand\thesection{\thechapter.\@thainum\c@section}%
   \@overridecommand\thesubsection{\thesection.\@thainum\c@subsection}%
   \@overridecommand\thesubsubsection{\thesubsection.\@thainum\c@subsubsection}%
   \@overridecommand\theparagraph    {\thesubsubsection.\@thainum\c@paragraph}%
   \@overridecommand\thesubparagraph {\theparagraph.\@thainum\c@subparagraph}%
   \@overridecommand\theequation%
       {\ifnum \c@chapter>\z@ \thechapter.\fi \@thainum\c@equation}%
   \@overridecommand \thetable%
       {\ifnum \c@chapter>\z@ \thechapter.\fi \@thainum\c@table}%
   \@overridecommand \thefigure%
       {\ifnum \c@chapter>\z@ \thechapter.\fi \@thainum\c@figure}}
\@overridecommand\thefootnote{\@thainum\c@footnote}
%    \end{macrocode}
%
%    For theorems, we support all custom theorem counters at once by 
%    redefining |\@thmcounter| macro.
%
%    \begin{macrocode}
\def\@thmcounter#1{\noexpand\thainum{#1}} 
%    \end{macrocode}
%
%    In book class, page numberings for frontmatter and mainmatter are
%    different.  So, redefine them.
%
%    \begin{macrocode}
\@ifclassloaded{book}{%
  % redefine page numbering for frontmatter and mainmatter
  \def\ps@headnum{\let\@mkboth\@gobbletwo
       \def\@oddhead{\reset@font\hfil\thepage\hfil}\let\@oddfoot\@empty
       \let\@evenhead\@oddhead\let\@evenfoot\@empty}
  \let\@ltxfrontmatter\frontmatter
  \renewcommand\frontmatter%
    {\@ltxfrontmatter\pagestyle{headnum}\pagenumbering{thaibracenum}}
  \let\@ltxmainmatter\mainmatter
  \renewcommand\mainmatter%
    {\@ltxmainmatter\pagestyle{headings}\pagenumbering{thainum}}
}{}
%    \end{macrocode}
%
%    Redefine Thai date using Thai digits.
%
%    \begin{macrocode}
\def\datethai{%
  \def\today{\@thainum\day\space \th@month\space %
             \thaiPhoPhan.\thaiSoSala.~\@thainum\th@year}
}
%    \end{macrocode}
%
%    And finish declaration of \Lopt{thainumber} option
%
%    \begin{macrocode}
\relax
}
%    \end{macrocode}
%
%    Always use thaialph as counter for appendix
%
%    \begin{macrocode}
\@ifclassloaded{book}{%
\renewcommand\appendix{\par
  \setcounter{chapter}{0}%
  \setcounter{section}{0}%
  \gdef\@chapapp{\appendixname}%
  \gdef\thechapter{\@thaialph\c@chapter}}
}{}
\@ifclassloaded{report}{%
\renewcommand\appendix{\par
  \setcounter{chapter}{0}%
  \setcounter{section}{0}%
  \gdef\@chapapp{\appendixname}%
  \gdef\thechapter{\@thaialph\c@chapter}}
}{}
\@ifclassloaded{article}{%
\renewcommand\appendix{\par
  \setcounter{section}{0}%
  \setcounter{subsection}{0}%
  \gdef\thesection{\@thaialph\c@section}}
}{}
%    \end{macrocode}
%
%    \subsection{Miscellaneous}
%
%    Initialize character codes for Thai
%
%    \begin{macrocode}
\catcode`\^^a1=11 \lccode`\^^a1=`\^^a1 \uccode`\^^a1=`\^^a1
\catcode`\^^a2=11 \lccode`\^^a2=`\^^a2 \uccode`\^^a2=`\^^a2
\catcode`\^^a3=11 \lccode`\^^a3=`\^^a3 \uccode`\^^a3=`\^^a3
\catcode`\^^a4=11 \lccode`\^^a4=`\^^a4 \uccode`\^^a4=`\^^a4
\catcode`\^^a5=11 \lccode`\^^a5=`\^^a5 \uccode`\^^a5=`\^^a5
\catcode`\^^a6=11 \lccode`\^^a6=`\^^a6 \uccode`\^^a6=`\^^a6
\catcode`\^^a7=11 \lccode`\^^a7=`\^^a7 \uccode`\^^a7=`\^^a7
\catcode`\^^a8=11 \lccode`\^^a8=`\^^a8 \uccode`\^^a8=`\^^a8
\catcode`\^^a9=11 \lccode`\^^a9=`\^^a9 \uccode`\^^a9=`\^^a9
\catcode`\^^aa=11 \lccode`\^^aa=`\^^aa \uccode`\^^aa=`\^^aa
\catcode`\^^ab=11 \lccode`\^^ab=`\^^ab \uccode`\^^ab=`\^^ab
\catcode`\^^ac=11 \lccode`\^^ac=`\^^ac \uccode`\^^ac=`\^^ac
\catcode`\^^ad=11 \lccode`\^^ad=`\^^ad \uccode`\^^ad=`\^^ad
\catcode`\^^ae=11 \lccode`\^^ae=`\^^ae \uccode`\^^ae=`\^^ae
\catcode`\^^af=11 \lccode`\^^af=`\^^af \uccode`\^^af=`\^^af
\catcode`\^^b0=11 \lccode`\^^b0=`\^^b0 \uccode`\^^b0=`\^^b0
\catcode`\^^b1=11 \lccode`\^^b1=`\^^b1 \uccode`\^^b1=`\^^b1
\catcode`\^^b2=11 \lccode`\^^b2=`\^^b2 \uccode`\^^b2=`\^^b2
\catcode`\^^b3=11 \lccode`\^^b3=`\^^b3 \uccode`\^^b3=`\^^b3
\catcode`\^^b4=11 \lccode`\^^b4=`\^^b4 \uccode`\^^b4=`\^^b4
\catcode`\^^b5=11 \lccode`\^^b5=`\^^b5 \uccode`\^^b5=`\^^b5
\catcode`\^^b6=11 \lccode`\^^b6=`\^^b6 \uccode`\^^b6=`\^^b6
\catcode`\^^b7=11 \lccode`\^^b7=`\^^b7 \uccode`\^^b7=`\^^b7
\catcode`\^^b8=11 \lccode`\^^b8=`\^^b8 \uccode`\^^b8=`\^^b8
\catcode`\^^b9=11 \lccode`\^^b9=`\^^b9 \uccode`\^^b9=`\^^b9
\catcode`\^^ba=11 \lccode`\^^ba=`\^^ba \uccode`\^^ba=`\^^ba
\catcode`\^^bb=11 \lccode`\^^bb=`\^^bb \uccode`\^^bb=`\^^bb
\catcode`\^^bc=11 \lccode`\^^bc=`\^^bc \uccode`\^^bc=`\^^bc
\catcode`\^^bd=11 \lccode`\^^bd=`\^^bd \uccode`\^^bd=`\^^bd
\catcode`\^^be=11 \lccode`\^^be=`\^^be \uccode`\^^be=`\^^be
\catcode`\^^bf=11 \lccode`\^^bf=`\^^bf \uccode`\^^bf=`\^^bf
\catcode`\^^c0=11 \lccode`\^^c0=`\^^c0 \uccode`\^^c0=`\^^c0
\catcode`\^^c1=11 \lccode`\^^c1=`\^^c1 \uccode`\^^c1=`\^^c1
\catcode`\^^c2=11 \lccode`\^^c2=`\^^c2 \uccode`\^^c2=`\^^c2
\catcode`\^^c3=11 \lccode`\^^c3=`\^^c3 \uccode`\^^c3=`\^^c3
\catcode`\^^c4=11 \lccode`\^^c4=`\^^c4 \uccode`\^^c4=`\^^c4
\catcode`\^^c5=11 \lccode`\^^c5=`\^^c5 \uccode`\^^c5=`\^^c5
\catcode`\^^c6=11 \lccode`\^^c6=`\^^c6 \uccode`\^^c6=`\^^c6
\catcode`\^^c7=11 \lccode`\^^c7=`\^^c7 \uccode`\^^c7=`\^^c7
\catcode`\^^c8=11 \lccode`\^^c8=`\^^c8 \uccode`\^^c8=`\^^c8
\catcode`\^^c9=11 \lccode`\^^c9=`\^^c9 \uccode`\^^c9=`\^^c9
\catcode`\^^ca=11 \lccode`\^^ca=`\^^ca \uccode`\^^ca=`\^^ca
\catcode`\^^cb=11 \lccode`\^^cb=`\^^cb \uccode`\^^cb=`\^^cb
\catcode`\^^cc=11 \lccode`\^^cc=`\^^cc \uccode`\^^cc=`\^^cc
\catcode`\^^cd=11 \lccode`\^^cd=`\^^cd \uccode`\^^cd=`\^^cd
\catcode`\^^ce=11 \lccode`\^^ce=`\^^ce \uccode`\^^ce=`\^^ce
\catcode`\^^cf=11 \lccode`\^^cf=`\^^cf \uccode`\^^cf=`\^^cf
\catcode`\^^d0=11 \lccode`\^^d0=`\^^d0 \uccode`\^^d0=`\^^d0
\catcode`\^^d1=11 \lccode`\^^d1=`\^^d1 \uccode`\^^d1=`\^^d1
\catcode`\^^d2=11 \lccode`\^^d2=`\^^d2 \uccode`\^^d2=`\^^d2
\catcode`\^^d3=11 \lccode`\^^d3=`\^^d3 \uccode`\^^d3=`\^^d3
\catcode`\^^d4=11 \lccode`\^^d4=`\^^d4 \uccode`\^^d4=`\^^d4
\catcode`\^^d5=11 \lccode`\^^d5=`\^^d5 \uccode`\^^d5=`\^^d5
\catcode`\^^d6=11 \lccode`\^^d6=`\^^d6 \uccode`\^^d6=`\^^d6
\catcode`\^^d7=11 \lccode`\^^d7=`\^^d7 \uccode`\^^d7=`\^^d7
\catcode`\^^d8=11 \lccode`\^^d8=`\^^d8 \uccode`\^^d8=`\^^d8
\catcode`\^^d9=11 \lccode`\^^d9=`\^^d9 \uccode`\^^d9=`\^^d9
\catcode`\^^da=11 \lccode`\^^da=`\^^da \uccode`\^^da=`\^^da
\catcode`\^^df=12 \lccode`\^^df=`\^^df \uccode`\^^df=`\^^df
\catcode`\^^e0=11 \lccode`\^^e0=`\^^e0 \uccode`\^^e0=`\^^e0
\catcode`\^^e1=11 \lccode`\^^e1=`\^^e1 \uccode`\^^e1=`\^^e1
\catcode`\^^e2=11 \lccode`\^^e2=`\^^e2 \uccode`\^^e2=`\^^e2
\catcode`\^^e3=11 \lccode`\^^e3=`\^^e3 \uccode`\^^e3=`\^^e3
\catcode`\^^e4=11 \lccode`\^^e4=`\^^e4 \uccode`\^^e4=`\^^e4
\catcode`\^^e5=11 \lccode`\^^e5=`\^^e5 \uccode`\^^e5=`\^^e5
\catcode`\^^e6=11 \lccode`\^^e6=`\^^e6 \uccode`\^^e6=`\^^e6
\catcode`\^^e7=11 \lccode`\^^e7=`\^^e7 \uccode`\^^e7=`\^^e7
\catcode`\^^e8=11 \lccode`\^^e8=`\^^e8 \uccode`\^^e8=`\^^e8
\catcode`\^^e9=11 \lccode`\^^e9=`\^^e9 \uccode`\^^e9=`\^^e9
\catcode`\^^ea=11 \lccode`\^^ea=`\^^ea \uccode`\^^ea=`\^^ea
\catcode`\^^eb=11 \lccode`\^^eb=`\^^eb \uccode`\^^eb=`\^^eb
\catcode`\^^ec=11 \lccode`\^^ec=`\^^ec \uccode`\^^ec=`\^^ec
\catcode`\^^ed=11 \lccode`\^^ed=`\^^ed \uccode`\^^ed=`\^^ed
\catcode`\^^ee=11 \lccode`\^^ee=`\^^ee \uccode`\^^ee=`\^^ee
\catcode`\^^ef=12 \lccode`\^^ef=`\^^ef \uccode`\^^ef=`\^^ef
\catcode`\^^f0=12 \lccode`\^^f0=`\^^f0 \uccode`\^^f0=`\^^f0
\catcode`\^^f1=12 \lccode`\^^f1=`\^^f1 \uccode`\^^f1=`\^^f1
\catcode`\^^f2=12 \lccode`\^^f2=`\^^f2 \uccode`\^^f2=`\^^f2
\catcode`\^^f3=12 \lccode`\^^f3=`\^^f3 \uccode`\^^f3=`\^^f3
\catcode`\^^f4=12 \lccode`\^^f4=`\^^f4 \uccode`\^^f4=`\^^f4
\catcode`\^^f5=12 \lccode`\^^f5=`\^^f5 \uccode`\^^f5=`\^^f5
\catcode`\^^f6=12 \lccode`\^^f6=`\^^f6 \uccode`\^^f6=`\^^f6
\catcode`\^^f7=12 \lccode`\^^f7=`\^^f7 \uccode`\^^f7=`\^^f7
\catcode`\^^f8=12 \lccode`\^^f8=`\^^f8 \uccode`\^^f8=`\^^f8
\catcode`\^^f9=12 \lccode`\^^f9=`\^^f9 \uccode`\^^f9=`\^^f9
\catcode`\^^fa=12 \lccode`\^^fa=`\^^fa \uccode`\^^fa=`\^^fa
\catcode`\^^fb=12 \lccode`\^^fb=`\^^fb \uccode`\^^fb=`\^^fb
\ldf@finish{\CurrentOption}
%</code>
%    \end{macrocode}
%
%%
%% \CharacterTable
%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%%   Digits        \0\1\2\3\4\5\6\7\8\9
%%   Exclamation   \!     Double quote  \"     Hash (number) \#
%%   Dollar        \$     Percent       \%     Ampersand     \&
%%   Acute accent  \'     Left paren    \(     Right paren   \)
%%   Asterisk      \*     Plus          \+     Comma         \,
%%   Minus         \-     Point         \.     Solidus       \/
%%   Colon         \:     Semicolon     \;     Less than     \<
%%   Equals        \=     Greater than  \>     Question mark \?
%%   Commercial at \@     Left bracket  \[     Backslash     \\
%%   Right bracket \]     Circumflex    \^     Underscore    \_
%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%%   Right brace   \}     Tilde         \~}
%%
\endinput