% \iffalse meta-comment
%
% Copyright 1989-2003 Johannes L. Braams and any individual authors
% listed elsewhere in this file.  All rights reserved.
% 
% This file is part of the Babel system release 3.7.
% --------------------------------------------------
% 
% It may be distributed under the terms of the LaTeX Project Public
% License, as described in lppl.txt in the base LaTeX distribution.
% Either version 1.2 or, at your option, any later version.
% \fi
% \CheckSum{636}
%
% \iffalse
%    Tell the \LaTeX\ system who we are and write an entry on the
%    transcript.
%<*dtx>
\ProvidesFile{greek.dtx}
%</dtx>
%<code>\ProvidesLanguage{greek}
%\fi
%\ProvidesFile{greek.dtx}
        [2003/04/14 v1.3k Greek support from the babel system]
%\iffalse
%% File `greek.dtx'
%% Babel package for LaTeX version 2e
%% Copyright (C) 1989 -- 2003
%%           by Johannes Braams, TeXniek
%
%% Greek language Definition File
%% Copyright (C) 1997, 2003
%%           by Apostolos Syropoulos
%%              Johannes Braams, TeXniek
%
%% Please report errors to: Apostolos Syropoulos
%%                          apostolo@platon.ee.duth.gr or
%%                          apostolo@obelix.ee.duth.gr
%%                          (or J.L. Braams <babel@braams.cistron.nl)
%
%    This file is part of the babel system, it provides the source
%    code for the greek language definition file. The original
%    version of this file was written by Apostolos Syropoulos.
%    It was then enhanced by adding code from kdgreek.sty from David
%    Kastrup <dak@neuroinformatik.ruhr-uni-bochum.de> with his
%    consent. 
%<*filedriver>
\documentclass{ltxdoc}
\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}}
\newcommand*{\pkg}[1]{\texttt{#1}}
\begin{document}
 \DocInput{greek.dtx}
\end{document}
%</filedriver>
%\fi
% \GetFileInfo{greek.dtx}
%
% \changes{greek-1.0b}{1996/07/10}{Replaced \cs{undefined} with
%    \cs{@undefined} and \cs{empty} with \cs{@empty} for consistency
%    with \LaTeX} 
% \changes{greek-1.0b}{1996/10/10}{Moved the definition of
%    \cs{atcatcode} right to the beginning}
% \changes{greek-1.2}{1997/10/28}{Classical Greek is now a dialect}
% \changes{greek-1.2b}{1997/11/01}{Classical Greek is now called 
%   ``Polutoniko'' Greek. The previous name was at least misleading}
% \changes{greek-1.2c}{1998/06/26}{This version conforms to version
%   2.0 of the CB fonts and consequently we added a few new 
%   symbol-producing commands} 
% \changes{greek-1.3a}{1998/07/04}{polutoniko is now an attribute to
%    Greek, no longer a `dialect'}
%
%  \section{The Greek 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 is Apostolos Syropoulos
%    (\texttt{apostolo@platon.ee.duth.gr}), code from
%    \file{kdgreek.sty} by David Kastrup
%    \texttt{dak@neuroinformatik.ruhr-uni-bochum.de} was used to
%    enhance the support for typesetting greek texts.} defines all the
%    language definition macros for the Greek language, i.e.,
%    as it used today with only one accent, and the attribute
%    $\pi o\lambda\upsilon\tau o\nu\kappa\acute{o}$ (``Polutoniko'')
%    for typesetting greek text with all accents. This separation
%    arose out of the need to simplify things, for only very few
%    people will be really interested to typeset polytonic Greek
%    text.
%
%  \DescribeMacro\greektext
%  \DescribeMacro\latintext
%    The commands |\greektext| and |\latintext| can be used to switch
%    to greek or latin fonts. These are declarations.
%
%  \DescribeMacro\textgreek
%  \DescribeMacro\textlatin
%    The commands |\textgreek| and |\textlatin| both take one argument
%    which is then typeset using the requested font encoding.
%  \DescribeMacro\textol
%    The command |\greekol| switches to the greek outline font family,
%    while the command |\textol| typests a short text in outline font.
%    A number of extra greek characters are made available through the
%    added text commands |\stigma|, |\qoppa|, |\sampi|, |\ddigamma|,
%    |\Digamma|, |\euro|, |\permill|, and |\vardigamma|. 
%
%  \subsection{Typing conventions}
%
%    Entering greek text can be quite difficult because of the many
%    diacritical signs that need to be added for various purposes.
%    The fonts that are used to typeset Greek make this a lot
%    easier by offering a lot of ligatures. But in order for this to
%    work, some characters need to be considered as letters. These
%    characters are |<|, |>|, |~|, |`|, |'|, |"| and
%    \verb=|=. Therefore their |\lccode| is changed when Greek is in
%    effect. In order to let |\uppercase| give correct results, the
%    |\uccode| of these characters is set to a non-existing character
%    to make them disappear. Of course not all characters are needed
%    when typesetting ``modern'' $\mu o\nu o\tau o\nu
%    \iota\kappa\acute{o}$. In that case we only need the |'| and |"|
%    symbols which are treated in the proper way.
%
%  \subsection{Greek numbering}
%
%    The Greek alphabetical numbering system, like the Roman one, is 
%    still used in everyday life for short enumerations. Unfortunately 
%    most Greeks don't know how to write Greek numbers bigger than 20 or
%    30. Nevertheless, in official editions of the last century and
%    beginning of this century this numbering system was also used  for
%    dates and numbers in the range of several thousands. Nowadays
%    this numbering system is primary used by the Eastern Orthodox
%    Church and by certain scholars. It is hence necessary to be able
%    to typeset any Greek numeral up to \hbox{999\,999}. Here are the 
%    conventions:
%    \begin{itemize}
%    \item There is no Greek numeral for any number less than or equal
%      to $0$. 
%    \item Numbers from $1$ to $9$ are denoted by letters alpha, beta,
%      gamma,  delta, epsilon, stigma, zeta, eta, theta, followed by a
%      mark similar to the mathematical symbol ``prime''. (Nowadays
%      instead of letter stigma the digraph sigma tau is used for number
%      $6$. Mainly because the letter stigma is not always available, so
%      people opt to write down the first two letters of its name as an
%      alternative. In our implementation we produce the letter stigma,
%      not the digraph sigma tau.) 
%    \item Decades from $10$ to $90$ are denoted by letters iota,
%      kappa, lambda, mu, nu, xi, omikron, pi, qoppa, again followed by
%      the numeric mark. The qoppa used for this purpose has a special
%      zig-zag form, which doesn't resemble at all the original
%      `q'-like qoppa.
%    \item Hundreds from $100$ to $900$ are denoted by letters rho,
%      sigma, tau, upsilon, phi, chi, psi, omega, sampi, followed by the
%      numeric mark. 
%    \item Any number between $1$ and $999$ is obtained by a group of
%      letters denoting the hundreds decades and units, followed by a
%      numeric mark.
%    \item To denote thousands one uses the same method, but this time
%      the mark is placed in front of the letter, and under the baseline
%      (it is inverted by 180 degrees). When a group of letters denoting
%      thousands is followed by a group of letters denoting a number
%      under $1000$, then both marks are used. 
%    \end{itemize}
%
%    Using these conventions one obtains numbers up to \hbox{999\,999}. 
%  \DescribeMacro{\greeknumeral}
%    The command |\greeknumeral| makes it possible to typeset Greek
%    numerals. There is also an
%  \DescribeMacro{\Greeknumeral} 
%    ``uppercase'' version of this macro: |\Greeknumeral|.
%
%    Another system which was in wide use only in Athens, could
%    express any positive number. This system is implemented in 
%    package |athnum|.  
%
% \StopEventually{}
%
%    The macro |\LdfInit| takes care of preventing that this file is
%    loaded more than once, checking the category code of the
%    \texttt{@} sign, etc.
% \changes{greek-1.0b}{1996/11/02}{Now use \cs{LdfInit} to perform
%    initial checks} 
%    \begin{macrocode}
%<*code>
\LdfInit\CurrentOption{captions\CurrentOption}
%    \end{macrocode}
%    When the option \Lopt{polutonikogreek} was used, redefine
%    |\CurrentOption| to prevent problems later on.
%    \begin{macrocode}
\gdef\CurrentOption{greek}%
%    \end{macrocode}
%
%    When this file is read as an option, i.e. by the |\usepackage|
%    command, \texttt{greek} could be an `unknown' language in
%    which case we have to make it known.  So we check for the
%    existence of |\l@greek| to see whether we have to do
%    something here.
%
%    \begin{macrocode}
\ifx\l@greek\@undefined
  \@nopatterns{greek}
  \adddialect\l@greek0\fi
%    \end{macrocode}
%
%    Now we declare the |polutoniko| language attribute.
%    \begin{macrocode}
\bbl@declare@ttribute{greek}{polutoniko}{%
%    \end{macrocode}
%    This code adds the expansion of |\extraspolutonikogreek| to
%    |\extrasgreek| and changes the definition of |\today| for Greek
%    to produce polytonic month names.
%    \begin{macrocode}
  \expandafter\addto\expandafter\extrasgreek
  \expandafter{\extraspolutonikogreek}%
  \let\captionsgreek\captionspolutonikogreek
  \let\gr@month\gr@c@month
%    \end{macrocode}
%    We need to take some extra precautions in order not to break
%    older documents which still use the old \Lopt{polutonikogreek}
%    option.
% \changes{greek-1.3f}{1999/09/29}{Added some code to make older
%    documents work}
% \changes{greek-1.3g}{2000/02/04}{\cs{noextraspolutonikogreek} was
%    missing}
%    \begin{macrocode}
  \let\l@polutonikogreek\l@greek
  \let\datepolutonikogreek\dategreek
  \let\extraspolutonikogreek\extrasgreek
  \let\noextraspolutonikogreek\noextrasgreek
  }
%    \end{macrocode}
%
%    Typesetting Greek texts implies that a special set of fonts needs
%    to be used. The current support for greek uses the |cb| fonts
%    created by Claudio Beccari\footnote{Apostolos Syropoulos wishes
%    to thank him for his patience, collaboration, cooments and
%    suggestions.}. The |cb| fonts provide all  sorts of \textit{font
%    combinations}. In order to use these fonts we define the Local
%    GReek encoding (LGR, see the file \file{greek.fdd}). We make sure
%    that this encoding is known to \LaTeX, and if it isn't we abort.
% \changes{greek-1.2a}{1997/10/31}{filename \file{lgrenc.def} now
%    lowercase}
%    \begin{macrocode}
\InputIfFileExists{lgrenc.def}{%
  \message{Loading the definitions for the Greek font encoding}}{%
  \errhelp{I can't find the lgrenc.def file for the Greek fonts}%
  \errmessage{Since I do not know what the LGR encoding means^^J
    I can't typeset Greek.^^J
    I stop here, while you get a suitable lgrenc.def file}\@@end
 }
%    \end{macrocode}
%
%    Now we define two commands that offer the possibility to switch
%    between Greek and Roman encodings.
%
%  \begin{macro}{\greektext}
%    The command |\greektext| will switch from Latin font encoding to
%    the Greek font encoding. This assumes that the `normal' font
%    encoding is a Latin one. This command is a \emph{declaration},
%    for shorter pieces of text the command |\textgreek| should be
%    used.
%    \begin{macrocode}
\DeclareRobustCommand{\greektext}{%
  \fontencoding{LGR}\selectfont
  \def\encodingdefault{LGR}}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\textgreek}
