% \iffalse meta-comment
% !TEX encoding = UTF-8 Unicode
%
% Copyright 1989-2008 Apostolos Syropoulos, Johannes L. Braams
% and the authors listed elsewhere in this file. All rights reserved.
%
% This file is part of the babel-greek package.
% ---------------------------------------------
%
% 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 2003/12/01 or later.
%
% This work has the LPPL maintenance status "maintained".
%
% The Current Maintainer of this work is Günter Milde <milde@users.sf.net>.
%
% Babel-greek is a contributed package providing support for the Greek
% language and script via the Babel system (http://www.ctan.org/pkg/babel).
%
% The list of derived (unpacked) files belonging to this work
% and covered by LPPL is defined by the unpacking script (babel-greek.ins)
% which is part of the package.
% \fi
% \CheckSum{1550}
%
% \iffalse
%    Tell the \LaTeX\ system who we are and write an entry on the
%    transcript.
%<*dtx>
\ProvidesFile{babel-greek.dtx}
%</dtx>
%<code>\ProvidesLanguage{greek}
%\fi
%\ProvidesFile{babel-greek.dtx}
        [2020/03/17 v1.9j Greek support for the babel system]
%\iffalse
%% File `babel-greek.dtx'
%% Greek language Definition File
%% Copyright © 1997, 2005 Apostolos Syropoulos, Johannes Braams
%% Copyright © 2013, 2019 Günter Milde
%
%% Please report errors to: Günter Milde <milde@users.sf.net>
%
%    This file is part of the babel-greek package, 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@gnu.org> with his
%    consent.
%<*filedriver>
\documentclass{ltxdoc}
% \usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage{hyperref,bookmark}
\hypersetup{colorlinks=true,linkcolor=blue,urlcolor=blue,citecolor=black}
\newcommand*{\babel}{\textsf{babel}}
\newcommand*{\note}[1]{}
\newcommand*{\Lopt}[1]{\textsf{#1}}
\newcommand*{\file}[1]{\texttt{#1}}
\newcommand*{\pkg}[1]{\texttt{#1}}
\begin{document}
 \DocInput{babel-greek.dtx}
\end{document}
%</filedriver>
%\fi
% \GetFileInfo{babel-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'}
% \changes{greek-1.4}{2013/05/17}{new maintainer}
% \changes{greek-1.5}{2013/06/21}{bugfixes,
%    change some symbol macros to aliases,
%    LGR fixes via DeclareTextCommand instead of
%    extrasgreek/noextrasgreek definitions,
%    LICR macros in string definitions,
%    LGR font encoding not used with XeTeX/LuaTeX.}
% \changes{greek-1.5a}{2013/06/27}{``extraspolutonikogreek'' definition
%    was missing with Xe/LuaTeX.
%    Replaced non-printable literal character with ^^-notation.}
% \changes{greek-1.6}{2013/07/18}{fix \cs{@roman} and \cs{@Roman}
%    redefinition (thanks to Enrico Gregorio and Claudio Beccari),
%    load LICR macro definitions for Xe/LuaTeX.}
% \changes{greek-1.7}{2013/09/09}{Do not load euenc.def with XeTeX/LuaTeX.
%    Prevent re-loading lgrenc.def.}
% \changes{greek-1.7a}{2013/09/13}{bugfix: remove spurious ``fi''.}
% \changes{greek-1.7b}{2013/10/01}{bugfix: correct upcasing of babel strings
%    with Xe/LuaTeX.}
% \changes{babel-greek-1.8}{2013/11/27}{Rename to ``babel-greek.dtx''.
%    Restore compatibility with Xe/LuaTeX in 8-bit and Unicode mode.
%    Load ``euenc.def'' if EU1 or EU2 font encoding is detected.
%    New TextCommands ``greekscript'' and ``ensuregreek''.}
% \changes{babel-greek-1.8a}{2013/12/03}{Set `encodingdefault' in `greekscript'
%   to fix Greek in footnotes etc. with document language Greek.}
% \changes{babel-greek-1.9}{2014/07/20}{Added attribute for ancient Greek.
%   Load correct hyphenation patterns. Patch by Claudio Beccari.}
% \changes{babel-greek-1.9b}{2014/09/18}{Remove spurious whitespace from
%   `extrasgreek'  definition (report Eike Schmidt).
%   Use named macros instead of non-standard short accent macros for
%   psili and dasia.}
% \changes{babel-greek-1.9c}{2014/10/21}{Fix dummy hyphenation language names
%   (report/patch Ulrike Fischer).}
% \changes{babel-greek-1.9d}{2015/07/06}{uc-/lccode corrections from xgreek are now
%   in greek-euenc.def (the polyglossia version has bugs).}
% \changes{babel-greek-1.9e}{2015/11/27}{Fix bug in lccode-setting loop
%   (patch by Enrico Gregorio).}
% \changes{babel-greek-1.9f}{2016/02/04}{Support for standard
%   Unicode text encoding ``TU'' (new in fontspec v2.5a).}
% \changes{babel-greek-1.9g}{2016/09/07}{Babel 3.9i deprecated textlatin
%   and fixed latinencoding.}
% \changes{babel-greek-1.9h}{2019/07/11}{Move breathing composite commands
%   to textalpha.}
% \changes{babel-greek-1.9i}{2020/02/28}{Update test for Unicode fonts.
%   Fix accent in seename and alsoname.}
% \changes{babel-greek-1.9j}{2020/03/17}{Fix ampersand in math.}
%
% \title{Babel support for the Greek language}
% \author{Apostolos Syropoulos, Günter Milde}
% \maketitle
%
% Babel-greek is a contributed package providing support for the Greek
% language and script via the \href{http://www.ctan.org/pkg/babel}{Babel}
% system. See the \href{README.html}{README} file for an overwiew of the
% \pkg{babel-greek} package and links to requirements and related packages.
%
% 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, code from \file{kdgreek.sty}
%   by David Kastrup was used.}
% is the literate source for the Babel language definition file
% \file{greek.ldf}.
%
% \section{Requirements}
%
% Typesetting Greek with Babel requires (of course) the
% \href{http://www.ctan.org/pkg/babel}{Babel core}, support for Greek font
% encodings (\href{http://www.ctan.org/pkg/greek-fontenc}{greek-fontenc})
% and a \href{README.html#greek-text-fonts}{text font supporting the
% Greek script}.
%
% The \href{http://www.ctan.org/pkg/cbgreek-complete}{CB Greek fonts}
% created by \textsc{Claudio Beccari}\footnote{Apostolos Syropoulos
%   wishes to thank Claudio Beccari for his
%   patience, collaboration, comments and suggestions.}
% are a complete set of 8-bit TeX fonts matching \textsc{Knuth}'s
% Computer Modern.
% The package \pkg{\href{http://www.ctan.org/pkg/cbfonts-fd}{cbfonts-fd}}
% sets them up as Greek substitute for the Computer Modern and Latin Modern
% font families.
% The \pkg{\href{http://www.ctan.org/pkg/substitutefont}{substitutefont}}
% package can be used to set up Greek supplements for other
% font families (like Times or Palatino).
%
% The \href{http://ctan.org/pkg/lm}{Latin Modern} OpenType font that is the
% default font for XeTeX/LuaTeX does not support the Greek script. The user
% needs to set up an alternative font like Linux Libertine or DejaVu with
% \pkg{\href{http://www.ctan.org/pkg/fontspec}{fontspec}}.
%
% \section{Usage}
%
%    To activate Greek support with babel, specify the option
%    \Lopt{greek}, either as global option or as option to the
%    \pkg{babel} package. Remember, that the \emph{last} language
%    option determines the document language, e.g.
%    \begin{verbatim}
%    \usepackage[greek,english]{babel}\end{verbatim}
%    activates support for Greek in an English document.
%    The default is modern ``monotonic'' Greek, while
%    \begin{verbatim}
%      \usepackage[english,greek]{babel}
%      \languageattribute{greek}{polutoniko}
%    \end{verbatim}
%    sets the document language to modern Greek with ``polytonic''
%    spelling and
%    \begin{verbatim}
%      \usepackage[english,greek]{babel}
%      \languageattribute{greek}{ancient}
%    \end{verbatim}
%    sets the document language to ancient Greek.
%
%    Both attributes may also be used as modifiers as in
%    \begin{verbatim}
%      \usepackage[greek.polutoniko,english]{babel}
%    \end{verbatim}
%    and similarly
%    \begin{verbatim}
%      \usepackage[greek.ancient,english]{babel}
%    \end{verbatim}
%
%    Version 1.9 fixes the activation of hyphenation patterns: By default,
%    \pkg{babel-greek} activates the modern Greek monotonic hyphenation;
%    the attribute/modifier |polutoniko| activates the modern Greek
%    polytonic hyphenation and the attribute/modifier |ancient| activates
%    the ancient Greek hyphenation.  8-bit TeX and XeTeX requires the
%    hyphenation patterns to be pre-loaded in the format file.
%    This is a limitation by TeX, common to all languages.
%    The LuaTeX engine loads hyphenation patterns on demand.
%
%  \DescribeMacro\selectlanguage
%  \DescribeMacro\foreignlanguage
% The Babel core provides two commands to switch the active language:
% The declaration |\selectlanguage{greek}| switches to the Greek language.
% The macro \verb|\foreignlanguage{greek}{<some text>}| sets its second argument
% in the Greek language. This is intended for short text parts.
% For details see the \href{http://www.ctan.org/pkg/babel}{Babel} documentation.
%
%    For backwards compatibility, ``polytonic'' spelling can also be
%    selected via the dummy language \Lopt{polutonikogreek}. In this
%    case, the language name \Lopt{polutonikogreek} must also be
%    used for language switches with |\selectlanguage| or
%    |\foreignlanguage|.  However, it is not possible to use
%    both options, \Lopt{greek} and \Lopt{polutonikogreek} in one document.
%
% \subsection{Input of Greek text}
%
% There are several alternatives to write Greek text.
% \begin{itemize}
%  \item With the packages \pkg{inputenc} and
%    \pkg{\href{http://www.ctan.org/pkg/greek-inputenc}{greek-inputenc}},
%    literal Greek characters can be input using the utf-8, iso-8859-7,
%    or macgreek encoding.
%
%    Literal input using the utf-8 encoding is also the standard input
%    method if compiling with the XeTeX and LuaTeX engines.
%
%  \item The Latin transliteration defined by the LGR font encoding
%    is explained in the file \file{\href{usage.pdf}{usage.pdf}}.
%
%   \item The package
%    \pkg{\href{http://www.ctan.org/pkg/greek-fontenc}{greek-fontenc}}
%    defines \emph{LaTeX internal character representation} (LICR) macros
%    for Greek letters and text symbols. It is required by \pkg{babel-greek},
%    so the |\textAlpha| \ldots |\textomega|
%    macros are a safe but cumbersome method to input Greek characters.
%
%  \item The \pkg{alphabeta} package bundled with
%    \href{http://www.ctan.org/pkg/greek-fontenc}{greek-fontenc} makes the
%    short macro names |\Alpha| \ldots |\omega| available in text mode, too.
% \end{itemize}
% The \href{http://www.ctan.org/pkg/greek-fontenc}{greek-fontenc} bundle
% has details and examples for all these input methods.
%
% \subsection{Greek vs. Latin script}
%    When switching the language to Greek, \pkg{babel-greek} ensures that the
%    Greek script is supported.
%    With 8-bit LaTeX, Greek text fonts use a non-standard
%    font encoding\footnote{LaTeX font encodings are described in
%    the \emph{LaTeX font guide} (fntguide.pdf).}
%    (LGR) that misses Latin letters. Latin characters in the source are
%    instead interpreted as a transcription for Greek characters.
%    The following macros allow the use of Greek vs. Latin script without
%    changing the active language.
%  \DescribeMacro\greekscript
%  \DescribeMacro\greektext
%    The \emph{TextCommand}\footnote{For a discussion of TextCommands, see
%    the \emph{LaTeX font guide} (fntguide.pdf), too.}
%    |\greekscript| switches to a font encoding
%    supporting the Greek script.
%    The declaration |\greektext| always switches the font encoding
%    to LGR. Both declarations do not change the active language.
%  \DescribeMacro\latintext
%    |\latintext| (defined by the Babel
%    core) can be used to switch back to an encoding supporting the Latin
%    script (deprecated since Babel 3.9i from March 2014).
%
%  \DescribeMacro\ensuregreek
%  \DescribeMacro\textgreek
%    The macros |\ensuregreek| and |\textgreek| take one argument
%    which is typeset using a font encoding supporting the Greek
%    script. While |\ensuregreek| only switches the
%    font encoding if required, |\textgreek| always uses the LGR font
%    encoding.
%  \DescribeMacro\textlatin
%    The Babel core defines a corresponding |\textlatin| macro
%    (deprecated in favour of |\ensureascii| in Babel 3.9i from March 2014).
%
%  \section{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{}
%
%  \section{Implementation}
%
%    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}
%
%    Hyphenation patterns:
%    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 the three variants of the Greek language
%    |\l@greek|, |\l@monogreek|, and |l@ancientgreek| to see whether
%    we have to do something here.
% \changes{greek-1.9}{2014/07/20}{Support all 3 language (hyphenation)
%                                 variants.}
%    \begin{macrocode}
\ifx\l@greek\@undefined
  \@nopatterns{greek}
  \adddialect\l@greek 0\fi
\ifx\l@monogreek\@undefined
  \adddialect\l@monogreek 0\fi
\ifx\l@ancientgreek\@undefined
  \adddialect\l@ancientgreek 0\fi
\newcount\bbl@monogreek \bbl@monogreek=\l@monogreek
\newcount\bbl@polygreek \bbl@polygreek=\l@greek
\newcount\bbl@ancientgreek  \bbl@ancientgreek=\l@ancientgreek
%    \end{macrocode}
% The |\extrasgreek| macro is called when switching the language to Greek.
% We collect code for polytonic and ancient greek in the macros
% |extraspolutonikogreek| and |extrasancientgreek| and add it later to
% |extrasgreek|.
%    \begin{macrocode}
\addto\extrasgreek{\let\l@greek\bbl@monogreek\relax}
\addto\extraspolutonikogreek{\l@greek=\bbl@polygreek}
\addto\extrasancientgreek{\l@greek=\bbl@ancientgreek}
%    \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 (by re-defining |\gr@month|).
%    \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}
%    pseuso-language option: language switching commands like
%    |\selectlanguage{polutonikogreek}|, call the
%    |extraspolutonikogreek| macro, set the language to |\l@polutonikogreek|
%    and use |\datepolutonikogreek| for |\today|. We define aliases:
% \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}
%    The |ancient| language attribute is used for classical Greek.
% \changes{greek-1.9}{2014/07/20}{Add support for ancient Greek.}
%    \begin{macrocode}
\bbl@declare@ttribute{greek}{ancient}{%
%    \end{macrocode}
%    This attribute adds the expansion of |\extraspolutonikogreek| and
%    |\extrasancientgreek| to |\extrasgreek| to set up support for
%    multi-accented characters and ancient hyphenation patterns.
%    Auto-strings (captions) are specific to ancient Greek while |\today|
%    uses modern polytonic month names (as there existed incompatible
%    sets of month names and no common calendar in ancient Greece.
%    \begin{macrocode}
  \expandafter\addto\expandafter\extrasgreek
    \expandafter{\extraspolutonikogreek}% multi-accented letters
  \expandafter\addto\expandafter\extrasgreek
    \expandafter{\extrasancientgreek}%
  \let\captionsgreek\captionsancientgreek
  \let\gr@month\gr@c@month % (modern) polytonic month names
  }
%    \end{macrocode}
%
% \section{Font setup}
%
% Typesetting Greek texts requires a font with Greek characters:
%
% For 8-bit LaTeX, this package uses fonts with the
% \href{http://www.ctan.org/pkg/greek-fontenc}{LGR font encoding}.
% With the XeTeX or LuaTeX engines and Unicode fonts, the user must ensure
% that the selected font contains the required glyphs.
% LGR-encoded fonts can also be used alongside Unicode fonts with XeTeX/LuaTeX
% to enable the input of Greek letters via the Latin transcription provided by
% this font encoding.
%
% \changes{greek-1.2a}{1997/10/31}{filename \file{lgrenc.def} now
%    lowercase}
% \changes{greek-1.4}{2013/05/17}{\file{lgrenc.def} moved to the
%    separate package `greek-fontenc'}
% \changes{greek-1.5}{2013/06/21}{LGR setup skipped with XeTeX/LuaTeX}
% \changes{greek-1.7}{2013/09/09}{Do not load euenc.def with XeTeX/LuaTeX
%    (too complicated to get it right).}
% \changes{greek-1.8}{2013/11/30}{Check for EU1/EU2 font encoding
%    instead of engine}
% \changes{babel-greek-1.9f}{2016/02/04}{Check also for TU font encoding.}
% \changes{babel-greek-1.9i}{2020/02/27}{Update check for Unicode fonts.}
%
% \DescribeMacro\greekfontencoding
% We test for available font encodings and set |\greekfontencoding|
% and the internal macro |\bbl@greek@fontencdef| with the name of the
% font definition file with Greek LICR macros. The fallback is LGR.
%    \begin{macrocode}
\ifdefined \UTFencname % set by "fontspec.sty"
  \providecommand*{\greekfontencoding}{\UTFencname} % TU, EU1, or EU2
  \providecommand*{\bbl@greek@fontencdef}{greek-euenc}
  \renewcommand*{\LastDeclaredEncoding}{\UTFencname}
\else
  \providecommand*{\greekfontencoding}{LGR}
  \providecommand*{\bbl@greek@fontencdef}{lgrenc}
\fi
%    \end{macrocode}
% Ensure that the Greek LICR macros are available:
%    \begin{macrocode}
\@ifl@aded{def}{\bbl@greek@fontencdef}{}{
  \InputIfFileExists{\bbl@greek@fontencdef .def}{}{
    \errhelp{I can't find the \bbl@greek@fontencdef .def file
      for the Greek fonts}%
    \errmessage{Font support for the Greek script missing.^^J
      babel-greek can't typeset Greek.^^J
      Install the "greek-fontenc" package^^J
      or use XeTeX/LuaTeX with polyglossia.}%
      \@@end
  }
}
%    \end{macrocode}
% \begin{macro}{\greekscript}
%   The TextCommand |\greekscript| is a declaration that switches the font
%   encoding to |\greekfontencoding| if the current font encoding does not
%   provide a (typically empty) local variant.
% \changes{greek-1.8.1}{2013/12/03}{Set `encodingdefault' in `greekscript'
%   to fix Greek in footnotes etc. with document language Greek.
%   TODO: This is from `greektext' but are there side effects?}
%    \begin{macrocode}
\ProvideTextCommandDefault{\greekscript}{%
  \fontencoding{\greekfontencoding}\selectfont
      \def\encodingdefault{\greekfontencoding}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\ensuregreek}
%   The TextCommand |\ensuregreek| sets it argument in |\greekfontencoding|
%   if the current font encoding does not provide a (typically empty) local
%   variant.
%    \begin{macrocode}
\ProvideTextCommandDefault{\ensuregreek}[1]{%
  \leavevmode{\greekscript #1}}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Fixes for the LGR font encoding}
%
%    \begin{macrocode}
\@ifl@aded{def}{lgrenc}{%
%    \end{macrocode}
%
% We redefine a few commands in the LGR encoding to work around problems
% because LGR is no \emph{standard text encoding} but has Greek letters in
% the places of Latin ones.
% The ampersand must work in text and math mode. We provide the text
% command |\textampersand| and re-define |\&| to use it in text mode.
% \changes{greekfdd-2.2c}{1999/04/05}{Fixed typos, \cs{textrademark}
%    misses a `t', \cs{copyright} should be \cs{textcopyright}}
% \changes{greekfdd-2.2d}{1999/04/25}{removed redefinition of \cs{\&}}
% \changes{greek-1.4}{2013/05/17}{moved here from \file{lgrenc.def} because
%    the definitions require the \texttt{\textbackslash latintext} macro
%    defined by Babel.}
% \changes{greek-1.5}{2013/05/27}{enable use of "textcomp" characters
%    for "textcopyright" and "textregistered" macros}
% \changes{greek-1.5}{2013/06/15}{\textbackslash & made TextCommand}
% \changes{babel-greek-1.9j}{2020/03/17}{Fix ampersand in math.}
%
%    \begin{macrocode}
  \ProvideTextCommand{\textcopyright}{LGR}{\ensureascii{\textcopyright}}
  \ProvideTextCommand{\textregistered}{LGR}{\ensureascii{\textregistered}}
  \ProvideTextCommand{\texttrademark}{LGR}{\ensureascii{\texttrademark}}
  \let\ltx@amp\&
  \ProvideTextCommandDefault{\textampersand}{\ltx@amp}
  \ProvideTextCommand{\textampersand}{LGR}{\ensureascii{\ltx@amp}}
  \DeclareRobustCommand{\&}{\ifmmode\ltx@amp\else\textampersand\fi}
  \ProvideTextCommand{\SS}{LGR}{\ensureascii{\SS}}
%    \end{macrocode}
%
%  \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}}
% \changes{greek-1.5}{2013/06/15}{\cs{@roman} and \cs{@Roman} as TextCommands
%    (BUG: this extended the expansion problem to all languages!)}
% \changes{greek-1.6}{2013/07/19}{apply a patch by Enrico Gregorio.
%    Thanks to Claudio Beccari for testing and reporting.}
%
%    To prevent roman numerals being typeset in greek letters we need
%    to adopt the internal \LaTeX\ commands |\@roman| and
%    |\@Roman|. \emph{Up to version 1.5, the definition caused errors where
%    |\@roman| ends up in a situation where the argument needs to be expanded
%    (e.g. Roman page numbers in the ToC).}
%    \begin{macrocode}
  \def\@roman#1{\expandafter\ensureascii\expandafter{\romannumeral#1}}
  \def\@Roman#1{\expandafter\ensureascii\expandafter{%
                \expandafter\@slowromancap\romannumeral#1@}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%    Now we define two commands that switch
