texlive[75070] Master/texmf-dist: babel-latin (30apr25)

commits+karl at tug.org commits+karl at tug.org
Wed Apr 30 21:32:51 CEST 2025


Revision: 75070
          https://tug.org/svn/texlive?view=revision&revision=75070
Author:   karl
Date:     2025-04-30 21:32:51 +0200 (Wed, 30 Apr 2025)
Log Message:
-----------
babel-latin (30apr25)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/generic/babel-latin/README
    trunk/Master/texmf-dist/doc/generic/babel-latin/latin.pdf
    trunk/Master/texmf-dist/source/generic/babel-latin/latin.dtx
    trunk/Master/texmf-dist/source/generic/babel-latin/latin.ins
    trunk/Master/texmf-dist/tex/generic/babel-latin/classiclatin.ldf
    trunk/Master/texmf-dist/tex/generic/babel-latin/ecclesiasticlatin.ldf
    trunk/Master/texmf-dist/tex/generic/babel-latin/latin.ldf
    trunk/Master/texmf-dist/tex/generic/babel-latin/medievallatin.ldf

Added Paths:
-----------
    trunk/Master/texmf-dist/tex/generic/babel-latin/classicallatin.ldf
    trunk/Master/texmf-dist/tex/generic/babel-latin/ecclesiasticallatin.ldf
    trunk/Master/texmf-dist/tex/generic/babel-latin/ecclesiasticallatin.lua

Removed Paths:
-------------
    trunk/Master/texmf-dist/tex/generic/babel-latin/ecclesiasticlatin.lua

Modified: trunk/Master/texmf-dist/doc/generic/babel-latin/README
===================================================================
--- trunk/Master/texmf-dist/doc/generic/babel-latin/README	2025-04-30 19:32:31 UTC (rev 75069)
+++ trunk/Master/texmf-dist/doc/generic/babel-latin/README	2025-04-30 19:32:51 UTC (rev 75070)
@@ -1,10 +1,10 @@
-The babel-latin package provides the babel languages latin, classiclatin,
-medievallatin and ecclesiasticlatin.
+The babel-latin package provides the babel languages latin, classicallatin,
+medievallatin and ecclesiasticallatin.
 
 Package author: C. Beccari
 Current maintainer: K. Wehr
-Version: 4.0
-Date: 27th June 2021
+Version: 4.1
+Date: 29th April 2025
 Bug tracker: https://github.com/wehro/babel-latin/issues
 
 The babel-latin package is subject to the LaTeX Project Public License,

Modified: trunk/Master/texmf-dist/doc/generic/babel-latin/latin.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/generic/babel-latin/latin.dtx
===================================================================
--- trunk/Master/texmf-dist/source/generic/babel-latin/latin.dtx	2025-04-30 19:32:31 UTC (rev 75069)
+++ trunk/Master/texmf-dist/source/generic/babel-latin/latin.dtx	2025-04-30 19:32:51 UTC (rev 75070)
@@ -8,7 +8,7 @@
 %
 % Copyright (C) 1989-2008 by Johannes L. Braams
 % Copyright (C) 2009-2020 by Claudio Beccari
-% Copyright (C) 2021      by Keno Wehr
+% Copyright (C) 2021-2025 by Keno Wehr
 % All rights reserved.
 %
 % This file is part of the babel-latin package.
@@ -18,7 +18,7 @@
 % 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
+%   https://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.
 %
@@ -27,7 +27,7 @@
 % The Current Maintainer of this work is Keno Wehr.
 %
 % \fi
-% \CheckSum{1023}
+% \CheckSum{1084}
 % \iffalse
 %    Tell the LaTeX system who we are and write an entry on the transcript.
 %<*driver>
@@ -72,7 +72,7 @@
 \title{Babel support for the Latin language}
 \author{Claudio Beccari\and Keno Wehr\thanks{Current maintainer. Please report
 errors to \url{https://github.com/wehro/babel-latin/issues}.}}
-\date{v.\,4.0\quad\today}
+\date{v.\,4.1\quad\today}
 \begin{document}
 \DocInput{latin.dtx}
 \end{document}
@@ -86,7 +86,7 @@
 %     Konrad \.Zelechowski (CB)}
 % \changes{2.0a}{2000/10/15}{Revised by JB}
 % \changes{4.0}{2021/06/27}{Complete revision by KW}
-% \changes{4.0}{2021/06/27}{Make ecclesiastic Latin work with \XeLaTeX{} and
+% \changes{4.0}{2021/06/27}{Make ecclesiastical Latin work with \XeLaTeX{} and
 %     \LuaLaTeX}
 %
 %    \maketitle
@@ -93,7 +93,8 @@
 %    \begin{abstract}
 %      \noindent This manual documents the \babellatin{} package, which defines
 %      all language-specific macros for the \babel{} languages \lang{latin},
-%      \lang{classiclatin}, \lang{medievallatin}, and \lang{ecclesiasticlatin}.
+%      \lang{classicallatin}, \lang{medievallatin}, and\linebreak
+%      \lang{ecclesiasticallatin}.
 %      These languages are usable with pdf\LaTeX, \XeLaTeX, and \LuaLaTeX. The
 %      \lang{latin} language is even usable with plain \TeX{} (with some
 %      restrictions).
@@ -107,6 +108,11 @@
 % \changes{4.0}{2021/06/27}{New \babel{} languages \lang{classiclatin},
 %     \lang{medievallatin}, and \lang{ecclesiasticlatin}, replacing the
 %     respective modifiers}
+% \changes{4.1}{2025/04/29}{Renaming \lang{classiclatin} and
+%     \lang{ecclesiasticlatin} to \lang{classicallatin} and
+%     \lang{ecclesiasticallatin} for the sake of philological correctness, but
+%     also keeping \file{ldf} files with the old names for backwards
+%     compatibility}
 %    Latin has been the most important language of European intellectual life
 %    for a long time. Throughout the centuries, many different styles of Latin
 %    have been in use concerning wording, spelling, punctuation, and
@@ -125,8 +131,8 @@
 %      \centering
 %      \begin{tabular}{llll}
 %      \toprule
-%      \lang{latin} & \lang{classiclatin} & \lang{medievallatin} &
-%      \lang{ecclesiasticlatin} \\
+%      \lang{latin} & \lang{classicallatin} & \lang{medievallatin} &
+%      \lang{ecclesiasticallatin} \\
 %      \midrule
 %      Novembris & Nouembris & Nouembris & Novembris \\
 %      Praefatio & Praefatio & Præfatio & Præfatio \\
@@ -141,7 +147,7 @@
 %    It is no problem to use different variants of Latin within the same
 %    document. If you need classical and modern Latin, just say
 %    \begin{quote}
-%      |\usepackage[classiclatin,latin]{babel}|
+%      |\usepackage[classicallatin,latin]{babel}|
 %    \end{quote}
 %    and switch the language using the commands described in the \babel{}
 %    manual.
@@ -157,7 +163,7 @@
 %        A&B&C&D&E&F&G&H&I&K&L&M&N&O&P&Q&R&S&T&U&V&X&Y&Z
 %      \end{tabular}
 %    \end{center}
-%    \paragraph{The \lang{classiclatin} language -- classical Latin}
+%    \paragraph{The \lang{classicallatin} language -- classical Latin}
 %    This language variant is intended for typesetting Latin texts more or less
 %    according to the ancient usage of Latin. However, the use of lower-case
 %    letters, which are not of ancient origin, is not excluded. The following
@@ -196,8 +202,8 @@
 %    language variant rather reflects the Latin of the humanist/Renaissance
 %    period than that of the Middle Ages. However, we stick to the
 %    \emph{medieval} name chosen in earlier versions of \babellatin.
-%    \paragraph{The \lang{ecclesiasticlatin} language -- ecclesiastic Latin}
-%    Ecclesiastic Latin is a spelling variety of modern Latin, which is used
+%    \paragraph{The \lang{ecclesiasticallatin} language -- ecclesiastical Latin}
+%    Ecclesiastical Latin is a spelling variety of modern Latin, which is used
 %    above all in liturgical books of the Roman Catholic Church, where the
 %    ligatures \ae{} and \oe{} are widely used and where acute accents are used
 %    in order to mark the tonic vowel of words with more than two syllables to
@@ -241,7 +247,7 @@
 %    To apply a modifier you have to append it (prefixed with a dot) to the
 %    language name when loading \babel:
 %    \begin{quote}
-%      |\usepackage[ecclesiasticlatin.lowercasemonth]{babel}|
+%      |\usepackage[ecclesiasticallatin.lowercasemonth]{babel}|
 %    \end{quote}
 %    If you need two modifiers or more, just concatenate them in arbitrary
 %    order:
@@ -307,22 +313,22 @@
 %        displayed if your font supports the Unicode character \unicode{0304}
 %        (\emph{combining macron}).
 %      \item[|=ae|] for a͞e (ae diphthong with macron, for \lang{latin} and
-%        \lang{classiclatin}) or \={\ae} (ae ligature with macron, for
-%        \lang{medievallatin} and \lang{ecclesiasticlatin}), respectively; also
-%        available for a͞u, e͞u, and o͞e/\=\oe. Note that macrons above diphthongs
-%        are only displayed if your font supports the Unicode character
-%        \unicode{035E} (\emph{combining double macron}), which always requires
-%        \XeLaTeX{} or \LuaLaTeX.\footnote{A good choice for a font supporting
-%        the combining double macron might be \emph{Libertinus Serif}, the font
-%        of this manual.}
+%        \lang{classicallatin}) or \={\ae} (ae ligature with macron, for
+%        \lang{medievallatin} and \lang{ecclesiasticallatin}), respectively;
+%        also available for a͞u, e͞u, and o͞e/\=\oe. Note that macrons above
+%        diphthongs are only displayed if your font supports the Unicode
+%        character \unicode{035E} (\emph{combining double macron}), which
+%        always requires \XeLaTeX{} or \LuaLaTeX.\footnote{A good choice for a
+%        font supporting the combining double macron might be \emph{Libertinus
+%        Serif}, the font of this manual.}
 %      \item[|=Ae|] for A͞e (Ae diphthong with macron, for \lang{latin} and
-%        \lang{classiclatin}) or \={\AE} (AE ligature with macron, for
-%        \lang{medievallatin} and \lang{ecclesiasticlatin}), respectively; also
-%        available for A͞u, E͞u, and O͞e/\=\OE.
+%        \lang{classicallatin}) or \={\AE} (AE ligature with macron, for
+%        \lang{medievallatin} and \lang{ecclesiasticallatin}), respectively;
+%        also available for A͞u, E͞u, and O͞e/\=\OE.
 %      \item[|=AE|] for A͞E (AE diphthong with macron, for \lang{latin} and
-%        \lang{classiclatin}) or \={\AE} (AE ligature with macron, for
-%        \lang{medievallatin} and \lang{ecclesiasticlatin}), respectively; also
-%        available for A͞U, E͞U, and O͞E/\=\OE.
+%        \lang{classicallatin}) or \={\AE} (AE ligature with macron, for
+%        \lang{medievallatin} and \lang{ecclesiasticallatin}), respectively;
+%        also available for A͞U, E͞U, and O͞E/\=\OE.
 %      \item[|\textasciicircum a|] for ă (a with breve), also available for
 %        ĕ, ĭ, ŏ, ŭ, and y̆. Note that a breve above the letter y is only
 %        displayed if your font supports the Unicode character \unicode{0306}
