summaryrefslogtreecommitdiff
path: root/language/ethiopia/ethiop/latex/ethiop.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'language/ethiopia/ethiop/latex/ethiop.dtx')
-rw-r--r--language/ethiopia/ethiop/latex/ethiop.dtx1679
1 files changed, 1679 insertions, 0 deletions
diff --git a/language/ethiopia/ethiop/latex/ethiop.dtx b/language/ethiopia/ethiop/latex/ethiop.dtx
new file mode 100644
index 0000000000..2ee1a719b2
--- /dev/null
+++ b/language/ethiopia/ethiop/latex/ethiop.dtx
@@ -0,0 +1,1679 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 1997 University of Hamburg. This file may be distributed
+% according to the GNU GPL. See file COPYING for details.
+%
+% The Babel package and the file language.skeleton on which this file
+% is based is Copyright (C) 1989 -- 1997 by Johannes Braams
+%
+% This file is part of the Ethiopian language package.
+% ----------------------------------------------------
+% This system is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+%
+% Please do not request updates from us directly. Primary
+% distribution is through the CTAN archives.
+
+% The Ethiopian language style for the Babel system was designed
+% by a project team at the University of Hamburg.
+%
+% Please report errors to ethiop@informatik.uni-hamburg.de by
+% email.
+%
+% Universitaet Hamburg
+% FB Informatik, AB TGI
+% - Ethiopian Language Project Team -
+% Vogt-Koelln-Strasse 30
+% 22527 Hamburg
+% Germany
+%
+% \fi
+% \CheckSum{1537}
+%
+% \iffalse
+% Tell the \LaTeX\ system who we are and write an entry on the
+% transcript.
+%<*dtx>
+\ProvidesFile{ethiop.dtx}
+%</dtx>
+%<code>\ProvidesFile{ethiop.ldf}
+%<style>\ProvidesFile{ethiop.sty}
+%<etha>\ProvidesFile{uetha.fd}
+%<ethb>\ProvidesFile{uethb.fd}
+%<etho>\ProvidesFile{uetho.fd}
+%<arab>\ProvidesFile{etharab.sty}
+ [1998/03/30 v0.7 Ethiopian support for the babel system]
+%
+% Ethiopian support for Babel package for LaTeX version 2e
+%
+%<*filedriver>
+\documentclass{ltxdoc}
+\usepackage{fontenc}
+\newcommand*{\TeXhax}{\TeX hax}
+\newcommand*{\babel}{\textsf{babel}}
+\newcommand*{\langvar}{$\langle \mathit lang \rangle$}
+\newcommand*{\note}[1]{}
+\newcommand*{\Lopt}[1]{\textsf{#1}}
+\newcommand*{\file}[1]{\texttt{#1}}
+\begin{document}
+ \DocInput{ethiop.dtx}
+\end{document}
+%</filedriver>
+%\fi
+% \GetFileInfo{ethiop.dtx}
+%
+% \changes{v0.2}{1997/02/08}{Update for \babel\ release 3.6}
+%
+% \changes{v0.7}{1998/03/30}{Complete reordering of the code
+% for $\Omega$ compatibility}
+%
+% \subsubsection{The Ethiopian language}
+%
+% The file \file{\filename}\footnote{The file described in this
+% section has version number \fileversion\ and was last revised on
+% \filedate.} defines all the language definition macros for the
+% Ethiopian language. For this language the characters |~|, |^|,
+% |'|, |_|, |.| and |:| are made active. While this may not be
+% the most robust solution, it allows us to use shorthands
+% that are sufficiently close to the scientific transcription.
+% Especially the activation of~|^| and also~|.|~has some drawbacks.
+% \begin{itemize}
+% \item We cannot use |^||^| for entering special characters.
+% Usually this is done in package files only, so we do not
+% get into real trouble, since \babel\ activates the
+% characters only at the beginning of the document.
+% \item We cannot use |.| in numbers, while Ethiopian text
+% is being typeset. This is definitely a problem, because we
+% have to use a |,| instead of the |.| when entering numbers
+% for \TeX.
+% \end{itemize}
+% One must also remember that the Ethiopian language
+% requires a special font that has been hand-taylored to work
+% with this language definition. The font stretches the ligature
+% mechanism of \TeX\ to the limit and works only in connection
+% with this style.
+%
+% \StopEventually{}
+%
+% \subsubsection*{General Setup}
+%
+% The macro |\LdfInit| takes care of preventing that this file is
+% loaded more than once, checking the category code of the
+% \texttt{@} sign, etc.
+% \begin{macrocode}
+%<*code>
+\LdfInit{ethiop}{captionsethiop}
+% \end{macrocode}
+%
+% There is no hyphenation in the Ethiopian language, so
+% we do not expect a hyphenation table to be loaded.
+% For compatibility we add Ethiopian as a dialect of
+% language~0 and disable hyphenation later. Just in case,
+% we check for the existence of |\l@ethiop|.
+%
+% \begin{macrocode}
+\ifx\undefined\l@ethiop
+ \adddialect\l@ethiop0\fi
+% \end{macrocode}
+%
+% The next step consists of defining commands to switch to (and
+% from) the Ethiopian language.
+%
+% \begin{macro}{\ethiophyphenmins}
+% This macro is used to store the correct values of the hyphenation
+% parameters |\lefthyphenmin| and |\righthyphenmin|. But because
+% there is no hyphenation, we set it to some arbitrarily high value.
+% \begin{macrocode}
+\def\ethiophyphenmins{{99}{99}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\eth@doaltchar}
+% Since the Ethiopian language has more than 256 characters,
+% we need to output characters from an alternate font.
+% This is done by temporarily switching to the alternate font family.
+% This generates a considerable overhead in macro expansion time,
+% but no other possibility is available.
+%
+% That last space is needed to get the stuff working
+% with $\Omega$. This seems to be a bug in $\Omega$.
+% But the space is certainly allowed,
+% so I will leave it as it is for the moment and
+% probably for a long time.
+% \begin{macrocode}
+\newcommand{\eth@doaltchar}[1]{%
+ {\fontfamily{\eth@altfamily}\selectfont\char#1 }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\dateethiop}
+% \begin{macro}{\eth@modulo}
+% The macro |\dateethiop| redefines the command |\today| to
+% produce Ethiopian dates.
+%
+% We define some count registers first. They will hold
+% intermediate results when we calculate the Ethiopian date.
+% \begin{macrocode}
+\newcount\ethcnt@temp
+\newcount\ethcnt@modtemp
+\newcount\ethcnt@leap
+\newcount\ethcnt@yminone
+\newcount\ethcnt@days
+\newcount\ethcnt@jdn
+\newcount\ethcnt@cycle
+\newcount\ethcnt@ethdays
+\newcount\ethcnt@ethyear
+\newcount\ethcnt@ethmonth
+\newcount\ethcnt@ethday
+% \end{macrocode}
+%
+% To ease some calculations we define a macro for the
+% remainder of a division.
+% \begin{macrocode}
+\newcommand{\eth@modulo}[2]{%
+ \ethcnt@modtemp=#1%
+ \divide\ethcnt@modtemp by #2%
+ \multiply\ethcnt@modtemp by #2%
+ \advance#1 by -\ethcnt@modtemp
+}
+% \end{macrocode}
+%
+% The Ethiopian calendar is a variant of the Julian calendar.
+% First we compute the day number from the Julian epoch, then
+% we calculate day, month, and year of the Ethiopian calendar.
+% Admittedly, the routine is a bit messy.
+% \begin{macrocode}
+\def\dateethiop{%
+ \def\today{{%
+% \end{macrocode}
+% |\ethcnt@yminone| denotes the current year minus one.
+% \[\textit{yminone}=\textit{year}-1\]
+% \begin{macrocode}
+ \ethcnt@yminone=\year
+ \advance\ethcnt@yminone by -1
+% \end{macrocode}
+% We set |\ethcnt@leap| to $1$ if the current year in the
+% Gregorian calendar is a leap year.
+% \[\textit{leap}=
+% \Big\lfloor\frac{\textit{year}}{4}\Big\rfloor
+% -\Big\lfloor\frac{\textit{year}-1}{4}\Big\rfloor
+% -\Big\lfloor\frac{\textit{year}}{100}\Big\rfloor
+% +\Big\lfloor\frac{\textit{year}-1}{100}\Big\rfloor
+% +\Big\lfloor\frac{\textit{year}}{400}\Big\rfloor
+% -\Big\lfloor\frac{\textit{year}-1}{400}\Big\rfloor\]
+% \begin{macrocode}
+ \ethcnt@leap=\year
+ \divide\ethcnt@leap by 4
+ \ethcnt@temp=\ethcnt@yminone
+ \divide\ethcnt@temp by 4
+ \advance\ethcnt@leap by -\ethcnt@temp
+ \ethcnt@temp=\year
+ \divide\ethcnt@temp by 100
+ \advance\ethcnt@leap by -\ethcnt@temp
+ \ethcnt@temp=\ethcnt@yminone
+ \divide\ethcnt@temp by 100
+ \advance\ethcnt@leap by \ethcnt@temp
+ \ethcnt@temp=\year
+ \divide\ethcnt@temp by 400
+ \advance\ethcnt@leap by \ethcnt@temp
+ \ethcnt@temp=\ethcnt@yminone
+ \divide\ethcnt@temp by 400
+ \advance\ethcnt@leap by -\ethcnt@temp
+% \end{macrocode}
+% |\ethcnt@days| corresponds to the number of days since
+% January 0.
+% \[\textit{days}=
+% \left\{\begin{array}{l@{\quad}l}
+% 31(\textit{month}-1)+\textit{day}-1 &
+% \textrm{if }\textit{month}\leq 2\\
+% 30(\textit{month}-1)+\textit{day}+\textit{leap}-3+
+% \left\lfloor\frac{3 month-2}{5}\right\rfloor &
+% \textrm{if }\textit{month}\geq 3
+% \end{array}\right.\]
+% \begin{macrocode}
+ \ifnum\month<3
+ \ethcnt@days=\month
+ \advance\ethcnt@days by -1
+ \multiply\ethcnt@days by 31
+ \advance\ethcnt@days by \day
+ \advance\ethcnt@days by -1
+ \else
+ \ethcnt@days=\month
+ \advance\ethcnt@days by -1
+ \multiply\ethcnt@days by 30
+ \advance\ethcnt@days by \day
+ \advance\ethcnt@days by \ethcnt@leap
+ \advance\ethcnt@days by -3
+ \ethcnt@temp=\month
+ \multiply\ethcnt@temp by 3
+ \advance\ethcnt@temp by -2
+ \divide\ethcnt@temp by 5
+ \advance\ethcnt@days by \ethcnt@temp
+ \fi
+% \end{macrocode}
+% We can now determine the Julian day number, |\ethcnt@jdn|.
+% \[\textit{jdn}=1721426+\textit{days}+365(\textit{year}-1)
+% +\Big\lfloor\frac{\textit{year}-1}{4}\Big\rfloor
+% -\Big\lfloor\frac{\textit{year}-1}{100}\Big\rfloor
+% +\Big\lfloor\frac{\textit{year}-1}{400}\Big\rfloor\]
+% \begin{macrocode}
+ \ethcnt@jdn=\ethcnt@days
+ \advance\ethcnt@jdn by 1721426
+ \ethcnt@temp=\ethcnt@yminone
+ \multiply\ethcnt@temp by 365
+ \advance\ethcnt@jdn by \ethcnt@temp
+ \ethcnt@temp=\ethcnt@yminone
+ \divide\ethcnt@temp by 4
+ \advance\ethcnt@jdn by \ethcnt@temp
+ \ethcnt@temp=\ethcnt@yminone
+ \divide\ethcnt@temp by 100
+ \advance\ethcnt@jdn by -\ethcnt@temp
+ \ethcnt@temp=\ethcnt@yminone
+ \divide\ethcnt@temp by 400
+ \advance\ethcnt@jdn by \ethcnt@temp
+% \end{macrocode}
+% The first task to determine the Ethiopian date is to
+% compute the number of the current day in a four
+% year cycle.
+% \[\textit{cycle}=(\textit{jdn}-1723856)\bmod 1461\]
+% \begin{macrocode}
+ \ethcnt@cycle=\ethcnt@jdn
+ \advance\ethcnt@cycle by -1723856
+ \eth@modulo{\ethcnt@cycle}{1461}%
+% \end{macrocode}
+% |\ethcnt@ethdays| contains the number of the current day in the
+% Ethiopian year.
+% \[\textit{ethdays}=
+% 365\Big\lfloor\frac{\textit{cycle}}{1460}\Big\rfloor
+% +cycle\bmod 365\]
+% \begin{macrocode}
+ \ethcnt@ethdays=\ethcnt@cycle
+ \eth@modulo{\ethcnt@ethdays}{365}%
+ \ethcnt@temp=\ethcnt@cycle
+ \divide\ethcnt@temp by 1460
+ \multiply\ethcnt@temp by 365
+ \advance\ethcnt@ethdays by \ethcnt@temp
+% \end{macrocode}
+% |\ethcnt@ethyear|, |\ethcnt@ethmonth|, and |\ethcnt@ethday| will denote the
+% Ethiopian year, month, and day.
+% \[\textit{ethyear}=
+% 4\Big\lfloor\frac{\textit{jdn}-1723856}{1461}\Big\rfloor
+% +\Big\lfloor\frac{\textit{cycle}}{365}\Big\rfloor
+% -\Big\lfloor\frac{\textit{cycle}}{1460}\Big\rfloor\]
+% \begin{macrocode}
+ \ethcnt@ethyear=\ethcnt@jdn
+ \advance\ethcnt@ethyear by -1723856
+ \divide\ethcnt@ethyear by 1461
+ \multiply\ethcnt@ethyear by 4
+ \ethcnt@temp=\ethcnt@cycle
+ \divide\ethcnt@temp by 365
+ \advance\ethcnt@ethyear by \ethcnt@temp
+ \divide\ethcnt@cycle by 1460
+ \advance\ethcnt@ethyear by -\ethcnt@cycle
+% \end{macrocode}
+% \[\textit{ethmonth}=
+% \Big\lfloor\frac{\textit{ethdays}}{30}\Big\rfloor+1\]
+% \begin{macrocode}
+ \ethcnt@ethmonth=\ethcnt@ethdays
+ \divide\ethcnt@ethmonth by 30
+ \advance\ethcnt@ethmonth by 1
+% \end{macrocode}
+% \[\textit{ethday}=\textit{ethdays}\bmod 30+1\]
+% \begin{macrocode}
+ \ethcnt@ethday=\ethcnt@ethdays
+ \eth@modulo{\ethcnt@ethday}{30}%
+ \advance\ethcnt@ethday by 1
+% \end{macrocode}
+% We are almost finished now. We just need to format
+% the date according to Ethiopian conventions.
+% \begin{macrocode}
+ \eth@monthname{\ethcnt@ethmonth}\relax\space
+ \number\ethcnt@ethday\relax\space
+ \number\ethcnt@ethyear
+ }}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% We want to be able to switch to the
+% correct font by simply issuing the appropriate
+% |\selectlanguage| command. The defaults for font encoding and
+% family have to be changed, too, in order to get chapter headings
+% etc.~with the correct font. And we must remember our way back.
+% \begin{macrocode}
+\addto\extrasethiop{%
+ \let\eth@old@encdef\encodingdefault
+ \let\eth@old@famdef\familydefault
+ \def\encodingdefault{U}%
+ \def\familydefault{\eth@defaultfamily}%
+ \fontencoding{\encodingdefault}%
+ \fontfamily{\familydefault}%
+ \selectfont
+}
+\addto\noextrasethiop{%
+ \let\encodingdefault\eth@old@encdef
+ \let\familydefault\eth@old@famdef
+ \let\eth@old@encdef\relax
+ \let\eth@old@famdef\relax
+ \fontencoding{\encodingdefault}%
+ \fontfamily{\familydefault}%
+ \selectfont
+}
+% \end{macrocode}
+%
+% In order to provide the dollar sign and the curly braces
+% we redefine the commands |\textdollar|, |\textbraceleft|, and |\textbraceright|.
+% \begin{macrocode}
+\addto\extrasethiop{%
+ \babel@save\textdollar
+ \def\textdollar{\char`\$}%
+ \def\textbraceleft{{\fontencoding{OMS}%
+ \fontfamily{cmr}%
+ \selectfont\char102 }}%
+ \def\textbraceright{{\fontencoding{OMS}%
+ \fontfamily{cmr}%
+ \selectfont\char103 }}%
+}
+% \end{macrocode}
+%
+% When we use |\-|, we want a
+% possible breakpoint without the insertion of a hyphen.
+% \begin{macrocode}
+\addto\extrasethiop{%
+ \babel@save\-%
+ \def\-{\ethbreak}%
+}
+% \end{macrocode}
+%
+% Sometimes \LaTeX\ uses |\MakeUppercase| and |\MakeLowercase|
+% to format text for output. However, there is no
+% upper or lower case in the Ethiopian languages,
+% so these macros are not needed. Worse still, the use
+% of |\MakeUppercase| can make a character unprintable, which
+% can lead to black error bars in the output. Hence we simply
+% disable the two commands while Ethiopian text is typeset
+% by replacing them with a command that outputs its
+% single argument without any change.
+%
+% We cannot redefine the low level commands |\uppercase|
+% and |lowercase| directly, because \LaTeX\ uses them for
+% some internal conversions. Especially the font selection
+% algorithm would be affected by such a change, so we better
+% do not touch anything.
+%
+% \begin{macrocode}
+\addto\extrasethiop{%
+ \babel@save\MakeUppercase
+ \let\MakeUppercase=\@firstofone
+ \babel@save\MakeLowercase
+ \let\MakeLowercase=\@firstofone
+}
+% \end{macrocode}
+%
+%
+% \changes{v0.3}{1997/04/24}{Added support for Ethiopian
+% characters in math mode.}
+%
+% \begin{macro}{\ethmath}
+% In Ethiopia it is common to use Ethiopian characters
+% as identifiers in math mode, too. Since our use of
+% \TeX\ ligatures is only applicable in text mode, we will
+% need a special command to temporarily switch to text mode
+% with the proper font size selected with the help of
+% a |\mathchoice|.
+%
+% \begin{macrocode}
+\addto\extrasethiop{%
+ \babel@save\ethmath
+ \def\ethmath#1{\mathchoice{\hbox{#1}}{\hbox{#1}}%
+ {\hbox{\footnotesize #1}}{\hbox{\tiny #1}}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ethnum@err}
+% We can only output Ethiopian numbers from 1 to 999999.
+% \begin{macrocode}
+\newcommand{\ethnum@err}[1]{%
+ \PackageError{ethiop}{%
+ Ethiopian number out of range%
+ }{%
+ Some Ethiopian number I had to print
+ was not in the range 1..999999.\MessageBreak
+ Type <return> and I will use an
+ Arabic number instead.
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifethvariantC}
+% Since there are two glyph variants for the |^C| series,
+% we provide a switch between the two.
+% \begin{macrocode}
+\newif\ifethvariantC
+\ethvariantCfalse
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ethglue}
+% The macro |\ethglue| is used to insert a small
+% stretchable space before and after certain punctuation marks.
+% \begin{macrocode}
+\def\ethglue{\hskip 0,16667em plus 0,16667em }%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\ethbreak}
+% The macro |\ethbreak| is used to insert a feasible
+% breakpoint between certain characters.
+% \begin{macrocode}
+\def\ethbreak{\penalty 5 }%
+% \end{macrocode}
+% \end{macro}
+%
+% Now we need to determine if this file is run on an $\Omega$
+% system. What follows is a long |\if| statement.
+% A \emph{really} long |\if| statement.
+% \begin{macrocode}
+\ifx\ocp\undefined
+% \end{macrocode}
+%
+% \subsubsection*{\TeX\ Setup}
+%
+% Ok, so this is an ordinary \TeX\ system. Here we need
+% to define lots of macros for the translation of our
+% encoding.
+%
+% \begin{macro}{\eth@altchar}
+% \begin{macro}{\eth@altchargobble}
+% Whenever a character is output, we put the corresponding code
+% into the macro |\eth@res| which will be expanded later
+% on.
+% \begin{macrocode}
+\newcommand{\eth@altchar}[1]{%
+ \def\eth@res{\eth@doaltchar{#1}}%
+}
+% \end{macrocode}
+%
+% Sometimes we must output a character and gobble a token.
+% \begin{macrocode}
+\newcommand{\eth@altchargobble}[1]{%
+ \def\eth@res{\eth@doaltchar{#1}\@gobble}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\eth@testA}
+% \begin{macro}{\eth@ifnextA}
+% To do some three and four character shorthands we define the
+% following auxiliary macros.
+%
+% |\eth@ifnextA| checks if the the next character is \texttt{A} or
+% \texttt{a}. If yes, then we output the compound character given in
+% the first parameter and gobble the \texttt{A}. If no, we output the
+% ordinary character (second parameter) and leave the \texttt{A}
+% where it is. On the fly, |\eth@ifnextA| gobbles its third
+% argument (an already processed character \texttt{u}).
+% \begin{macrocode}
+\newcommand{\eth@ifnextA}[3]{%
+ \def\eth@res{\eth@ifnextA@eval{#1}{#2}}%
+ \futurelet\@let@token\eth@res
+}
+\newcommand{\eth@ifnextA@eval}[2]{%
+ \ifx\@let@token a\eth@altchargobble{#1}%
+ \else\ifx\@let@token A\eth@altchargobble{#1}%
+ \else\eth@altchar{#2}\fi\fi
+ \eth@res
+}
+% \end{macrocode}
+%
+% Delay the check for the token \texttt{A} until |\eth@res| has been
+% expanded.
+% \begin{macrocode}
+\newcommand{\eth@testA}[2]{%
+ \def\eth@res{\eth@ifnextA{#1}{#2}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\eth@three@short}
+% \begin{macro}{\eth@three@norm}
+% \begin{macro}{\eth@three@full}
+% \begin{macro}{\eth@three@part}
+% Each of the following macros evaluates the token following
+% one of the shorthands. The token has already been saved in the
+% variable |\@let@token| by the means of a |\futurelet|.
+% Depending on the result of the evaluation an appropriate
+% character from the alternate font is output.
+%
+% \begin{macrocode}
+\newcommand{\eth@three@short}[7]{%
+ \ifx\@let@token a\eth@altchargobble{#1}%
+ \else\ifx\@let@token A\eth@altchargobble{#2}%
+ \else\ifx\@let@token e\eth@altchargobble{#3}%
+ \else\ifx\@let@token E\eth@altchargobble{#4}%
+ \else\ifx\@let@token i\eth@altchargobble{#5}%
+ \else\ifx\@let@token I\eth@altchargobble{#5}%
+ \else\ifx\@let@token o\eth@altchargobble{#6}%
+ \else\ifx\@let@token O\eth@altchargobble{#6}%
+ \else\ifx\@let@token u\eth@altchargobble{#7}%
+ \else\ifx\@let@token U\eth@altchargobble{#7}%
+ \else\eth@altchar{#3}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \eth@res
+}
+% \end{macrocode}
+%
+% Usually we expect a single vowel, but if the vowel is
+% \texttt{u} or \texttt{U}, another \texttt{A} might
+% follow to indicate a diphtong.
+%
+% \begin{macrocode}
+\newcommand{\eth@three@norm}[8]{%
+ \ifx\@let@token a\eth@altchargobble{#1}%
+ \else\ifx\@let@token A\eth@altchargobble{#2}%
+ \else\ifx\@let@token e\eth@altchargobble{#3}%
+ \else\ifx\@let@token E\eth@altchargobble{#4}%
+ \else\ifx\@let@token i\eth@altchargobble{#5}%
+ \else\ifx\@let@token I\eth@altchargobble{#5}%
+ \else\ifx\@let@token o\eth@altchargobble{#6}%
+ \else\ifx\@let@token O\eth@altchargobble{#6}%
+ \else\ifx\@let@token u\eth@testA{#8}{#7}%
+ \else\ifx\@let@token U\eth@testA{#8}{#7}%
+ \else\eth@altchar{#3}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \eth@res
+}
+% \end{macrocode}
+%
+% At last we must deal with the case where
+% a \texttt{u} might actually be followed by a
+% whole range of different vowels.
+%
+% \begin{macrocode}
+\newcommand{\eth@three@full}[8]{%
+ \ifx\@let@token a\eth@altchargobble{#1}%
+ \else\ifx\@let@token A\eth@altchargobble{#2}%
+ \else\ifx\@let@token e\eth@altchargobble{#3}%
+ \else\ifx\@let@token E\eth@altchargobble{#4}%
+ \else\ifx\@let@token i\eth@altchargobble{#5}%
+ \else\ifx\@let@token I\eth@altchargobble{#5}%
+ \else\ifx\@let@token o\eth@altchargobble{#6}%
+ \else\ifx\@let@token O\eth@altchargobble{#6}%
+ \else\ifx\@let@token u\def\eth@res{\eth@three@help{#8}{#7}}%
+ \else\ifx\@let@token U\def\eth@res{\eth@three@help{#8}{#7}}%
+ \else\eth@altchar{#3}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \eth@res
+}
+% \end{macrocode}
+%
+% |\eth@three@help| is called if we need to examine the
+% fourth character. The first argument is supposed
+% to be a list of five character codes, the second
+% is an alternative character code, and the third
+% is an already processed character \texttt{u} which
+% we will gobble on the fly.
+%
+% \begin{macrocode}
+\newcommand{\eth@three@help}[3]{%
+ \def\eth@res{\eth@three@part#1{#2}}%
+ \futurelet\@let@token\eth@res
+}
+\newcommand{\eth@three@part}[6]{%
+ \ifx\@let@token a\eth@altchargobble{#1}%
+ \else\ifx\@let@token A\eth@altchargobble{#2}%
+ \else\ifx\@let@token e\eth@altchargobble{#3}%
+ \else\ifx\@let@token E\eth@altchargobble{#4}%
+ \else\ifx\@let@token i\eth@altchargobble{#5}%
+ \else\ifx\@let@token I\eth@altchargobble{#5}%
+ \else\eth@altchar{#6}\fi\fi\fi\fi\fi\fi
+ \eth@res
+}
+% \end{macrocode}
+%
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\eth@hatc}
+% \begin{macro}{\eth@dotc}
+% \begin{macro}{\eth@hatC}
+% \begin{macro}{\eth@barC}
+% \begin{macro}{\eth@dotd}
+% \begin{macro}{\eth@hatg}
+% \begin{macro}{\eth@accg}
+% \begin{macro}{\eth@dotg}
+% \begin{macro}{\eth@acch}
+% \begin{macro}{\eth@barh}
+% \begin{macro}{\eth@doth}
+% \begin{macro}{\eth@acck}
+% \begin{macro}{\eth@bark}
+% \begin{macro}{\eth@tiln}
+% \begin{macro}{\eth@dotp}
+% \begin{macro}{\eth@accq}
+% \begin{macro}{\eth@dotq}
+% \begin{macro}{\eth@hats}
+% \begin{macro}{\eth@accs}
+% \begin{macro}{\eth@dots}
+% \begin{macro}{\eth@dott}
+% \begin{macro}{\eth@hatz}
+% For each of the shorthands |^c|, |.c|, |^C|, |_C|, |.d|,
+% |^g|, |'g|, |_h|, |'h|, |.h|, |k'|, |_k|, |~n|,
+% |.p|, |'q|, |.q|, |^s|, |'s|, |.s|, |.t|, and |^z|
+% we will define macros that
+% handle the check for additional characters.
+% These macros call |\eth@three@norm| or some of the
+% related macros to evaluate the
+% characters following the shorthand. We provide the
+% character codes for the current consonant as
+% arguments to the call of the main macro.
+%
+% \begin{macrocode}
+\DeclareRobustCommand{\eth@hatc}{%
+ \eth@three@norm{104}{107}{109}%
+ {108}{106}{110}{105}%
+ {111}%
+}
+\DeclareRobustCommand{\eth@dotc}{%
+ \eth@three@short{216}{219}{221}%
+ {220}{218}{222}{217}%
+}
+\DeclareRobustCommand{\eth@hatC}{%
+ \ifethvariantC
+ \bbl@afterelse
+ \eth@three@norm{192}{195}{197}%
+ {196}{194}{198}{193}%
+ {199}%
+ \else
+ \bbl@afterfi
+ \eth@three@norm{184}{187}{189}%
+ {188}{186}{190}{185}%
+ {191}%
+ \fi
+}
+\DeclareRobustCommand{\eth@dotd}{%
+ \eth@three@norm{152}{155}{157}%
+ {156}{154}{158}{153}%
+ {159}%
+}
+\DeclareRobustCommand{\eth@hatg}{%
+ \eth@three@norm{160}{163}{165}%
+ {164}{162}{166}{161}%
+ {167}%
+}
+\DeclareRobustCommand{\eth@accg}{%
+ \eth@three@short{248}{251}{253}%
+ {252}{250}{254}{249}%
+}
+\DeclareRobustCommand{\eth@dotg}{%
+ \eth@three@full{168}{171}{173}%
+ {172}{170}{174}{169}%
+ {{24}{27}{29}%
+ {28}{26}}%
+}
+\DeclareRobustCommand{\eth@acch}{%
+ \eth@three@short{240}{243}{245}%
+ {244}{242}{246}{241}%
+}
+\DeclareRobustCommand{\eth@barh}{%
+ \eth@three@full{112}{115}{117}%
+ {116}{114}{118}{113}%
+ {{8}{11}{13}%
+ {12}{10}}%
+}
+\DeclareRobustCommand{\eth@doth}{%
+ \eth@three@norm{72}{75}{77}%
+ {76}{74}{78}{73}%
+ {79}%
+}
+\DeclareRobustCommand{\eth@acck}{%
+ \eth@three@short{232}{235}{237}%
+ {236}{234}{238}{233}%
+}
+\DeclareRobustCommand{\eth@bark}{%
+ \eth@three@full{136}{139}{141}%
+ {140}{138}{142}{137}%
+ {{16}{19}{21}%
+ {20}{18}}%
+}
+\DeclareRobustCommand{\eth@tiln}{%
+ \eth@three@norm{120}{123}{125}%
+ {124}{122}{126}{121}%
+ {127}%
+}
+\DeclareRobustCommand{\eth@dotp}{%
+ \eth@three@norm{200}{203}{205}%
+ {204}{202}{206}{201}%
+ {207}%
+}
+\DeclareRobustCommand{\eth@accq}{%
+ \eth@three@short{224}{227}{229}%
+ {228}{226}{230}{225}%
+}
+\DeclareRobustCommand{\eth@dotq}{%
+ \eth@three@full{96}{99}{101}%
+ {100}{98}{102}{97}%
+ {{0}{3}{5}%
+ {4}{2}}%
+}
+\DeclareRobustCommand{\eth@hats}{%
+ \eth@three@norm{88}{91}{93}%
+ {92}{90}{94}{89}%
+ {95}%
+}
+\DeclareRobustCommand{\eth@accs}{%
+ \eth@three@norm{80}{83}{85}%
+ {84}{82}{86}{81}%
+ {87}%
+}
+\DeclareRobustCommand{\eth@dots}{%
+ \eth@three@norm{208}{211}{213}%
+ {212}{210}{214}{209}%
+ {215}%
+}
+\DeclareRobustCommand{\eth@dott}{%
+ \eth@three@norm{176}{179}{181}%
+ {180}{178}{182}{177}%
+ {183}%
+}
+\DeclareRobustCommand{\eth@hatz}{%
+ \eth@three@norm{144}{147}{149}%
+ {148}{146}{150}{145}%
+ {151}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% For Ethiopian the characters |~|, |^|, |'|, |_|, |.| and |:|
+% are made active. This is done once, later on their definitions
+% may vary.
+% \begin{macrocode}
+\initiate@active@char{~}
+\initiate@active@char{^}
+\initiate@active@char{'}
+\initiate@active@char{_}
+\initiate@active@char{.}
+\initiate@active@char{:}
+% \end{macrocode}
+%
+% The macro |\extrasethiop| will perform all the extra
+% definitions needed for the Ethiopian language, among them
+% the activation of the special characters. The macro
+% |\noextrasethiop| is supposed to cancel the actions of
+% |\extrasethiop|. However, |'| must \emph{not} be deactivated,
+% in order to make it usable in math mode.
+% \begin{macrocode}
+\addto\extrasethiop{\languageshorthands{ethiop}}
+\addto\extrasethiop{%
+ \bbl@activate{~}%
+ \bbl@activate{^}%
+ \bbl@activate{'}%
+ \bbl@activate{_}%
+ \bbl@activate{.}%
+ \bbl@activate{:}}
+\addto\noextrasethiop{%
+ \bbl@deactivate{~}%
+ \bbl@deactivate{^}%
+ \bbl@deactivate{_}%
+ \bbl@deactivate{.}%
+ \bbl@deactivate{:}}
+% \end{macrocode}
+%
+% When the active characters appear in an environment where their
+% special behaviour is not wanted they should give an `expected'
+% result. Therefore we define shorthands at system level first.
+% If this is not done, \TeX\ goes into an infinite loop
+% as soon as an active character is followed by a |{|.
+% This is unexpected.
+% \begin{macrocode}
+\declare@shorthand{system}{^}{\csname normal@char\string^\endcsname}
+\declare@shorthand{system}{_}{\csname normal@char\string_\endcsname}
+\declare@shorthand{system}{.}{\csname normal@char\string.\endcsname}
+% \end{macrocode}
+% The |'| must not be replaced by its normal char, because that
+% is converted to an active char in math mode. Then the
+% shorthand code is again executed and the system goes into an
+% infinite loop.
+% \begin{macrocode}
+\declare@shorthand{system}{'}{\textormath
+ {\csname normal@char\string'\endcsname}%
+ {\sp\bgroup\prim@s}%
+}
+% \end{macrocode}
+%
+% The shorthand |:| will not simply be replaced by
+% an ordinary character, because the associated
+% character indicates an interword space. Before and after
+% such a space we want to get a little stretchable
+% glue, so we have to insert it by hand. A little macro
+% will do that for us.
+%
+% Just in case the user typed the spaces himself, they
+% will be automatically removed in order to catch the most
+% common typing errors. We have to use two different
+% methods: After the |:| we can simply ignore space tokens by
+% invoking |\ignorespaces|. Before the |:| we check if the last
+% skip in the horizontal list matches the skip generated by a space
+% token. We cannot directly check whether the last token was
+% indeed a space token, but this heuristic is sufficiently good.
+% \begin{macro}{\eth@punctglue}
+% \begin{macrocode}
+\def\eth@punctglue#1#2{%
+ \ifmmode
+ #2%
+ \else
+ \ifhmode
+ \ifdim\lastskip=\fontdimen2\font\relax
+ \unskip
+ \fi
+ \fi
+ \nobreak
+ \ethglue
+ #1%
+ \allowbreak
+ \ethglue
+ \expandafter
+ \ignorespaces
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% We can now define the shorthand.
+% \begin{macrocode}
+\declare@shorthand{system}{:}{%
+ \eth@punctglue{\char58 }%
+ {\char58 }%
+}
+% \end{macrocode}
+%
+% The double quote needs some extra treatment in math mode.
+%
+% \changes{v0.5}{1997/06/18}{Correction for double primes in math mode.}
+% \begin{macrocode}
+\declare@shorthand{ethiop}{''}{\textormath
+ {\symbol{34}}{\sp\bgroup\prime\prim@s}}
+% \end{macrocode}
+%
+% Now we can define the shorthands for Ethiopian. Most of the work
+% is already done by the macros we met earlier on.
+%
+% \changes{v0.3}{1997/04/24}{Made the shorthands
+% work as expected within mathmode.}
+% \begin{macrocode}
+\declare@shorthand{ethiop}{^c}{\textormath
+ {\futurelet\@let@token\eth@hatc}{\sp c}}
+\declare@shorthand{ethiop}{^C}{\textormath
+ {\futurelet\@let@token\eth@hatC}{\sp C}}
+\declare@shorthand{ethiop}{.c}{\textormath
+ {\futurelet\@let@token\eth@dotc}%
+ {\csname normal@char\string.\endcsname c}}
+\declare@shorthand{ethiop}{.d}{\textormath
+ {\futurelet\@let@token\eth@dotd}%
+ {\csname normal@char\string.\endcsname d}}
+\declare@shorthand{ethiop}{^g}{\textormath
+ {\futurelet\@let@token\eth@hatg}{\sp g}}
+\declare@shorthand{ethiop}{'g}{\textormath
+ {\futurelet\@let@token\eth@accg}%
+ {\csname normal@char\string'\endcsname g}}
+\declare@shorthand{ethiop}{.g}{\textormath
+ {\futurelet\@let@token\eth@dotg}%
+ {\csname normal@char\string.\endcsname g}}
+\declare@shorthand{ethiop}{_h}{\textormath
+ {\futurelet\@let@token\eth@barh}{\sb h}}
+\declare@shorthand{ethiop}{'h}{\textormath
+ {\futurelet\@let@token\eth@acch}%
+ {\csname normal@char\string'\endcsname h}}
+\declare@shorthand{ethiop}{.h}{\textormath
+ {\futurelet\@let@token\eth@doth}%
+ {\csname normal@char\string.\endcsname g}}
+\declare@shorthand{ethiop}{_k}{\textormath
+ {\futurelet\@let@token\eth@bark}{\sb k}}
+\declare@shorthand{ethiop}{'k}{\textormath
+ {\futurelet\@let@token\eth@acck}%
+ {\csname normal@char\string'\endcsname k}}
+\declare@shorthand{ethiop}{~n}{\textormath
+ {\futurelet\@let@token\eth@tiln}%
+ {\csname normal@char\string~\endcsname n}}
+\declare@shorthand{ethiop}{.p}{\textormath
+ {\futurelet\@let@token\eth@dotp}%
+ {\csname normal@char\string.\endcsname p}}
+\declare@shorthand{ethiop}{'q}{\textormath
+ {\futurelet\@let@token\eth@accq}%
+ {\csname normal@char\string'\endcsname q}}
+\declare@shorthand{ethiop}{.q}{\textormath
+ {\futurelet\@let@token\eth@dotq}%
+ {\csname normal@char\string.\endcsname q}}
+\declare@shorthand{ethiop}{^s}{\textormath
+ {\futurelet\@let@token\eth@hats}{\sp s}}
+\declare@shorthand{ethiop}{'s}{\textormath
+ {\futurelet\@let@token\eth@accs}%
+ {\csname normal@char\string'\endcsname s}}
+\declare@shorthand{ethiop}{.s}{\textormath
+ {\futurelet\@let@token\eth@dots}%
+ {\csname normal@char\string.\endcsname s}}
+\declare@shorthand{ethiop}{.t}{\textormath
+ {\futurelet\@let@token\eth@dott}%
+ {\csname normal@char\string.\endcsname t}}
+\declare@shorthand{ethiop}{^z}{\textormath
+ {\futurelet\@let@token\eth@hatz}{\sp z}}
+% \end{macrocode}
+%
+% \changes{v0.4}{1997/06/12}{Added three letters to
+% get the complete Unicode character set.}
+%
+% Now follow the shorthands |~mA|, |~ri|, and |~fi|.
+% Already the first two characters determine the shorthand,
+% but we need to gobble the third, if if is there.
+% \begin{macrocode}
+\declare@shorthand{ethiop}{~m}{%
+ \textormath{%
+ \eth@doaltchar{40}%
+ \@ifnextchar A{\@gobble}{}%
+ }{\csname normal@char\string~\endcsname m}%
+}
+\declare@shorthand{ethiop}{~r}{%
+ \textormath{%
+ \eth@doaltchar{41}%
+ \@ifnextchar i{\@gobble}{}%
+ }{\csname normal@char\string~\endcsname r}%
+}
+\declare@shorthand{ethiop}{~f}{%
+ \textormath{%
+ \eth@doaltchar{42}%
+ \@ifnextchar i{\@gobble}{}%
+ }{\csname normal@char\string~\endcsname f}%
+}
+% \end{macrocode}
+%
+% The following shorthands do not start syllables, but
+% they denote characters in their own right.
+%
+% \begin{macrocode}
+\declare@shorthand{ethiop}{'A}{\textormath
+ {\eth@doaltchar{131}}{\csname normal@char\string'\endcsname A}}
+\declare@shorthand{ethiop}{'a}{\textormath
+ {\eth@doaltchar{128}}{\csname normal@char\string'\endcsname a}}
+\declare@shorthand{ethiop}{'E}{\textormath
+ {\eth@doaltchar{132}}{\csname normal@char\string'\endcsname E}}
+\declare@shorthand{ethiop}{'e}{\textormath
+ {\eth@doaltchar{133}}{\csname normal@char\string'\endcsname e}}
+\declare@shorthand{ethiop}{'I}{\textormath
+ {\eth@doaltchar{130}}{\csname normal@char\string'\endcsname I}}
+\declare@shorthand{ethiop}{'i}{\textormath
+ {\eth@doaltchar{130}}{\csname normal@char\string'\endcsname i}}
+\declare@shorthand{ethiop}{'O}{\textormath
+ {\eth@doaltchar{134}}{\csname normal@char\string'\endcsname O}}
+\declare@shorthand{ethiop}{'o}{\textormath
+ {\eth@doaltchar{134}}{\csname normal@char\string'\endcsname o}}
+\declare@shorthand{ethiop}{'U}{\textormath
+ {\eth@ifnextA{135}{129}{U}}{\csname normal@char\string'\endcsname U}}
+\declare@shorthand{ethiop}{'u}{\textormath
+ {\eth@ifnextA{135}{129}{U}}{\csname normal@char\string'\endcsname u}}
+% \end{macrocode}
+%
+% There are some punctuation characters that also
+% require a shorthand. It would be possible to form
+% the characters using ligatures, if |:| were not activated.
+% But |:| must be activated to get the spacing effect we
+% mentioned above.
+% \begin{macrocode}
+\declare@shorthand{ethiop}{:=}{%
+ \eth@punctglue{\char42 }%
+ {\char58 =}%
+}%
+\declare@shorthand{ethiop}{:-}{%
+ \eth@punctglue{\char123 }%
+ {\char58 -}%
+}%
+\declare@shorthand{ethiop}{::}{%
+ \eth@punctglue{\char126 }%
+ {\char58 \char58 }%
+}%
+% \end{macrocode}
+%
+% \changes{v0.4}{1997/06/12}{Added the paragraph delimiter
+% character to get the complete Unicode character set.}
+%
+% The sequence \texttt{:\char124 :} results in a rare seven dot
+% paragraph delimiter.
+% \begin{macrocode}
+\declare@shorthand{ethiop}{:|}{%
+ \@ifnextchar:{%
+ \eth@punctglue{\char125 }%
+ {\char58 |\char58 }%
+ \@gobble
+ }{%
+ \char58 |%
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\eth@defaultfamily}
+% \begin{macro}{\eth@altfamily}
+% For the \TeX\ transliteration we must use
+% the font family |etha| as the default. The |ethb|
+% family contains the additional characters.
+% \begin{macrocode}
+\def\eth@defaultfamily{etha}%
+\def\eth@altfamily{ethb}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ethiop}
+% \begin{macro}{\@ethiop}
+% \begin{macro}{\ethnum}
+% \begin{macro}{\ethnum@one}
+% \begin{macro}{\ethnum@two}
+% \begin{macro}{\ethnum@three}
+% \begin{macro}{\ethnum@four}
+% \begin{macro}{\ethnum@five}
+% \begin{macro}{\ethnum@six}
+% We provide a special macro that outputs a counter as an
+% Ethiopian number, namely |\ethiop|. It is accompanied by some
+% auxiliary macros that are called depending on the range of the
+% number. |\@ethiop| converts its argument (an ordinary number)
+% to the Ethiopian format. The name |\@ethiop| is required
+% so that a user can say |\pagenumbering{ethiop}| and get
+% Ethiopian page numbers. |\ethnum| is provided as a nickname
+% for |\@ethiop|, so that it may be called from user code.
+%
+% These macros should work even when the Ethiopian
+% language is not currently selected, because
+% counters might be printed during an output routine
+% where we cannot make any assumptions on the
+% current enviroment.
+% \begin{macrocode}
+\def\ethiop#1{\expandafter\@ethiop\csname c@#1\endcsname}
+\def\@ethiop#1{{%
+ \fontencoding{U}%
+ \fontfamily{\eth@altfamily}\selectfont
+ \ifnum#1<1\relax\ethnum@err{#1}%
+ \else\ifnum#1<10\relax\expandafter\ethnum@one\number #1%
+ \else\ifnum#1<100\relax\expandafter\ethnum@two\number #1%
+ \else\ifnum#1<1000\relax\expandafter\ethnum@three\number #1%
+ \else\ifnum#1<10000\relax\expandafter\ethnum@four\number #1%
+ \else\ifnum#1<100000\relax\expandafter\ethnum@five\number #1%
+ \else\ifnum#1<1000000\relax\expandafter\ethnum@six\number #1%
+ \else
+ \fontfamily{\eth@defaultfamily}\selectfont
+ \ethnum@err
+ \number#1%
+ \fi\fi\fi\fi\fi\fi\fi
+}}
+\let\ethnum\@ethiop
+\newcommand{\ethnum@tens}[1]{%
+ \ifcase#1\or\char58 \or\char59 \or\char60
+ \or\char61 \or\char62 \or\char63
+ \or\char64 \or\char65 \or\char66 \fi
+ \relax
+}
+\newcommand{\ethnum@one}[1]{%
+ \ifnum#1>0\relax#1\fi
+}
+\newcommand{\ethnum@two}[1]{%
+ \ethnum@tens#1%
+ \ethnum@one
+}
+\newcommand{\ethnum@three}[1]{%
+ \ifnum#1>1\relax#1\fi
+ \ifnum#1>0\relax\char67\fi
+ \ethnum@two
+}
+\newcommand{\ethnum@four}[1]{%
+ \ethnum@tens#1%
+ \ifnum#1>0\relax\char67\fi
+ \ethnum@three
+}
+\newcommand{\ethnum@five}[1]{%
+ \ifnum#1>1\relax#1\fi
+ \ifnum#1>0\relax\char68\fi
+ \ethnum@four
+}
+\newcommand{\ethnum@six}[1]{%
+ \ethnum@tens#1%
+ \ifnum#1>0\relax\char68\fi
+ \ethnum@five
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\captionsethiop}
+% The macro |\captionsethiop| defines all strings used in the
+% four standard documentclasses provided with \LaTeX. The
+% words will probably change in future versions. Hints
+% for improvement are invited.
+%
+% We need to call the macro |\eth@doaltchar| to switch to the
+% secondary font for some characters.
+% \begin{macrocode}
+\addto\captionsethiop{%
+ \def\prefacename{maqedeme}%
+ \def\refname{ya\eth@doaltchar{85}na
+ \eth@doaltchar{209}hUfe
+ mene\eth@doaltchar{189}}%
+ \def\abstractname{%
+ \eth@doaltchar{128}\eth@doaltchar{117}%
+ \eth@doaltchar{213}rota
+ \eth@doaltchar{213}huf}%
+ \def\bibname{wAbI
+ ma\eth@doaltchar{213}hAfete}%
+ \def\chaptername{kefele}%
+ \def\appendixname{madbal}%
+ \def\contentsname{yezate}%
+ \def\listfigurename{%
+ ya\eth@doaltchar{85}`elo\eth@doaltchar{109}
+ mAwe\eth@doaltchar{187}}%
+ \def\listtablename{%
+ yasane\eth@doaltchar{176}ra\eth@doaltchar{149}
+ mAwe\eth@doaltchar{187}}%
+ \def\indexname{mehe\eth@doaltchar{211}re
+ qAle}%
+ \def\figurename{\eth@doaltchar{85}`ele}%
+ \def\tablename{%
+ sane\eth@doaltchar{176}ra\eth@doaltchar{149}}%
+ \def\partname{ne`Use kefele}%
+ \def\enclname{%
+ \eth@doaltchar{128}bArIwO\eth@doaltchar{109}}%
+ \def\ccname{gelebA\eth@doaltchar{189}}%
+ \def\headtoname{la}%
+ \def\pagename{ga\eth@doaltchar{213}}%
+ \def\seename{yemalekatU}%
+ \def\alsoname{yeheneme yemalekatU}%
+ \def\proofname{mAragAga\eth@doaltchar{187}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\eth@monthname}
+% There are 13 months in the Ethiopian calendar. We
+% make a list of their names here.
+% \begin{macrocode}
+\newcommand{\eth@monthname}[1]{\ifcase#1\or
+ masekarame\or
+ \eth@doaltchar{181}qemete\or
+ hedAre\or
+ tAhesAse\or
+ \eth@doaltchar{181}re\or
+ yakAtite\or
+ magAbite\or
+ mIyAzeyA\or
+ genebote\or
+ sanE\or
+ \eth@doaltchar{72}melE\or
+ na\eth@doaltchar{72}sE\or
+ \eth@doaltchar{200}gUmEne\fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% Ok, that's it for the \TeX part. Do you still remember that we are
+% inside a \emph{large} |\if| construct? Here comes the |\else|.
+% \begin{macrocode}
+\else
+% \end{macrocode}
+%
+% \subsubsection*{$\Omega$ Setup}
+%
+% The setup for the $\Omega$ system is much shorter, because
+% we can assume that the actual input is done in Unicode, so we
+% can skip the handling of shorthands. But we want to install
+% an $\Omega$ translation process that removes unneccessary spaces
+% and adds a little stretchable glue around punctuation marks.
+% \begin{macrocode}
+\ocp\eth@spc=ethospc
+% \end{macrocode}
+% The translation in threaded into a translation list.
+% \begin{macrocode}
+\ocplist\eth@cpl=
+ \addbeforeocplist 10 \eth@spc
+ \nullocplist
+% \end{macrocode}
+% The translation list is activated during Ethiopian
+% typesetting.
+% \begin{macrocode}
+\addto\extrasethiop{%
+ \pushocplist\eth@cpl}
+\addto\noextrasethiop{%
+ \popocplist}
+% \end{macrocode}
+%
+% \begin{macro}{\ethiop}
+% \begin{macro}{\@ethiop}
+% \begin{macro}{\ethnum}
+% \begin{macro}{\ethnum@one}
+% \begin{macro}{\ethnum@two}
+% \begin{macro}{\ethnum@three}
+% \begin{macro}{\ethnum@four}
+% \begin{macro}{\ethnum@five}
+% \begin{macro}{\ethnum@six}
+% The macros for the output of ethiopic numbers
+% need to be changed a little, but no big deal here.
+%
+% \begin{macrocode}
+\def\ethiop#1{\expandafter\@ethiop\csname c@#1\endcsname}
+\def\@ethiop#1{{%
+ \fontencoding{U}%
+ \fontfamily{\eth@altfamily}\selectfont
+ \ifnum#1<1\relax\ethnum@err{#1}%
+ \else\ifnum#1<10\relax\expandafter\ethnum@one\number #1%
+ \else\ifnum#1<100\relax\expandafter\ethnum@two\number #1%
+ \else\ifnum#1<1000\relax\expandafter\ethnum@three\number #1%
+ \else\ifnum#1<10000\relax\expandafter\ethnum@four\number #1%
+ \else\ifnum#1<100000\relax\expandafter\ethnum@five\number #1%
+ \else\ifnum#1<1000000\relax\expandafter\ethnum@six\number #1%
+ \else
+ \fontfamily{\eth@defaultfamily}\selectfont
+ \ethnum@err
+ \number#1%
+ \fi\fi\fi\fi\fi\fi\fi
+}}
+\let\ethnum\@ethiop
+\newcommand{\ethnum@tens}[1]{%
+ \ifcase#1\or^^^^1372\or^^^^1373\or^^^^1374%
+ \or^^^^1375\or^^^^1376\or^^^^1377%
+ \or^^^^1378\or^^^^1379\or^^^^137a\fi
+}%
+\newcommand{\ethnum@one}[1]{%
+ \ifcase#1\or^^^^1369\or^^^^136a\or^^^^136b%
+ \or^^^^136c\or^^^^136d\or^^^^136e%
+ \or^^^^136f\or^^^^1370\or^^^^1371\fi
+}%
+\newcommand{\ethnum@two}[1]{%
+ \ethnum@tens#1%
+ \ethnum@one
+}
+\newcommand{\ethnum@three}[1]{%
+ \ifnum#1>1\relax\ethnum@one#1\fi
+ \ifnum#1>0\relax^^^^137b\fi
+ \ethnum@two
+}
+\newcommand{\ethnum@four}[1]{%
+ \ethnum@tens#1%
+ \ifnum#1>0\relax^^^^137b\fi
+ \ethnum@three
+}
+\newcommand{\ethnum@five}[1]{%
+ \ifnum#1>1\relax\ethnum@one#1\fi
+ \ifnum#1>0\relax^^^^137c\fi
+ \ethnum@four
+}
+\newcommand{\ethnum@six}[1]{%
+ \ethnum@tens#1%
+ \ifnum#1>0\relax^^^^137c\fi
+ \ethnum@five
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\eth@defaultfamily}
+% \begin{macro}{\eth@altfamily}
+% For the Unicode input we must use
+% the font family |etho| as the default. We do not
+% really need an alternate font, but for compatibility,
+% We define the appropriate macro.
+% \begin{macrocode}
+\def\eth@defaultfamily{etho}
+\def\eth@altfamily{etho}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\captionsethiop}
+% For $\Omega$ the macro |\captionsethiop| will use |^^^^| escapes
+% to specify the various characters.
+%
+% \begin{macrocode}
+\addto\captionsethiop{%
+ \def\prefacename{^^^^1218^^^^1245^^^^12f5^^^^121d}%
+ \def\refname{^^^^12e8^^^^1225^^^^1290
+ ^^^^1339^^^^1201^^^^134d ^^^^121d^^^^1295^^^^132d}%
+ \def\abstractname{^^^^12a0^^^^1285^^^^133d^^^^122e^^^^1270
+ ^^^^133d^^^^1201^^^^134d}%
+ \def\bibname{^^^^12cb^^^^1262
+ ^^^^1218^^^^133d^^^^1203^^^^134d^^^^1275}%
+ \def\chaptername{^^^^12ad^^^^134d^^^^120d}%
+ \def\appendixname{^^^^1218^^^^12f5^^^^1260^^^^120d}%
+ \def\contentsname{^^^^12ed^^^^12d8^^^^1275}%
+ \def\listfigurename{^^^^12e8^^^^1225^^^^12d5^^^^120e^^^^127d
+ ^^^^121b^^^^12cd^^^^132b}%
+ \def\listtablename{^^^^12e8^^^^1230^^^^1295^^^^1320^^^^1228^^^^12e5
+ ^^^^121b^^^^12cd^^^^132b}%
+ \def\indexname{^^^^121d^^^^1205^^^^133b^^^^122d ^^^^1243^^^^120d}%
+ \def\figurename{^^^^1225^^^^12d5^^^^120d}%
+ \def\tablename{^^^^1230^^^^1295^^^^1320^^^^1228^^^^12e5}%
+ \def\partname{^^^^1295^^^^12d1^^^^1235 ^^^^12ad^^^^134d^^^^120d}%
+ \def\enclname{^^^^12a0^^^^1263^^^^122a^^^^12ce^^^^127d}%
+ \def\ccname{^^^^130d^^^^120d^^^^1263^^^^132d}%
+ \def\headtoname{^^^^1208}%
+ \def\pagename{^^^^1308^^^^133d}%
+ \def\seename{^^^^12ed^^^^1218^^^^120d^^^^12a8^^^^1271}%
+ \def\alsoname{^^^^12ed^^^^1205^^^^1295^^^^121d
+ ^^^^12ed^^^^1218^^^^120d^^^^12a8^^^^1271}%
+ \def\proofname{^^^^121b^^^^1228^^^^130b^^^^1308^^^^132b}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\eth@monthname}
+% Here is the table of months for $\Omega$.
+% \begin{macrocode}
+\newcommand{\eth@monthname}[1]{\ifcase#1\or
+ ^^^^1218^^^^1235^^^^12a8^^^^1228^^^^121d\or
+ ^^^^1325^^^^1245^^^^121d^^^^1275\or
+ ^^^^1205^^^^12f3^^^^122d\or
+ ^^^^1273^^^^1205^^^^1233^^^^1235\or
+ ^^^^1325^^^^122d\or
+ ^^^^12e8^^^^12ab^^^^1272^^^^1275\or
+ ^^^^1218^^^^130b^^^^1262^^^^1275\or
+ ^^^^121a^^^^12eb^^^^12dd^^^^12eb\or
+ ^^^^130d^^^^1295^^^^1266^^^^1275\or
+ ^^^^1230^^^^1294\or
+ ^^^^1210^^^^121d^^^^120c\or
+ ^^^^1290^^^^1210^^^^1234\or
+ ^^^^1330^^^^1309^^^^121c^^^^1295\fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% Now we are finished with the \emph{large} |\if| structure.
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+%
+% \subsubsection*{Final Processing}
+%
+% It is possible that a site might need to add some extra code to
+% the \babel\ macros. To enable this we load a local configuration
+% file, \file{ethiop.cfg}, if it is found on \TeX's search path.
+% \begin{macrocode}
+\loadlocalcfg{ethiop}
+% \end{macrocode}
+%
+% Our last action is to make a note that the commands we have just
+% defined, will be executed by calling the macro |\selectlanguage|
+% at the beginning of the document.
+% \begin{macrocode}
+\main@language{ethiop}
+% \end{macrocode}
+% Finally, the category code of \texttt{@} is reset to its original
+% value. The macrospace used by |\atcatcode| is freed.
+% \begin{macrocode}
+\catcode`\@=\atcatcode \let\atcatcode\relax
+%</code>
+% \end{macrocode}
+%
+% The style file \file{ethiop.sty} is provided to allow
+% |\usepackage{ethiop}| within a document's preamble.
+%
+% \changes{v0.7}{1998/03/30}{Removed the use of |\RequirePackage|}
+%
+% \begin{macrocode}
+%<*style>
+\NeedsTeXFormat{LaTeX2e}[1996/12/01]
+\ifx\LdfInit\@undefined
+ \def\LdfInit{%
+ \chardef\atcatcode=\catcode`\@
+ \catcode`\@=11\relax
+ \input babel.def\relax
+ \catcode`\@=\atcatcode \let\atcatcode\relax
+ \LdfInit}
+\fi
+\input ethiop.ldf\relax
+%</style>
+% \end{macrocode}
+%
+% We need two new font families for the Ethiopian language,
+% because there are more than 256 different characters.
+% Luckily we do not need a new font encoding, the existing
+% encoding \texttt{U} will do fine.
+%
+% \changes{v0.3}{1997/04/24}{Added support for 5 point fonts.}
+%
+% \begin{macrocode}
+%<*etha>
+\DeclareFontFamily{U}{etha}{}
+
+% Ethiopic A
+\DeclareFontShape{U}{etha}{m}{n}{
+ <5> etha6
+ <6> <7> <8> gen * etha
+ <9> <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88> etha10}{}
+
+% Ethiopic A Slanted
+\DeclareFontShape{U}{etha}{m}{sl}{
+ <-> ethas10}{}
+
+% Ethiopic A Italics
+\DeclareFontShape{U}{etha}{m}{it}{
+ <-> ssub * etha/m/sl}{}
+
+% Ethiopic A Bold
+\DeclareFontShape{U}{etha}{bx}{n}{
+ <5> <6> <7> <8> <9> ethab9
+ <10> ethab10
+ <10.95> ethab11
+ <12> ethab12
+ <14.4> ethab14
+ <17.28> <20.74> ethab18
+ <24.88> ethab24
+ <36> ethab36}{}
+
+% Ethiopic A Slanted Bold
+\DeclareFontShape{U}{etha}{bx}{sl}{
+ <5> <6> <7> <8> <9> ethasb9
+ <10> ethasb10
+ <10.95> ethasb11
+ <12> ethasb12
+ <14.4> ethasb14
+ <17.28> <20.74> ethasb18
+ <24.88> ethasb24
+ <36> ethasb36}{}
+
+% Ethiopic A Italics Bold
+\DeclareFontShape{U}{etha}{bx}{it}{
+ <-> ssub * etha/bx/sl}{}
+%</etha>
+% \end{macrocode}
+%
+% That was \file{uetha.fd}, now we have a look at \file{uethb.fd} where
+% only some minor changes are applied.
+%
+% \begin{macrocode}
+%<*ethb>
+\DeclareFontFamily{U}{ethb}{}
+
+% Ethiopic B
+\DeclareFontShape{U}{ethb}{m}{n}{
+ <5> ethb6
+ <6> <7> <8> gen * ethb
+ <9> <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88> ethb10}{}
+
+% Ethiopic B Slanted
+\DeclareFontShape{U}{ethb}{m}{sl}{
+ <-> ethbs10}{}
+
+% Ethiopic B Italics
+\DeclareFontShape{U}{ethb}{m}{it}{
+ <-> ssub * ethb/m/sl}{}
+
+% Ethiopic B Bold
+\DeclareFontShape{U}{ethb}{bx}{n}{
+ <5> <6> <7> <8> <9> ethbb9
+ <10> ethbb10
+ <10.95> ethbb11
+ <12> ethbb12
+ <14.4> ethbb14
+ <17.28> <20.74> ethbb18
+ <24.88> ethbb24
+ <36> ethbb36}{}
+
+% Ethiopic B Slanted Bold
+\DeclareFontShape{U}{ethb}{bx}{sl}{
+ <5> <6> <7> <8> <9> ethbsb9
+ <10> ethbsb10
+ <10.95> ethbsb11
+ <12> ethbsb12
+ <14.4> ethbsb14
+ <17.28> <20.74> ethbsb18
+ <24.88> ethbsb24
+ <36> ethbsb36}{}
+
+% Ethiopic B Italics Bold
+\DeclareFontShape{U}{ethb}{bx}{it}{
+ <-> ssub * ethb/bx/sl}{}
+%</ethb>
+% \end{macrocode}
+%
+% If we want to use $\Omega$, we need an additional
+% font family for the 16-bit fonts. At the moment
+% we will only provide a rudimentary set of fonts.
+%
+% \changes{v0.7}{1998/03/30}{Added support for $\Omega$.}
+%
+% \begin{macrocode}
+%<*etho>
+\DeclareFontFamily{U}{etho}{}
+
+% Ethiopic B
+\DeclareFontShape{U}{etho}{m}{n}{
+ <-> etho10}{}
+
+% Ethiopic B Slanted
+\DeclareFontShape{U}{etho}{m}{sl}{
+ <-> ethos10}{}
+
+% Ethiopic B Italics
+\DeclareFontShape{U}{etho}{m}{it}{
+ <-> ssub * etho/m/sl}{}
+
+% Ethiopic B Bold
+\DeclareFontShape{U}{etho}{bx}{n}{
+ <-> ethob10}{}
+
+% Ethiopic B Slanted Bold
+\DeclareFontShape{U}{etho}{bx}{sl}{
+ <-> ethosb10}{}
+
+% Ethiopic B Italics Bold
+\DeclareFontShape{U}{etho}{bx}{it}{
+ <-> ssub * etho/bx/sl}{}
+%</etho>
+% \end{macrocode}
+%
+% We would like compatibility with Arab\TeX, but Arab\TeX\ cannot
+% handle our active characters.
+% \begin{macrocode}
+%<*arab>
+\def\noethiop{%
+ \catcode`\^=7
+ \catcode`\_=8
+ \catcode`\.=12
+ \catcode`\:=12
+ \catcode`\'=12
+}
+% \end{macrocode}
+% We save the current category codes of the offending
+% characters before changing them.
+% We might save some time and space by assuming that
+% these characters are always active, but we do not take
+% any chances.
+% \begin{macrocode}
+\def\eth@arab@codes{%
+ \chardef\eth@hat@de=\catcode`\^%
+ \chardef\eth@bar@de=\catcode`\_%
+ \chardef\eth@dot@de=\catcode`\.%
+ \chardef\eth@col@de=\catcode`\:%
+ \chardef\eth@bkq@de=\catcode`\'%
+ \noethiop
+}
+\def\eth@unarab@codes{%
+ \catcode`\^=\eth@hat@de
+ \catcode`\_=\eth@bar@de
+ \catcode`\.=\eth@dot@de
+ \catcode`\:=\eth@col@de
+ \catcode`\'=\eth@bkq@de
+}
+% \end{macrocode}
+% We must patch the two internal
+% macros |\arab@codes| and |\unarab@codes|.
+%
+% The original definitions of the redefined macros are
+% inserted into the new definition by means of the
+% |\expandafter| primitive. This way we are less dependent on
+% the actual definition, so that we might survive a few
+% version changes of Arab\TeX.
+% \begin{macrocode}
+\expandafter\def\expandafter\arab@codes\expandafter{%
+ \expandafter\eth@arab@codes
+ \arab@codes
+}
+\expandafter\def\expandafter\unarab@codes\expandafter{%
+ \unarab@codes
+ \eth@unarab@codes
+}
+%</arab>
+% \end{macrocode}
+% \Finale
+%\endinput
+%% \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 \~}
+%%