%    to the LGR font encoding. The Babel core defines corresponding commands
%    to switch to a Latin font encoding.
%
%  \begin{macro}{\greektext}
%    The declaration |\greektext| switches to LGR.
%    For shorter pieces of text the |\textgreek| macro 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
%    LGR 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}
%    The \href{http://www.ctan.org/pkg/cbgreek-complete}{CB Greek fonts}
%    contain an outline family. In order to make it available,
%    we define the command |\textol|. (This font-specific macro does not
%    fit in a language defintion file is and only kept for backwards
%    compatibility.)
%    \begin{macrocode}
  \def\outlfamily{\usefont{LGR}{cmro}{m}{n}}
  \DeclareTextFontCommand{\textol}{\outlfamily}
}{} % End of LGR fixes.
%    \end{macrocode}
%  \end{macro}
%
% \section{Definitions for the Greek language}
%
% 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'.}
% \changes{babel-greek-1.9i}{2020/02/27}{Fix accent in seename and alsoname.}
%    \begin{macrocode}
\addto\captionsgreek{%
  \def\prefacename{\textPi\textrho\acctonos\textomicron\textlambda
    \textomicron\textgamma\textomicron\textfinalsigma}%
  \def\refname{\textAlpha\textnu\textalpha
    \textphi\textomicron\textrho\acctonos\textepsilon\textfinalsigma}%
  \def\abstractname{\textPi\textepsilon\textrho\acctonos\textiota
    \textlambda\texteta\textpsi\texteta}%
  \def\bibname{\textBeta\textiota\textbeta\textlambda\textiota\textomicron
    \textgamma\textrho\textalpha\textphi\acctonos\textiota\textalpha}%
  \def\chaptername{\textKappa\textepsilon\textphi\acctonos\textalpha
    \textlambda\textalpha\textiota\textomicron}%
  \def\appendixname{\textPi\textalpha\textrho\acctonos\textalpha\textrho
    \texttau\texteta\textmu\textalpha}%
  \def\contentsname{\textPi\textepsilon\textrho\textiota
    \textepsilon\textchi\acctonos\textomicron\textmu\textepsilon
    \textnu\textalpha}%
  \def\listfigurename{\textKappa\textalpha\texttau\acctonos\textalpha
    \textlambda\textomicron\textgamma\textomicron\textfinalsigma{}
    \textSigma\textchi\texteta\textmu\acctonos\textalpha\texttau
    \textomega\textnu}%
  \def\listtablename{\textKappa\textalpha\texttau\acctonos\textalpha
    \textlambda\textomicron\textgamma\textomicron\textfinalsigma{}
    \textPi\textiota\textnu\acctonos\textalpha\textkappa\textomega\textnu}%
  \def\indexname{\textEpsilon\textupsilon\textrho\textepsilon
    \texttau\acctonos\texteta\textrho\textiota\textomicron}%
  \def\figurename{\textSigma\textchi\acctonos\texteta\textmu\textalpha}%
  \def\tablename{\textPi\acctonos\textiota\textnu\textalpha
    \textkappa\textalpha\textfinalsigma}%
  \def\partname{\textMu\acctonos\textepsilon\textrho\textomicron
    \textfinalsigma}%
  \def\enclname{\textSigma\textupsilon\textnu\texteta\textmu
    \textmu\acctonos\textepsilon\textnu\textalpha}%
  \def\ccname{\textKappa\textomicron\textiota\textnu\textomicron
    \textpi\textomicron\acctonos\textiota\texteta\textsigma\texteta}%
  \def\headtoname{\textPi\textrho\textomicron\textfinalsigma}%
  \def\pagename{\textSigma\textepsilon\textlambda\acctonos\textiota
    \textdelta\textalpha}%
  \def\seename{\textbeta\textlambda\acctonos\textepsilon\textpi\textepsilon}%
  \def\alsoname{\textbeta\textlambda\acctonos\textepsilon\textpi\textepsilon{}
    \textepsilon\textpi\acctonos\textiota\textsigma\texteta\textfinalsigma}%
  \def\proofname{\textAlpha\textpi\acctonos\textomicron
    \textdelta\textepsilon\textiota\textxi\texteta}%
  \def\glossaryname{\textGamma\textlambda\textomega\textsigma
    \textsigma\acctonos\textalpha\textrho\textiota}%
  }