@@ -334,21 +340,21 @@
 %    \end{shorthands}
 %    Note the incompatibilities described in section \ref{incompatibilities}.
 %
-%    \subsection{Ecclesiastic footnotes}
+%    \subsection{Ecclesiastical footnotes}
 %    The \package{ecclesiastic} package, an outdated extension of former
 %    versions of \babellatin, typeset footnotes with ordinary instead of
 %    superior numbers and without indentation.
 %
-%    As many ecclesiastic documents and liturgical books use footnotes that are
-%    very similar to the ordinary \LaTeX{} ones, we do not use this footnote
-%    style as default even for the \lang{ecclesiasticlatin} language variant.
-%    But you may use the \modifier{ecclesiasticfootnotes} modifier (with any
-%    variant of Latin) if you prefer that footnote style.
+%    As many ecclesiastical documents and liturgical books use footnotes that
+%    are very similar to the ordinary \LaTeX{} ones, we do not use this
+%    footnote style as default even for the \lang{ecclesiasticallatin} language
+%    variant. But you may use the \modifier{ecclesiasticfootnotes} modifier
+%    (with any variant of Latin) if you prefer that footnote style.
 %
 %    Note that this modifier affects the entire document. It can only be
 %    applied to the document's main language.
 %
-%    \subsection{Legacy modifiers\label{legacymodifiers}}
+%    \subsection{Legacy modifiers and language options\label{legacymodifiers}}
 % \changes{2.0b}{2000/12/13}{Language attribute medieval declared}
 % \changes{3.0}{2014/06/01}{Added modifier for classical spelling
 %     and hyphenation}
@@ -361,21 +367,30 @@
 %    proved to be disadvantageous concerning compatibility with other
 %    language-specific packages like \package{biblatex}. That's why v.\,4.0
 %    introduced the \lang{classiclatin}, \lang{medievallatin}, and
-%    \lang{ecclesiasticlatin} languages.
+%    \lang{ecclesiasticlatin} languages. \lang{classiclatin} and
+%    \lang{ecclesiasticlatin} have been renamed to \lang{classicallatin} and
+%    \lang{ecclesiasticallatin} in v.\,4.1 for the sake of philological
+%    correctness.
 %
 %    The legacy modifiers \modifier{classic}, \modifier{medieval}, and
-%    \modifier{ecclesiastic} are still available and backwards compatibility is
-%    made sure. However, a warning is issued if you use one of these modifiers.
+%    \modifier{ecclesiastic} as well as the language options
+%    \lang{classiclatin} and \lang{ecclesiasticlatin} are still available and
+%    backwards compatibility is made sure. However, a warning is issued if you
+%    use one of these modifiers or language options.
 %    They may be dropped from \babellatin{} in a future version.
 %
 %    For maximum compatibility, replace
 %    \begin{itemize}
+%      \item |\usepackage[classiclatin]{babel}| by
+%        |\usepackage[classicallatin]{babel}|,
+%      \item |\usepackage[ecclesiasticlatin]{babel}| by
+%        |\usepackage[ecclesiasticallatin]{babel}|,
 %      \item |\usepackage[latin.classic]{babel}| by
-%        |\usepackage[classiclatin]{babel}|,
+%        |\usepackage[classicallatin]{babel}|,
 %      \item |\usepackage[latin.medieval]{babel}| by
 %        |\usepackage[medievallatin]{babel}|,
 %      \item |\usepackage[latin.ecclesiastic]{babel}| by\\
-%        |\usepackage[ecclesiasticlatin.ecclesiasticfootnotes,activeacute]{babel}|.
+%        |\usepackage[ecclesiasticallatin.ecclesiasticfootnotes,activeacute]{babel}|.
 %    \end{itemize}
 %
 %    The last replacement is also recommended if you have been loading the
@@ -402,9 +417,9 @@
 %      \emph{Name of patterns} \\
 %      \midrule
 %      \lang{latin} & modern & \hyphpat{latin} \\
-%      \lang{classiclatin} & classical & \hyphpat{classiclatin} \\
+%      \lang{classicallatin} & classical & \hyphpat{classiclatin} \\
 %      \lang{medievallatin} & modern & \hyphpat{latin} \\
-%      \lang{ecclesiasticlatin} & modern & \hyphpat{latin} \\
+%      \lang{ecclesiasticallatin} & modern & \hyphpat{latin} \\
 %      -- & liturgical & \hyphpat{liturgicallatin} \\
 %      \bottomrule
 %      \end{tabular}
@@ -413,8 +428,8 @@
 %
 %    To typeset a liturgical book in the recent “Solesmes style” say
 %    \begin{quote}
-%      |\usepackage[ecclesiasticlatin.lowercasemonth]{babel}| \\
-%      |\babelprovide[hyphenrules=liturgicallatin]{ecclesiasticlatin}|
+%      |\usepackage[ecclesiasticallatin.lowercasemonth]{babel}| \\
+%      |\babelprovide[hyphenrules=liturgicallatin]{ecclesiasticallatin}|
 %    \end{quote}
 %    The typical commands for a Latin text edition in the German-speaking
 %    world will be
@@ -432,7 +447,7 @@
 %     etymological hyphenation}
 % \changes{4.0}{2021/06/27}{Additional shorthands for guillemets and accented
 %     letters for all language variants; additional shorthands for ligatures
-%     for medieval and ecclesiastic Latin}
+%     for medieval and ecclesiastical Latin}
 %    The following shorthands are available for all variants of Latin. Note
 %    that shorthands beginning with |'| are only available if you load \babel{}
 %    with the \modifier{activeacute} option.
@@ -450,7 +465,7 @@
 %        Ǽ, and \'Œ
 %    \end{shorthands}
 %    The following shorthands are only available for the \lang{medievallatin}
-%    and the \lang{ecclesiasticlatin} languages. Again, the shorthands
+%    and the \lang{ecclesiasticallatin} languages. Again, the shorthands
 %    beginning with |'| only work with \babel's \modifier{activeacute} option.
 %    \begin{shorthands}
 %      \item[|"ae|] for æ (ae ligature), also available for œ
@@ -534,9 +549,9 @@
 %      |\begindocument|
 %    \end{quote}
 %
-%    \babel{} does not provide |sty| files for \lang{classiclatin},
-%    \lang{medievallatin}, and \lang{ecclesiasticlatin}. It should be possible
-%    to create them locally if needed.
+%    \babel{} does not provide |sty| files for \lang{classicallatin},
+%    \lang{medievallatin}, and \lang{ecclesiasticallatin}. It should be
+%    possible to create them locally if needed.
 %
 %    Note that no Latin shorthands are available in plain \TeX.
 % \StopEventually{}
@@ -551,22 +566,25 @@
 %     \cs{LatinMarksOff}}
 %    We identify the language definition file.
 %    \begin{macrocode}
-\ProvidesLanguage{latin}[2021-06-27 v4.0 Latin support from the babel system]
+\ProvidesLanguage{latin}[2025-04-29 v4.1 Latin support from the babel system]
 %    \end{macrocode}
 %    The macro |\LdfInit| takes care of preventing that this file is
 %    loaded more than once with the same option, checking the category
 %    code of the \texttt{@} sign, etc.
 %    \cs{CurrentOption} is the language requested by the user, i.\,e.,
-%    \lang{latin}, \lang{classiclatin}, \lang{medievallatin}, or
-%    \lang{ecclesiasticlatin}.
+%    \lang{latin}, \lang{classicallatin}, \lang{medievallatin}, or
+%    \lang{ecclesiasticallatin}.
 %    \begin{macrocode}
 \LdfInit\CurrentOption{captions\CurrentOption}
 %    \end{macrocode}
-%    For tests, we need variables containing three possible values of the
-%    language name.
+%    For tests, we need variables containing several possible values of the
+%    language name (including \lang{classiclatin} and \lang{ecclesiasticlatin},
+%    which are outdated, but still supported).
 %    \begin{macrocode}
+\def\babellatin at classical{classicallatin}
 \def\babellatin at classic{classiclatin}
 \def\babellatin at medieval{medievallatin}
+\def\babellatin at ecclesiastical{ecclesiasticallatin}
 \def\babellatin at ecclesiastic{ecclesiasticlatin}
 %    \end{macrocode}
 %    \subsection{Hyphenation patterns}
@@ -583,11 +601,11 @@
     \@nopatterns{latin}%
     \adddialect\l at latin0
   \fi}%