%    This command takes an argument which is then typeset using the
%    requested font encoding. In order to avoid many encoding switches
%    it operates in a local scope.
% \changes{greek-1.0b}{1996/09/23}{Added a level of braces to keep
%    encoding change local} 
% \changes{greek-1.3k}{2003/03/19}{Added \cs{leavevmode} as was done
%    with \cs{latintext}} 
%    \begin{macrocode}
\DeclareRobustCommand{\textgreek}[1]{\leavevmode{\greektext #1}}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\textol}
%    A last aspect of the set of fonts provided with this version of
%    support for typesetting Greek texts is that it contains an
%    outline family. In order to make it available we define the command
%    |\textol|.
%    \begin{macrocode}
\def\outlfamily{\usefont{LGR}{cmro}{m}{n}}
\DeclareTextFontCommand{\textol}{\outlfamily}
%    \end{macrocode}
%  \end{macro}
%
%    The next step consists in defining commands to switch to (and
%    from) the Greek language.
%
%  \begin{macro}{\greekhyphenmins}
%    This macro is used to store the correct values of the hyphenation
%    parameters |\lefthyphenmin| and |\righthyphenmin|.
% \changes{greek-1.3h}{2000/09/22}{Now use \cs{providehyphenmins} to
%    provide a default value}
%    \begin{macrocode}
% Yannis Haralambous has suggested this value
\providehyphenmins{\CurrentOption}{\@ne\@ne}
%    \end{macrocode}
%  \end{macro}
% 
% \changes{greek-1.1e}{1997/10/12}{Added caption name for proof}
% \changes{greek-1.3d}{1999/08/28}{Fixed typo, \texttt{bl'epe ep'ishc}
%    instead of \texttt{bl'pe ep'ishc}}
%
%  \begin{macro}{\captionsgreek}
%    The macro |\captionsgreek| defines all strings used in the
%    four standard document classes provided with \LaTeX.
% \changes{greek-1.3h}{2000/09/20}{Added \cs{glossaryname}}
% \changes{greek-1.3i}{2000/10/02}{The final sigma in all names appears
%    as `s' instead of `c'.}
%    \begin{macrocode}
\addto\captionsgreek{%
  \def\prefacename{Pr'ologos}%
  \def\refname{Anafor'es}%
  \def\abstractname{Per'ilhyh}%
  \def\bibname{Bibliograf'ia}%
  \def\chaptername{Kef'alaio}%
  \def\appendixname{Par'arthma}%
  \def\contentsname{Perieq'omena}%
  \def\listfigurename{Kat'alogos Sqhm'atwn}%
  \def\listtablename{Kat'alogos Pin'akwn}%
  \def\indexname{Euret'hrio}%
  \def\figurename{Sq'hma}%
  \def\tablename{P'inakas}%
  \def\partname{M'eros}%
  \def\enclname{Sunhmm'ena}%
  \def\ccname{Koinopo'ihsh}%
  \def\headtoname{Pros}%
  \def\pagename{Sel'ida}%
  \def\seename{bl'epe}%
  \def\alsoname{bl'epe ep'ishs}%
  \def\proofname{Ap'odeixh}%
  \def\glossaryname{Glwss'ari}% 
  }
%    \end{macrocode}
%  \end{macro}
% \changes{greek-1.2}{1997/10/28}{Added caption names for
%    \cs{polutonikogreek}}
% \changes{greek-1.3d}{1999/08/28}{Fixed typo, \texttt{bl'epe >ep'ishc}
%    instead of \texttt{bl'pe >ep'ishc}}
%
%  \begin{macro}{\captionspolutonikogreek}
%    For texts written in the $\pi o\lambda\upsilon\tau
%    o\nu\kappa\acute{o}$ (polytonic greek) the translations are
%    the same as above, but some words are spelled differently. For
%    now we just add extra definitions to |\captionsgreek| in order to
%    override the earlier definitions.
%    \begin{macrocode}
\let\captionspolutonikogreek\captionsgreek
\addto\captionspolutonikogreek{%
  \def\refname{>Anafor`es}%
  \def\indexname{E<uret'hrio}%
  \def\figurename{Sq~hma}%
  \def\headtoname{Pr`os}%
  \def\alsoname{bl'epe >ep'ishs}%
  \def\proofname{>Ap'odeixh}%
}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\gr@month}
% \changes{greek-1.1e}{1997/10/12}{Macro added}
%  \begin{macro}{\dategreek}
%    The macro |\dategreek| redefines the command |\today| to
%    produce greek dates. The name of the month is now produced
%    by the macro |\gr@month| since it is needed in the definition
%    of the macro |\Grtoday|.
% \changes{greek-1.1a}{1997/03/03}{Fixed typo, \texttt{Oktwbr'iou}
%    instead of \texttt{Oktobr'iou}}
% \changes{greek-1.1d}{1997/10/12}{Macro \cs{gr@month} now produces
%    the  name of the month} 
% \changes{greek-1.2a}{1997/10/31}{Use \cs{edef} to define \cs{today}}
% \changes{greek-1.2b}{1998/03/28}{use \cs{def} instead of \cs{edef}}
%    \begin{macrocode}
\def\gr@month{%
  \ifcase\month\or
    Ianouar'iou\or Febrouar'iou\or Mart'iou\or April'iou\or
    Ma'"iou\or Ioun'iou\or Ioul'iou\or Augo'ustou\or
    Septembr'iou\or Oktwbr'iou\or Noembr'iou\or Dekembr'iou\fi}
\def\dategreek{%
  \def\today{\number\day \space \gr@month\space \number\year}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\gr@c@greek}
% \changes{greek-1.2}{1997/10/28}{Added macro \cs{gr@cl@month}}
% \changes{greek-1.2}{1997/10/28}{Added macro
%    \cs{datepolutonikogreek}}
% \changes{greek-1.3a}{1997/10/28}{removed macro
%    \cs{datepolutonikogreek}}
%    \begin{macrocode}
\def\gr@c@month{%
  \ifcase\month\or >Ianouar'iou\or
    Febrouar'iou\or Mart'iou\or >April'iou\or Ma"'iou\or
    >Ioun'iou\or  >Ioul'iou\or A>ugo'ustou\or Septembr'iou\or
    >Oktwbr'iou\or Noembr'iou\or Dekembr'iou\fi}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\Grtoday}
% \changes{greek-1.1}{1996/10/28}{Added macro \cs{Grtoday}}
%    The macro |\Grtoday| produces the current date, only that the
%    month and the day are shown as greek numerals instead of arabic
%    as it is usually the case.
%    \begin{macrocode}
\def\Grtoday{%
  \expandafter\Greeknumeral\expandafter{\the\day}\space
  \gr@c@month \space
  \expandafter\Greeknumeral\expandafter{\the\year}}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\extrasgreek}
%  \begin{macro}{\noextrasgreek}
%    The macro |\extrasgreek| will perform all the extra definitions
%    needed for the Greek language. The macro |\noextrasgreek| is used
%    to cancel the actions of |\extrasgreek|. For the moment these
%    macros switch the fontencoding used and the definition of the
%    internal macros |\@alph| and |\@Alph| because in Greek we do use
%    the Greek numerals. 
%
%    \begin{macrocode}
\addto\extrasgreek{\greektext}
\addto\noextrasgreek{\latintext}
%    \end{macrocode}
%
%  \begin{macro}{\gr@ill@value}
%    When the argument of |\greeknumeral| has a value outside of the
%    acceptable bounds ($0 < x < 999999$) a warning will be issued
%    (and nothing will be printed).
%    \begin{macrocode}
\def\gr@ill@value#1{%
  \PackageWarning{babel}{Illegal value (#1) for greeknumeral}}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\anw@true}
%  \begin{macro}{\anw@false}
%  \begin{macro}{\anw@print}
%    When a a large number with three \emph{trailing} zero's is to be
%    printed those zeros \emph{and} the numeric mark need to be
%    discarded. As each `digit' is processed by a separate macro
%    \emph{and} because the processing needs to be expandable we need
%    some helper macros that help remember to \emph{not} print the
%    numeric mark (|\anwtonos|).
%
%    The command |\anw@false| switches the printing of the numeric
%    mark off by making |\anw@print| expand to nothing. The command
%    |\anw@true| (re)enables the printing of the numeric marc. These
%    macro's need to be robust in order to prevent improper expansion
%    during writing to files or during |\uppercase|.
%    \begin{macrocode}
\DeclareRobustCommand\anw@false{%
  \DeclareRobustCommand\anw@print{}}
\DeclareRobustCommand\anw@true{%
  \DeclareRobustCommand\anw@print{\anwtonos}}
\anw@true
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\greeknumeral}
%    The command |\greeknumeral| needs to be \emph{fully} expandable
%    in order to get the right information in auxiliary
%    files. Therefore we use a big |\if|-construction to check the
%    value of the argument and start the parsing at the right level.
%    \begin{macrocode}
\def\greeknumeral#1{%
%    \end{macrocode}
%    If the value is negative or zero nothing is printed and a warning
%    is issued.
% \changes{greek-1.3b}{1999/04/03}{Added \cs{expandafter} and
%    \cs{number} (PR3000) in order to make a counter an acceptable
%    argument}
%    \begin{macrocode}
  \ifnum#1<\@ne\space\gr@ill@value{#1}%
  \else
    \ifnum#1<10\expandafter\gr@num@i\number#1%
    \else
      \ifnum#1<100\expandafter\gr@num@ii\number#1%
      \else
%    \end{macrocode}
%    We use the available shorthands for 1.000 (|\@m|) and 10.000
%    (|\@M|) to save a few tokens.
%    \begin{macrocode}
        \ifnum#1<\@m\expandafter\gr@num@iii\number#1%
        \else
          \ifnum#1<\@M\expandafter\gr@num@iv\number#1%
          \else
            \ifnum#1<100000\expandafter\gr@num@v\number#1%
            \else
              \ifnum#1<1000000\expandafter\gr@num@vi\number#1%
              \else
%    \end{macrocode}
%    If the value is too large, nothing is printed and a warning
%    is issued.
%    \begin{macrocode}
                \space\gr@ill@value{#1}%
              \fi
            \fi
          \fi
        \fi
      \fi
    \fi
  \fi
}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\Greeknumeral}
%    The command |\Greeknumeral| prints uppercase greek numerals. 
%    The parsing is performed by the macro |\greeknumeral|.
%    \begin{macrocode}
\def\Greeknumeral#1{%
  \expandafter\MakeUppercase\expandafter{\greeknumeral{#1}}}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\greek@alph}
%  \begin{macro}{\greek@Alph}
%    In the previous release of this language definition the
%    commands |\greek@aplh| and |\greek@Alph| were kept just for
%    reasons of compatibility. Here again they become meaningful macros.
%    They are definited in a way that even page numbering with greek
%    numerals is possible. Since the macros |\@alph| and |\@Alph| will
%    lose their original meaning while the Greek option is active, we
%    must save their original value.
%    macros |\@alph|
%    \begin{macrocode}
\let\latin@alph\@alph
\let\latin@Alph\@Alph
%    \end{macrocode}
%    Then we define the Greek versions; the additional |\expandafter|s
%    are needed in order to make sure the table of contents will be
%    correct, e.g., when we have appendixes. 
%    \begin{macrocode}
\def\greek@alph#1{\expandafter\greeknumeral\expandafter{\the#1}}
\def\greek@Alph#1{\expandafter\Greeknumeral\expandafter{\the#1}}
%    \end{macrocode}
%
%    Now we can set up the switching.
% \changes{greek-1.1a}{1997/03/03}{removed two superfluous @'s which
%    made \cs{@alph} undefined}
%    \begin{macrocode}
\addto\extrasgreek{%
  \let\@alph\greek@alph
  \let\@Alph\greek@Alph}
\addto\noextrasgreek{%
  \let\@alph\latin@alph
  \let\@Alph\latin@Alph}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\greek@roman}
%  \begin{macro}{\greek@Roman}
% \changes{greek-1.2e}{1999/04/16}{Moved redefinition of \cs{@roman}
%    back to the language specific file}
% \changes{greek-1.3d}{1999/08/27}{\cs{@roman} and \cs{@Roman} need to
%    be added to \cs{extraspolutonikogreek}} 
% \changes{greek-1.3e}{1999/09/24}{\cs{@roman} and \cs{@Roman} need
%    \emph{not} be in \cs{extraspolutonikogreek} when they are already
%    in \cs{extrasgreek}}
%
%    To prevent roman numerals being typeset in greek letters we need
%    to adopt the internal \LaTeX\ commands |\@roman| and
%    |\@Roman|. \textbf{Note that this may cause errors where
%    |\@roman| ends up in a situation where it needs to be expanded;
%    problems are known to exist with the AMS document classes.}
%    \begin{macrocode}
\let\latin@roman\@roman
\let\latin@Roman\@Roman
\def\greek@roman#1{\textlatin{\latin@roman{#1}}}
\def\greek@Roman#1{\textlatin{\latin@Roman{#1}}}
\addto\extrasgreek{%
  \let\@roman\greek@roman
  \let\@Roman\greek@Roman}
\addto\noextrasgreek{%
  \let\@roman\latin@roman
  \let\@Roman\latin@Roman}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\greek@amp}
%  \begin{macro}{\ltx@amp}
%    The greek fonts do not contain an ampersand, so the \LaTeX\
%    command |\&| dosn't give the expected result if we do not do
%    something about it.
% \changes{greek-1.2f}{1999/04/25}{Now switch the definition of
%    \cs{\&} from \cs{extrasgreek}} 
% \changes{greek-1.3c}{1999/05/17}{Added a missing opening brace}
%    \begin{macrocode}
\let\ltx@amp\&
\def\greek@amp{\textlatin{\ltx@amp}}
\addto\extrasgreek{\let\&\greek@amp}
\addto\noextrasgreek{\let\&\ltx@amp}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%    What is left now is the definition of a set of macros to produce
%    the various digits.
%  \begin{macro}{\gr@num@i}
%  \begin{macro}{\gr@num@ii}
%  \begin{macro}{\gr@num@iii}
% \changes{greek-1.2b}{1997/11/13}{No longer use \cs{\let} in the
%    expansion of the \cs{gr@num@x} macros as they ned to be
%    expandable}
%    As there is no representation for $0$ in this system the zeros
%    are simply discarded. When we have a large number with three
%    \emph{trailing} zero's also the numeric mark is discarded. 
%    Therefore these macros need to pass the information to each other
%    about the (non-)translation of a zero.
%    \begin{macrocode}
\def\gr@num@i#1{%
  \ifcase#1\or a\or b\or g\or d\or e\or \stigma\or z\or h\or j\fi
  \ifnum#1=\z@\else\anw@true\fi\anw@print}
\def\gr@num@ii#1{%
  \ifcase#1\or i\or k\or l\or m\or n\or x\or o\or p\or \qoppa\fi
  \ifnum#1=\z@\else\anw@true\fi\gr@num@i}
\def\gr@num@iii#1{%
  \ifcase#1\or r\or sv\or t\or u\or f\or q\or y\or w\or \sampi\fi
  \ifnum#1=\z@\anw@false\else\anw@true\fi\gr@num@ii}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\gr@num@iv}
%  \begin{macro}{\gr@num@v}
%  \begin{macro}{\gr@num@vi}
%    The first three `digits' always have the numeric mark, except
%    when one is discarded because it's value is zero.
%    \begin{macrocode}
\def\gr@num@iv#1{%
  \ifnum#1=\z@\else\katwtonos\fi
  \ifcase#1\or a\or b\or g\or d\or e\or \stigma\or z\or h\or j\fi
  \gr@num@iii}
\def\gr@num@v#1{%
  \ifnum#1=\z@\else\katwtonos\fi
  \ifcase#1\or i\or k\or l\or m\or n\or x\or o\or p\or \qoppa\fi
  \gr@num@iv}
\def\gr@num@vi#1{%
  \katwtonos
  \ifcase#1\or r\or sv\or t\or u\or f\or q\or y\or w\or \sampi\fi
  \gr@num@v}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\greek@tilde}
% \changes{greek-1.0c}{1997/02/19}{Added command}
%    In greek typesetting we need a number of characters with more
%    than one accent. In the underlying family of fonts (the
%    |cb| fonts) this is solved using Knuth's ligature
%    mechanism. 
%    Characters we need to have ligatures with are the tilde, the
%    acute and grave accent characters, the rough and smooth breathings,
%    the subscript, and the double quote character.
%    In text input the |~| is normaly used to produce an
%    unbreakable space. The command |\~| normally produces a tilde
%    accent. For  polytonic Greek we change the definition of |\~| 
%    to produce the tilde character itself, making sure it has category 
%    code 12.
% \changes{greek-1.3k}{2003/04/10}{Make sure the character `!' is not
%    active during the definition of \cs{greek@tilde}} 
%    \begin{macrocode}
\begingroup
  \@ifundefined{active@char\string!}{}{\catcode`!=12\relax}
  \catcode`\~=12
  \lccode`\!=`\~
  \lowercase{\def\x{\endgroup
      \def\greek@tilde{!}}\x}
\addto\extraspolutonikogreek{%
  \babel@save\~\let\~\greek@tilde}
%    \end{macrocode}
%  \end{macro}
%    In order to get correct hyphenation we need to set the lower case
%    code of a number of characters. The `v' character has a special
%    usage for the |cb| fonts: in fact this ligature mechanism detects
%    the end of a word and assures that a final sigma is typeset with
%    the proper sign wich is different from that of an initial or
%    medial sigma;  the  `v  'after  an  \textit{isolated} sigma fools
%    the ligature mechanism in order to typeset $\sigma$ in place of
%    $\varsigma$. Because of this we make sure its lowercase code is
%    not changed. For ``modern'' greek we have to deal only with |'|
%    and |"| and so things are easy.
% \changes{greek-1.1c}{1997/04/30}{fixed two typos}
% \changes{greek-1.1e}{1997/10/12}{Added lowercase code for v}
% \changes{greek-1.2}{1997/10/28}{Definitions for ``modern'' Greek are
%    now the definitions of ``Polutoniko'' Greek} 
% \changes{greek-1.2}{1997/10/28}{Added lowercase codes for ``modern''
%    greek} 
% \changes{greek-1.3e}{1999/09/24}{\cs{extrasgreek} and
%    \cs{extraspolutonikogreek} should be complementary}
%    \begin{macrocode}
\addto\extrasgreek{%
  \babel@savevariable{\lccode`v}\lccode`v=`v%
  \babel@savevariable{\lccode`\'}\lccode`\'=`\'%
  \babel@savevariable{\lccode`\"}\lccode`\"=`\"}
\addto\extraspolutonikogreek{%
  \babel@savevariable{\lccode`\<}\lccode`\<=`\<%
  \babel@savevariable{\lccode`\>}\lccode`\>=`\>%
  \babel@savevariable{\lccode`\~}\lccode`\~=`\~%
  \babel@savevariable{\lccode`\|}\lccode`\|=`\|%
  \babel@savevariable{\lccode`\`}\lccode`\`=`\`}
%    \end{macrocode}
%    And in order to get rid of all accents and breathings when a
%    string is |\uppercase|d we also change a number of uppercase
%    codes. 
% \changes{greek-1.1b}{1997/03/06}{Added setting of \cs{uccode}s
%    (after \file{kdgreek.sty})}
% \changes{greek-1.1e}{1997/10/12}{Added uppercase code for special
%    letter ``v''. Uppercase code for accents is now \texttt{9f},
%    instead of \texttt{ff}}
% \changes{greek-1.2}{1997/10/28}{Added uppercase codes for ``modern''
%    Greek. The old codes are now for ``Polutoniko'' Greek} 
% \changes{greek-1.3e}{1999/09/24}{\cs{extrasgreek} and
%    \cs{extraspolutonikogreek} should be complementary}
% {\catcode`|=12\relax\gdef\indexbar{\cs{|}}}
% \changes{greek-1.3g}{1999/11/17}{uc code of \indexbar{} is now just
%    \indexbar{} to reflect recent changes in the cb fonts}
% \changes{greek-1.3i}{2000/10/02}{uc code of `v' is switched to V
%    so that mixed text appears correctly in headers.}
% \changes{greek-1.3j}{2001/02/03}{Because other languages might
%    make the caret active, we can't use the double caret notation
%    here}
%    \begin{macrocode}
\addto\extrasgreek{%
  \babel@savevariable{\uccode`\"}\uccode`\"=`\"%
  \babel@savevariable{\uccode`\'}\uccode`\'=159} %% 159 == ^^9f
\addto\extraspolutonikogreek{%
  \babel@savevariable{\uccode`\~}\uccode`\~=159%
  \babel@savevariable{\uccode`\>}\uccode`\>=159%
  \babel@savevariable{\uccode`\<}\uccode`\<=159%
  \babel@savevariable{\uccode`\|}\uccode`\|=`\|%
  \babel@savevariable{\uccode`\`}\uccode`\`=159}
%    \end{macrocode}
%    For this to work we make the character |^^9f| a shorthand that
%    expands to nothing. In order for this to work we need to make a
%    character look like |^^9f| in \TeX's eyes. The trick is to have
%    another character and assign it a different lowercase code. The
%    execute the macros needed in a |\lowercase| environment. Usually
%    the tile |~| character is used for such purposes. Before we do
%    this we save it's original lowercase code to restore it once
%    we're done.
% \changes{greek-1.1b}{1997/03/06}{Added shorthand for \cs{char255}}
% \changes{greek-1.1e}{1997/10/12}{Shorthand is changed. Active
%    character is now \cs{char159}} 
% \changes{greek-1.2a}{1997/10/31}{Need shorthand to exist for
%    ``monotoniko'' Greek, not ``polutoniko'' Greek}
% \changes{greek-1.3j}{2001/02/03}{Ues the tilde as an alias for
%    character 159}
%    \begin{macrocode}
\@tempcnta=\lccode`\~
\lccode`\~=159
\lowercase{%
  \initiate@active@char{~}%
  \declare@shorthand{greek}{~}{}}
\lccode`\~=\@tempcnta
%    \end{macrocode}
%    We can also make the tilde character itself expand to a tilde with
%    category code 12 to make the typing of texts easier.
% \changes{greek-1.1b}{1997/03/06}{Made tilde expand to a tilde with
%    \cs{catcode 12}} 
%    \begin{macrocode}
\addto\extraspolutonikogreek{\languageshorthands{greek}}%
\declare@shorthand{greek}{~}{\greek@tilde}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  
%  
%
% \changes{greek-1.1c}{1997/03/10}{Added a couple of symbols, needed
%    for \cs{greeknumeral}}
% \changes{greek-1.1e}{1997/10/12}{Most symbols are removed and are
%    now defined in package grsymb} 
% \changes{greek-1.2c}{1998/06/26}{Package grsymb has been eliminated
%   because the CB fonts v2.0 do not inlcude certain symbols and so
%   the remaining symbol definitions have been moved here}
%    We now define a few symbols which are used in the typesetting of
%    greek numerals, as well as some other symbols which are usefull,
%    such as the $\epsilon\upsilon\rho\omega$ symbol, etc.
%    \begin{macrocode}
\DeclareTextCommand{\anwtonos}{LGR}{\char"FE\relax}
\DeclareTextCommand{\katwtonos}{LGR}{\char"FF\relax}
\DeclareTextCommand{\qoppa}{LGR}{\char"12\relax}
\DeclareTextCommand{\stigma}{LGR}{\char"06\relax}
\DeclareTextCommand{\sampi}{LGR}{\char"1B\relax}
\DeclareTextCommand{\Digamma}{LGR}{\char"C3\relax}
\DeclareTextCommand{\ddigamma}{LGR}{\char"93\relax}
\DeclareTextCommand{\vardigamma}{LGR}{\char"07\relax}
\DeclareTextCommand{\euro}{LGR}{\char"18\relax}
\DeclareTextCommand{\permill}{LGR}{\char"19\relax}
%    \end{macrocode}
%
%    Since the |~| cannot be used to produce an unbreakable white
%    space we must redefine at least the commands |\fnum@figure| and
%    |\fnum@table| so they do not produce a |~| instead of white
%    space. 
%    \begin{macrocode} 
\def\fnum@figure{\figurename\nobreakspace\thefigure}
\def\fnum@table{\tablename\nobreakspace\thetable}
%    \end{macrocode}
%
%    The macro |\ldf@finish| takes care of looking for a
%    configuration file, setting the main language to be switched on
%    at |\begin{document}| and resetting the category code of
%    \texttt{@} to its original value.
% \changes{greek-1.0b}{1996/11/02}{Now use \cs{ldf@finish} to wrap up}
%    \begin{macrocode}
\ldf@finish{\CurrentOption}
%</code>
%    \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         \~}
%%