%    \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{\accpsili\textAlpha\textnu\textalpha
    \textphi\textomicron\textrho\accvaria\textepsilon\textfinalsigma}%
  \def\indexname{\textEpsilon\accdasia\textupsilon\textrho\textepsilon
    \texttau\acctonos\texteta\textrho\textiota\textomicron}%
  \def\figurename{\textSigma\textchi\accperispomeni\texteta\textmu\textalpha}%
  \def\headtoname{\textPi\textrho\accvaria\textomicron\textfinalsigma}%
  \def\alsoname{\textbeta\textlambda\acctonos\textepsilon\textpi\textepsilon{}
    \accpsili\textepsilon\textpi\acctonos\textiota\textsigma\texteta\textfinalsigma}%
  \def\proofname{\accpsili\textAlpha\textpi\acctonos\textomicron
    \textdelta\textepsilon\textiota\textxi\texteta}%
}
%    \end{macrocode}
%  \end{macro}
%
% \changes{babel-greek-1.9}{2014/07/20}{Added caption names for
%    \cs{ancientgreek}}
%
%  \begin{macro}{\captionsancientgreek}
%    For texts written in ancient Greek, we took
%    the translations from Apostolos Syropoulos' |xgreek| package. For
%    now we just add extra definitions to |\captionsgreek| in order to
%    override the earlier definitions.
%    \begin{macrocode}
\let\captionsancientgreek\captionsgreek
\addto\captionsancientgreek{%
  \def\prefacename{\textPi\textrho\textomicron\textomicron\acctonos\textiota\textmu
    \textiota\textomicron\textnu}%
  \def\refname{\accpsili\textAlpha\textnu\textalpha\textphi\textomicron\textrho
    \textalpha\accvaria\textiota}%
  \def\abstractname{\textPi\textepsilon\textrho\acctonos\textiota\textlambda\texteta
    \textpsi\textiota\textvarsigma}%
  \def\bibname{\textBeta\textiota\textbeta\textlambda\textiota\textomicron
    \textgamma\textrho\textalpha\textphi\acctonos\textiota\textalpha}%
  \def\chaptername{\textKappa\textepsilon\textphi\acctonos\textalpha\textlambda
    \textalpha\textiota\textomicron\textnu}%
  \def\appendixname{\textPi\textalpha\textrho\acctonos\textalpha\textrho\texttau
    \texteta\textmu\textalpha}%
  \def\contentsname{\textPi\textepsilon\textrho\textiota\textepsilon\textchi
    \acctonos\textomicron\textmu\textepsilon\textnu\textalpha}%
  \def\listfigurename{\textKappa\textalpha\texttau\acctonos\textalpha\textlambda
    \textomicron\textgamma\textomicron\textvarsigma{}
    \textsigma\textchi\texteta\textmu\acctonos\textalpha\texttau\textomega\textnu}%
  \def\listtablename{\textKappa\textalpha\texttau\acctonos\textalpha\textlambda
    \textomicron\textgamma\textomicron\textvarsigma{}
    \textpi\textiota\textnu\acctonos\textalpha\textkappa\textomega\textnu}%
  \def\indexname{\textEpsilon\accdasia\textupsilon\textrho\textepsilon\texttau
    \acctonos\texteta\textrho\textiota\textomicron\textnu}%
  \def\figurename{\textSigma\textchi\accperispomeni\texteta\textmu\textalpha}%
  \def\tablename{\textPi\acctonos\textiota\textnu\textalpha\textxi}%
  \def\partname{\textMu\acctonos\textepsilon\textrho\textomicron\textvarsigma}%
  \def\enclname{\textSigma\textupsilon\textnu\texteta\textmu\textmu
    \acctonos\textepsilon\textnu\textomega\textvarsigma}%
  \def\ccname{\textKappa\textomicron\textiota\textnu\textomicron\textpi
    \textomicron\acctonos\textiota\texteta\textsigma\textiota\textvarsigma}%
  \def\headtoname{\textPi\textrho\accvaria\textomicron\textvarsigma}%
  \def\pagename{\textSigma\textepsilon\textlambda\accvaria\textiota\textvarsigma}%
  \def\seename{\accdasiaoxia\textomicron\textrho\textalpha}%
  \def\alsoname{\accdasiaoxia\textomicron\textrho\textalpha{} \accdasia\textomega\textsigma
    \textalpha\acctonos\textupsilon\texttau\textomega\textvarsigma}%
  \def\proofname{\accpsili\textAlpha\textpi\acctonos\textomicron\textdelta\textepsilon
    \textiota\textxi\textiota\textvarsigma}%
  \def\glossaryname{\textGamma\textlambda\textomega\textsigma\textsigma
    \acctonos\textalpha\textrho\textiota\textomicron\textnu}%
 }
