% textalpha: Greek symbols in text
% ********************************
% 
% :Copyright: © 2010 Günter Milde
% :Licence:   This work may be distributed and/or modified under the
%             conditions of the `LaTeX Project Public License`_, either
%             version 1.3 of this license or any later version.
% 
% :Abstract:  Provide a set of ``\text*`` macros for Greek characters
%             in text mode.
% 
% :Identification:
%  ::

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{textalpha}
[2013/11/28 v0.11 macros for Greek letters in text]

% .. note::
% 
%    The package was renamed from `textgreek` to `textalpha` to prevent
%    confusion with the textgreek_ package by Leonard Michlmayr.
% 
% 
% Changelog:
%   .. class:: borderless
% 
%   ==========  ===== =========================================================
%   2010-06-16  0.1   initial version
%   2012-06-27  0.2   support for compound Unicode definitions outside LGR
%   2013-05-03  0.3   new accent macro names with ``lgrxenc.def`` 0.7
%   2013-05-28  0.4   use ``lgrenc.def`` from greek-fontenc.
%   2013-09-11  0.5   move to greek-fontenc_,
%   ..                support XeTeX/LuaTeX, add breve below accents.
%   2013-11-28  0.11  Compatibility with Xe/LuaTeX in 8-bit mode.
%   ==========  ===== =========================================================
% 
% Motivation
% ==========
% 
% By default, TeX macros for Greek letters are only valid in mathematical
% mode. This package sets up a suitable font encoding and Greek LICR
% definitions (``\textalpha`` -- ``\textOmega``).
% 
% To allow documents using Greek LICR macros without worrying about the TeX
% engine used to compile them, this package tests the declared font encodings
% and does "the right thing" to set up Greek text font support:
% 
% * If the Unicode font encodings EU1 (XeTeX) or EU2 (LuaTeX) are declared,
%   before loading this package (e.g. vie ``fontspec``) the package provides
%   Greek LICR definitions for them.
% 
% * If the LGR font encoding is declared before loading this package, it is
%   set as default for Greek LICR macros (cf. fntguide_ section 5.3).
%   
%   With XeTeX or LuaTex, Unicode fonts and LGR encoded 8-bit fonts can be
%   used in the same document (see test-euenc.tex_).
% 
% Advantages:
% 
% * Symbols from a Greek text font (e.g. the `CB fonts`_) can be accessed
%   without the need for an explicite font-encoding switch anywhere in the
%   text.
% 
% * Unicode input of Greek characters is supported 
% 
%   + via ``\usepackage[utf8]{inputenc}`` and ``lgrenc.dfu`` from
%     greek-inputenc_ for 8-bit TeX or XeTeX/LuaTeX in 8-bit compatibility
%     mode in any font encoding (see textalpha-test.tex_).
%     
%   + natively by XeTeX/LuaTeX for Unicode fonts. As inputenc_ does not work
%     with these engines, text input can be done via the Latin transcription
%     or LICR but *not via literal Unicode characters* for 8-bit font encodings
%     like LGR (see test-euenc.tex_).
% 
% .. Attention:: The macros work well in any font encoding for single symbols.
%    However, with 8-bit TeX engines, the automatic font-encoding switches
%    behind the doors interfere with kerning between letters and replacement
%    of accent+character with a pre-composed character.
% 
%    Therefore, Greek text should be written with the help of babel_ or
%    polyglossia_ (setting the language to ``greek``) or wrapped in the
%    provided ``ensuregreek`` macro.  Using babel_ or polyglossia_ also helps
%    to ensure correct hyphenation of Greek text.
% 
% 
% Usage
% =====
% 
% .. code:: latex
% 
%   \usepackage{textalpha}
% 
% For details see `<textalpha-test.tex>`_ and `<textalpha-test.pdf>`_ (8-bit
% TeX and XeTeX/LuaTeX in 8-bit compatibility mode) as well as
% `<test-euenc.tex>`_ and `<test-euenc.pdf>`_ (XeTeX/LuaTeX with Unicode
% fonts).
% 
% 
% Implementation
% ==============
% 
% Requirements
% ------------
% 
% With XeTeX or LuaTeX, there is one common input and font encoding --
% Unicode. 8-bit TeX font encodings are only used in compatibility mode or for
% fonts not available otherwise. For compatibility with the LaTeX font
% selection system, the package euenc_ defines the (pseudo) font encodings EU1
% and EU2 for XeTeX and LuaTeX respectively. However euenc does not (yet)
% define LICR macros. We therefore explicitely load Greek LICR definitions for
% XeTeX/LuaTeX from `greek-euenc.def <greek-euenc.def.html>`_ which in turn
% includes `greek-fontenc.def <greek-fontenc.def.html>`_.
% 
% With 8-bit LaTeX, the LGR font encoding is used for Greek characters. If no
% Greek-supporting font encoding (EU1, EU2, or LGR) is declared, LGR is loaded
% and set up as default Greek font encoding by this package.
% 
% To give ``textalpha.sty`` a chance of finding out which font encodings are
% used, load it after fontspec_ and/or fontenc_.
%  
% Font encodings
% """"""""""""""
% 
% Ensure a Greek-supporting font encoding exists and supports Greek LICR
% macros:
% 
% Load the Greek LICR definitions for Unicode if font encoding EU1 (XeTeX) or
% EU2 (LuaTeX) is detected. [#EU]_ In an ideal world, this would be done in
% the ``eu1enc.def`` (or ``eu2enc.def``) file of the euenc_ package. If none
% of EU1, EU2, and LGR is declared, load ``lgrenc.def``:
% 
% Re-set the ``\LastDeclaredEncoding``: Because fontenc loads font
% encoding definition files only once, it may happen that another font
% encoding is defined afterwards --- for example fontspec_ leaves
% ``\LastDeclaredEncoding`` at ``T3`` (tipa), because it inputs the xunicode_
% package which in turn loads ``t3enc.def``. ::

\@ifl@aded{def}{eu1enc}{
  \renewcommand{\LastDeclaredEncoding}{EU1}
  \input{greek-euenc.def}
}{% else
  \@ifl@aded{def}{eu2enc}{
    \renewcommand{\LastDeclaredEncoding}{EU2}
    \input{greek-euenc.def}
  }{% else
    \@ifl@aded{def}{lgrenc}{
      % LGR already declared and set up
    }{
      \input{lgrenc.def}
    }
  }
}

% .. [#EU] The two different (pseudo) font encodings allow different font setups for
%    XeTeX vs. LuaTeX using differently named ``*.fd`` files (see euenc_ for
%    details).
% 
% 
% The package hyperref_ defines the PU font encoding which also supports
% (monotonic) Greek. It currently misses polytonic greek and the
% ``\greekscript`` and ``\ensuregreek`` TextCommands::

\@ifl@aded{def}{puenc}
  {\ProvideTextCommand{\greekscript}{PU}{}
   \ProvideTextCommand{\ensuregreek}{PU}[1]{#1}}
  {}

% Default declarations
% --------------------
% 
% The following definitions ensure that the Greek LICR macros can be used
% anywhere in the document also with 8-bit TeX by declaring LGR as their
% default font encoding. Abort here, if another Greek-supporting
% font encoding is used instead of LGR::

    \@ifl@aded{def}{lgrenc}
      {\renewcommand{\LastDeclaredEncoding}{LGR}}
      {\expandafter\endinput} % "return"

% greekscript, ensuregreek
% """"""""""""""""""""""""
% 
% The ``\greekscript`` declaration ensures the current font encoding supports
% the Greek script. ``greek-fontenc.def`` sets this to the empty declaration
% for font encodings that do so. This is currently used by ``lgrenc.def``
% (LGR) and ``greek-euenc.def`` (Greek LICR macros for EU1 and EU2).
% 
% 
% We define LGR as default encoding for Greek text. We use
% ``\ProvideTextCommandDefault`` to enable the author or other packages to use
% an alternative definition (see [fntguide_])::

\ProvideTextCommandDefault{\greekscript}{\fontencoding{LGR}\selectfont}

% The ``\ensuregreek`` command can be used to ensure that its argument is set in
% a font encoding with support for Greek. Again the default is LGR::

\ProvideTextCommandDefault{\ensuregreek}[1]{\leavevmode{\greekscript #1}}

% .. The [fntguide_] writes
% 
%      Note that ``\DeclareTextAccentDefault`` can be used on any
%      one-argument encoding-specific command, not just those defined with
%      ``\DeclareTextAccent``.
% 
%    However, the simpler alternative
%    ``\DeclareTextAccentDefault{\ensuregreek}{LGR}`` fails with the table of
%    Unicode characters in the test document `<textalpha-test.tex>`__:
% 
%      ``! You can't use a prefix with `end-group character }'.``
% 
% Eventually, all font encodings supporting Greek script (e.g. LGI, PU, EU1,
% EU2) will declare ``\ensuregreek`` as text command that passes the argument
% unchanged. This way, kerning and selection of precomposed glyphs would work
% also for cases like ``\ensuregreek{\'A}U``.
% 
% 
% Greek Alphabet
% """"""""""""""
% 
% Define the ``text*`` marcos as default for all font encodings::

\DeclareTextSymbolDefault{\textAlpha}{LGR}
\DeclareTextSymbolDefault{\textBeta}{LGR}
\DeclareTextSymbolDefault{\textGamma}{LGR}
\DeclareTextSymbolDefault{\textDelta}{LGR}
\DeclareTextSymbolDefault{\textEpsilon}{LGR}
\DeclareTextSymbolDefault{\textZeta}{LGR}
\DeclareTextSymbolDefault{\textEta}{LGR}
\DeclareTextSymbolDefault{\textTheta}{LGR}
\DeclareTextSymbolDefault{\textIota}{LGR}
\DeclareTextSymbolDefault{\textKappa}{LGR}
\DeclareTextSymbolDefault{\textLambda}{LGR}
\DeclareTextSymbolDefault{\textMu}{LGR}
\DeclareTextSymbolDefault{\textNu}{LGR}
\DeclareTextSymbolDefault{\textXi}{LGR}
\DeclareTextSymbolDefault{\textOmicron}{LGR}
\DeclareTextSymbolDefault{\textPi}{LGR}
\DeclareTextSymbolDefault{\textRho}{LGR}
\DeclareTextSymbolDefault{\textSigma}{LGR}
\DeclareTextSymbolDefault{\textTau}{LGR}
\DeclareTextSymbolDefault{\textUpsilon}{LGR}
\DeclareTextSymbolDefault{\textPhi}{LGR}
\DeclareTextSymbolDefault{\textChi}{LGR}
\DeclareTextSymbolDefault{\textPsi}{LGR}
\DeclareTextSymbolDefault{\textOmega}{LGR}
%
\DeclareTextSymbolDefault{\textalpha}{LGR}
\DeclareTextSymbolDefault{\textbeta}{LGR}
\DeclareTextSymbolDefault{\textgamma}{LGR}
\DeclareTextSymbolDefault{\textdelta}{LGR}
\DeclareTextSymbolDefault{\textepsilon}{LGR}
\DeclareTextSymbolDefault{\textzeta}{LGR}
\DeclareTextSymbolDefault{\texteta}{LGR}
\DeclareTextSymbolDefault{\texttheta}{LGR}
\DeclareTextSymbolDefault{\textiota}{LGR}
\DeclareTextSymbolDefault{\textkappa}{LGR}
\DeclareTextSymbolDefault{\textlambda}{LGR}
\DeclareTextSymbolDefault{\textmu}{LGR}
\DeclareTextSymbolDefault{\textnu}{LGR}
\DeclareTextSymbolDefault{\textxi}{LGR}
\DeclareTextSymbolDefault{\textomicron}{LGR}
\DeclareTextSymbolDefault{\textpi}{LGR}
\DeclareTextSymbolDefault{\textrho}{LGR}
\DeclareTextSymbolDefault{\textsigma}{LGR}
\DeclareTextSymbolDefault{\textvarsigma}{LGR}
\DeclareTextSymbolDefault{\textfinalsigma}{LGR} % alias for \textvarsigma
\DeclareTextSymbolDefault{\textautosigma}{LGR}  % char 115 in LGR
\DeclareTextSymbolDefault{\texttau}{LGR}
\DeclareTextSymbolDefault{\textupsilon}{LGR}
\DeclareTextSymbolDefault{\textphi}{LGR}
\DeclareTextSymbolDefault{\textchi}{LGR}
\DeclareTextSymbolDefault{\textpsi}{LGR}
\DeclareTextSymbolDefault{\textomega}{LGR}

% Additional Greek symbols
% ''''''''''''''''''''''''
% 
% Including alias names for compatibility with hyperref's puenc.def.
% 
% Ancient Greek Numbers (Athenian Numerals)::

\DeclareTextSymbolDefault{\textpentedeka}{LGR}    % GREEK ACROPHONIC ATTIC FIFTY
\DeclareTextSymbolDefault{\textpentehekaton}{LGR} % GREEK ACROPHONIC ATTIC FIVE HUNDRED
\DeclareTextSymbolDefault{\textpenteqilioi}{LGR}  % GREEK ACROPHONIC ATTIC FIVE THOUSAND
\DeclareTextSymbolDefault{\textpentemurioi}{LGR}  % GREEK ACROPHONIC ATTIC FIFTY THOUSAND

% Archaic letters::

\DeclareTextSymbolDefault{\textstigma}{LGR}      % ϛ
\DeclareTextSymbolDefault{\textstigmagreek}{LGR} % ϛ (puenc.def)
\DeclareTextSymbolDefault{\textvarstigma}{LGR}   % stigma variant
\DeclareTextSymbolDefault{\textkoppa}{LGR}       % ϟ (greek small letter koppa)
\DeclareTextSymbolDefault{\textkoppagreek}{LGR}  % ϟ (puenc.def)
\DeclareTextSymbolDefault{\textqoppa}{LGR}       % ϙ (archaic koppa)
\DeclareTextSymbolDefault{\textQoppa}{LGR}       % Ϙ (archaic Koppa)
\DeclareTextSymbolDefault{\textStigma}{LGR}      % Ϛ ϹΤ ligature in some fonts
\DeclareTextSymbolDefault{\textStigmagreek}{LGR} % Ϛ (puenc.def)
\DeclareTextSymbolDefault{\textSampi}{LGR}       % Ϡ
\DeclareTextSymbolDefault{\textSampigreek}{LGR}  % Ϡ (puenc.def)
\DeclareTextSymbolDefault{\textsampi}{LGR}       % ϡ
\DeclareTextSymbolDefault{\textsampigreek}{LGR}  % ϡ (puenc.def)
\DeclareTextSymbolDefault{\textanoteleia}{LGR}   % ·
\DeclareTextSymbolDefault{\texterotimatiko}{LGR} % ; (003B is the preferred character)
\DeclareTextSymbolDefault{\textdigamma}{LGR}     % ϝ
\DeclareTextSymbolDefault{\textDigamma}{LGR}     % Ϝ
\DeclareTextSymbolDefault{\textdigammagreek}{LGR} % ϝ (puenc.def)
\DeclareTextSymbolDefault{\textDigammagreek}{LGR} % Ϝ (puenc.def)

% numeral signs: http://en.wikipedia.org/wiki/Greek_numerals ::

\DeclareTextSymbolDefault{\textnumeralsigngreek}{LGR}      % (puenc.def)
\DeclareTextSymbolDefault{\textnumeralsignlowergreek}{LGR} % (puenc.def)

% Diacritics
% """"""""""
% 
% Greek diacritics via "named" macros::

\DeclareTextAccentDefault{\accdasia}{LGR}
\DeclareTextAccentDefault{\accpsili}{LGR}
\DeclareTextAccentDefault{\acctonos}{LGR}
\DeclareTextAccentDefault{\accvaria}{LGR}
\DeclareTextAccentDefault{\accperispomeni}{LGR}
\DeclareTextAccentDefault{\accdialytika}{LGR}
\DeclareTextAccentDefault{\<}{LGR}
\DeclareTextAccentDefault{\>}{LGR}
%
\DeclareTextAccentDefault{\accdasiaoxia}{LGR}
\DeclareTextAccentDefault{\accdasiavaria}{LGR}
\DeclareTextAccentDefault{\accdasiaperispomeni}{LGR}
\DeclareTextAccentDefault{\accpsilioxia}{LGR}
\DeclareTextAccentDefault{\accpsilivaria}{LGR}
\DeclareTextAccentDefault{\accpsiliperispomeni}{LGR}
\DeclareTextAccentDefault{\accdialytikatonos}{LGR}
\DeclareTextAccentDefault{\accdialytikavaria}{LGR}
\DeclareTextAccentDefault{\accdialytikaperispomeni}{LGR}

% Postfix accents::

\DeclareTextSymbolDefault{\ypogegrammeni}{LGR} % "small" sub-iota
\DeclareTextSymbolDefault{\prosgegrammeni}{LGR}  % "capital" sub-iota

% Other accents in LGR::

\DeclareTextAccentDefault{\accinvertedbrevebelow}{LGR} % INVERTED BREVE BELOW
\DeclareTextAccentDefault{\textsubarch}{LGR}           % tipa, Teubner name: ut
\DeclareTextAccentDefault{\accbrevebelow}{LGR}         % BREVE BELOW


% Auxiliary macros
% """"""""""""""""
% 
% ``\MakeUppercase`` requires two internal commands::

\DeclareTextAccentDefault{\LGR@hiatus}{LGR}
\DeclareTextAccentDefault{\LGR@Dialytika}{LGR}


% .. References
%    ----------
% .. _LaTeX Project Public License: http://www.latex-project.org/lppl.txt
% .. _CB fonts: http://www.ctan.org/pkg/cbgreek-complete
% .. _babel: http://www.ctan.org/pkg/babel
% .. _euenc:  http://www.ctan.org/pkg/euenc
% .. _e-TeX: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=etex
% .. _fontenc: http://www.ctan.org/pkg/fontenc
% .. _fontspec: http://www.ctan.org/pkg/fontspec
% .. _fntguide: http://www.ctan.org/tex-archive/macros/latex/doc/fntguide.pdf
% .. _greek-fontenc: http://www.ctan.org/pkg/greek-fontenc
% .. _greek-inputenc: http://www.ctan.org/pkg/greek-inputenc
% .. _hyperref: http://www.ctan.org/pkg/hyperref
% .. _inputenc: http://www.ctan.org/pkg/inputenc
% .. _polyglossia: http://www.ctan.org/pkg/polyglossia
% .. _textgreek: http://www.ctan.org/pkg/textgreek
% .. _xunicode: http://www.ctan.org/pkg/xunicode
