% \iffalse meta-comment
%<*internal>
\begingroup
\input docstrip.tex
\keepsilent

\preamble
  ------------------------------------------------------------------
  The occitan module for babel
  Copyright (C) 2015 C��dric Valmary
  All rights reserved
  
  Licence information appended

  Created by C��dric Valmary: cvalmary at yahoo dot fr 
  of Tot en ��c <http://www.totenoc.eu/>

  
\endpreamble
\postamble
Distributable under the LaTeX Project Public License,
version 1.3c or higher (your choice). The latest version of
this license is at: http://www.latex-project.org/lppl.txt

This work is "author-maintained"
The maintainer is C��dric Valmary

\endpostamble

\askforoverwritefalse

\generate{\file{occitan.ldf}{\from{occitan.dtx}{code}}}

\def\tmpa{plain}
\ifx\tmpa\fmtname\endgroup\expandafter\bye\fi
\endgroup
%</internal>
%
%
% \fi
% \CheckSum{344}
% \iffalse
%    Tell the \LaTeX\ system who we are and write an entry on the
%    transcript.
%\fi
%\iffalse
%<*filedriver>
\ProvidesFile{occitan.dtx}
%</filedriver>
%<code>\ProvidesLanguage{occitan}
%<*code>
        [2016/02/04 0.2 Occitan support from the babel system]