%    \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
    \textIota\textalpha\textnu\textomicron\textupsilon\textalpha
      \textrho\acctonos\textiota\textomicron\textupsilon \or
    \textPhi\textepsilon\textbeta\textrho\textomicron\textupsilon
      \textalpha\textrho\acctonos\textiota\textomicron\textupsilon \or
    \textMu\textalpha\textrho\texttau\acctonos\textiota\textomicron\textupsilon
    \or \textAlpha\textpi\textrho\textiota\textlambda\acctonos\textiota
      \textomicron\textupsilon \or
    \textMu\textalpha\'"\textiota\textomicron\textupsilon \or
    \textIota\textomicron\textupsilon\textnu\acctonos\textiota
      \textomicron\textupsilon \or
    \textIota\textomicron\textupsilon\textlambda\acctonos\textiota
      \textomicron\textupsilon \or
    \textAlpha\textupsilon\textgamma\textomicron\acctonos\textupsilon
      \textsigma\texttau\textomicron\textupsilon \or
    \textSigma\textepsilon\textpi\texttau\textepsilon\textmu
      \textbeta\textrho\acctonos\textiota\textomicron\textupsilon \or
    \textOmicron\textkappa\texttau\textomega\textbeta
      \textrho\acctonos\textiota\textomicron\textupsilon \or
    \textNu\textomicron\textepsilon\textmu\textbeta
      \textrho\acctonos\textiota\textomicron\textupsilon \or
    \textDelta\textepsilon\textkappa\textepsilon\textmu\textbeta
      \textrho\acctonos\textiota\textomicron\textupsilon
  \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
    \accpsili\textIota\textalpha\textnu\textomicron\textupsilon\textalpha
      \textrho\acctonos\textiota\textomicron\textupsilon \or
    \textPhi\textepsilon\textbeta\textrho\textomicron\textupsilon
      \textalpha\textrho\acctonos\textiota\textomicron\textupsilon \or
    \textMu\textalpha\textrho\texttau\acctonos\textiota\textomicron
      \textupsilon \or
    \accpsili\textAlpha\textpi\textrho\textiota\textlambda
      \acctonos\textiota\textomicron\textupsilon \or
    \textMu\textalpha\"'\textiota\textomicron\textupsilon \or
    \accpsili\textIota\textomicron\textupsilon\textnu
      \acctonos\textiota\textomicron\textupsilon \or
    \accpsili\textIota\textomicron\textupsilon\textlambda
      \acctonos\textiota\textomicron\textupsilon \or
    \textAlpha\accpsili\textupsilon\textgamma\textomicron\acctonos
      \textupsilon\textsigma\texttau\textomicron\textupsilon \or
    \textSigma\textepsilon\textpi\texttau\textepsilon\textmu\textbeta
      \textrho\acctonos\textiota\textomicron\textupsilon \or
    \accpsili\textOmicron\textkappa\texttau\textomega\textbeta
      \textrho\acctonos\textiota\textomicron\textupsilon \or
    \textNu\textomicron\textepsilon\textmu\textbeta
      \textrho\acctonos\textiota\textomicron\textupsilon \or
    \textDelta\textepsilon\textkappa\textepsilon\textmu
      \textbeta\textrho\acctonos\textiota\textomicron\textupsilon
  \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 (with 8-bit TeX) and the definition of