-\def\babellatin at test@classic at patterns{%
+\def\babellatin at test@classical at patterns{%
   \ifx\l at classiclatin\undefined
     \PackageWarningNoLine{babel-latin}{%
       No hyphenation patterns were found for the\MessageBreak
-      classiclatin language. Now I will use the\MessageBreak
+      classicallatin language. Now I will use the\MessageBreak
       patterns for modern Latin instead}%
     \babellatin at test@modern at patterns
     \adddialect\l at classiclatin\l at latin
@@ -597,18 +615,28 @@
 %    and the (modern) \lang{latin} hyphenation patterns for all other varieties
 %    of Latin.
 %    \begin{macrocode}
-\ifx\CurrentOption\babellatin at classic
-  \babellatin at test@classic at patterns
+\ifx\CurrentOption\babellatin at classical
+  \babellatin at test@classical at patterns
+  \adddialect\l at classicallatin\l at classiclatin
 \else
-  \ifx\CurrentOption\babellatin at ecclesiastic
-    \babellatin at test@modern at patterns
-    \adddialect\l at ecclesiasticlatin\l at latin
+  \ifx\CurrentOption\babellatin at classic
+    \babellatin at test@classical at patterns
   \else
-    \ifx\CurrentOption\babellatin at medieval
+    \ifx\CurrentOption\babellatin at ecclesiastical
       \babellatin at test@modern at patterns
-      \adddialect\l at medievallatin\l at latin
+      \adddialect\l at ecclesiasticallatin\l at latin
     \else
-      \babellatin at test@modern at patterns
+      \ifx\CurrentOption\babellatin at ecclesiastic
+        \babellatin at test@modern at patterns
+        \adddialect\l at ecclesiasticlatin\l at latin
+      \else
+        \ifx\CurrentOption\babellatin at medieval
+          \babellatin at test@modern at patterns
+          \adddialect\l at medievallatin\l at latin
+        \else
+          \babellatin at test@modern at patterns
+        \fi
+      \fi
     \fi
   \fi
 \fi
@@ -615,12 +643,14 @@
 %    \end{macrocode}
 %    \subsection{Latin captions}
 %    We need a conditional governing the spelling of the captions. Medieval
-%    and ecclesiastic Latin use the ligatures \ae{} and \oe, classical and
+%    and ecclesiastical Latin use the ligatures \ae{} and \oe, classical and
 %    modern Latin do not.
 %    \begin{macrocode}
 \newif\ifbabellatin at useligatures
 \addto\extrasmedievallatin{\babellatin at useligaturestrue}%
 \addto\noextrasmedievallatin{\babellatin at useligaturesfalse}%
+\addto\extrasecclesiasticallatin{\babellatin at useligaturestrue}%
+\addto\noextrasecclesiasticallatin{\babellatin at useligaturesfalse}%
 \addto\extrasecclesiasticlatin{\babellatin at useligaturestrue}%
 \addto\noextrasecclesiasticlatin{\babellatin at useligaturesfalse}%
 %    \end{macrocode}
@@ -650,6 +680,7 @@
   \SetString\alsoname{cfr.}% Tabacco never saw "cfr" + "atque" or similar forms
   \SetString\proofname{Demonstratio}
   \SetString\glossaryname{Glossarium}
+\EndBabelCommands
 %    \end{macrocode}
 %    In the above definitions there are some points that might change
 %    in the future or that require a minimum of attention from the
@@ -681,33 +712,46 @@
 %    only one letter for the vowel and the consonant, and the u shape is an
 %    (uncial) variant of the capital V.
 %
-%    We use the commands recommended by the \babel{} manual.
-%    \begin{macrocode}
-\StartBabelCommands*{classiclatin,medievallatin}{}
-%    \end{macrocode}
-%    The following command takes care for the correct behaviour of the
-%    \cs{MakeUppercase} and the \cs{MakeLowercase} command. It makes sure that
+%    We set the mapping only if the \LaTeX{} format is used because we need
+%    commands for it that are not available in plain \TeX.
+%    The following commands take care for the correct behaviour of the
+%    \cs{MakeUppercase} and the \cs{MakeLowercase} command. They make sure that
 %    |\MakeUppercase{Heluetia}| yields ``HELVETIA'' and that
 %    |\MakeLowercase{LVDVS}| yields ``ludus''.
 %    \begin{macrocode}
-  \SetCase{\uccode`u=`V}{\lccode`V=`u}
+\def\babellatin at latex{LaTeX2e}%
+\ifx\fmtname\babellatin at latex
+  \DeclareUppercaseMapping[la-x-classic]{`u}{V}
+  \DeclareLowercaseMapping[la-x-classic]{`V}{u}
 %    \end{macrocode}
-%    The following command takes care for the correct hyphenation of words
-%    written in capital letters. It makes sure that “LVDVS” is hyphenated the
-%    same way as “ludus”.
-%    \begin{macrocode}
-  \SetHyphenMap{\BabelLower{`V}{`u}}
-%    \end{macrocode}
+%    The mapping for medieval Latin is part of the \package{l3text} module,
+%    which is part of the \LaTeX\ format (see \file{source3.pdf}).
+%
 %    For Unicode-based engines, we also have to take into account characters
-%    with diacritics. We map ú, ū, and ŭ to V because Unicode does not define a
-%    single-character V with the respective diacritic.
+%    with diacritics. We map ú, ū, and ŭ to V with the respective diacritic.
+% \changes{4.1}{2025/04/29}{Mapping ú, ū, and ŭ to \'{V}, V^^^^0304, and \u{V},
+%    respectively, instead of just V, for \lang{classicallatin} and
+%    \lang{medievallatin} if a Unicode engine is used}
 %    \begin{macrocode}
-\StartBabelCommands{classiclatin,medievallatin}{}[unicode,fontenc=TU,charset=utf8]
-  \SetCase{\uccode`u=`V \uccode`ú=`V \uccode`ū=`V \uccode`ŭ=`V}{\lccode`V=`u}
+  \ExplSyntaxOn
+  \sys_if_engine_opentype:T
+    {
+      \DeclareUppercaseMapping[la-x-classic]{`ú}{\a'{V}}
+      \DeclareUppercaseMapping[la-x-classic]{`ū}{\a={V}}
+      \DeclareUppercaseMapping[la-x-classic]{`ŭ}{\u{V}}
+      \DeclareUppercaseMapping[la-x-medieval]{`ú}{\a'{V}}
+      \DeclareUppercaseMapping[la-x-medieval]{`ū}{\a={V}}
+      \DeclareUppercaseMapping[la-x-medieval]{`ŭ}{\u{V}}
+    }
+  \ExplSyntaxOff
+\fi
 %    \end{macrocode}
-%    According to the \babel{} manual, the last \cs{StartBabelCommands} block
-%    has to be finished by the following command.
+%    The following \cs{BabelLower} command takes care for the correct
+%    hyphenation of words written in capital letters. It makes sure that
+%    “LVDVS” is hyphenated the same way as “ludus”.
 %    \begin{macrocode}
+\StartBabelCommands*{classicallatin,classiclatin,medievallatin}{}
+  \SetHyphenMap{\BabelLower{`V}{`u}}
 \EndBabelCommands
 %    \end{macrocode}
 %    \subsection{The Latin date}
@@ -715,15 +759,17 @@
 %     spellings to the proper `extras' macros}
 % \changes{4.0}{2021/06/27}{Do not use small caps for the day of month}
 %    We need three conditionals governing the spelling of the month names.
-%    Ecclesiastic and modern Latin use the character v, classical and medieval
-%    Latin use only u. This affects the month of November. The user may demand
-%    to use the letter j where suitable or to lowercase month names using the
-%    respective modifiers.
+%    Ecclesiastical and modern Latin use the character v, classical and
+%    medieval Latin use only u. This affects the month of November. The user
+%    may demand to use the letter j where suitable or to lowercase month names
+%    using the respective modifiers.
 %    \begin{macrocode}
 \newif\ifbabellatin at usev
 \newif\ifbabellatin at usej
 \newif\ifbabellatin at lowercasemonth
 \babellatin at usevtrue
+\addto\extrasclassicallatin{\babellatin at usevfalse}%
+\addto\noextrasclassicallatin{\babellatin at usevtrue}%
 \addto\extrasclassiclatin{\babellatin at usevfalse}%
 \addto\noextrasclassiclatin{\babellatin at usevtrue}%
 \addto\extrasmedievallatin{\babellatin at usevfalse}%
@@ -747,8 +793,8 @@
   \fi}%
 %    \end{macrocode}
 %    Depending on the chosen language, we have to define a \cs{latindate},
-%    \cs{classiclatindate}, \cs{medievallatindate}, or
-%    \cs{ecclesiasticlatindate} command. The date format is “XXXI Decembris
+%    \cs{classicallatindate}, \cs{medievallatindate}, or
+%    \cs{ecclesiasticallatindate} command. The date format is “XXXI Decembris
 %    MMXXI”.
 %    \begin{macrocode}
 \expandafter\def\csname date\CurrentOption\endcsname{%
@@ -765,10 +811,11 @@
 }%
 %    \end{macrocode}
 %    \subsection{Shorthands}
+% \changes{4.1}{2025/04/29}{Improved shorthand implementation also working
+%     within tabbing environments}
 %    We define shorthands only if the \LaTeX{} format is used because we need
 %    commands for them that are not available in plain \TeX.
 %    \begin{macrocode}
-\def\babellatin at latex{LaTeX2e}%
 \ifx\fmtname\babellatin at latex
 %    \end{macrocode}
 %    Every shorthand character needs an \cs{initiate at active@char} command,
@@ -787,7 +834,7 @@
 %    A peculiarity of the \babellatin{} package are shorthands of different
 %    lengths. |"| before a letter character defines an additional hyphenation
 %    point, but |"ae| is a shorthand for the ligature `æ' in medieval and
-%    ecclesiastic Latin. So the shorthands definitions are rather complex and
+%    ecclesiastical Latin. So the shorthands definitions are rather complex and
 %    we need expl3 syntax for them.
 %    \begin{macrocode}
   \ExplSyntaxOn
@@ -924,36 +971,36 @@
     {
       \str_case:nnF {#1}
         {
-          {A} { \babellatin_ligature_shorthand:Nnn E { \'\AE }
+          {A} { \babellatin_ligature_shorthand:Nnn E { \a'\AE }
                   {
-                    \babellatin_ligature_shorthand:Nnn e { \'\AE } { Á }
+                    \babellatin_ligature_shorthand:Nnn e { \a'\AE } { Á }
                   }
               }
-          {a} { \babellatin_ligature_shorthand:Nnn e { \'\ae } { á } }
+          {a} { \babellatin_ligature_shorthand:Nnn e { \a'\ae } { á } }
           {E} { É }
           {e} { é }
           {I} { Í }
           {i} { í }
-          {O} { \babellatin_ligature_shorthand:Nnn E { \'\OE }
+          {O} { \babellatin_ligature_shorthand:Nnn E { \a'\OE }
                   {
-                    \babellatin_ligature_shorthand:Nnn e { \'\OE } { Ó }
+                    \babellatin_ligature_shorthand:Nnn e { \a'\OE } { Ó }
                   }
               }
-          {o} { \babellatin_ligature_shorthand:Nnn e { \'\oe } { ó } }
+          {o} { \babellatin_ligature_shorthand:Nnn e { \a'\oe } { ó } }
           {U} { Ú }
           {u} { ú }
-          {V} { \'V }
-          {Y} { \'Y }
-          {y} { \'y }
-          {Æ} { \'\AE }
-          {æ} { \'\ae }
-          {Œ} { \'\OE }
-          {œ} { \'\oe }
+          {V} { \a'V }
+          {Y} { \a'Y }
+          {y} { \a'y }
+          {Æ} { \a'\AE }
+          {æ} { \a'\ae }
+          {Œ} { \a'\OE }
+          {œ} { \a'\oe }
         }
         {
           \tl_if_single_token:nTF {#1}
             {
-              \babellatin_if_ligature_command:NTF #1 { \' }
+              \babellatin_if_ligature_command:NTF #1 { \a' }
                 {
                   \token_to_str:N '
                 }
@@ -979,46 +1026,46 @@
     {
       \str_case:nnF {#1}
         {
-          {A} { \babellatin_ligature_macron:NNnn AE { \=\AE }
+          {A} { \babellatin_ligature_macron:NNnn AE { \a=\AE }
                   {
-                    \babellatin_ligature_macron:NNnn Ae { \=\AE }
+                    \babellatin_ligature_macron:NNnn Ae { \a=\AE }
                       {
                         \babellatin_diphthong_macron:NNn AU
                           {
-                            \babellatin_diphthong_macron:NNn Au { \=A }
+                            \babellatin_diphthong_macron:NNn Au { \a=A }
                           }
                       }
                   }
               }
-          {a} { \babellatin_ligature_macron:NNnn ae { \=\ae }
+          {a} { \babellatin_ligature_macron:NNnn ae { \a=\ae }
                   {
-                    \babellatin_diphthong_macron:NNn au { \=a }
+                    \babellatin_diphthong_macron:NNn au { \a=a }
                   }
               }
           {E} { \babellatin_diphthong_macron:NNn EU
                   {
-                    \babellatin_diphthong_macron:NNn Eu { \=E }
+                    \babellatin_diphthong_macron:NNn Eu { \a=E }
                   }
               }
-          {e} { \babellatin_diphthong_macron:NNn eu { \=e } }
-          {I} { \=I }
-          {i} { \=\i }
-          {O} { \babellatin_ligature_macron:NNnn OE { \=\OE }
+          {e} { \babellatin_diphthong_macron:NNn eu { \a=e } }
+          {I} { \a=I }
+          {i} { \a=\i }
+          {O} { \babellatin_ligature_macron:NNnn OE { \a=\OE }
                   {
-                    \babellatin_ligature_macron:NNnn Oe { \=\OE } { \=O }
+                    \babellatin_ligature_macron:NNnn Oe { \a=\OE } { \a=O }
                   }
               }
-          {o} { \babellatin_ligature_macron:NNnn oe { \=\oe } { \=o } }
-          {U} { \=U }
-          {u} { \=u }
-          {V} { \=V }
-          {Y} { \=Y }
-          {y} { \=y }
+          {o} { \babellatin_ligature_macron:NNnn oe { \a=\oe } { \a=o } }
+          {U} { \a=U }
+          {u} { \a=u }
+          {V} { \a=V }
+          {Y} { \a=Y }
+          {y} { \a=y }
         }
         {
           \tl_if_single_token:nTF {#1}
             {
-              \babellatin_if_ligature_command:NTF #1 { \= }
+              \babellatin_if_ligature_command:NTF #1 { \a= }
                 {
                   \token_to_str:N =
                 }
@@ -1187,7 +1234,7 @@
 %    For the |"<| and the |">| shorthands we have to define the meaning of the
 %    macros used for their definition. The commands \cs{guillemetleft} and
 %    \cs{guillemetright} are provided by \babel. We will have to change this
-%    definition later on for \lang{ecclesiasticlatin} if pdf\TeX{} is used.
+%    definition later on for \lang{ecclesiasticallatin} if pdf\TeX{} is used.
 %    \begin{macrocode}
   \let\babellatin at guillemetleft\guillemetleft
   \let\babellatin at guillemetright\guillemetright
@@ -1213,7 +1260,7 @@
   }{}%
 \fi
 %    \end{macrocode}
-%    \subsection{Ecclesiastic punctuation spacing}
+%    \subsection{Ecclesiastical punctuation spacing}
 %    We define some conditionals concerning the engine used.
 %    \begin{macrocode}
 \newif\ifbabellatin at luatex
@@ -1235,7 +1282,7 @@
 %    file is documented in section \ref{luamodule}.
 %    \begin{macrocode}
   \ifbabellatin at luatex
-    \directlua{require('ecclesiasticlatin')}%
+    \directlua{ecclesiasticallatin=require('ecclesiasticallatin')}%
   \else
 %    \end{macrocode}
 %    The following command inserts a kern of 1/12 of a quad. This is the only
@@ -1412,10 +1459,14 @@
   \fi
 }%
 %    \end{macrocode}
-%    We call the previously defined command for ecclesiastic Latin.
+%    We call the previously defined command for ecclesiastical Latin.
 %    \begin{macrocode}
-\ifx\CurrentOption\babellatin at ecclesiastic
+\ifx\CurrentOption\babellatin at ecclesiastical
   \babellatin at prepare@punctuation at spacing
+\else
+  \ifx\CurrentOption\babellatin at ecclesiastic
+    \babellatin at prepare@punctuation at spacing
+  \fi
 \fi
 %    \end{macrocode}
 %    The following function actually enables the spacing of punctuation.
@@ -1425,7 +1476,7 @@
 %    For \LuaTeX{} we just have to call a function of the Lua module.
 %    \begin{macrocode}
   \ifbabellatin at luatex
-    \directlua{ecclesiasticlatin.activate_spacing()}%
+    \directlua{ecclesiasticallatin.activate_spacing()}%
   \else
 %    \end{macrocode}
 %    For \XeTeX{} we have to enable the character classes functionality and
@@ -1477,7 +1528,7 @@
 %    \begin{macrocode}
 \def\babellatin at no@punctuation at spacing{%
   \ifbabellatin at luatex
-    \directlua{ecclesiasticlatin.deactivate_spacing()}%
+    \directlua{ecclesiasticallatin.deactivate_spacing()}%
   \else
     \ifbabellatin at xetex
       \XeTeXcharclass `\! \z@
@@ -1509,8 +1560,10 @@
   \fi
 }%
 %    \end{macrocode}
-%    Punctuation is spaced in ecclesiastic Latin only.
+%    Punctuation is spaced in ecclesiastical Latin only.
 %    \begin{macrocode}
+\addto\extrasecclesiasticallatin{\babellatin at punctuation@spacing}%
+\addto\noextrasecclesiasticallatin{\babellatin at no@punctuation at spacing}%
 \addto\extrasecclesiasticlatin{\babellatin at punctuation@spacing}%
 \addto\noextrasecclesiasticlatin{\babellatin at no@punctuation at spacing}%
 %    \end{macrocode}
@@ -1564,11 +1617,6 @@
 %    definition of this command.
 %    \begin{macrocode}
       \bbl at shorthandoff\z@{=}%
-%    \end{macrocode}
-%    The following line is currently uncommented because switching |^| off and
-%    on does not work as expected.\footnote{See
-%    \url{https://github.com/latex3/babel/issues/126}.}
-%    \begin{macrocode}
       \bbl at shorthandoff\tw@{^}%
     }%
     \babellatin at declare@prosodic at shorthands
@@ -1585,18 +1633,10 @@
 %    \begin{macrocode}
       \def\ProsodicMarksOn{%
         \shorthandon{=}%
-%    \end{macrocode}
-%    The following line is currently uncommented because switching |^| off and
-%    on does not work as expected.
-%    \begin{macrocode}
         \shorthandon{^}%
       }%
       \def\ProsodicMarksOff{%
         \shorthandoff{=}%
-%    \end{macrocode}
-%    The following line is currently uncommented because switching |^| off and
-%    on does not work as expected.
-%    \begin{macrocode}
         \shorthandoff*{^}%
       }%
     }%
@@ -1626,7 +1666,7 @@
   }%
 \fi
 %    \end{macrocode}
-%    \subsubsection{Ecclesiastic footnotes}
+%    \subsubsection{Ecclesiastical footnotes}
 %    The \modifier{ecclesiasticfootnotes} option sets the footnotes globally to
 %    the style defined by the (now outdated) \package{ecclesiastic} package.
 %    The definition takes place at the end of the package to be able to check
@@ -1665,25 +1705,30 @@
 %    \modifier{ecclesiastic} for backwards compatibility. We issue a warning if
 %    they are used.
 %    \begin{macrocode}
-\def\babellatin at outdated@modifier#1{%
+\def\babellatin at outdated@modifier#1#2{%
   \PackageWarningNoLine{babel-latin}{%
     The `#1' modifier is outdated. Please\MessageBreak
     consult the babel-latin manual and consider\MessageBreak
-    to load the language `#1latin' instead\MessageBreak
-    of `latin.#1'}%
+    to load the language `#2'\MessageBreak
+    instead of `latin.#1'}%
 }%
+\def\babellatin at outdated@language#1#2{%
+  \PackageWarningNoLine{babel-latin}{%
+    The `#1' language is outdated.\MessageBreak
+    Please load the language `#2'\MessageBreak
+    instead}%
+}%
 \bbl at declare@ttribute{latin}{classic}{%
-  \babellatin at outdated@modifier{classic}%
+  \babellatin at outdated@modifier{classic}{classicallatin}%
   \addto\extraslatin{\babellatin at usevfalse}%
   \addto\noextraslatin{\babellatin at usevtrue}%
-  \babellatin at test@classic at patterns
+  \babellatin at test@classical at patterns
   \let\l at latin\l at classiclatin
-  \StartBabelCommands*{latin}{}%
-  \SetCase{\uccode `u=`V}{\lccode `V=`u}%
-  \EndBabelCommands
+  \DeclareUppercaseMapping[la]{`u}{V}%
+  \DeclareLowercaseMapping[la]{`V}{u}%
 }%
 \bbl at declare@ttribute{latin}{medieval}{%
-  \babellatin at outdated@modifier{medieval}%
+  \babellatin at outdated@modifier{medieval}{medievallatin}%
   \addto\extraslatin{%
     \babellatin at usevfalse
     \def\prefacename{Pr\ae fatio}%
@@ -1691,12 +1736,11 @@
   \addto\noextraslatin{%
     \babellatin at usevtrue
   }%
-  \StartBabelCommands*{latin}{}%
-  \SetCase{\uccode `u=`V}{\lccode `V=`u}%
-  \EndBabelCommands%
+  \DeclareUppercaseMapping[la]{`u}{V}%
+  \DeclareLowercaseMapping[la]{`V}{u}%
 }%
 \bbl at declare@ttribute{latin}{ecclesiastic}{%
-  \babellatin at outdated@modifier{ecclesiastic}%
+  \babellatin at outdated@modifier{ecclesiastic}{ecclesiasticallatin}%
   \babellatin at prepare@punctuation at spacing
   \babellatin at ecclesiastic@outdated at commands
 %    \end{macrocode}
@@ -1787,27 +1831,35 @@
 % \iffalse
 %</latin>
 % \fi
-%    \babel{} expects \file{ldf} files for \lang{classiclatin},
-%    \lang{medievallatin} and \lang{ecclesiasticlatin}. These files themselves
-%    only load \file{latin.ldf}, which does the real work:
+%    \babel{} expects \file{ldf} files for \lang{classicallatin},
+%    \lang{medievallatin} and \lang{ecclesiasticallatin}. These files
+%    themselves only load \file{latin.ldf}, which does the real work:
 %    \begin{macrocode}
 %<classic>\ProvidesLanguage{classiclatin}
+%<classical>\ProvidesLanguage{classicallatin}
 %<ecclesiastic>\ProvidesLanguage{ecclesiasticlatin}
+%<ecclesiastical>\ProvidesLanguage{ecclesiasticallatin}
 %<medieval>\ProvidesLanguage{medievallatin}
 %    \end{macrocode}
 % \iffalse
-%<*classic|ecclesiastic|medieval>
+%<*classic|classical|ecclesiastic|ecclesiastical|medieval>
 % \fi
 %    \begin{macrocode}
 \input latin.ldf\relax
 %    \end{macrocode}
 % \iffalse
-%</classic|ecclesiastic|medieval>
+%</classic|classical|ecclesiastic|ecclesiastical|medieval>
 % \fi
+%    We issue a warning if the outdated languages \lang{classiclatin} and
+%    \lang{ecclesiasticlatin} are called:
+%    \begin{macrocode}
+%<classic>\babellatin at outdated@language{classiclatin}{classicallatin}%
+%<ecclesiastic>\babellatin at outdated@language{ecclesiasticlatin}{ecclesiasticallatin}%
+%    \end{macrocode}
 %    \subsection{The Lua module\label{luamodule}}
 %    In case \LuaTeX{} is used for compilation, the spacing of punctuation for
-%    ecclesiastic Latin requires some Lua code, which is stored in
-%    \file{ecclesiasticlatin.lua}. The original version of this code has been
+%    ecclesiastical Latin requires some Lua code, which is stored in
+%    \file{ecclesiasticallatin.lua}. The original version of this code has been
 %    written for the \package{polyglossia} package by É. Roux and others.
 %
 % \iffalse
@@ -1817,10 +1869,10 @@
 %    \package{ltluatex}.
 %    \begin{macrocode}
 luatexbase.provides_module({
-    name        = "ecclesiasticlatin",
-    date        = "2021-06-27",
-    version     = "4.0",
-    description = "babel-latin punctuation spacing for ecclesiastic Latin"
+    name        = "ecclesiasticallatin",
+    date        = "2025-04-29",
+    version     = "4.1",
+    description = "babel-latin punctuation spacing for ecclesiastical Latin"
 })
 local add_to_callback     = luatexbase.add_to_callback
 local in_callback         = luatexbase.in_callback
@@ -1989,7 +2041,7 @@
 %    \end{macrocode}
 %    \LuaTeX{} attribute determining whether to space punctuation or not:
 %    \begin{macrocode}
-local punct_attr = new_attribute("ecclesiasticlatin_punct")
+local punct_attr = new_attribute("ecclesiasticallatin_punct")
 %    \end{macrocode}
 %    Tables containing the left and right space amount (in units of a quad) of
 %    every character:
@@ -2084,7 +2136,7 @@
 end
 %    \end{macrocode}
 %    Now we define the actual amount of space for the relevant punctuation
-%    characters. For ecclesiastic Latin (and sometimes for Italian) a very
+%    characters. For ecclesiastical Latin (and sometimes for Italian) a very
 %    small space is used for the punctuation. The ecclesiastic package, a
 %    predecessor of the current \babellatin{}, used a space of
 %    0.3|\fontdimen2|, where |\fontdimen2| is an interword space, which is
@@ -2117,8 +2169,8 @@
 local function activate()
     tex.setattribute(punct_attr, 1)
     for _, callback_name in ipairs{ "pre_linebreak_filter", "hpack_filter" } do
-        if not in_callback(callback_name, "ecclesiasticlatin-punct.process") then
-            add_to_callback(callback_name, process, "ecclesiasticlatin-punct.process", 1)
+        if not in_callback(callback_name, "ecclesiasticallatin-punct.process") then
+            add_to_callback(callback_name, process, "ecclesiasticallatin-punct.process")
         end
     end
 end
@@ -2136,11 +2188,13 @@
 end
 %    \end{macrocode}
 %    For external access to the activation and deactivation of the punctuation
-%    spacing, we define two functions with the prefix |ecclesiasticlatin|.
+%    spacing, we define a table |ecclesiasticallatin| containing two functions.
+%    We return this table.
 %    \begin{macrocode}
-ecclesiasticlatin = ecclesiasticlatin or {}
-ecclesiasticlatin.activate_spacing   = activate
-ecclesiasticlatin.deactivate_spacing = deactivate
+ecclesiasticallatin = ecclesiasticallatin or {}
+ecclesiasticallatin.activate_spacing   = activate
+ecclesiasticallatin.deactivate_spacing = deactivate
+return ecclesiasticallatin
 %    \end{macrocode}
 % \iffalse
 %</lua>

Modified: trunk/Master/texmf-dist/source/generic/babel-latin/latin.ins
===================================================================
--- trunk/Master/texmf-dist/source/generic/babel-latin/latin.ins	2025-04-30 19:32:31 UTC (rev 75069)
+++ trunk/Master/texmf-dist/source/generic/babel-latin/latin.ins	2025-04-30 19:32:51 UTC (rev 75070)
@@ -5,7 +5,7 @@
 %%
 %% Copyright (C) 1989-2008 by Johannes L. Braams
 %% Copyright (C) 2009-2020 by Claudio Beccari
-%% Copyright (C) 2021      by Keno Wehr
+%% Copyright (C) 2021-2025 by Keno Wehr
 %% All rights reserved.
 %%
 %% This file is part of the babel-latin package.
@@ -25,7 +25,7 @@
 %%
 %% --------------- start of docstrip commands ------------------
 %%
-\def\filedate{2021/05/02}
+\def\filedate{2025-04-29}
 \def\batchfile{latin.ins}
 \input docstrip.tex
 
@@ -48,7 +48,7 @@
 
 Copyright (C) 1989-2008 by Johannes L. Braams
 Copyright (C) 2009-2020 by Claudio Beccari
-Copyright (C) 2021      by Keno Wehr
+Copyright (C) 2021-2025 by Keno Wehr
 All rights reserved.
 
 This file is part of the babel-latin package.
@@ -75,7 +75,9 @@
 \usedir{tex/generic/babel-latin}
 \usepreamble\mainpreamble
 
-\generate{\file{classiclatin.ldf}{\from{latin.dtx}{classic}}
+\generate{\file{classicallatin.ldf}{\from{latin.dtx}{classical}}
+          \file{classiclatin.ldf}{\from{latin.dtx}{classic}}
+          \file{ecclesiasticallatin.ldf}{\from{latin.dtx}{ecclesiastical}}
           \file{ecclesiasticlatin.ldf}{\from{latin.dtx}{ecclesiastic}}
           \file{latin.ldf}{\from{latin.dtx}{latin}}
           \file{medievallatin.ldf}{\from{latin.dtx}{medieval}}
@@ -89,7 +91,7 @@
 polyglossia package by É. Roux and others. The code has been adapted for
 the babel-latin package by K. Wehr.
 
-Copyright (C) 2021      by Keno Wehr
+Copyright (C) 2021-2025 by Keno Wehr
 All rights reserved.
 
 This file is part of the babel-latin package.
@@ -114,7 +116,7 @@
 \usepreamble\luapreamble
 \nopostamble
 
-\generate{\file{ecclesiasticlatin.lua}{\from{latin.dtx}{lua}}}
+\generate{\file{ecclesiasticallatin.lua}{\from{latin.dtx}{lua}}}
 
 \ifToplevel{
 \Msg{***********************************************************}
@@ -122,8 +124,9 @@
 \Msg{* To finish the installation you have to move the following}
 \Msg{* files into a directory searched by TeX:}
 \Msg{*}
-\Msg{* \space\space classiclatin.ldf, ecclesiasticlatin.ldf,}
-\Msg{* \space\space ecclesiasticlatin.lua, latin.ldf, medievallatin.ldf}
+\Msg{* \space\space classicallatin.ldf, classiclatin.ldf,}
+\Msg{* \space\space ecclesiasticallatin.ldf, ecclesiasticallatin.lua,}
+\Msg{* \space\space ecclesiasticlatin.ldf, latin.ldf, medievallatin.ldf}
 \Msg{*}
 \Msg{* To produce the documentation run the file latin.dtx}
 \Msg{* through LaTeX.}

Added: trunk/Master/texmf-dist/tex/generic/babel-latin/classicallatin.ldf
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel-latin/classicallatin.ldf	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/babel-latin/classicallatin.ldf	2025-04-30 19:32:51 UTC (rev 75070)
@@ -0,0 +1,35 @@
+%%
+%% This is file `classicallatin.ldf',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% latin.dtx  (with options: `classical')
+%% 
+%% Copyright (C) 1989-2008 by Johannes L. Braams
+%% Copyright (C) 2009-2020 by Claudio Beccari
+%% Copyright (C) 2021-2025 by Keno Wehr
+%% All rights reserved.
+%% 
+%% This file is part of the babel-latin 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 Keno Wehr.
+%% 
+%% Please report errors to: https://github.com/wehro/babel-latin/issues
+%% 
+\ProvidesLanguage{classicallatin}
+\input latin.ldf\relax
+\endinput
+%%
+%% End of file `classicallatin.ldf'.


Property changes on: trunk/Master/texmf-dist/tex/generic/babel-latin/classicallatin.ldf
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/generic/babel-latin/classiclatin.ldf
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel-latin/classiclatin.ldf	2025-04-30 19:32:31 UTC (rev 75069)
+++ trunk/Master/texmf-dist/tex/generic/babel-latin/classiclatin.ldf	2025-04-30 19:32:51 UTC (rev 75070)
@@ -8,7 +8,7 @@
 %% 
 %% Copyright (C) 1989-2008 by Johannes L. Braams
 %% Copyright (C) 2009-2020 by Claudio Beccari
-%% Copyright (C) 2021      by Keno Wehr
+%% Copyright (C) 2021-2025 by Keno Wehr
 %% All rights reserved.
 %% 
 %% This file is part of the babel-latin package.
@@ -30,6 +30,7 @@
 %% 
 \ProvidesLanguage{classiclatin}
 \input latin.ldf\relax
+\babellatin at outdated@language{classiclatin}{classicallatin}%
 \endinput
 %%
 %% End of file `classiclatin.ldf'.

Added: trunk/Master/texmf-dist/tex/generic/babel-latin/ecclesiasticallatin.ldf
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel-latin/ecclesiasticallatin.ldf	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/babel-latin/ecclesiasticallatin.ldf	2025-04-30 19:32:51 UTC (rev 75070)
@@ -0,0 +1,35 @@
+%%
+%% This is file `ecclesiasticallatin.ldf',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% latin.dtx  (with options: `ecclesiastical')
+%% 
+%% Copyright (C) 1989-2008 by Johannes L. Braams
+%% Copyright (C) 2009-2020 by Claudio Beccari
+%% Copyright (C) 2021-2025 by Keno Wehr
+%% All rights reserved.
+%% 
+%% This file is part of the babel-latin 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 Keno Wehr.
+%% 
+%% Please report errors to: https://github.com/wehro/babel-latin/issues
+%% 
+\ProvidesLanguage{ecclesiasticallatin}
+\input latin.ldf\relax
+\endinput
+%%
+%% End of file `ecclesiasticallatin.ldf'.


Property changes on: trunk/Master/texmf-dist/tex/generic/babel-latin/ecclesiasticallatin.ldf
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/generic/babel-latin/ecclesiasticallatin.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel-latin/ecclesiasticallatin.lua	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/babel-latin/ecclesiasticallatin.lua	2025-04-30 19:32:51 UTC (rev 75070)
@@ -0,0 +1,261 @@
+--
+-- This is file `ecclesiasticallatin.lua',
+-- generated with the docstrip utility.
+--
+-- The original source files were:
+--
+-- latin.dtx  (with options: `lua')
+-- 
+-- The original version of the following Lua code has been written for the
+-- polyglossia package by É. Roux and others. The code has been adapted for
+-- the babel-latin package by K. Wehr.
+-- 
+-- Copyright (C) 2021-2025 by Keno Wehr
+-- All rights reserved.
+-- 
+-- This file is part of the babel-latin 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 Keno Wehr.
+-- 
+-- Please report errors to: https://github.com/wehro/babel-latin/issues
+-- 
+luatexbase.provides_module({
+    name        = "ecclesiasticallatin",
+    date        = "2025-04-29",
+    version     = "4.1",
+    description = "babel-latin punctuation spacing for ecclesiastical Latin"
+})
+local add_to_callback     = luatexbase.add_to_callback
+local in_callback         = luatexbase.in_callback
+local new_attribute       = luatexbase.new_attribute
+local node                = node
+local insert_node_before  = node.insert_before
+local insert_node_after   = node.insert_after
+local remove_node         = node.remove
+local has_attribute       = node.has_attribute
+local node_copy           = node.copy
+local new_node            = node.new
+local end_of_math         = node.end_of_math
+local get_next            = node.getnext
+local get_prev            = node.getprev
+local get_property        = node.getproperty
+local glue_code    = node.id"glue"
+local glyph_code   = node.id"glyph"
+local penalty_code = node.id"penalty"
+local kern_code    = node.id"kern"
+local math_code    = node.id"math"
+local userkern = 1
+local removable_skip = {
+    [0]  = true, -- userskip
+    [13] = true, -- spaceskip
+    [14] = true  -- xspaceskip
+}
+local kern_node   = new_node(kern_code)
+kern_node.subtype = userkern
+local function get_kern_node(dim)
+    local n = node_copy(kern_node)
+    n.kern = dim
+    return n
+end
+local space_chars = {
+    [0x20] = true,   -- space
+    [0xA0] = true,   -- no-break space
+    [0x1680] = true, -- ogham space mark
+    [0x2000] = true, -- en quad
+    [0x2001] = true, -- em quad
+    [0x2002] = true, -- en space
+    [0x2003] = true, -- em space
+    [0x2004] = true, -- three-per-em-space
+    [0x2005] = true, -- four-per-em space
+    [0x2006] = true, -- six-per-em space
+    [0x2007] = true, -- figure space
+    [0x2008] = true, -- punctuation space
+    [0x2009] = true, -- thin space
+    [0x200A] = true, -- hair space
+    [0x202F] = true, -- narrow no-break space
+    [0x205F] = true, -- medium mathematical space
+    [0x3000] = true  -- ideographic space
+}
+local left_bracket_chars = {
+    [0x28] = true,  -- left parenthesis
+    [0x5B] = true,  -- left square bracket
+    [0x7B] = true,  -- left curly bracket
+    [0x27E8] = true -- mathematical left angle bracket
+}
+local right_bracket_chars = {
+    [0x29] = true,  -- right parenthesis
+    [0x5D] = true,  -- right square bracket
+    [0x7D] = true,  -- right curly bracket
+    [0x27E9] = true -- mathematical right angle bracket
+}
+local question_exclamation_chars = {
+    [0x21] = true,   -- exclamation mark !
+    [0x3F] = true,   -- question mark ?
+    [0x203C] = true, -- double exclamation mark ‼
+    [0x203D] = true, -- interrobang ‽
+    [0x2047] = true, -- double question mark ⁇
+    [0x2048] = true, -- question exclamation mark ⁈
+    [0x2049] = true  -- exclamation question mark ⁉
+}
+local function somespace(n)
+    if n then
+        local id, subtype = n.id, n.subtype
+        if id == glue_code then
+            return removable_skip[subtype]
+        elseif id == kern_code then
+            return subtype == userkern
+        elseif id == glyph_code then
+            return space_chars[n.char]
+        end
+    end
+end
+local function someleftbracket(n)
+    if n then
+        local id = n.id
+        if id == glyph_code then
+            return left_bracket_chars[n.char]
+        end
+    end
+end
+local function somerightbracket(n)
+    if n then
+        local id = n.id
+        if id == glyph_code then
+            return right_bracket_chars[n.char]
+        end
+    end
+end
+local function question_exclamation_sequence(n1, n2)
+    if n1 and n2 then
+        local id1 = n1.id
+        local id2 = n2.id
+        if id1 == glyph_code and id2 == glyph_code then
+            return question_exclamation_chars[n1.char] and question_exclamation_chars[n2.char]
+        end
+    end
+end
+local function somepenalty(n, value)
+    if n then
+        local id = n.id
+        if id == penalty_code then
+            if value then
+                return n.penalty == value
+            else
+                return true
+            end
+        end
+    end
+end
+local punct_attr = new_attribute("ecclesiasticallatin_punct")
+local left_space  = {}
+local right_space = {}
+local function process(head)
+    local current = head
+    while current do
+        local id = current.id
+        if id == glyph_code then
+            if has_attribute(current, punct_attr) then
+                local char = get_property(current) and get_property(current).glyph_info
+                if not char and current.char <= 0x10FFFF then
+                    char = utf8.char(current.char)
+                end
+                local leftspace, rightspace
+                if char then
+                    leftspace  = left_space[char]
+                    rightspace = right_space[char]
+                end
+                if leftspace or rightspace then
+                    local fontparameters = fonts.hashes.parameters[current.font]
+                    local spacing_node
+                    if leftspace and fontparameters then
+                        local prev = get_prev(current)
+                        local space_exception = false
+                        if prev then
+                            space_exception = someleftbracket(prev)
+                                              or question_exclamation_sequence(prev, current)
+                            while somespace(prev) do
+                                head = remove_node(head, prev)
+                                prev = get_prev(current)
+                            end
+                            if somepenalty(prev, 10000) then
+                                head = remove_node(head, prev)
+                            end
+                        end
+                        spacing_node = get_kern_node(leftspace * fontparameters.quad)
+                        if not space_exception then
+                            head = insert_node_before(head, current, spacing_node)
+                        end
+                    end
+                    if rightspace and fontparameters then
+                        local next = get_next(current)
+                        local space_exception = false
+                        if next then
+                            space_exception = somerightbracket(next)
+                            local nextnext = get_next(next)
+                            if somepenalty(next, 10000) and somespace(nextnext) then
+                                head, next = remove_node(head, next)
+                            end
+                            while somespace(next) do
+                                head, next = remove_node(head, next)
+                            end
+                        end
+                        spacing_node = get_kern_node(rightspace * fontparameters.quad)
+                        if not space_exception then
+                            head, current = insert_node_after(head, current, spacing_node)
+                        end
+                    end
+                end
+            end
+        elseif id == math_code then
+            current = end_of_math(current)
+        end
+        current = get_next(current)
+    end
+    return head
+end
+local hairspace = 0.08333 -- 1/12
+local function space_left(char)
+    left_space[char] = hairspace
+end
+local function space_right(char, kern)
+    right_space[char] = hairspace
+end
+space_left('!')
+space_left('?')
+space_left('‼')
+space_left('⁇')
+space_left('⁈')
+space_left('⁉')
+space_left('‽') -- U+203D (interrobang)
+space_left(':')
+space_left(';')
+space_left('»')
+space_left('›')
+space_right('«')
+space_right('‹')
+local function activate()
+    tex.setattribute(punct_attr, 1)
+    for _, callback_name in ipairs{ "pre_linebreak_filter", "hpack_filter" } do
+        if not in_callback(callback_name, "ecclesiasticallatin-punct.process") then
+            add_to_callback(callback_name, process, "ecclesiasticallatin-punct.process")
+        end
+    end
+end
+local function deactivate()
+    tex.setattribute(punct_attr, -0x7FFFFFFF) -- this value means "unset"
+end
+ecclesiasticallatin = ecclesiasticallatin or {}
+ecclesiasticallatin.activate_spacing   = activate
+ecclesiasticallatin.deactivate_spacing = deactivate
+return ecclesiasticallatin


Property changes on: trunk/Master/texmf-dist/tex/generic/babel-latin/ecclesiasticallatin.lua
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/generic/babel-latin/ecclesiasticlatin.ldf
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel-latin/ecclesiasticlatin.ldf	2025-04-30 19:32:31 UTC (rev 75069)
+++ trunk/Master/texmf-dist/tex/generic/babel-latin/ecclesiasticlatin.ldf	2025-04-30 19:32:51 UTC (rev 75070)
@@ -8,7 +8,7 @@
 %% 
 %% Copyright (C) 1989-2008 by Johannes L. Braams
 %% Copyright (C) 2009-2020 by Claudio Beccari
-%% Copyright (C) 2021      by Keno Wehr
+%% Copyright (C) 2021-2025 by Keno Wehr
 %% All rights reserved.
 %% 
 %% This file is part of the babel-latin package.
@@ -30,6 +30,7 @@
 %% 
 \ProvidesLanguage{ecclesiasticlatin}
 \input latin.ldf\relax
+\babellatin at outdated@language{ecclesiasticlatin}{ecclesiasticallatin}%
 \endinput
 %%
 %% End of file `ecclesiasticlatin.ldf'.

Deleted: trunk/Master/texmf-dist/tex/generic/babel-latin/ecclesiasticlatin.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel-latin/ecclesiasticlatin.lua	2025-04-30 19:32:31 UTC (rev 75069)
+++ trunk/Master/texmf-dist/tex/generic/babel-latin/ecclesiasticlatin.lua	2025-04-30 19:32:51 UTC (rev 75070)
@@ -1,260 +0,0 @@
---
--- This is file `ecclesiasticlatin.lua',
--- generated with the docstrip utility.
---
--- The original source files were:
---
--- latin.dtx  (with options: `lua')
--- 
--- The original version of the following Lua code has been written for the
--- polyglossia package by É. Roux and others. The code has been adapted for
--- the babel-latin package by K. Wehr.
--- 
--- Copyright (C) 2021      by Keno Wehr
--- All rights reserved.
--- 
--- This file is part of the babel-latin 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 Keno Wehr.
--- 
--- Please report errors to: https://github.com/wehro/babel-latin/issues
--- 
-luatexbase.provides_module({
-    name        = "ecclesiasticlatin",
-    date        = "2021-06-27",
-    version     = "4.0",
-    description = "babel-latin punctuation spacing for ecclesiastic Latin"
-})
-local add_to_callback     = luatexbase.add_to_callback
-local in_callback         = luatexbase.in_callback
-local new_attribute       = luatexbase.new_attribute
-local node                = node
-local insert_node_before  = node.insert_before
-local insert_node_after   = node.insert_after
-local remove_node         = node.remove
-local has_attribute       = node.has_attribute
-local node_copy           = node.copy
-local new_node            = node.new
-local end_of_math         = node.end_of_math
-local get_next            = node.getnext
-local get_prev            = node.getprev
-local get_property        = node.getproperty
-local glue_code    = node.id"glue"
-local glyph_code   = node.id"glyph"
-local penalty_code = node.id"penalty"
-local kern_code    = node.id"kern"
-local math_code    = node.id"math"
-local userkern = 1
-local removable_skip = {
-    [0]  = true, -- userskip
-    [13] = true, -- spaceskip
-    [14] = true  -- xspaceskip
-}
-local kern_node   = new_node(kern_code)
-kern_node.subtype = userkern
-local function get_kern_node(dim)
-    local n = node_copy(kern_node)
-    n.kern = dim
-    return n
-end
-local space_chars = {
-    [0x20] = true,   -- space
-    [0xA0] = true,   -- no-break space
-    [0x1680] = true, -- ogham space mark
-    [0x2000] = true, -- en quad
-    [0x2001] = true, -- em quad
-    [0x2002] = true, -- en space
-    [0x2003] = true, -- em space
-    [0x2004] = true, -- three-per-em-space
-    [0x2005] = true, -- four-per-em space
-    [0x2006] = true, -- six-per-em space
-    [0x2007] = true, -- figure space
-    [0x2008] = true, -- punctuation space
-    [0x2009] = true, -- thin space
-    [0x200A] = true, -- hair space
-    [0x202F] = true, -- narrow no-break space
-    [0x205F] = true, -- medium mathematical space
-    [0x3000] = true  -- ideographic space
-}
-local left_bracket_chars = {
-    [0x28] = true,  -- left parenthesis
-    [0x5B] = true,  -- left square bracket
-    [0x7B] = true,  -- left curly bracket
-    [0x27E8] = true -- mathematical left angle bracket
-}
-local right_bracket_chars = {
-    [0x29] = true,  -- right parenthesis
-    [0x5D] = true,  -- right square bracket
-    [0x7D] = true,  -- right curly bracket
-    [0x27E9] = true -- mathematical right angle bracket
-}
-local question_exclamation_chars = {
-    [0x21] = true,   -- exclamation mark !
-    [0x3F] = true,   -- question mark ?
-    [0x203C] = true, -- double exclamation mark ‼
-    [0x203D] = true, -- interrobang ‽
-    [0x2047] = true, -- double question mark ⁇
-    [0x2048] = true, -- question exclamation mark ⁈
-    [0x2049] = true  -- exclamation question mark ⁉
-}
-local function somespace(n)
-    if n then
-        local id, subtype = n.id, n.subtype
-        if id == glue_code then
-            return removable_skip[subtype]
-        elseif id == kern_code then
-            return subtype == userkern
-        elseif id == glyph_code then
-            return space_chars[n.char]
-        end
-    end
-end
-local function someleftbracket(n)
-    if n then
-        local id = n.id
-        if id == glyph_code then
-            return left_bracket_chars[n.char]
-        end
-    end
-end
-local function somerightbracket(n)
-    if n then
-        local id = n.id
-        if id == glyph_code then
-            return right_bracket_chars[n.char]
-        end
-    end
-end
-local function question_exclamation_sequence(n1, n2)
-    if n1 and n2 then
-        local id1 = n1.id
-        local id2 = n2.id
-        if id1 == glyph_code and id2 == glyph_code then
-            return question_exclamation_chars[n1.char] and question_exclamation_chars[n2.char]
-        end
-    end
-end
-local function somepenalty(n, value)
-    if n then
-        local id = n.id
-        if id == penalty_code then
-            if value then
-                return n.penalty == value
-            else
-                return true
-            end
-        end
-    end
-end
-local punct_attr = new_attribute("ecclesiasticlatin_punct")
-local left_space  = {}
-local right_space = {}
-local function process(head)
-    local current = head
-    while current do
-        local id = current.id
-        if id == glyph_code then
-            if has_attribute(current, punct_attr) then
-                local char = get_property(current) and get_property(current).glyph_info
-                if not char and current.char <= 0x10FFFF then
-                    char = utf8.char(current.char)
-                end
-                local leftspace, rightspace
-                if char then
-                    leftspace  = left_space[char]
-                    rightspace = right_space[char]
-                end
-                if leftspace or rightspace then
-                    local fontparameters = fonts.hashes.parameters[current.font]
-                    local spacing_node
-                    if leftspace and fontparameters then
-                        local prev = get_prev(current)
-                        local space_exception = false
-                        if prev then
-                            space_exception = someleftbracket(prev)
-                                              or question_exclamation_sequence(prev, current)
-                            while somespace(prev) do
-                                head = remove_node(head, prev)
-                                prev = get_prev(current)
-                            end
-                            if somepenalty(prev, 10000) then
-                                head = remove_node(head, prev)
-                            end
-                        end
-                        spacing_node = get_kern_node(leftspace * fontparameters.quad)
-                        if not space_exception then
-                            head = insert_node_before(head, current, spacing_node)
-                        end
-                    end
-                    if rightspace and fontparameters then
-                        local next = get_next(current)
-                        local space_exception = false
-                        if next then
-                            space_exception = somerightbracket(next)
-                            local nextnext = get_next(next)
-                            if somepenalty(next, 10000) and somespace(nextnext) then
-                                head, next = remove_node(head, next)
-                            end
-                            while somespace(next) do
-                                head, next = remove_node(head, next)
-                            end
-                        end
-                        spacing_node = get_kern_node(rightspace * fontparameters.quad)
-                        if not space_exception then
-                            head, current = insert_node_after(head, current, spacing_node)
-                        end
-                    end
-                end
-            end
-        elseif id == math_code then
-            current = end_of_math(current)
-        end
-        current = get_next(current)
-    end
-    return head
-end
-local hairspace = 0.08333 -- 1/12
-local function space_left(char)
-    left_space[char] = hairspace
-end
-local function space_right(char, kern)
-    right_space[char] = hairspace
-end
-space_left('!')
-space_left('?')
-space_left('‼')
-space_left('⁇')
-space_left('⁈')
-space_left('⁉')
-space_left('‽') -- U+203D (interrobang)
-space_left(':')
-space_left(';')
-space_left('»')
-space_left('›')
-space_right('«')
-space_right('‹')
-local function activate()
-    tex.setattribute(punct_attr, 1)
-    for _, callback_name in ipairs{ "pre_linebreak_filter", "hpack_filter" } do
-        if not in_callback(callback_name, "ecclesiasticlatin-punct.process") then
-            add_to_callback(callback_name, process, "ecclesiasticlatin-punct.process", 1)
-        end
-    end
-end
-local function deactivate()
-    tex.setattribute(punct_attr, -0x7FFFFFFF) -- this value means "unset"
-end
-ecclesiasticlatin = ecclesiasticlatin or {}
-ecclesiasticlatin.activate_spacing   = activate
-ecclesiasticlatin.deactivate_spacing = deactivate

Modified: trunk/Master/texmf-dist/tex/generic/babel-latin/latin.ldf
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel-latin/latin.ldf	2025-04-30 19:32:31 UTC (rev 75069)
+++ trunk/Master/texmf-dist/tex/generic/babel-latin/latin.ldf	2025-04-30 19:32:51 UTC (rev 75070)
@@ -8,7 +8,7 @@
 %% 
 %% Copyright (C) 1989-2008 by Johannes L. Braams
 %% Copyright (C) 2009-2020 by Claudio Beccari
-%% Copyright (C) 2021      by Keno Wehr
+%% Copyright (C) 2021-2025 by Keno Wehr
 %% All rights reserved.
 %% 
 %% This file is part of the babel-latin package.
@@ -28,10 +28,12 @@
 %% 
 %% Please report errors to: https://github.com/wehro/babel-latin/issues
 %% 
-\ProvidesLanguage{latin}[2021-06-27 v4.0 Latin support from the babel system]
+\ProvidesLanguage{latin}[2025-04-29 v4.1 Latin support from the babel system]
 \LdfInit\CurrentOption{captions\CurrentOption}
+\def\babellatin at classical{classicallatin}
 \def\babellatin at classic{classiclatin}
 \def\babellatin at medieval{medievallatin}
+\def\babellatin at ecclesiastical{ecclesiasticallatin}
 \def\babellatin at ecclesiastic{ecclesiasticlatin}
 \providehyphenmins{\CurrentOption}{\tw@\tw@}
 \def\babellatin at test@modern at patterns{%
@@ -39,27 +41,37 @@
     \@nopatterns{latin}%
     \adddialect\l at latin0
   \fi}%
-\def\babellatin at test@classic at patterns{%
+\def\babellatin at test@classical at patterns{%
   \ifx\l at classiclatin\undefined
     \PackageWarningNoLine{babel-latin}{%
       No hyphenation patterns were found for the\MessageBreak
-      classiclatin language. Now I will use the\MessageBreak
+      classicallatin language. Now I will use the\MessageBreak
       patterns for modern Latin instead}%
     \babellatin at test@modern at patterns
     \adddialect\l at classiclatin\l at latin
   \fi}%
-\ifx\CurrentOption\babellatin at classic
-  \babellatin at test@classic at patterns
+\ifx\CurrentOption\babellatin at classical
+  \babellatin at test@classical at patterns
+  \adddialect\l at classicallatin\l at classiclatin
 \else
-  \ifx\CurrentOption\babellatin at ecclesiastic
-    \babellatin at test@modern at patterns
-    \adddialect\l at ecclesiasticlatin\l at latin
+  \ifx\CurrentOption\babellatin at classic
+    \babellatin at test@classical at patterns
   \else
-    \ifx\CurrentOption\babellatin at medieval
+    \ifx\CurrentOption\babellatin at ecclesiastical
       \babellatin at test@modern at patterns
-      \adddialect\l at medievallatin\l at latin
+      \adddialect\l at ecclesiasticallatin\l at latin
     \else
-      \babellatin at test@modern at patterns
+      \ifx\CurrentOption\babellatin at ecclesiastic
+        \babellatin at test@modern at patterns
+        \adddialect\l at ecclesiasticlatin\l at latin
+      \else
+        \ifx\CurrentOption\babellatin at medieval
+          \babellatin at test@modern at patterns
+          \adddialect\l at medievallatin\l at latin
+        \else
+          \babellatin at test@modern at patterns
+        \fi
+      \fi
     \fi
   \fi
 \fi
@@ -66,6 +78,8 @@
 \newif\ifbabellatin at useligatures
 \addto\extrasmedievallatin{\babellatin at useligaturestrue}%
 \addto\noextrasmedievallatin{\babellatin at useligaturesfalse}%
+\addto\extrasecclesiasticallatin{\babellatin at useligaturestrue}%
+\addto\noextrasecclesiasticallatin{\babellatin at useligaturesfalse}%
 \addto\extrasecclesiasticlatin{\babellatin at useligaturestrue}%
 \addto\noextrasecclesiasticlatin{\babellatin at useligaturesfalse}%
 \StartBabelCommands*{\CurrentOption}{captions}
@@ -90,16 +104,32 @@
   \SetString\alsoname{cfr.}% Tabacco never saw "cfr" + "atque" or similar forms
   \SetString\proofname{Demonstratio}
   \SetString\glossaryname{Glossarium}
-\StartBabelCommands*{classiclatin,medievallatin}{}
-  \SetCase{\uccode`u=`V}{\lccode`V=`u}
+\EndBabelCommands
+\def\babellatin at latex{LaTeX2e}%
+\ifx\fmtname\babellatin at latex
+  \DeclareUppercaseMapping[la-x-classic]{`u}{V}
+  \DeclareLowercaseMapping[la-x-classic]{`V}{u}
+  \ExplSyntaxOn
+  \sys_if_engine_opentype:T
+    {
+      \DeclareUppercaseMapping[la-x-classic]{`ú}{\a'{V}}
+      \DeclareUppercaseMapping[la-x-classic]{`ū}{\a={V}}
+      \DeclareUppercaseMapping[la-x-classic]{`ŭ}{\u{V}}
+      \DeclareUppercaseMapping[la-x-medieval]{`ú}{\a'{V}}
+      \DeclareUppercaseMapping[la-x-medieval]{`ū}{\a={V}}
+      \DeclareUppercaseMapping[la-x-medieval]{`ŭ}{\u{V}}
+    }
+  \ExplSyntaxOff
+\fi
+\StartBabelCommands*{classicallatin,classiclatin,medievallatin}{}
   \SetHyphenMap{\BabelLower{`V}{`u}}
-\StartBabelCommands{classiclatin,medievallatin}{}[unicode,fontenc=TU,charset=utf8]
-  \SetCase{\uccode`u=`V \uccode`ú=`V \uccode`ū=`V \uccode`ŭ=`V}{\lccode`V=`u}
 \EndBabelCommands
 \newif\ifbabellatin at usev
 \newif\ifbabellatin at usej
 \newif\ifbabellatin at lowercasemonth
 \babellatin at usevtrue
+\addto\extrasclassicallatin{\babellatin at usevfalse}%
+\addto\noextrasclassicallatin{\babellatin at usevtrue}%
 \addto\extrasclassiclatin{\babellatin at usevfalse}%
 \addto\noextrasclassiclatin{\babellatin at usevtrue}%
 \addto\extrasmedievallatin{\babellatin at usevfalse}%
@@ -130,7 +160,6 @@
     \uppercase\expandafter{\romannumeral\year}%
   }%
 }%
-\def\babellatin at latex{LaTeX2e}%
 \ifx\fmtname\babellatin at latex
   \initiate at active@char{"}%
   \@ifpackagewith{babel}{activeacute}{\initiate at active@char{'}}{}%
@@ -222,36 +251,36 @@
     {
       \str_case:nnF {#1}
         {
-          {A} { \babellatin_ligature_shorthand:Nnn E { \'\AE }
+          {A} { \babellatin_ligature_shorthand:Nnn E { \a'\AE }
                   {
-                    \babellatin_ligature_shorthand:Nnn e { \'\AE } { Á }
+                    \babellatin_ligature_shorthand:Nnn e { \a'\AE } { Á }
                   }
               }
-          {a} { \babellatin_ligature_shorthand:Nnn e { \'\ae } { á } }
+          {a} { \babellatin_ligature_shorthand:Nnn e { \a'\ae } { á } }
           {E} { É }
           {e} { é }
           {I} { Í }
           {i} { í }
-          {O} { \babellatin_ligature_shorthand:Nnn E { \'\OE }
+          {O} { \babellatin_ligature_shorthand:Nnn E { \a'\OE }
                   {
-                    \babellatin_ligature_shorthand:Nnn e { \'\OE } { Ó }
+                    \babellatin_ligature_shorthand:Nnn e { \a'\OE } { Ó }
                   }
               }
-          {o} { \babellatin_ligature_shorthand:Nnn e { \'\oe } { ó } }
+          {o} { \babellatin_ligature_shorthand:Nnn e { \a'\oe } { ó } }
           {U} { Ú }
           {u} { ú }
-          {V} { \'V }
-          {Y} { \'Y }
-          {y} { \'y }
-          {Æ} { \'\AE }
-          {æ} { \'\ae }
-          {Œ} { \'\OE }
-          {œ} { \'\oe }
+          {V} { \a'V }
+          {Y} { \a'Y }
+          {y} { \a'y }
+          {Æ} { \a'\AE }
+          {æ} { \a'\ae }
+          {Œ} { \a'\OE }
+          {œ} { \a'\oe }
         }
         {
           \tl_if_single_token:nTF {#1}
             {
-              \babellatin_if_ligature_command:NTF #1 { \' }
+              \babellatin_if_ligature_command:NTF #1 { \a' }
                 {
                   \token_to_str:N '
                 }
@@ -266,46 +295,46 @@
     {
       \str_case:nnF {#1}
         {
-          {A} { \babellatin_ligature_macron:NNnn AE { \=\AE }
+          {A} { \babellatin_ligature_macron:NNnn AE { \a=\AE }
                   {
-                    \babellatin_ligature_macron:NNnn Ae { \=\AE }
+                    \babellatin_ligature_macron:NNnn Ae { \a=\AE }
                       {
                         \babellatin_diphthong_macron:NNn AU
                           {
-                            \babellatin_diphthong_macron:NNn Au { \=A }
+                            \babellatin_diphthong_macron:NNn Au { \a=A }
                           }
                       }
                   }
               }
-          {a} { \babellatin_ligature_macron:NNnn ae { \=\ae }
+          {a} { \babellatin_ligature_macron:NNnn ae { \a=\ae }
                   {
-                    \babellatin_diphthong_macron:NNn au { \=a }
+                    \babellatin_diphthong_macron:NNn au { \a=a }
                   }
               }
           {E} { \babellatin_diphthong_macron:NNn EU
                   {
-                    \babellatin_diphthong_macron:NNn Eu { \=E }
+                    \babellatin_diphthong_macron:NNn Eu { \a=E }
                   }
               }
-          {e} { \babellatin_diphthong_macron:NNn eu { \=e } }
-          {I} { \=I }
-          {i} { \=\i }
-          {O} { \babellatin_ligature_macron:NNnn OE { \=\OE }
+          {e} { \babellatin_diphthong_macron:NNn eu { \a=e } }
+          {I} { \a=I }
+          {i} { \a=\i }
+          {O} { \babellatin_ligature_macron:NNnn OE { \a=\OE }
                   {
-                    \babellatin_ligature_macron:NNnn Oe { \=\OE } { \=O }
+                    \babellatin_ligature_macron:NNnn Oe { \a=\OE } { \a=O }
                   }
               }
-          {o} { \babellatin_ligature_macron:NNnn oe { \=\oe } { \=o } }
-          {U} { \=U }
-          {u} { \=u }
-          {V} { \=V }
-          {Y} { \=Y }
-          {y} { \=y }
+          {o} { \babellatin_ligature_macron:NNnn oe { \a=\oe } { \a=o } }
+          {U} { \a=U }
+          {u} { \a=u }
+          {V} { \a=V }
+          {Y} { \a=Y }
+          {y} { \a=y }
         }
         {
           \tl_if_single_token:nTF {#1}
             {
-              \babellatin_if_ligature_command:NTF #1 { \= }
+              \babellatin_if_ligature_command:NTF #1 { \a= }
                 {
                   \token_to_str:N =
                 }
@@ -451,7 +480,7 @@
 \fi
 \def\babellatin at prepare@punctuation at spacing{%
   \ifbabellatin at luatex
-    \directlua{require('ecclesiasticlatin')}%
+    \directlua{ecclesiasticallatin=require('ecclesiasticallatin')}%
   \else
     \def\babellatin at insert@punctuation at space{%
       \kern0.08333\fontdimen6\font
@@ -541,12 +570,16 @@
     \fi
   \fi
 }%
-\ifx\CurrentOption\babellatin at ecclesiastic
+\ifx\CurrentOption\babellatin at ecclesiastical
   \babellatin at prepare@punctuation at spacing
+\else
+  \ifx\CurrentOption\babellatin at ecclesiastic
+    \babellatin at prepare@punctuation at spacing
+  \fi
 \fi
 \def\babellatin at punctuation@spacing{%
   \ifbabellatin at luatex
-    \directlua{ecclesiasticlatin.activate_spacing()}%
+    \directlua{ecclesiasticallatin.activate_spacing()}%
   \else
     \ifbabellatin at xetex
       \XeTeXinterchartokenstate = 1
@@ -585,7 +618,7 @@
 }%
 \def\babellatin at no@punctuation at spacing{%
   \ifbabellatin at luatex
-    \directlua{ecclesiasticlatin.deactivate_spacing()}%
+    \directlua{ecclesiasticallatin.deactivate_spacing()}%
   \else
     \ifbabellatin at xetex
       \XeTeXcharclass `\! \z@
@@ -616,6 +649,8 @@
     \fi
   \fi
 }%
+\addto\extrasecclesiasticallatin{\babellatin at punctuation@spacing}%
+\addto\noextrasecclesiasticallatin{\babellatin at no@punctuation at spacing}%
 \addto\extrasecclesiasticlatin{\babellatin at punctuation@spacing}%
 \addto\noextrasecclesiasticlatin{\babellatin at no@punctuation at spacing}%
 \bbl at declare@ttribute\CurrentOption{usej}{%
@@ -690,25 +725,30 @@
   \hbox{\normalfont\@thefnmark.}%
   \enspace #1%
 }%
-\def\babellatin at outdated@modifier#1{%
+\def\babellatin at outdated@modifier#1#2{%
   \PackageWarningNoLine{babel-latin}{%
     The `#1' modifier is outdated. Please\MessageBreak
     consult the babel-latin manual and consider\MessageBreak
-    to load the language `#1latin' instead\MessageBreak
-    of `latin.#1'}%
+    to load the language `#2'\MessageBreak
+    instead of `latin.#1'}%
 }%
+\def\babellatin at outdated@language#1#2{%
+  \PackageWarningNoLine{babel-latin}{%
+    The `#1' language is outdated.\MessageBreak
+    Please load the language `#2'\MessageBreak
+    instead}%
+}%
 \bbl at declare@ttribute{latin}{classic}{%
-  \babellatin at outdated@modifier{classic}%
+  \babellatin at outdated@modifier{classic}{classicallatin}%
   \addto\extraslatin{\babellatin at usevfalse}%
   \addto\noextraslatin{\babellatin at usevtrue}%
-  \babellatin at test@classic at patterns
+  \babellatin at test@classical at patterns
   \let\l at latin\l at classiclatin
-  \StartBabelCommands*{latin}{}%
-  \SetCase{\uccode `u=`V}{\lccode `V=`u}%
-  \EndBabelCommands
+  \DeclareUppercaseMapping[la]{`u}{V}%
+  \DeclareLowercaseMapping[la]{`V}{u}%
 }%
 \bbl at declare@ttribute{latin}{medieval}{%
-  \babellatin at outdated@modifier{medieval}%
+  \babellatin at outdated@modifier{medieval}{medievallatin}%
   \addto\extraslatin{%
     \babellatin at usevfalse
     \def\prefacename{Pr\ae fatio}%
@@ -716,12 +756,11 @@
   \addto\noextraslatin{%
     \babellatin at usevtrue
   }%
-  \StartBabelCommands*{latin}{}%
-  \SetCase{\uccode `u=`V}{\lccode `V=`u}%
-  \EndBabelCommands%
+  \DeclareUppercaseMapping[la]{`u}{V}%
+  \DeclareLowercaseMapping[la]{`V}{u}%
 }%
 \bbl at declare@ttribute{latin}{ecclesiastic}{%
-  \babellatin at outdated@modifier{ecclesiastic}%
+  \babellatin at outdated@modifier{ecclesiastic}{ecclesiasticallatin}%
   \babellatin at prepare@punctuation at spacing
   \babellatin at ecclesiastic@outdated at commands
   \initiate at active@char{'}%

Modified: trunk/Master/texmf-dist/tex/generic/babel-latin/medievallatin.ldf
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel-latin/medievallatin.ldf	2025-04-30 19:32:31 UTC (rev 75069)
+++ trunk/Master/texmf-dist/tex/generic/babel-latin/medievallatin.ldf	2025-04-30 19:32:51 UTC (rev 75070)
@@ -8,7 +8,7 @@
 %% 
 %% Copyright (C) 1989-2008 by Johannes L. Braams
 %% Copyright (C) 2009-2020 by Claudio Beccari
-%% Copyright (C) 2021      by Keno Wehr
+%% Copyright (C) 2021-2025 by Keno Wehr
 %% All rights reserved.
 %% 
 %% This file is part of the babel-latin package.



More information about the tex-live-commits mailing list.