%</code>
%<*filedriver>
\documentclass{ltxdoc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage{booktabs}
\newcommand*\TeXhax{\TeX hax}
\newcommand*\babel{\textsf{babel}}
\newcommand*\pack[1]{\textsf{#1}}
\newcommand*\langvar{$\langle \it lang \rangle$}
\newcommand*\note[1]{}
\newcommand*\Lopt[1]{\textsf{#1}}
\newcommand*\file[1]{\texttt{#1}}
\author{C��dric Valmary--- \texttt{cvalmary at yahoo dot fr }}
\title{The Occitan language module for \babel}
\date{\filedate\ -- version \fileversion}
\begin{document}
 \DocInput{occitan.dtx}
\end{document}
%</filedriver>
%\fi
% \GetFileInfo{occitan.dtx}
%
% \maketitle
%
%  \section{The Occitan language}
%    \textbf{Important notice}: This language description file relies on
%    functionalities provided by a modern TeX system distribution with
%    pdfLaTeX working in extended mode (eTeX commands available); it
%    should perform correctly also with XeLaTeX and LuaLaTeX; tests have
%    been made also with the latter programs, but it was really tested in
%    depth with |babel| and pdfLaTeX. Actually, even if it possible to use
%    \pack{babel} with XeLaTeX and LuaLaTeX, the latter programs have
%    available the specific \pack{polyglossia} package with the proper
%    settings also for the  Occitan language.
%
%    \bigskip
%
%    The Occitan language nowadays exists as a \emph{koin��} for the multitude
%    of Occitan varieties, each one with its dialects; the main varieties are
%    Auver\-nhat, Gascon, Lemosin, Lengadocian, Ni��ard, Poroven��al, Vivaroalpenc 
%    as they are named in the document published by the \emph{Conselh de la
%    lenga occitana} 
%    (see \url{http://gianni.vacca.perso.sfr.fr/guilhemix/clo-sintesi.pdf}).
%    This Conselh takes care also of maintaining a common standard at least 
%    for spelling, but admits a variety of pronunciations and in some cases 
%    a variety of spellings; for example the Gascon variety changes the 
%    initial `f\/' into an aspirated `h'; this implies the necessity of 
%    distinguishing when the digraphs `lh', `nh', and `sh' are really digraphs
%    or are to be considered distinct letters that in Gascon are rendered as 
%    `l$\cdot$h', `n$\cdot$h', and `s$\cdot$h' respectively. A similar situation
%    takes place in the Vivaroalpenc variety, where the intervocalic `d'
%    vanishes. This language description file should not be concerned with these
%    variant spellings; the hyphenation pattern files might not correctly
%    handle all such situations so that some manual intervention might be
%    necessary. The tests carried on so far apparently work correctly, but users
%    are invited to let me know about possible necessary corrections.
%
%    \bigskip
%
%    The file \file{\filename} defines all the required and some optional
%    language-specific macros for the Occitan language.
%
%    \begin{table}[htb]\centering
%    \begin{tabular}{cp{90mm}}
%    \toprule
%    |"|    & inserts a compound word mark where hyphenation is legal;
%             it allows etymological hyphenation which is recommended
%             for technical terms, chemical names and the like; it
%             does not work if the next character is represented with
%             a control sequence or is an accented character.\\
%    \texttt{\string"\string|}
%           & the same as the above without the limitation on
%            characters represented with control sequences or accented
%            ones.\\
%    |"<|   & inserts open guillemets without trailing space.\\
%    |">|   & inserts closed guillemets without leading space.\\
%    |"/|   & allows hyphenation of both words connected with slash.\\
%    |".|   & allows hyphenation of both words fragments connected with 
%             a half height dot (ponch interior in Occitan)\\
%    \bottomrule
%    \end{tabular}
%    \caption{Shorthands for the Occitan language. These shorthands are
%    available only if command \texttt{\string\setactivedoublequote} is given
%    after loading \babel\ and before \texttt{\string\begin\{document\}}.}
%    \label{t:itshrtct}
%    \end{table}
%
%    The features of this language definition file are the following:
%    \begin{enumerate}
%    \item The Occitan hyphenation is invoked, provided that the Occitan 
%      hyphenation pattern files were loaded when the specific format file
%      was built.
%    \item The language dependent infix words to be inserted by such
%      commands as |\chapter|, |\caption|, |\tableofcontents|,
%      etc. are redefined in accordance with the Occitan
%      typographical practice.
%    \item Since Occitan can be easily hyphenated and Occitan practice
%      allows to break a word before the last two letters, hyphenation
%      parameters have been set accordingly, but a very high demerit
%      value has been set in order to avoid word breaks in the
%      penultimate line of a paragraph. Specifically the |\clubpenalty|,
%      and the |\widowpenalty| are set to rather high values and
%      |\finalhyphendemerits| is set to such a high value that
%      hyphenation is strongly discouraged between the last two lines
%      of a paragraph.
%    \item Some language specific shorthands have been defined so as to
%      allow etymological hyphenation, specifically |"| inserts a
%      break point at any word boundary that the typesetter chooses,
%      provided it is not followed by an accented letter, and \verb="|= 
%      when the desired break point falls before an accented letter.
%      As you can read in table~\ref{t:itshrtct}, these shorthands are
%      available only if they get activated with |\setactivedoublequote|
%      after loading \babel\ but before the |\begin{docuemnt}| statement.
%      This is done in order to preserve the user from package conflicts:
%      if s/he wants to use these facilities s/he must remember that
%      conflicts may arise unless active characters are deactivated;
%      this can be done with the \babel\ command |\shorthadsoff{"}|
%      (and reactivated with |\shorthandson{"}|) when its wise to do
%      so; conflicts have been reported with package \file{xypic} and
%      with \texttt{TikZ}, but the latter has its own library to
%      deactivate all active characters, not just the double quotes,
%      the only Occitan language specific activated  character.
%    \item The shorthands |"<| and |">| insert the guillemets 
%      used in Occitan typography, but without any spacing as, on the
%      opposite, it is done in French typography; with the T1 font encoding
%      the ligatures |<<| and |>>| should insert such signs directly,
%      but not all the virtual fonts that claim to follow the T1 font
%      encoding actually contain the guillemets; with the OT1 encoding
%      the guillemets are not available and must be faked in some
%      way. By using the |"<| and |">| shorthands (even with the T1
%      encoding) the necessary tests are performed and in case the
%      guillemets are replaced with the ones contained in the Latin Modern fonts.
%      At the same time if OpenType fonts are being used with XeLaTeX
%      or LuaLaTeX, there are no problems with guillemets.
%    \end{enumerate}
% 
%
% \StopEventually{}
%
%\subsection{The commented code}
%    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{occitan-1.2i}{1996/11/03}{Now use \cs{LdfInit} to perform
%    initial checks}
% \changes{occitan-1.2j}{1996/12/29}{Added braces around second arg of
%    \cs{LdfInit}}
%\iffalse
%<*code>
%\fi
%    \begin{macrocode}
\LdfInit{occitan}{captionsoccitan}%
%    \end{macrocode}
%
%    When this file is read as an option, i.e. by the |\usepackage|
%    command, \texttt{occitan} will be an `unknown' language in which
%    case we have to make it known.  So we check for the existence of
%    |\l@occitan| to see whether we have to do something here.
%
%    \begin{macrocode}
\ifx\l@occitan\@undefined
    \@nopatterns{occitan}%
    \adddialect\l@occitan \z@\fi
%    \end{macrocode}
%
%    The next step consists of defining commands to switch to (and
%    from) the Occitan language.
%
% \begin{macro}{\captionsoccitan}
%    The macro |\captionsoccitan| defines all strings used
%    in the four standard document classes provided with \LaTeX.
%    \begin{macrocode}
\addto\captionsoccitan{%
   \def\refname{Refer\'encias}%
   \def\abstractname{Resumit}%
   \def\bibname{Bibliografia}%
   \def\prefacename{Prefaci}%
   \def\chaptername{Cap\'itol}%
   \def\appendixname{Ann\`ex}%
   \def\contentsname{Ensenhador}%
   \def\listfigurename{Taula de las figuras}%
   \def\listtablename{Taula dels tabl\`eus}%
   \def\indexname{Ind\`ex}%
   \def\figurename{Figura}%
   \def\tablename{Tabl\`eu}%
   \def\partname{Partida}%
   \def\pagename{Pagina}%
   \def\seename{vejatz}%
   \def\alsoname{vejatz tanben}%
   \def\enclname{P\`e\c{c}a junta}%
   \def\ccname{c\`opia a}%
   \def\headtoname{A}%
   \def\proofname{Demostracion}%
   \def\glossaryname{Glossari}%
  }%
%    \end{macrocode}
% \end{macro}
%
%    \begin{macro}{\dateoccitan}
%    The macro |\dateoccitan| defines the command |\today| to typeset
%    the current date according to the Occitan style of using the suitable
%    prepositions before the month name and the year number; moreover the
%    first day of the month is marked with the ordinal abbreviation,
%    while the other day numbers are left without any ordinal indication.
%    \begin{macrocode}
\def\dateoccitan{%
  \def\today{%
  \ifcase \day\or
    1��r\else
    \number\day
  \fi~%
  \ifcase\month\or
    de~geni\`er\or 
    de~febri\`er\or 
    de~mar\c{c}\or 
    d'abril\or 
    de~mai\or 
    de~jiunh\or
    de~julhet\or 
    d'agost\or 
    de~setembre\or 
    d'octobre\or 
    de~novembre\or
    de~decembre%
  \fi\space 
  de~\number\year}}%
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\occitanhyphenmins}
%    The occitan hyphenation patterns can be used with both
%    |\lefthyphenmin| and |\righthyphenmin| set to~2.
%    \begin{macrocode}
\providehyphenmins{\CurrentOption}{\tw@\tw@}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\extrasoccitan}
% \begin{macro}{\noextrasoccitan}
%
%    Lower the chance that clubs or widows occur; lower the chances that a line
%    break takes place between the last two lines of a paragraph.
%    \begin{macrocode}
\addto\extrasoccitan{%
  \babel@savevariable\clubpenalty
  \babel@savevariable\widowpenalty
  \babel@savevariable\@clubpenalty
  \clubpenalty3000\widowpenalty3000\@clubpenalty\clubpenalty}%

\addto\extrasoccitan{%
  \babel@savevariable\finalhyphendemerits
  \finalhyphendemerits50000000}%
%    \end{macrocode}
%
%    In order to enable the hyphenation of words such as
%    ``l'Occit��nia'' we give the \texttt{'} a non-zero lower case
%    code. This allows \TeX\ to find the following hyphenation
%    points |l'Oc-ci-t��-nia| instead of none.
%    \begin{macrocode}
\addto\extrasoccitan{%
  \lccode`'=`'}%
\addto\noextrasoccitan{%
  \lccode`'=0}%
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
%   \subsection{Support for etymological hyphenation}
%
%    In Occitan etymological hyphenation is desirable with
%    technical terms, chemical names, and the like.
%    We reach this goal by means of shorthands tied to the active character |"|.
%    The active double straight quote may conflict with other packages;
%    so we set it as an optional facility.
%
%    Instead of a boolean switch we use a private counter so as to check
%    at |\begin{document}| if this facility has to be activated. The default
%    value is zero; anything different from zero means that the facility
%    has to be activated; this is done with command |\setactivedoublequote|
%    to be issued before |\begin{document}|
%
%    \begin{macrocode}
\newcount\oc@doublequoteactive \oc@doublequoteactive=\z@
\def\setactivedoublequote{\oc@doublequoteactive=\@ne}
\AtBeginDocument{%
  \unless\ifnum\oc@doublequoteactive=\z@
  \initiate@active@char{"}%
  \addto\extrasoccitan{\bbl@activate{"}\languageshorthands{occitan}}%
%    \end{macrocode}
%    \begin{macro}{\oc@cwm}
%    The active character |"| is now defined for language |occitan| so
%    as to perform different actions in math mode compared to text
%    mode; specifically in math mode a double quote is inserted so as
%    to produce a double prime sign, while in text mode the temporary
%    macro |\oc@next| is defined so as to defer any further action
%    until the next token category code has been tested.
%    \begin{macrocode}
  \declare@shorthand{occitan}{"}{%
    \ifmmode
      \def\oc@next{''}%
    \else
      \def\oc@next{\futurelet\oc@temp\oc@cwm}%
    \fi
    \oc@next
  }%
\fi
%    \end{macrocode}
% The following statement must be conditionally executed after the above
% modification of the |\extraasoccitan| list; in facts at the ``begin
% document'' execution, the main language has already been set without
% the above modifications; therefore nothing takes place unless the
% occitan main language is selected again with the explicit command
% |\selectlanguage|; without this trick the active double quotes would
% remain inactive; of course |\languagename| contains the string |occitan|
% if this language was the main one; by testing this string, the suitable
% command may be issued again with the new settings and the double quotes
% become really active. 
%    \begin{macrocode}
\ifdefstring{\languagename}{occitan}{\selectlanguage{occitan}}{\relax}
}%
%    \end{macrocode}
%    \begin{macro}{\oc@cwm}
%    The \cs{oc@next} service control sequence is such that upon its
%    execution a temporary variable \cs{oc@temp} is made equivalent to
%    the next token in the input list without actually removing it.
%    Yes, this is a point to be underlined: a token that has made
%    equivalent with |\futurelet| to some other token, does not remove
%    the latter; while a macro that is followed by a space ignores it
%    and reads the first non-space token. This can be exploited in the
%    following macros.
%
%    Such temporary token is then tested by the macro \cs{oc@cwm}
%      and if it is found to be equivalent to a letter token (catcode=11),
%      then it introduces the compound word separator control sequence
%      \cs{oc@allowhyphens} whose expansion introduces a discretionary
%      hyphen and an unbreakable zero space;
%    otherwise the token is not a letter; then it is tested against
%      \verb=|=$_{12}$: if so a macro is defined that gobbles the token
%      and introduces a compound word separator;
%    otherwise two other tests are performed to see if guillemets
%      have to be inserted, and in case suitable intelligent
%      guillemet macros are introduced that gobble unwanted leading
%      or trailing spaces; 
%    otherwise a test is made to see if the next char is a slash
%      character, and in case a special discretionary break is inserted
%      so as to maintain the slash while allowing the hyphenation
%      of both words before and after the slash;
%    otherwise another test is made to see if a period follows, and in case
%      the period is gobbled and a special discretionary is inserted that
%      introduces a hyphen sign if a line break occurs, or a centered
%      dot otherwise;
%    otherwise nothing is done.
%
%    \begin{macrocode}
\def\oc@@cwm{\bbl@allowhyphens\discretionary{-}{}{}\bbl@allowhyphens}%
\def\oc@@slash{\bbl@allowhyphens\discretionary{/}{}{/}\bbl@allowhyphens}%
\def\oc@ponchinterior{\nobreak
            \discretionary{-}{}{\mbox{$\cdot$}}\nobreak\hskip\z@skip}%
\def\oc@@oguil#1{\oc@oguil}\def\oc@@cguil#1{\oc@cguil}%

\DeclareRobustCommand*{\oc@cwm}{\let\oc@@next\oc@doublequote
\ifcat\noexpand\oc@temp a%
    \def\oc@@next{\oc@@cwm}%
\else
    \if\noexpand\oc@temp \string|%
        \def\oc@@next##1{\oc@@cwm}%
    \else
        \if\noexpand\oc@temp \string<%
            \def\oc@@next{\oc@@oguil}%
        \else
            \if\noexpand\oc@temp \string>%
                \def\oc@@next{\oc@@cguil}%
            \else
                \if\noexpand\oc@temp\string/%
                    \def\oc@@next##1{\oc@@slash}%
                \else
                    \if\noexpand\oc@temp\string.%
                        \def\oc@@next##1{\oc@ponchinterior}%
                    \fi
                \fi
            \fi
        \fi
    \fi
\fi
\oc@@next}%
%    \end{macrocode}
%    \end{macro}
%    \end{macro}
%
%   \begin{sloppypar}
%    By this definition of |"| if one types |macro"istrucion| the
%    possible break points become \textsf{ma-cro-is-tru-cion}, while
%    without  the |"| mark they would be \textsf{ma-crois-tru-cion},
%    according to the phonetic rules such that the |macro| prefix is
%    not taken as a unit.
%    A chemical name such as \texttt{des"clor"fenir"amina"cloridrat}%
%    \footnote{Not all \texttt{\string"} signs are necessary, but all
%    have been indicated in order to mark in an explicit way the various
%    components of the technical compound word.}
%    is breakable as \textsf{des-clor-fe-nir-ami-na-clo-ri-drat}
%    instead of \textsf{des-clor-fe-ni-ra-mi-na-\dots} Of course the
%    use of this |"| functionality is useful if it is used for single 
%    words or to fine tune a final document. If a certain word that 
%    requires special break points appears quite often in a specific 
%    document, it would be much more convenient to specify these special 
%    break points in the argument of a |\hyphenation| command. See the 
%    \babel\ documentation to set hyphenation exceptions for several 
%    languages in a specific document.
%
%    In other language description files a shorthand is defined so as
%    to allow a break point without actually inserting any hyphen
%    sign; examples are given such as \mbox{input/output}; actually
%    if one wants to allow a breakpoint after the slash, it is much
%    clearer to type |\slash| instead of |/| and \LaTeX\ does
%    everything by itself; here the shorthand |"/| was introduced to
%    stand for |\slash| so that one can type |input"/output| and allow
%    a line break after the slash.
%
%    But what is really important in some Occitan varieties is the macro
%    |\oc@ponchinterior| that inserts the special discretionary break that
%    inserts a hyphen sign if a line break takes place or a centered dot
%    otherwise.
%   \end{sloppypar}
%
%    Attention: the expansion of |"| takes place before the actual
%    expansion of OT1 or T1 accented sequences such as |\`{a}|;
%    therefore this etymological hyphenation facility works as it
%    should only when the semantic word fragments \textit{do not
%    start} with an accented letter; this in Occitan is almost always
%    avoidable, because very rarely accented vowels start a new syllable
%    and the only consonant that carries a diacritic mark, `��', is
%    already taken care of by the hyphenation pattern files.
%    In this case the special shorthand \verb!"|! may be
%    used that performs exactly as |"| normally does, except that the
%    \verb!|! sign is removed from the token input list:
%    \verb!kilo\"orsted! or |kilo��rsted| gets hyphenated as
%    \texttt{ki-lo��r-sted}; but  
%    \verb!kilo"|��rsted! gets hyphenated correctly
%    as \texttt{ki-lo-��r-sted} The \verb="|= macro is necessary
%    because, even with a suitable option specified to the |inputenc|
%    package, the letter `��' does not have category code 11, as the \textsc{ascii}
%    letters do, because of the LICR (LaTeX Internal Character Representation);
%    the LICRs are the set of intermediate macros that have to be expanded
%    in order to fetch the proper glyph in the output font or to build up
%    a composite glyph if it is not available in the output font.
%
%    \subsection{Extra advanced macros}
%
%    We need to perform some tests that require some
%    smart control-sequence handling; therefore we call the |etoolbox|
%    package that allows us more testing functionality. There are no problems
%    with this package that can be invoked also by other ones before or
%    after \babel\ is called; the |\RequirePackage| mechanism is sufficiently
%    smart to avoid reloading the same package more than once. But we
%    have to delay this call, because |occitan.ldf| is being read while
%    processing the options passed to \babel\, and while options are being
%    scanned and processed it is forbidden to load packages; we
%    delay it at the end of processing the \babel\ package itself.
%    \begin{macrocode}
\AtEndOfPackage{\RequirePackage{etoolbox}}
%    \end{macrocode}
%
%
% \subsection{Accents}\label{s:ockbd}
%    Most of the other language description files introduce a number
%    of shorthands for inserting accents and other language specific
%    diacritical marks in a more comfortable way compared with the
%    lengthy standard \TeX\ conventions. I don't know if every user has
%    a specific keyboard layout or keyboard driver dedicated to the Occitan
%    language; it is possible that Occitan users, living in countries where the
%    Occitan language is actually used (France, Italy, and Spain), use
%    the more common local national keyboard and have already available
%    the suitable keys for entering (some of)the Occitan non \textsc{ascii}
%    characters; table~\ref{tab:chars} displays the lowercase special Occitan
%    characters.
%    \begin{table}\centering
%    \begin{tabular}{*4c}
%    \toprule
%    ��	& 	& ��	& 	\\
%    ��	& 	& ��	&	\\
%    	& ��	& ��	&	\\
%    ��	&	& ��	&	\\
%    	& ��	& ��	&	\\
%    	&	&	& ��	\\
%    \bottomrule
%    \end{tabular}
%    \caption{Specific Occitan characters}
%    \label{tab:chars}
%    \end{table}
%    Among the national keyboards it seems that the Italian one is the
%    least suited to typeset in Occitan; it actually is not fully functional
%    with Italian itself (it misses any two-key combination to enter accented
%    uppercase letters). In any case the recent distributions of the Windows
%    operating systems (may be from Win7 on, certainly from Win8) and  the
%    Apple OS~X have a virtual keyboard application that allows to enter any
%    glyph by clicking on the virtual keys; all operating systems have a
%    Character Table Viewer that allows to enter any UNICODE glyph (very
%    uncomfortable if needed to enter long stretches of text, but\dots).
%    I suppose that the French national keyboard is the most comfortable to
%    use when entering Occitan text, thanks to the fact that the French language
%    uses many diacritics.
%
%    The best solution, may be, consists in using a smart
%    editor that accepts shorthand definitions such that, for example,
%    by striking |"a| one gets directly |��| on the screen and the same
%    string is saved into the \file{.tex} file; the same smart editor
%    might be capable of translating the accented characters into the
%    standard \TeX\ sequences when writing a file to disk (for the
%    sake of file portability), and to transform the standard \TeX\
%    sequences into the corresponding signs when loading a \file{.tex}
%    file from disk to screen memory. Such smart editors do exist and can be
%    downloaded from the \textsc{ctan} archives.
%
%
%    \subsection{Guillemets or French double quotes}
%
%    Although the T1 font encoding ligatures solve the problem, there
%    are some circumstances where even the T1 font encoding cannot be
%    used, either because the author\slash typesetter wants to use the
%    OT1 encoding, or because s/he uses a font set that does
%    not comply completely with the T1 font encoding; some virtual
%    fonts, for example, are supposed to implement the double Cork
%    font encoding but actually miss some glyphs; one such virtual
%    font set is given by the \texttt{ae} virtual fonts, because they
%    are supposed to implement such double font encoding by using
%    virtual fonts that map the |CM| fonts to a T1 font scheme; the
%    type~1 PostScript version of the |CM| fonts do exist, therefore
%    one believes to be able of using them with pdfLaTeX; but since
%    the |CM| fonts do not contain the guillemets, neither do the |AE|
%    ones.
%    Since guillemets  do not exist in any OT1 encoded \texttt{cm}
%    Latin font, their glyphs must be substituted with something else
%    that fakes them.
%    Therefore if the OT1 encoding is being used the T1 encoded Latin
%    Modern font guillemets are used, otherwise the current font
%    ones are actually used.
%
%    \begin{macro}{\oc@oguil}
%    \begin{macro}{\oc@cguil}
%    A new macro that the user may possibly use, if the default does not
%    meet his/her requirements, is defined so as to chose which family the
%    guillemets should be taken from; but through the |\DeclareTextCommand|,
%    we tie the definitions of the macros |\oc@oguil| and |\oc@cguil| to the
%    current actual encoding.
%    \begin{macrocode}
\def\GuillemetsFrom#1#2#3#4{%
  \DeclareFontEncoding{#1}{}{}%
  \DeclareTextCommand{\oc@oguil}{T1}{%
    {\fontencoding{#1}\fontfamily{#2}\selectfont\char#3\ignorespaces}}%
  \DeclareTextCommand{\oc@cguil}{T1}{\ifdim\lastskip>\z@\unskip\fi%
    {\fontencoding{#1}\fontfamily{#2}\selectfont\char#4}}%
  \DeclareTextCommand{\oc@oguil}{OT1}{%
    {\fontencoding{#1}\fontfamily{#2}\selectfont\char#3\ignorespaces}}%
  \DeclareTextCommand{\oc@cguil}{OT1}{\ifdim\lastskip>\z@\unskip\fi%
    {\fontencoding{#1}\fontfamily{#2}\selectfont\char#4}}}
%    \end{macrocode}
% This macro requires four arguments with the syntax:
%    \begin {flushleft}\small
%    |\GuillemetsFrom|\marg{encoding}\marg{family}\marg{open guill. slot}%
%    \marg{closed guill. slot}
%    \end{flushleft}
%    where \meta{encoding} and \meta{family} identify the font family
%    name of that particular encoding from which to get the substitution
%    guillemets; \meta{open guill. slot} and \meta{closed guill. slot}
%    are the (preferably) decimal slot addresses of the opening and
%    closing guillemets the user wants to use. For example if the 
%    T1-encoded Latin Modern fonts are desired, the specific command
%    should be
%     \begin {flushleft}
%     |\GuillemetsFrom{T1}{lmr}{19}{20}|
%     \end{flushleft}
%
%    We define a default macro for using the current font in encoding T1:
%    \begin{macrocode}
\def\T@unoGuillemets{\DeclareRobustCommand*{\oc@oguil}{<<\ignorespaces}%
    \DeclareRobustCommand*{\oc@cguil}{\ifdim\lastskip>\z@\unskip\fi>>}}%
%    \end{macrocode}
%    Notice that the above macro is strictly tied to the T1 encoding;
%    it won't do anything if the default encoding is not the T1 one.
%    Therefore if the |AE| font collection is being used it would be a
%    good idea to issue the command (shown above as an example) in order
%    to get the proper guillemets; of course using directly the |LM|
%    fonts instead of the |AE| ones would be a much better idea.
%
%    Now we set a boolean variable and test the default family;
%    if such family has a name that starts with the letters ``ae''
%    then we have no built in guillemets; of course if the |AE| fonts
%    are chosen after the \babel\ package is loaded, the test
%    does not perform as expected.
%    \begin{macrocode}
\def\get@ae#1#2#3!{\def\oc@ae{#1#2}}%
\def\@ifT@one@noGuil{\expandafter\get@ae\f@family!%
\ifdefstring{\oc@ae}{ae}}%
%    \end{macrocode}
%    Now we can set some real settings; first we start by testing
%    the encoding; if the encoding is OT1 we substitute the missing guillemets
%    with the Latin Modern ones and issue a message; then we test if the font
%    family is the |AE| one and  we set again the Latin Modern ones and issue
%    another message\footnote{Notice that it is impossible to check
%    if the slots 19 and 20 of the AE fonts are defined by means of
%    the eTeX macro \texttt{\char92iffontchar}, because they are
%    actually defined as black squares!}; otherwise we set the commands
%    valid for the T1 encoding, that work well also with the TeX
%    Ligatures of the OpenType fonts.
%    \begin{macrocode}
\AtBeginDocument{\normalfont
  \ifdefstring{\cf@encoding}{OT1}{%
    \GuillemetsFrom{T1}{lmr}{19}{20}%
    \GenericWarning{occitan.ldf\space}{%
    File occitan.ldf warning: \MessageBreak\space\space\space
    With OT1 encoding guillemets are taken form the
    \MessageBreak\space\space\space
    T1 encoded Latin Modern fonts\MessageBreak\space\space\space
    \MessageBreak\space\space}%
  }{%
    \ifdefstring{\cf@encoding}{T1}{%
      \@ifT@one@noGuil{%
        \GuillemetsFrom{T1}{lmr}{19}{20}%
        \GenericWarning{occitan.ldf\space}{%
        File occitan.ldf warning: \MessageBreak\space\space\space
        The AE font collection does not contain the guillemets
        \MessageBreak\space\space\space
        Using Latin Modern guillemets instead
        \MessageBreak\space}
      }{%
    \T@unoGuillemets}}{\T@unoGuillemets}
  }%
}
%    \end{macrocode}
%    \end{macro}
%    \end{macro}
%
%    \subsection{Finishing commands}
%    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.
%    \begin{macrocode}
\ldf@finish{occitan}%
%    \end{macrocode}
%\iffalse
%</code>
%\fi
%
% \Finale
%
\endinput