%    the internal macros |\@alph| and |\@Alph| because in Greek we do use
%    the Greek numerals.
% \changes{greek-1.5}{2013/06/21}{LGR not used with XeTeX/LuaTeX.}
% \changes{greek-1.8}{2013/11/27}{use font-encoding specific TextCommands.
%    Use EU1 or EU2 for Latin script if available}
%    \begin{macrocode}
\addto\extrasgreek{\greekscript}
\addto\noextrasgreek{\latintext}
% \addto\noextrasgreek{\RestoreFontEncoding} % TODO define \RestoreFontEncoding
%    \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{%
  \PackageWarningNoLine{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{\textdexiakeraia}} % \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}
%
%    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 \textalpha\or \textbeta\or \textgamma\or \textdelta\or
  \textepsilon\or \textstigma\or \textzeta\or \texteta\or \texttheta\fi
  \ifnum#1=\z@\else\anw@true\fi\anw@print}
\def\gr@num@ii#1{%
  \ifcase#1\or \textiota\or \textkappa\or \textlambda\or \textmu\or
  \textnu\or \textxi\or \textomicron\or \textpi\or \textqoppa\fi
  \ifnum#1=\z@\else\anw@true\fi\gr@num@i}
\def\gr@num@iii#1{%
  \ifcase#1\or \textrho\or \textsigma\or \texttau\or \textupsilon\or
  \textphi\or \textchi\or \textpsi\or \textomega\or \textsampi\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\textaristerikeraia\fi
  \ifcase#1\or \textalpha\or \textbeta\or \textgamma\or \textdelta\or
  \textepsilon\or \stigma\or \textzeta\or \texteta\or \texttheta\fi
  \gr@num@iii}
\def\gr@num@v#1{%
  \ifnum#1=\z@\else\textaristerikeraia\fi
  \ifcase#1\or \textiota\or \textkappa\or \textlambda\or \textmu\or
  \textnu\or \textxi\or \textomicron\or \textpi\or \textqoppa\fi
  \gr@num@iv}
\def\gr@num@vi#1{%
  \textaristerikeraia
  \ifcase#1\or \textrho\or \textsigma\or \texttau\or \textupsilon\or
  \textphi\or \textchi\or \textpsi\or \textomega\or \textsampi\fi
  \gr@num@v}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
% \section{Character codes}
%
%    Greek letters drop diacritics (eccept dialytika and sub-iota) in
%    UPPERCASE. This is not cared for by the Unicode standard.
%    The file \file{greek-euenc.def} from \pkg{greek-fontenc}
%    contains the required |\lccode| and |\uccode| corrections from the
%    \pkg{xgreek} package by Apostolos Syropoulos.
% \changes{greek-1.5}{2013/06/21}{Support XeTeX/LuaTeX.}
% \changes{greek-1.9d}{2015/07/06}{uclc fixes not included in greek-euenc.def}
%
%    The LGR encoded fonts that are used to typeset Greek with 8-bit TeX
%    define ligatures for characters with diacritics. 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.
%
%  \begin{macro}{\greek@tilde}
% \changes{greek-1.0c}{1997/02/19}{Added command}
%    The Greek script uses a number of characters with more
%    than one accent. In LGR encoded fonts combined diacritics can be
%    obtained using Knuth's ligature mechanism (see usage.pdf).
%    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 normally used to produce an
%    unbreakable space.
% \changes{greek-1.3k}{2003/04/10}{Make sure the character `!' is not
%    active during the definition of \cs{greek@tilde}}
% \changes{greek-1.4}{2013/05/17}{do not re-define the tilde accent macro:
%    it works as expected with \file{lgrenc.def} from \pkg{greek-fontenc}.}
%    \begin{macrocode}
\@ifl@aded{def}{lgrenc}{%
  \begingroup
    \@ifundefined{active@char\string!}{}{\catcode`!=12\relax}
    \catcode`\~=12%
    \lccode`\!=`\~%
    \lowercase{\def\x{\endgroup
        \def\greek@tilde{!}}\x}
%    \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}
% \changes{babel-greek-1.9}{2014/07/20}{Added lc codes for chars 128 to 255}
%    In order to process the suitable characters and in such a way that
%    hyphenation patterns work also with precomposed characters, it is
%    necessary to declare the lc code for all characters, that can be part
%    of a word. We do this in |\extrasgreek| because this is a feature of
%    the LGR font encoding (which is the same in all language variants).
%    This means that multi-accented characters are regarded parts of a word
%    (and not non-word characters) also in monotonic spelling.
% \changes{babel-greek-1.9e}{2015/11/27}{Fix bug in lccode-setting loop
%   (patch by Enrico Gregorio).}
%    \begin{macrocode}
  \addto\extrasgreek{%
    \babel@savevariable{\lccode`v}\lccode`v=`v%
    \babel@savevariable{\lccode`\'}\lccode`\'=`\'%
    \babel@savevariable{\lccode`\"}\lccode`\"=`\"%
    % ``high bit characters'': set in a loop and correct exceptions
    \@tempcnta=128%
    \@whilenum\@tempcnta<253\do{%
      \expandafter\babel@savevariable\expandafter{%
                         \expandafter\lccode\the\@tempcnta}%
      \lccode\@tempcnta=\@tempcnta
      \advance\@tempcnta\@ne
    }%
    % Fix non-word characters:
    \lccode151=0%
    \lccode155=0%
    \lccode159=0%
    \lccode199=0%
    % Fix capital letters:
    \lccode195=147% GREEK LETTER DIGAMMA
    \lccode219=240% GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
    \lccode223=244% GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
  }

  \addto\extraspolutonikogreek{%
    % \l@greek=\bbl@polygreek
    \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 tilde |~| 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}{Use 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}
% Add composite commands, so that the dialytika is kept or put on the
% following character of a diphthong with |\MakeUppercase|
% (see lgrdef.enc from the the greek-fontenc package for details).
% \changes{greek-1.4}{2013/05/17}{Add TextCompositeCommands for
%     ``uppercase diacritics''.}
% \changes{greek-1.5}{2013/05/27}{Bugfix: @hiatus->LGR@hiatus}
% \changes{greek-1.5a}{2013/07/02}{Replaced non-printable literal character
%     with ^^-notation (thanks to Heiko Oberdiek for the hint).}
% \changes{greek-1.9}{2014/07/20}{The |^^|-notation seems to require lower case
%     letters. |^^9F| failed.}
%    \begin{macrocode}
  \DeclareTextCompositeCommand{\"}{LGR}{^^9f}{\accdialytika}
  \DeclareTextCompositeCommand{\'}{LGR}{^^9f}{\LGR@hiatus}
  \DeclareTextCompositeCommand{\`}{LGR}{^^9f}{\LGR@hiatus}
%    \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}.}
% \changes{greek-1.5a}{2013/06/27}{provide ``extraspolutonikogreek'' also
%    for Xe/LuaTeX.}
%    \begin{macrocode}
  \addto\extraspolutonikogreek{\languageshorthands{greek}}%
  \declare@shorthand{greek}{~}{\greek@tilde}
}{} % End of LGR-specific code.
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
% \section{symbol name aliases}
%    For backwards compatibility, we keep aliases for a few symbols.
% \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}
% \changes{greek-1.5}{2013/06/11}{change symbol macros to aliases}
%    \begin{macrocode}
\providecommand*{\anwtonos}{\textdexiakeraia}
\providecommand*{\katwtonos}{\textaristerikeraia}
\providecommand*{\qoppa}{\textqoppa}
\providecommand*{\stigma}{\textstigma}
\providecommand*{\sampi}{\textsampi}
\providecommand*{\Digamma}{\textDigamma}
\providecommand*{\ddigamma}{\textdigamma}
\providecommand*{\vardigamma}{\textvardigamma}
\providecommand*{\euro}{\texteuro}
\providecommand*{\permill}{\textperthousand}
%    \end{macrocode}
%
% \changes{greek-1.3l}{2004/02/19}{Commented these lines out as this
%    change has made it into \LaTeX{} itself.}
% \changes{greek-1.8}{2013/11/27}{Remove the redefintion of fnum@figure
%    and fnum@table.}
%
%    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         \~}
%%
