summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/polyglossia
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-11-16 03:00:48 +0000
committerNorbert Preining <norbert@preining.info>2019-11-16 03:00:48 +0000
commitbad81a00a2943d1fb7ff2de3d0ae48c049dac302 (patch)
treeca23b6ca941037d20dce638d0859309f3c48c66d /macros/latex/contrib/polyglossia
parent0e223aaa93c5ee0c0e937c23f75535269324d217 (diff)
CTAN sync 201911160300
Diffstat (limited to 'macros/latex/contrib/polyglossia')
-rw-r--r--macros/latex/contrib/polyglossia/README22
-rw-r--r--macros/latex/contrib/polyglossia/polyglossia.dtx5011
-rw-r--r--macros/latex/contrib/polyglossia/polyglossia.ins32
-rw-r--r--macros/latex/contrib/polyglossia/polyglossia.pdfbin184844 -> 224709 bytes
4 files changed, 3981 insertions, 1084 deletions
diff --git a/macros/latex/contrib/polyglossia/README b/macros/latex/contrib/polyglossia/README
index 531780f8cb..18b2c4746a 100644
--- a/macros/latex/contrib/polyglossia/README
+++ b/macros/latex/contrib/polyglossia/README
@@ -1,7 +1,7 @@
¦----------------------------------------------¦
¦ ¦
- ¦ THE POLYGLOSSIA PACKAGE v1.45 ¦
+ ¦ THE POLYGLOSSIA PACKAGE v1.46 ¦
¦ ¦
¦ Modern multilingual typesetting ¦
¦ with XeLaTeX and LuaLaTeX ¦
@@ -10,8 +10,8 @@
This package provides an alternative to Babel for users of XeLaTeX and LuaLaTeX
(with a few languages incompletely supported for the latter). This version
-includes support for 75 different languages, some of which in different regional,
-national or scriptal varieties.
+includes support for 79 different languages, some of which in different
+regional or national varieties, or using a different writing system.
Polyglossia makes it possible to automate the following tasks:
@@ -34,20 +34,16 @@ Polyglossia makes it possible to automate the following tasks:
LICENSE
-Copyright (c) 2008-2010 François Charette, 2013 Élie Roux, 2011-2019 Arthur Reutenauer
+Copyright (c) 2008-2010 François Charette, 2013 Élie Roux, 2011-2019 Arthur Reutenauer,
+Copyright (c) 2019 Bastien Roucariès, 2019 Jürgen Spitzmüller
-Polyglossia is placed under the terms of the LaTeX Project Public Licence
-(LPPL), either version 1.3, or, at your option, any later version. See
-LICENCE.txt for the text of the LPPL v1.3c, or
-http://www.latex-project.org/lppl.txt for the latest version.
-
-This work has the LPPL maintenance status ‘maintained’. The current maintainer is
-Arthur Reutenauer.
+Except where otherwise noted, Polyglossia is placed under the terms of the MIT licence
+(https://opensource.org/licenses/MIT).
BUGS
If you run into a bug, or suspect you do, or you have a request or comment, please
use the GitHub issue tracker: http://github.com/reutenauer/polyglossia/issues
-This is more efficient than contacting me by email as it allows me to track the
-issues and follow progress.
+This is more efficient than contacting the maintainer by email as it allows me
+to track the issues and follow progress.
diff --git a/macros/latex/contrib/polyglossia/polyglossia.dtx b/macros/latex/contrib/polyglossia/polyglossia.dtx
index d9a4151831..6c669bbd57 100644
--- a/macros/latex/contrib/polyglossia/polyglossia.dtx
+++ b/macros/latex/contrib/polyglossia/polyglossia.dtx
@@ -11,7 +11,7 @@
¦----------------------------------------------¦
¦ ¦
- ¦ THE POLYGLOSSIA PACKAGE v1.45 ¦
+ ¦ THE POLYGLOSSIA PACKAGE v1.46 ¦
¦ ¦
¦ Modern multilingual typesetting ¦
¦ with XeLaTeX and LuaLaTeX ¦
@@ -20,8 +20,8 @@
This package provides an alternative to Babel for users of XeLaTeX and LuaLaTeX
(with a few languages incompletely supported for the latter). This version
-includes support for 75 different languages, some of which in different regional,
-national or scriptal varieties.
+includes support for 79 different languages, some of which in different
+regional or national varieties, or using a different writing system.
Polyglossia makes it possible to automate the following tasks:
@@ -44,23 +44,19 @@ Polyglossia makes it possible to automate the following tasks:
LICENSE
-Copyright (c) 2008-2010 François Charette, 2013 Élie Roux, 2011-2019 Arthur Reutenauer
+Copyright (c) 2008-2010 François Charette, 2013 Élie Roux, 2011-2019 Arthur Reutenauer,
+Copyright (c) 2019 Bastien Roucariès, 2019 Jürgen Spitzmüller
-Polyglossia is placed under the terms of the LaTeX Project Public Licence
-(LPPL), either version 1.3, or, at your option, any later version. See
-LICENCE.txt for the text of the LPPL v1.3c, or
-http://www.latex-project.org/lppl.txt for the latest version.
-
-This work has the LPPL maintenance status ‘maintained’. The current maintainer is
-Arthur Reutenauer.
+Except where otherwise noted, Polyglossia is placed under the terms of the MIT licence
+(https://opensource.org/licenses/MIT).
BUGS
If you run into a bug, or suspect you do, or you have a request or comment, please
use the GitHub issue tracker: http://github.com/reutenauer/polyglossia/issues
-This is more efficient than contacting me by email as it allows me to track the
-issues and follow progress.
+This is more efficient than contacting the maintainer by email as it allows me
+to track the issues and follow progress.
%</README>
%<*internal>
\fi
@@ -104,18 +100,29 @@ issues and follow progress.
\endpostamble
\let\MetaPrefix\DoubleperCent
\askforoverwritefalse
+\generate{\file{gloss-acadien.ldf}{\from{polyglossia.dtx}{gloss-acadien.ldf}}}
+\generate{\file{gloss-afrikaans.ldf}{\from{polyglossia.dtx}{gloss-afrikaans.ldf}}}
\generate{\file{gloss-albanian.ldf}{\from{polyglossia.dtx}{gloss-albanian.ldf}}}
+\generate{\file{gloss-american.ldf}{\from{polyglossia.dtx}{gloss-american.ldf}}}
\generate{\file{gloss-amharic.ldf}{\from{polyglossia.dtx}{gloss-amharic.ldf}}}
\generate{\file{gloss-arabic.ldf}{\from{polyglossia.dtx}{gloss-arabic.ldf}}}
\generate{\file{gloss-armenian.ldf}{\from{polyglossia.dtx}{gloss-armenian.ldf}}}
\generate{\file{gloss-asturian.ldf}{\from{polyglossia.dtx}{gloss-asturian.ldf}}}
+\generate{\file{gloss-australian.ldf}{\from{polyglossia.dtx}{gloss-australian.ldf}}}
+\generate{\file{gloss-austrian.ldf}{\from{polyglossia.dtx}{gloss-austrian.ldf}}}
+\generate{\file{gloss-bahasa.ldf}{\from{polyglossia.dtx}{gloss-bahasa.ldf}}}
\generate{\file{gloss-bahasai.ldf}{\from{polyglossia.dtx}{gloss-bahasai.ldf}}}
\generate{\file{gloss-bahasam.ldf}{\from{polyglossia.dtx}{gloss-bahasam.ldf}}}
\generate{\file{gloss-basque.ldf}{\from{polyglossia.dtx}{gloss-basque.ldf}}}
+\generate{\file{gloss-belarusian.ldf}{\from{polyglossia.dtx}{gloss-belarusian.ldf}}}
\generate{\file{gloss-bengali.ldf}{\from{polyglossia.dtx}{gloss-bengali.ldf}}}
+\generate{\file{gloss-bosnian.ldf}{\from{polyglossia.dtx}{gloss-bosnian.ldf}}}
\generate{\file{gloss-brazil.ldf}{\from{polyglossia.dtx}{gloss-brazil.ldf}}}
\generate{\file{gloss-breton.ldf}{\from{polyglossia.dtx}{gloss-breton.ldf}}}
+\generate{\file{gloss-british.ldf}{\from{polyglossia.dtx}{gloss-british.ldf}}}
\generate{\file{gloss-bulgarian.ldf}{\from{polyglossia.dtx}{gloss-bulgarian.ldf}}}
+\generate{\file{gloss-canadian.ldf}{\from{polyglossia.dtx}{gloss-canadian.ldf}}}
+\generate{\file{gloss-canadien.ldf}{\from{polyglossia.dtx}{gloss-canadien.ldf}}}
\generate{\file{gloss-catalan.ldf}{\from{polyglossia.dtx}{gloss-catalan.ldf}}}
\generate{\file{gloss-coptic.ldf}{\from{polyglossia.dtx}{gloss-coptic.ldf}}}
\generate{\file{gloss-croatian.ldf}{\from{polyglossia.dtx}{gloss-croatian.ldf}}}
@@ -133,7 +140,9 @@ issues and follow progress.
\generate{\file{gloss-friulian.ldf}{\from{polyglossia.dtx}{gloss-friulian.ldf}}}
\generate{\file{gloss-gaelic.ldf}{\from{polyglossia.dtx}{gloss-gaelic.ldf}}}
\generate{\file{gloss-galician.ldf}{\from{polyglossia.dtx}{gloss-galician.ldf}}}
+\generate{\file{gloss-georgian.ldf}{\from{polyglossia.dtx}{gloss-georgian.ldf}}}
\generate{\file{gloss-german.ldf}{\from{polyglossia.dtx}{gloss-german.ldf}}}
+\generate{\file{gloss-germanb.ldf}{\from{polyglossia.dtx}{gloss-germanb.ldf}}}
\generate{\file{gloss-greek.ldf}{\from{polyglossia.dtx}{gloss-greek.ldf}}}
\generate{\file{gloss-hebrew.ldf}{\from{polyglossia.dtx}{gloss-hebrew.ldf}}}
\generate{\file{gloss-hindi.ldf}{\from{polyglossia.dtx}{gloss-hindi.ldf}}}
@@ -150,8 +159,12 @@ issues and follow progress.
\generate{\file{gloss-lao.ldf}{\from{polyglossia.dtx}{gloss-lao.ldf}}}
\generate{\file{gloss-latex.ldf}{\from{polyglossia.dtx}{gloss-latex.ldf}}}
\generate{\file{gloss-latin.ldf}{\from{polyglossia.dtx}{gloss-latin.ldf}}}
+\generate{\file{gloss-latinclassic.ldf}{\from{polyglossia.dtx}{gloss-latinclassic.ldf}}}
+\generate{\file{gloss-latinecclesiastic.ldf}{\from{polyglossia.dtx}{gloss-latinecclesiastic.ldf}}}
+\generate{\file{gloss-latinmedieval.ldf}{\from{polyglossia.dtx}{gloss-latinmedieval.ldf}}}
\generate{\file{gloss-latvian.ldf}{\from{polyglossia.dtx}{gloss-latvian.ldf}}}
\generate{\file{gloss-lithuanian.ldf}{\from{polyglossia.dtx}{gloss-lithuanian.ldf}}}
+\generate{\file{gloss-lowersorbian.ldf}{\from{polyglossia.dtx}{gloss-lowersorbian.ldf}}}
\generate{\file{gloss-lsorbian.ldf}{\from{polyglossia.dtx}{gloss-lsorbian.ldf}}}
\generate{\file{gloss-macedonian.ldf}{\from{polyglossia.dtx}{gloss-macedonian.ldf}}}
\generate{\file{gloss-magyar.ldf}{\from{polyglossia.dtx}{gloss-magyar.ldf}}}
@@ -159,14 +172,19 @@ issues and follow progress.
\generate{\file{gloss-malayalam.ldf}{\from{polyglossia.dtx}{gloss-malayalam.ldf}}}
\generate{\file{gloss-marathi.ldf}{\from{polyglossia.dtx}{gloss-marathi.ldf}}}
\generate{\file{gloss-mongolian.ldf}{\from{polyglossia.dtx}{gloss-mongolian.ldf}}}
+\generate{\file{gloss-naustrian.ldf}{\from{polyglossia.dtx}{gloss-naustrian.ldf}}}
+\generate{\file{gloss-newzealand.ldf}{\from{polyglossia.dtx}{gloss-newzealand.ldf}}}
+\generate{\file{gloss-ngerman.ldf}{\from{polyglossia.dtx}{gloss-ngerman.ldf}}}
\generate{\file{gloss-nko.ldf}{\from{polyglossia.dtx}{gloss-nko.ldf}}}
\generate{\file{gloss-norsk.ldf}{\from{polyglossia.dtx}{gloss-norsk.ldf}}}
\generate{\file{gloss-norwegian.ldf}{\from{polyglossia.dtx}{gloss-norwegian.ldf}}}
+\generate{\file{gloss-nswissgerman.ldf}{\from{polyglossia.dtx}{gloss-nswissgerman.ldf}}}
\generate{\file{gloss-nynorsk.ldf}{\from{polyglossia.dtx}{gloss-nynorsk.ldf}}}
\generate{\file{gloss-occitan.ldf}{\from{polyglossia.dtx}{gloss-occitan.ldf}}}
\generate{\file{gloss-persian.ldf}{\from{polyglossia.dtx}{gloss-persian.ldf}}}
\generate{\file{gloss-piedmontese.ldf}{\from{polyglossia.dtx}{gloss-piedmontese.ldf}}}
\generate{\file{gloss-polish.ldf}{\from{polyglossia.dtx}{gloss-polish.ldf}}}
+\generate{\file{gloss-polutonikogreek.ldf}{\from{polyglossia.dtx}{gloss-polutonikogreek.ldf}}}
\generate{\file{gloss-portuges.ldf}{\from{polyglossia.dtx}{gloss-portuges.ldf}}}
\generate{\file{gloss-portuguese.ldf}{\from{polyglossia.dtx}{gloss-portuguese.ldf}}}
\generate{\file{gloss-romanian.ldf}{\from{polyglossia.dtx}{gloss-romanian.ldf}}}
@@ -177,11 +195,15 @@ issues and follow progress.
\generate{\file{gloss-sanskrit.ldf}{\from{polyglossia.dtx}{gloss-sanskrit.ldf}}}
\generate{\file{gloss-scottish.ldf}{\from{polyglossia.dtx}{gloss-scottish.ldf}}}
\generate{\file{gloss-serbian.ldf}{\from{polyglossia.dtx}{gloss-serbian.ldf}}}
+\generate{\file{gloss-serbianc.ldf}{\from{polyglossia.dtx}{gloss-serbianc.ldf}}}
\generate{\file{gloss-slovak.ldf}{\from{polyglossia.dtx}{gloss-slovak.ldf}}}
+\generate{\file{gloss-slovene.ldf}{\from{polyglossia.dtx}{gloss-slovene.ldf}}}
\generate{\file{gloss-slovenian.ldf}{\from{polyglossia.dtx}{gloss-slovenian.ldf}}}
\generate{\file{gloss-sorbian.ldf}{\from{polyglossia.dtx}{gloss-sorbian.ldf}}}
\generate{\file{gloss-spanish.ldf}{\from{polyglossia.dtx}{gloss-spanish.ldf}}}
+\generate{\file{gloss-spanishmx.ldf}{\from{polyglossia.dtx}{gloss-spanishmx.ldf}}}
\generate{\file{gloss-swedish.ldf}{\from{polyglossia.dtx}{gloss-swedish.ldf}}}
+\generate{\file{gloss-swissgerman.ldf}{\from{polyglossia.dtx}{gloss-swissgerman.ldf}}}
\generate{\file{gloss-syriac.ldf}{\from{polyglossia.dtx}{gloss-syriac.ldf}}}
\generate{\file{gloss-tamil.ldf}{\from{polyglossia.dtx}{gloss-tamil.ldf}}}
\generate{\file{gloss-telugu.ldf}{\from{polyglossia.dtx}{gloss-telugu.ldf}}}
@@ -190,6 +212,7 @@ issues and follow progress.
\generate{\file{gloss-turkish.ldf}{\from{polyglossia.dtx}{gloss-turkish.ldf}}}
\generate{\file{gloss-turkmen.ldf}{\from{polyglossia.dtx}{gloss-turkmen.ldf}}}
\generate{\file{gloss-ukrainian.ldf}{\from{polyglossia.dtx}{gloss-ukrainian.ldf}}}
+\generate{\file{gloss-uppersorbian.ldf}{\from{polyglossia.dtx}{gloss-uppersorbian.ldf}}}
\generate{\file{gloss-urdu.ldf}{\from{polyglossia.dtx}{gloss-urdu.ldf}}}
\generate{\file{gloss-usorbian.ldf}{\from{polyglossia.dtx}{gloss-usorbian.ldf}}}
\generate{\file{gloss-vietnamese.ldf}{\from{polyglossia.dtx}{gloss-vietnamese.ldf}}}
@@ -200,8 +223,11 @@ issues and follow progress.
\generate{\file{farsidigits.map}{\from{polyglossia.dtx}{farsidigits.map}}}
\generate{\file{thaidigits.map}{\from{polyglossia.dtx}{thaidigits.map}}}
\def\MetaPrefix{-- }
-\generate{\file{polyglossia-frpt.lua}{\from{polyglossia.dtx}{polyglossia-frpt.lua}}}
+\generate{\file{polyglossia-french.lua}{\from{polyglossia.dtx}{polyglossia-french.lua}}}
\generate{\file{polyglossia-korean.lua}{\from{polyglossia.dtx}{polyglossia-korean.lua}}}
+\generate{\file{polyglossia-latin.lua}{\from{polyglossia.dtx}{polyglossia-latin.lua}}}
+\generate{\file{polyglossia-punct.lua}{\from{polyglossia.dtx}{polyglossia-punct.lua}}}
+\generate{\file{polyglossia-sanskrit.lua}{\from{polyglossia.dtx}{polyglossia-sanskrit.lua}}}
\generate{\file{polyglossia-tibt.lua}{\from{polyglossia.dtx}{polyglossia-tibt.lua}}}
\generate{\file{polyglossia.lua}{\from{polyglossia.dtx}{polyglossia.lua}}}
\let\MetaPrefix\DoubleperCent
@@ -225,6 +251,7 @@ issues and follow progress.
\usepackage{color}
\usepackage{xspace,fancyvrb,booktabs}
\usepackage[neverdecrease]{paralist}
+\usepackage[format=hang,labelfont=bf,labelsep=period]{caption}
\definecolor{myblue}{rgb}{0.02,0.04,0.48}
\definecolor{lightblue}{rgb}{0.61,.8,.8}
\definecolor{myred}{rgb}{0.65,0.04,0.07}
@@ -247,7 +274,7 @@ issues and follow progress.
\usepackage[babelshorthands]{polyglossia}
\usepackage{farsical}
\setmainlanguage[variant=british,ordinalmonthday=false]{english}
-\setotherlanguages{arabic,armenian,hebrew,syriac,greek,russian,serbian,catalan}
+\setotherlanguages{arabic,armenian,hebrew,syriac,greek,russian,serbian,catalan,georgian}
\usepackage[protrusion]{microtype}
\newcommand*\Cmd[1]{\cmd{#1}\DescribeMacro{#1}\xspace}
\newcommand*\pkg[1]{\textsf{\color{myblue}#1}}
@@ -298,6 +325,7 @@ issues and follow progress.
\newfontfamily\armenianfont[Script=Armenian]{DejaVu Sans}
\newfontfamily\syriacfont[Script=Syriac]{Serto Jerusalem}
\newfontfamily\hebrewfont[Script=Hebrew]{Ezra SIL}
+\newfontfamily\georgianfont{DejaVu Serif}
\linespread{1.05}
\frenchspacing
@@ -334,6 +362,8 @@ issues and follow progress.
% \maketitle
% \tableofcontents
%
+% \condbreak{4\baselineskip}
+%
%
% \DeleteShortVerb{\|}
% \MakeShortVerb{\¦}
@@ -364,8 +394,8 @@ issues and follow progress.
% calendars are supported).
% \item For languages that have their own numbering system, modifying the formatting
% of numbers appropriately (this also includes redefining the alphabetic sequence
-% for non-Latin alphabets).\footnote{ %
-% For the Arabic script this is now done by the bundled package \pkg{arabicnumbers}.}
+% for non-Latin alphabets).\footnote{%
+% This is done by bundled sub-packages such as \pkg{arabicnumbers}.}
% \item Ensuring proper directionality if the document contains languages
% that are written from right to left (via the package \pkg{bidi},
% available separately).
@@ -414,48 +444,47 @@ issues and follow progress.
% \subsection{Supported languages}
%
% Table~\ref{tab:lang} lists all languages currently supported.
-% Those in red have specific options and/or commands
+% Those in \TR{red} have specific options and/or commands
% that are explained in section \ref{specific} below.
%
% \begin{table}[ht]\centering
-% \label{tab:lang}
-% ^^A Produced with tools/insert-language-list.rb -- JS, 2019-10-18
-% ^^A Edited by hand -- JS, 2019-10-18
+% \caption{\label{tab:lang}Languages currently supported in \pkg{polyglossia}}
+% ^^A Produced with tools/insert-language-list.rb -- JS, 2019-11-01
+% ^^A Edited by hand -- JS, 2019-11-01
% \begin{tabular}{lllll}
% \toprule
-% albanian & \TX{dutch} & interlingua & \TX{mongolian} & \TX{slovenian}\\
-% amharic & \TX{english} & \TX{italian} & nko & \TX{sorbian}\\
-% \TX{arabic} & \TX{esperanto} & japanese & \TX{norwegian} & spanish\\
-% \TX{armenian}& estonian & kannada & occitan & swedish\\
-% asturian & \TX{finnish} & khmer & \TX{persian} & \TX{syriac}\\
-% basque & \TX{french} & \TX{korean} & piedmontese & tamil\\
-% \TX{bengali} & friulian & \TX{kurdish} & polish & telugu\\
-% breton & \TX{gaelic} & \TX{lao} & \TX{portuguese} & \TX{thai}\\
-% bulgarian & galician & \TX{latin} & romanian & \TX{tibetan}\\
-% \TX{catalan} & \TX{german} & latvian & romansh & turkish\\
-% coptic & \TX{greek} & lithuanian & \TX{russian} & turkmen\\
-% croatian & \TX{hebrew} & macedonian & \TX{sami} & \TX{ukrainian}\\
-% \TX{czech} & \TX{hindi} & \TX{malay} & \TX{sanskrit} & urdu\\
-% danish & \TX{hungarian} & malayalam & \TX{serbian} & vietnamese\\
-% divehi & icelandic & marathi & slovak & \TX{welsh}\\
+% \TX{afrikaans} & danish & \TX{hungarian} & marathi & \TX{slovenian} \\
+% albanian & divehi & icelandic & \TX{mongolian} & \TX{sorbian} \\
+% amharic & \TX{dutch} & interlingua & nko & \TX{spanish} \\
+% \TX{arabic} & \TX{english} & \TX{italian} & \TX{norwegian} & swedish \\
+% \TX{armenian} & \TX{esperanto} & japanese & occitan & \TX{syriac} \\
+% asturian & estonian & kannada & \TX{persian} & tamil \\
+% basque & \TX{finnish} & khmer & piedmontese & telugu \\
+% \TX{belarusian} & \TX{french} & \TX{korean} & polish & \TX{thai} \\
+% \TX{bengali} & friulian & \TX{kurdish} & \TX{portuguese} & \TX{tibetan} \\
+% bosnian & \TX{gaelic} & \TX{lao} & romanian & turkish \\
+% breton & galician & \TX{latin} & romansh & turkmen \\
+% bulgarian & \TX{georgian} & latvian & \TX{russian} & \TX{ukrainian} \\
+% \TX{catalan} & \TX{german} & lithuanian & \TX{sami} & urdu \\
+% coptic & \TX{greek} & macedonian & \TX{sanskrit} & vietnamese \\
+% croatian & \TX{hebrew} & \TX{malay} & \TX{serbian} & \TX{welsh} \\
+% \TX{czech} & \TX{hindi} & malayalam & \TX{slovak} & \\
% \bottomrule
% \end{tabular}
%
-%
-% \caption{Languages currently supported in \pkg{polyglossia}}
% \end{table}
%
% \paragraph{Version Notes} The support for Amharic\new{v1.0.1} should be considered an experimental attempt to
-% port the package \pkg{ethiop}.\footnote{Feedback is welcome.}
+% port the package \pkg{ethiop}; feedback is welcome.
% Version 1.1.1\new{v1.1.1} added support for Asturian, %\footnote{ Provided by Kevin Godby and Xuacu Saturio.},
% Lithuanian, %\footnote{ Provided by Kevin Godby and Paulius Sladkevičius.},
% and Urdu. %\footnote{ Provided by Kamal Abdali.}
% ^^A
-% Version 1.2\new{v1.2.0} adds support for Armenian, Occitan, Bengali,
+% Version 1.2\new{v1.2.0} introduced Armenian, Occitan, Bengali,
% Lao, Malayalam, Marathi, Tamil, Telugu, and Turkmen.\footnote{%
% See acknowledgements at the end for due credit to the various contributors.}
-% Version 1.43\new{v1.43} silently introduced basic support for Japanese. This
-% is considered experimental, and feedback is appreciated.
+% Version 1.43\new{v1.43} brought basic support for Japanese (this
+% is considered experimental, feedback is appreciated).
% In version 1.45\new{v1.45}, support for Kurdish and Mongolian as well as some new
% variants (Canadian French and English) have been added. Furthermore, for consistency reasons, some language have
% been renamed (\emph{farsi}\textrightarrow\emph{persian}, \emph{friulan}\textrightarrow\emph{friulian},
@@ -465,67 +494,83 @@ issues and follow progress.
% \emph{lsorbian}\slash\emph{usorbian}\textrightarrow\emph{sorbian},
% \emph{irish}\slash\emph{scottish}\textrightarrow\emph{gaelic},
% \emph{norsk}\slash\emph{nynorsk}\textrightarrow\emph{norwegian}). The old names are still supported for backwards
-% compatibility reasons, but they might not give access to newer language features.
+% compatibility reasons.
+% Version 1.46\new{v1.46} introduces support for Afrikaans, Belarusian, Bosnian and Georgian.
%
%
-% \subsection{Relation to Babel languages}
+% \subsection{Relation to and use of Babel language names}
%
% If you are familiar with the \pkg{babel} package, you will note that \pkg{polyglossia}'s language naming
% slightly differs. Whereas \pkg{babel} has a unique name for each language variety (\eg\emph{american} and \emph{british}),
-% \pkg{polyglossia} differentiates language varieties via language options.
+% \pkg{polyglossia} differentiates language varieties via language options (\eg \emph{english}, ¦variant=american¦).
%
-% Furthermore, \pkg{babel} uses sometimes abbreviations for language names (\eg\emph{bahasam} for Bahasa Malayu) as well
+% Furthermore, \pkg{babel} sometimes uses abbreviated language names (\eg\emph{bahasam} for Bahasa Malayu) as well
% as endonyms, \ie language names coming from the designated languages (such as \emph{bahasa}, \emph{canadien} or \emph{magyar}).
% As opposed to this, \pkg{polyglossia} always uses spelled-out (lower-cased) English language names.
-%
-% Table~\ref{tab:bbllang} lists the language names that differ in both packages. \pkg{Babel} names marked in red can also be used
-% in \pkg{polyglossia} as an alias.\footnote{This is for historical reasons, since earlier versions of \pkg{polyglossia} used
-% those names as well. Note, however, that you need to use the matching language switching commands, then, as
-% well, \eg \cmd\textportuges\ with \emph{portuges} (rather than \cmd\textportuguese).}
+% Please refer to table~\ref{tab:bbllang} for the differing language names in both packages.
%
% \begin{table}
-% \label{tab:bbllang}
+% \caption{\label{tab:bbllang}Babel-polyglossia language name matching}
+%
+% \begin{minipage}[t]{1\columnwidth}
+% \small\centering
% \begin{tabular}{lll}
% \toprule
% \textbf{Babel name} & \textbf{Polyglossia name} & \textbf{Polyglossia options}\tabularnewline
% \midrule
-% acadien & french & variant=acadian \\
-% american & english & \emph{(default)} \\
-% australian & english & variant=australian \\
-% austrian & german & variant=austrian, spelling=old \\
-% bahasa & malay & \emph{(default)} \\
-% \TR{bahasam} & malay & variant=malaysian \\
-% \TR{brazil} & portuguese & variant=brazilian \\
-% british & english & variant=british \\
-% canadian & english & variant=canadian \\
-% canadien & french & variant=canadian \\
-% \TR{farsi} & persian & \\
-% \TR{friulan} & friulian & \\
-% german & german & spelling=old \\
-% \TR{irish} & gaelic & variant=irish \\
-% kurmanji & kurdish & variant=kurmanji \\
-% lowersorbian & sorbian & variant=lower \\
-% \TR{magyar} & hungarian & \\
-% naustrian & german & variant=austrian \\
-% newzealand & english & variant=newzealand \\
-% ngerman & german & \emph{(default)} \\
-% \TR{norsk} & norwegian & variant=bokmal \\
-% nswissgerman & german & variant=swiss \\
-% \TR{nynorsk} & norwegian & \emph{(default)} \\
-% polutonikogreek & greek & variant=polytonic \\
-% \TR{portuges} & portuguese & \emph{(default)} \\
-% \TR{samin} & sami & \\
-% \TR{scottish} & gaelic & variant=scottish \\
-% serbianc & serbian & script=Cyrillic \\
-% slovene & slovenian & \\
-% swissgerman & german & variant=swiss, spelling=old \\
-% uppersorbian & sorbian & variant=upper \\
+% acadien & french & variant=acadian \\
+% american & english & variant=american [\emph{default}] \\
+% australian & english & variant=australian \\
+% austrian & german & variant=austrian, spelling=old \\
+% bahasa & malay & variant=indonesian [\emph{default}] \\
+% bahasam & malay & variant=malaysian \\
+% brazil & portuguese & variant=brazilian \\
+% british & english & variant=british \\
+% canadian & english & variant=canadian \\
+% canadien & french & variant=canadian \\
+% farsi & persian & \\
+% friulan & friulian & \\
+% german\footnote{Due to the name conflict only available in \pkg{polyglossia} as \emph{germanb} (which is a \pkg{babel} synonym).}
+% & german & spelling=old \\
+% irish & gaelic & variant=irish [\emph{default}] \\
+% kurmanji & kurdish & variant=kurmanji \\
+% latin.classic\footnote{Available in \pkg{polyglossia} as \emph{latinclassic} (as dots are invalid in command names).}
+% & latin & variant=classic \\
+% latin.ecclesiastic\footnote{Available in \pkg{polyglossia} as \emph{latinecclesiastic} (as dots are invalid in command names).}
+% & latin & variant=ecclesiastic \\
+% latin.medieval\footnote{Available in \pkg{polyglossia} as \emph{latinmedieval} (as dots are invalid in command names).}
+% & latin & variant=medieval \\
+% lowersorbian & sorbian & variant=lower \\
+% magyar & hungarian & \\
+% naustrian & german & variant=austrian \\
+% newzealand & english & variant=newzealand \\
+% ngerman & german & variant=german [\emph{default}] \\
+% norsk & norwegian & variant=bokmal \\
+% nswissgerman & german & variant=swiss \\
+% nynorsk & norwegian & variant=nynorsk [\emph{default}] \\
+% polutonikogreek & greek & variant=polytonic \\
+% portuges & portuguese & variant=portuguese [\emph{default}] \\
+% samin & sami & \\
+% scottish & gaelic & variant=scottish \\
+% serbianc & serbian & script=Cyrillic \\
+% slovene & slovenian & \\
+% spanishmx & spanish & variant=mexican \\
+% swissgerman & german & variant=swiss, spelling=old \\
+% uppersorbian & sorbian & variant=upper \\
% \bottomrule
% \end{tabular}
+% \end{minipage}
%
-% \caption{Babel-polyglossia language name matching}
% \end{table}
%
+% For convenience reasons, \pkg{polyglossia} also supports the use of babel names\new{v1.46} (for the few justified
+% exceptions, please refer to the notes in table~\ref{tab:bbllang}).
+% The babel names listed in table~\ref{tab:bbllang} can be used instead of the corresponding polyglossia
+% name\slash options in \cmd\setdefaultlanguage\ and \cmd\setotherlanguage\ as well as in the \pkg{polyglossia} and
+% \pkg{babel} language switching commands\slash environments documented in section~\ref{sec:langcmds} and
+% \ref{sec:babelcmds} (\eg \cmd\textaustrian\ is synonymous to \cmd{\textgerman[variant=austrian,spelling=old]}).
+% However, unless you have special reasons, we strongly encourage you to use the \pkg{polyglossia} names.
+%
%
% \subsection{Global options}
%
@@ -533,65 +578,75 @@ issues and follow progress.
%
% \begin{itemize}
% \item \TB{babelshorthands}\new{v1.1.1} globally activates \pkg{babel}
-% shorthands whenever available. Currently shorthands are implemented for
-% Catalan, Czech, Dutch, Finnish, German, Italian, Mongolian, and Russian.
-% Please refer to the respective language descriptions (sec.~\ref{specific}) for details.
-%
-% \item \TB{localmarks} redefines the internal \LaTeX\ macros \cmd\markboth\ and \cmd\markright.
-% In earlier versions of \pkg{polyglossia},\new{v1.2.0} this option was set by default, but we
-% now realize that it causes more problems than it helps, so it is now off by default.
-% For backwards-compatibility, the option \TB{nolocalmarks} which used to switch off the previous
-% default, and now does nothing, is still available.
-%
-% \item \TB{quiet} turns off most info messages and some of the warnings issued by \LaTeX,
-% \pkg{fontspec} and \pkg{polyglossia}.
+% shorthands whenever available. Currently shorthands are implemented for
+% Afrikaans, Belarusian, Catalan, Czech, Dutch, Finnish, Georgian, German,
+% Italian, Latin, Mongolian, Russian, and Slovak. Please refer to the respective
+% language descriptions (sec.~\ref{specific}) for details.
+%
+% \item \TB{localmarks} redefines the internal \LaTeX\ macros \cmd\markboth\ and
+% \cmd\markright. In earlier versions of \pkg{polyglossia},\new{v1.2.0} this
+% option was set by default, but we now realize that it causes more problems
+% than it helps, so it is now off by default. For backwards-compatibility, the
+% option \TB{nolocalmarks} which used to switch off the previous default, and
+% now does nothing, is still available.
+%
+% \item \TB{quiet} turns off most info messages and some of the warnings issued
+% by \LaTeX, \pkg{fontspec} and \pkg{polyglossia}.
% \end{itemize}
%
% \section{Language-switching commands}\label{languageswitching}
%
-% \subsection{Recommended commands}
+% \subsection{Recommended commands}\label{sec:langcmds}
% For each activated language the command
% \cmd{\text⟨lang⟩[⟨options⟩]\{…\}} \DescribeMacro{\text⟨lang⟩}
+% (as well as the synonymous \DescribeMacro{\textlang}%
+% \cmd{\textlang[⟨options⟩]\{⟨lang⟩\}\{…\}}\new{1.46})
% becomes available for short insertions of text in that language.
-% For example ¦\textrussian{\today}¦ yields \textrussian{\today}
-% This command switches to the correct hyphenation patterns, it activates
+% For example ¦\textrussian{\today}¦ and ¦\textlang{russian}{\today}¦ yield \textrussian{\today}
+% The commands switch to the correct hyphenation patterns, they activate
% some extra features for the selected language (such as extra spacing before
-% punctuation in French), and it translates the date when using ¦\today¦.
-% It does not, however, translate so-called \textit{caption strings}, i.\,e.
+% punctuation in French), and they translate the date when using ¦\today¦.
+% They do not, however, translate so-called \textit{caption strings},\ie
% ``chapter'', ``figure'' etc., to the local language (these remain in the main
% language).
%
% The\DescribeEnv{⟨lang⟩}\ environment ¦⟨lang⟩¦, which is also available for any activated language,
-% is meant for longer passages of text. It behaves slightly different than the \cmd{\text⟨lang⟩\{…\}}
-% command: It does everything the latter does, but additionally, the caption strings are translated
-% as well, and the language is also passed to auxiliary files, the table of contents and the lists of
-% figures/tables.
-% Like the command, the environment provides the possibility of setting language options locally.
+% is meant for longer passages of text. It behaves slightly different than the \cmd{\text⟨lang⟩} and
+% \cmd\textlang\ commands: It does everything the latter do, but additionally, the caption strings
+% are translated as well, and the language is also passed to auxiliary files, the table of contents
+% and the lists of figures/tables.
+% Like the commands, the environment provides the possibility of setting language options locally.
% For instance the following allows us to quote the beginning
% of Homer’s \textit{Iliad}:
%
% \begin{Verbatim}[formatcom=\color{myblue}]
-% \begin{greek}[variant=ancient]
-% μῆνιν ἄειδε θεὰ Πηληϊάδεω Ἀχιλῆος οὐλομένην, ἣ μυρί' Ἀχαιοῖς ἄλγε'
-% ἔθηκε, πολλὰς δ' ἰφθίμους ψυχὰς Ἄϊδι προί̈αψεν ἡρώων, αὐτοὺς δὲ ἑλώρια
-% τεῦχε κύνεσσιν οἰωνοῖσί τε πᾶσι, Διὸς δ' ἐτελείετο βουλή, ἐξ οὗ δὴ τὰ
-% πρῶτα διαστήτην ἐρίσαντε Ἀτρεί̈δης τε ἄναξ ἀνδρῶν καὶ δῖος Ἀχιλλεύς.
-% \end{greek}
+% \begin{quote}
+% \begin{greek}[variant=ancient]
+% μῆνιν ἄειδε θεὰ Πηληϊάδεω Ἀχιλῆος οὐλομένην, ἣ μυρί' Ἀχαιοῖς
+% ἄλγε' ἔθηκε, πολλὰς δ' ἰφθίμους ψυχὰς Ἄϊδι προί̈αψεν ἡρώων,
+% αὐτοὺς δὲ ἑλώρια τεῦχε κύνεσσιν οἰωνοῖσί τε πᾶσι, Διὸς δ'
+% ἐτελείετο βουλή, ἐξ οὗ δὴ τὰ πρῶτα διαστήτην ἐρίσαντε Ἀτρεί̈δης
+% τε ἄναξ ἀνδρῶν καὶ δῖος Ἀχιλλεύς.
+% \end{greek}
+% \end{quote}
% \end{Verbatim}
%
+% \vspace{-.5\baselineskip}
+%
+% \begin{quote}
% \begin{greek}[variant=ancient]
% μῆνιν ἄειδε θεὰ Πηληϊάδεω Ἀχιλῆος οὐλομένην, ἣ μυρί' Ἀχαιοῖς ἄλγε' ἔθηκε,
% πολλὰς δ' ἰφθίμους ψυχὰς Ἄϊδι προί̈αψεν ἡρώων, αὐτοὺς δὲ ἑλώρια τεῦχε κύνεσσιν
% οἰωνοῖσί τε πᾶσι, Διὸς δ' ἐτελείετο βουλή, ἐξ οὗ δὴ τὰ πρῶτα διαστήτην ἐρίσαντε
% Ἀτρεί̈δης τε ἄναξ ἀνδρῶν καὶ δῖος Ἀχιλλεύς.
% \end{greek}
-% \bigskip
+% \end{quote}
%
% \noindent\DescribeEnv{Arabic} Note that for Arabic one cannot use the environment ¦arabic¦,
% as \cmd\arabic\ is defined internally by \LaTeX. In this case
% we need to use the environment ¦Arabic¦ instead.
%
-% \subsection{Babel commands}
+% \subsection{Babel commands}\label{sec:babelcmds}
% Some macros defined in \pkg{babel}’s \file{hyphen.cfg} (and thus usually
% compiled into the \XeLaTeX\ and \LuaLaTeX\ format) are redefined, but keep a
% similar behaviour.
@@ -605,7 +660,7 @@ issues and follow progress.
% ¦\selectlanguage{⟨lang⟩}¦ and the ¦otherlanguage¦ environment are identical to the
% the ¦⟨lang⟩¦ environment, except that ¦\selectlanguage{⟨lang⟩}¦
% does not need to be explicitly closed. The command ¦\foreinlanguage{⟨lang⟩}{…}¦ and the ¦otherlanguage*¦
-% environment are identical with the use of the ¦\text⟨lang⟩¦ command, with the one
+% environment are identical with the use of the ¦\text⟨lang⟩¦ or ¦\textlang¦ command, with the one
% notable exception that they do not translate the date with ¦\today¦.
%
% Since the \XeLaTeX\ and \LuaLaTeX\ format incorporate \pkg{babel}’s \file{hyphen.cfg},
@@ -614,12 +669,13 @@ issues and follow progress.
%
% \subsection{Other commands}
% The following commands are probably of lesser interest to the end user, but
-% ought to be mentioned here.
+% ought to be mentioned here.\footnote{Note that these commands require polyglossia
+% language names; they do not support language\slash babel aliases.}
% \begin{itemize}
-% \item \Cmd\selectbackgroundlanguage: this selects the global font setup and
-% the numbering definitions for the default language.
+% \item \DescribeMacro{\selectbackgroundlanguage}\cmd{\selectbackgroundlanguage\{⟨lang⟩\}}:
+% this selects the global font setup and the numbering definitions for the default language.
%
-% \item \Cmd\resetdefaultlanguage\ (experimental):
+% \item \DescribeMacro{\resetdefaultlanguage}\cmd{\resetdefaultlanguage[⟨options⟩]\{⟨lang⟩\}} (experimental):
% completely switches the default language
% to another one in the middle of a document: \textit{this may have adverse effects}!
%
@@ -630,9 +686,34 @@ issues and follow progress.
%
% \item \Cmd\latinalph: Representation of counter as a lower-case letter: 1 = a, 2 = b, etc.
%
-% \item \Cmd\latinAlph: Representation of counter as a uper-case letter: 1 = A, 2 = B, etc.
+% \item \Cmd\latinAlph: Representation of counter as a upper-case letter: 1 = A, 2 = B, etc.
% \end{itemize}
%
+%
+% \subsection{Setting up alias commands}
+%
+% By means of the macro
+% \displaycmd{\setlanguagealias[⟨options⟩]\{⟨language⟩\}\{⟨alias⟩\}}{\setlanguagealias}\new{v1.46}
+% you can define alias commands for specific language (variants). \Eg
+%
+% \begin{quote}
+% \begin{verbatim}
+% \setlanguagealias[variant=austrian]{german}{deAT}
+% \end{verbatim}
+% \end{quote}
+% ^^A
+% will define a command \cmd{\textdeAT} as well as an environment ¦{deAT}¦ which will link towards
+% the command \cmd{\textgerman[variant=austrian]} and the environment ¦{german}[variant=austrian]¦,
+% respectively. The aliases can also be used in the language switching commands described in
+% section~\ref{sec:langcmds} and \ref{sec:babelcmds}.
+% Note, though, that the usual restrictions for command names apply, so something such as
+% ¦de-AT¦ or ¦de_AT¦ will not work since ¦-¦ and ¦_¦ are not allowed in command names.
+%
+% For the latter case, and for the case where an alias would clash with an existing \cmd{\text⟨...⟩}
+% command (\eg ¦\textit¦), a starred version \Cmd{\setlanguagealias*} is provided which does not define
+% a \cmd{\text⟨alias⟩} command (but which will set up the alias for everything else, including
+% \cmd{\textlang\{⟨alias⟩\}}).
+%
% \section{Font setup}
%
% With polyglossia it is possible to associate a specific font with any script or language
@@ -641,11 +722,12 @@ issues and follow progress.
% For instance, if the default font defined by \cmd\setmainfont\
% does not support Greek, then one can define the font used to display Greek with:\\
% \centerline{ \cmd\newfontfamily\cmd{\greekfont[Script=Greek,⟨…⟩]\{⟨font⟩\}}. }
-% Note that polyglossia will use the font thus defined as is.
-% for instance if ¦\arabicfont¦ is explicitly defined, then one should take care of
-% including the option ¦Script=Arabic¦ in that definition.
-% See the \pkg{fontspec} documentation for more information.
-% If a specific sans or monospace font is needed for a particular script or language,
+% Note that polyglossia will use the font defined as is, so assure to do all necessary settings
+% (please refer to the \pkg{fontspec} documentation for details).
+% For instance, if ¦\arabicfont¦ is explicitly defined, then the option ¦Script=Arabic¦ should
+% be included in that definition.
+%
+% If a specific sans serif or monospace (`teletype') font is needed for a particular script or language,
% it can be defined by means of \new{v1.2.0}
% ¦\⟨script⟩fontsf¦\ or ¦\⟨language⟩fontsf¦ and ¦\⟨script⟩fonttt¦\ or ¦\⟨language⟩fonttt¦, respectively.
%
@@ -674,7 +756,7 @@ issues and follow progress.
% \end{Verbatim}
% ^^A
% These exceptions, however, apply to all languages. In addition to this, \pkg{polyglossia} provides
-% the command\new{v.1.45}
+% the command\new{v1.45}
% \displaycmd{\pghyphenation[⟨options⟩]\{⟨lang⟩\}\{⟨exceptions⟩\}}{\pghyphenation}
% which can be used to define exceptions that only apply to a specific language or language variant,
% respectively.
@@ -695,6 +777,24 @@ issues and follow progress.
%
% ^^A\subsection{amharic}\label{amharic}
%
+% \subsection{afrikaans}\label{afikaans}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \TB{babelshorthands} = \textit{false} or true. \new{v1.1.1}
+% if this is turned on, the following shorthands defined for fine-tuning hyphenation and
+% micro-typography of Afrikaans words are activated:
+% \begin{shorthands}
+% \item[¦"-¦] adds a hyphenation point that does still allow for hyphenation at the points preset
+% in the hyphenation patterns (as opposed to ¦\-¦ in default \TeX).
+% \item[\texttt{"\textasciitilde}] for a hyphen sign without a breakpoint. Useful for
+% cases where the hyphen should stick at the following syllable.
+% \item[¦"|¦] disables a ligature at this position.
+% \item[¦""¦] allows for a line break at this position (without hyphenation sign).
+% \item[¦"/¦] a slash that allows for a subsequent line break. As opposed to ¦\slash¦,
+% hyphenation at the breakpoints preset in the hyphenation patterns is still allowed.
+% \end{shorthands}
+% \end{itemize}
+%
% \subsection{arabic}\label{arabic}
% \paragraph*{Options:}
% \begin{itemize}
@@ -726,6 +826,42 @@ issues and follow progress.
% \item \TB{numerals}\new{v1.45} = armenian or \textit{arabic}
% \end{itemize}
%
+% \subsection[belarusian]{belarusian\new{v1.46}}\label{belarusian}
+%
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \TB{babelshorthands} = \textit{false} or true.
+% If this is turned on, the following shorthands are activated:
+% \begin{shorthands}
+% \item[¦"-¦] adds a hyphenation point that does still allow for hyphenation at the points preset
+% in the hyphenation patterns (as opposed to ¦\-¦).
+% \item[\texttt{"\textasciitilde}] for a hyphen sign without a breakpoint. Useful for
+% cases where the hyphen should stick at the following syllable.
+% \item[¦"|¦] disables a ligature at this position.
+% \item[¦""¦] allows for a line break at this position (without hyphenation sign).
+% \item[¦"---¦] Cyrillic emdash in plain text.
+% \item[¦"--~¦] Cyrillic emdash in compound names (surnames).
+% \item[¦"--*¦] Cyrillic emdash for denoting direct speech.
+% \item[¦",¦] thinspace for initials with a breakpoint in following surname.
+% \item[¦"‘¦] for German left double quotes (looks like ,,).
+% \item[¦"’¦] for German right double quotes (looks like “).
+% \item[¦"<¦] for French left double quotes (looks like <<).
+% \item[¦">¦] for French right double quotes (looks like >>).
+% \end{shorthands}
+% \item \TB{numerals} = \textit{arabic} or cyrillic. Uses either Arabic numerals or Cyrillic
+% alphanumerical numbering.
+% \item \TB{spelling} = \textit{modern} or classic (=~tarask). With ¦spelling=classic¦, captions and dates
+% adhere to the Taraškievica (or Belarusian classical) orthography rather than the standard orthography.
+% \end{itemize}
+% ^^A
+% \paragraph*{Commands:}
+% \begin{itemize}
+% \item \Cmd\Asbuk: produces uppercased Cyrillic alphanumerals, for
+% environments such as ¦enumerate¦. The command takes a counter as argument,
+% \eg ¦\textbelarusian{\Asbuk{page}}¦ produces \textrussian{\Asbuk{page}}.
+% \item \Cmd\asbuk: same in lowercase
+% \end{itemize}
+%
% \subsection[bengali]{bengali\new{v1.2.0}}\label{bengali}
% \paragraph*{Options:}
% \begin{itemize}
@@ -756,25 +892,25 @@ issues and follow progress.
% \begin{shorthands}
% \item[¦"=¦] for an explicit hyphen sign which is repeated at the beginning
% of the next line when hyphenated, as common in Czech typesetting
-% (also see option ¦splithyphens¦).
+% (only needed with ¦splithyphens=false¦).
% \item[¦"‘¦] for Czech left double quotes (looks like ,,).
% \item[¦"’¦] for Czech right double quotes (looks like “).
% \item[¦">¦] for Czech left double guillemets (looks like >>).
% \item[¦"<¦] for Czech right double guillemets (looks like <<).
% \end{shorthands}
-% \item \TB{splithyphens} = \textit{false} or true. \new{v1.45}
+% \item \TB{splithyphens} = false or \textit{true}.\new{v1.45}
% According to Czech typesetting conventions, if a word with a hard hyphen (such as \emph{je-li})
% is hyphenated at this hyphen, a second hyphenation character is to be inserted at the beginning
-% of the line that follows the hyphenation (\emph{je-/-li}).\\
-% If this option is true, this is done automatically (so the shorthand ¦"=¦ is not needed).
-% Note, however, that the option is only available for \XeTeX. If you are using \LuaTeX,
-% load the \pkg{luavlna} package to the same effect.
-% \item \TB{vlna} = \textit{false} or true. \new{v1.45}
+% of the line that follows the hyphenation (\emph{je-/-li}).
+% By default, this is done automatically\new{v1.46} (if you are using \LuaTeX, the \pkg{luavlna} package is
+% loaded to achieve this).
+% Set this option to ¦false¦ to disable the feature.
+% \item \TB{vlna} = false or \textit{true}. \new{v1.45}
% According to Czech typesetting conventions, single-letter words (non-syllable prepositions)
-% must not occur at line ends.\\
-% If this option is true, this is taken care of. Note, however, that the option
-% is only available for \XeTeX. If you are using \LuaTeX, load the \pkg{luavlna} package
-% to the same effect.
+% must not occur at line ends.
+% \pkg{Polyglossia} takes care of this automatically by default\new{v1.46} (if you are using \LuaTeX, the
+% \pkg{luavlna} package is loaded to achieve this).
+% Set this option to ¦false¦ to disable the feature.
% \end{itemize}
%
% \subsection{dutch}\label{dutch}
@@ -835,14 +971,31 @@ issues and follow progress.
% \begin{itemize}
% \item\TB{variant} = \textit{french} or canadian (=~acadian).\new{v1.45}
% Currently, the three variants do not differ; they are supported for compatibility with \pkg{babel} (where they do not differ either).
-% \item \TB{autospacing} = true or \textit{false} (default value = true). One of the most distinct features of French typography is the addition
+% \item \TB{autospacing} = \textit{true} or false. One of the most distinct features of French typography is the addition
% of extra spacing around punctuation and quotation marks (guillemets). By default, polyglossia adds these spaces automatically, so you don't need
% to enter them. This options allows you to switch this feature off globally.
-% \item \TB{autospaceguillemets}\footnote{Up to version 1.44, the option was called \textit{automaticspacesaroundguillemets}. For backards compatibility reasons, the more verbose old option is still supported.} = true or \textit{false} (default value = true). If you only want to disable the automatic addition of spacing after opening and before closing guillemets (and not at punctuation), set this to \textit{false}. Note
-% that the more general option \textit{autospacing} overrides this.
+% \item \TB{thincolonspace}\new{v1.46} = true or \textit{false}. Normally, a
+% full (non-breaking) interword space is inserted before a colon. Use this
+% option if you prefer a thinner space as used before \texttt{;}, \texttt{!},
+% and \texttt{?}.
+% \item \TB{autospaceguillemets}\footnote{Up to version 1.44, the option was
+% called \textit{automaticspacesaroundguillemets}. For backards compatibility
+% reasons, the more verbose old option is still supported.} = \textit{true}
+% or false. If you only want to disable the automatic addition of spacing
+% after opening and before closing guillemets (and not at punctuation), set
+% this to \textit{false}. Note that the more general option
+% \textit{autospacing} overrides this.
% \item \TB{autospacetypewriter}\footnote{Babel's syntax \textit{OriginalTypewriter} is also supported.}\new{1.45} = true or \textit{false} (default value = true). By default, automatic spacing is disabled in typewriter font. If this is enabled, spacing in typewriter context is the same as with roman and sans serif font, depending on the \textit{autospacing} and \textit{autospaceguillemets} settings (note that this was the default up to v.~1.44).
% \item \TB{frenchfootnote} = true or \textit{false} (default value = true). If \textit{true}, footnotes start with a non-superscripted number followed by a dot, as common in French typography. Note that this might interfere with the specific footnote handling of classes or packages.
% Also note that this option is only functional (by design) if French is the main language.
+% \item \TB{frenchitemlabels}\new{v.1.46} = true or \textit{false} (default value = true). If \textit{true}, itemize item labels use em-dashes throughout,
+% as common in French typography.
+% Note that this option is only functional (by design) if French is the main language. Also, it might interfere with list packages such as \pkg{enumitem}.
+% \item \TB{itemlabels}\new{v.1.46} = ¦⟨cmd⟩¦ (default value = ¦\textemdash¦). If \emph{frenchitemlabels} is true, you can customize here the used item label of all levels.
+% \item \TB{itemlabeli}\new{v.1.46} = ¦⟨cmd⟩¦ (default value = ¦\textemdash¦). If \emph{frenchitemlabels} is true, you can customize here the used item label of the first level.
+% \item \TB{itemlabelii}\new{v.1.46} = ¦⟨cmd⟩¦ (default value = ¦\textemdash¦). If \emph{frenchitemlabels} is true, you can customize here the used item label of the second level.
+% \item \TB{itemlabeliii}\new{v.1.46} = ¦⟨cmd⟩¦ (default value = ¦\textemdash¦). If \emph{frenchitemlabels} is true, you can customize here the used item label of the third level.
+% \item \TB{itemlabeliv}\new{v.1.46} = ¦⟨cmd⟩¦ (default value = ¦\textemdash¦). If \emph{frenchitemlabels} is true, you can customize here the used item label of the fourth level.
% \end{itemize}
% \paragraph*{Commands:}
% \begin{itemize}
@@ -856,6 +1009,34 @@ issues and follow progress.
% \item \TB{variant} = \textit{irish} or scottish
% \end{itemize}
%
+% \subsection[georgian]{georgian\new{v1.46}}\label{georgian}
+%
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \TB{babelshorthands} = \textit{false} or true.
+% If this is turned on, the following shorthands are activated:
+% \begin{shorthands}
+% \item[¦"-¦] adds a hyphenation point that does still allow for hyphenation at the points preset
+% in the hyphenation patterns (as opposed to ¦\-¦).
+% \item[\texttt{"\textasciitilde}] for a hyphen sign without a breakpoint. Useful for
+% cases where the hyphen should stick at the following syllable.
+% \item[¦"|¦] disables a ligature at this position.
+% \item[¦""¦] allows for a line break at this position (without hyphenation sign).
+% \item[¦"---¦] Cyrillic emdash in plain text.
+% \item[¦"--~¦] Cyrillic emdash in compound names (surnames).
+% \item[¦"--*¦] Cyrillic emdash for denoting direct speech.
+% \item[¦",¦] thinspace for initials with a breakpoint in following surname.
+% \item[¦"‘¦] for German left double quotes (looks like ,,).
+% \item[¦"’¦] for German right double quotes (looks like “).
+% \item[¦"<¦] for French left double quotes (looks like <<).
+% \item[¦">¦] for French right double quotes (looks like >>).
+% \end{shorthands}
+% \item \TB{numerals} = \textit{arabic} or georgian. Uses either Arabic numerals or Georgian
+% alphanumerical numbering.
+% \item \TB{oldmonthnames} = \textit{true} or false (default: false). Uses traditional Georgian
+% month names.
+% \end{itemize}
+%
% \subsection{german}\label{german}
% \paragraph*{Options:}
% \begin{itemize}
@@ -897,8 +1078,9 @@ issues and follow progress.
% \item[¦"<¦] for French left double quotes («)
% \item[¦">¦] for French right double quotes (»).
% \end{shorthands}
-% \item\TB{script} = \textit{latin} or fraktur.\new{v1.2.0}
-% Setting script=fraktur modifies the captions for typesetting German in Fraktur.
+% \item\TB{script} = \textit{latin} or blackletter\new{v1.46} (=~fraktur\new{v1.2.0}).
+% Setting ¦script=blackletter¦ adapts the captions for typesetting German in blackletter type (using the long s (ſ)
+% where appropriate).
% \end{itemize}
%
% \subsection{greek}\label{greek}
@@ -939,6 +1121,27 @@ issues and follow progress.
% \end{itemize}
%
% \subsection{hungarian}\label{hungarian}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \TB{swapstrings} = \textit{all}, captions, headings, headers, hheaders or none\new{v1.46}
+%
+% In Hungarian, some caption strings need to be in a different order than in other languages
+% (\eg \emph{1. fejezet} instead of \emph{Chapter 1}). By default, \pkg{polyglossia} tries hard to
+% provide the correct order for different classes and packages (standard classes, \pkg{KOMA-script},
+% \pkg{memoir}, and \pkg{titlesec} package should work, as well as \pkg{fancyhdr} and \pkg{caption}).
+% However, since the definition of these strings is not standardized, the redefinitions might not work
+% and even interfere badly if you use specific classes or packages that redefine the respective strings
+% themselves. In this case, you can disable some or all changes.
+% The possibilities are:
+% \begin{itemize}
+% \item ¦all¦: Redefine figure and table captions, part and chapter headings, and running headers (=~default setting)
+% \item ¦captions¦: Redefine figure and table captions only
+% \item ¦headings¦: Redefine part and chapter headings only
+% \item ¦headers¦: Redefine running headers only
+% \item ¦hheaders¦: Redefine part and chapter headings as well as running headers
+% \item ¦none¦: Do not redefine anything
+% \end{itemize}
+% \end{itemize}
% \paragraph*{Commands:}
% \begin{itemize}
% \item \Cmd\ontoday\ (= \Cmd\ondatehungarian): special form of \cmd\today\ which produces a slightly different
@@ -973,7 +1176,6 @@ issues and follow progress.
% \end{itemize}
%
% \subsection[kurdish]{kurdish\new{v1.45}}\label{kurdish}
-% Kurdish support includes Sorani Kurdish and Kurmanji Kurdish, both in either Arabic or Latin script.
%
% \paragraph*{Options:}
% \begin{itemize}
@@ -982,9 +1184,10 @@ issues and follow progress.
% \item \TB{numerals} = western or eastern. Defaults are ¦western¦ for Latin and ¦eastern¦ for Arabic script, depending on the selection above.
% \item \TB{abjadjimnotail} = \textit{false} or true.
% Set this to true if you want the \textit{abjad} form of the number three to be \textarabic{ج‍} – as in the manuscript tradition – instead of the modern usage \textarabic{ج}.
-% \item \TB{locale} (not yet implemented)
-% \item \TB{calendar} (not yet implemented)
+% ^^A \item \TB{locale} (not yet implemented)
+% ^^A \item \TB{calendar} (not yet implemented)
% \end{itemize}
+% \condbreak{2\baselineskip}
% \paragraph*{Commands:}
% \begin{itemize}
% \item \Cmd\ontoday: special form of \cmd\today\ which produces a slightly different
@@ -1001,9 +1204,152 @@ issues and follow progress.
%
% \subsection{latin}\label{latin}
% \paragraph*{Options:}
-% \begin{itemize}
-% \item \TB{variant} = classic, medieval or \textit{modern}
-% \end{itemize}
+% \begin{itemize}
+% \item \TB{variant} = classic, medieval, \emph{modern}, or ecclesiastic\new{v.1.46}
+%
+% These variants refer to different spelling conventions. The ¦classic¦
+% and the ¦medieval¦ variant do not use the letters \emph{U} and
+% \emph{v}, but only \emph{V} and \emph{u}. This concerns predefined terms like
+% month names as well as the behaviour of the \cmd\MakeUppercase\ and the
+% \cmd\MakeLowercase\ command. The ¦medieval¦ and the
+% ¦ecclesiastic¦ variant use the ligatures \emph{\ae} and \emph{\oe}.
+% See table \ref{tab:latin-spelling} for examples.
+%
+% Furthermore, the \texttt{ecclesiastic} variant takes care for a punctuation
+% spacing similar to French, but with smaller spaces, as provided for
+% PDF\TeX\ by the \pkg{ecclesiastic} package.
+% \begin{table}
+% \centering
+% \caption{\label{tab:latin-spelling}Spelling differences between the Latin
+% language variants.\newline The capitalization of month names and the use of
+% \emph{i/j} may be affected by the \texttt{capitalizemonth} and the
+% \texttt{usej} option.}
+% \begin{tabular}{llll}
+% \toprule
+% \textbf{classic} & \textbf{medieval} & \textbf{modern} & \textbf{ecclesiastic} \\
+% \midrule
+% Ianuarii & Ianuarii & Ianuarii & ianuarii \\
+% Nouembris & Nouembris & Novembris & novembris \\
+% Praefatio & Præfatio & Praefatio & Præfatio \\
+% \addlinespace\multicolumn{4}{@{}l}{\cmd{\MakeUppercase\{Iulius\}} yields:} \\
+% IVLIVS & IVLIVS & IULIUS & IULIUS \\
+% \bottomrule
+% \end{tabular}
+% \end{table}
+% \item \TB{hyphenation}\new{v.1.46} = classic, modern, or liturgical
+%
+% There are three different sets of hyphenation patterns for Latin. Separate
+% documention for them is available on the
+% Internet.\footnote{\url{https://github.com/gregorio-project/hyphen-la/blob/master/doc/README.md\#hyphenation-styles}}
+% Each of the four variants mentioned above has its default set of hyphenation
+% patterns as indicated by table \ref{tab:latin-hyphenation}. Use the
+% ¦hyphenation¦ option if the default style does not fit your needs.
+% Note that the liturgical hyphenation patterns are the default of none of the
+% language variants. To use them, you have to say
+% ¦hyphenation=liturgical¦ in any case.
+% \begin{table}
+% \caption{\label{tab:latin-hyphenation}Latin default hyphenation styles}
+% \centering
+% \begin{tabular}{ll}
+% \toprule
+% \textbf{Language variant} & \textbf{Default hyphenation style} \\
+% \midrule
+% classic & classic \\
+% medieval & modern \\
+% modern & modern \\
+% ecclesiastic & modern \\
+% \bottomrule
+% \end{tabular}
+% \end{table}
+% \item \TB{ecclesiasticfootnotes}\new{v.1.46} = true or \emph{false}
+%
+% Use footnotes as provided by the \pkg{ecclesiastic} package, which typesets
+% 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 ¦ecclesiastic¦ variant.
+%
+% Note that this option is only possible if Latin is the main language of your
+% document.
+% \item \TB{usej}\new{v.1.46} = true or \emph{false}
+%
+% Use \emph{J/j} in predefined terms. The letter \emph{j} is not of ancient
+% origin. In early modern times, it was used to distinguish the consonantic
+% \emph{i} from the vocalic~\emph{i}. Nowadays, the use of \emph{j} has
+% disappeared from most Latin publications. So ¦false¦ is the default
+% value for all four language variants. Use this option if you prefer
+% \emph{Januarii} and \emph{Maji} to \emph{Ianuarii} and \emph{Maii}.
+% \item \TB{capitalizemonth}\new{v.1.46} = true or false
+%
+% Capitalize the month name when printing dates (using the \cmd\today\
+% command). Traditionally, month names are capitalized. However, in recent
+% liturgical books they are lowercase. So ¦true¦ is the default value for
+% the variants ¦classic¦, ¦medieval¦, and ¦modern¦,
+% whereas ¦false¦ is the default value for the ¦ecclesiastic¦
+% variant.
+% \item \TB{babelshorthands} = true or \emph{false}
+%
+% Enable the following shorthands inherited from \pkg{babel-latin} and the
+% \pkg{ecclesiastic} package.
+% \begin{shorthands}
+% \item[¦"<¦] for « (left guillemet)
+% \item[¦">¦] for » (right guillemet)
+% \item[¦"¦] If no other shorthand applies, ¦"¦ before any letter
+% character defines an optional break point allowing further break points
+% within the same word (as opposed to the \cmd\- command).
+% \item[¦"|¦] the same as ¦"¦, but also possible before non-letter
+% characters
+% \item[¦'a¦] for á (a with acute), also available for é, í, ó, ú, ý, ǽ, and
+% \'œ
+% \item[¦'A¦] for Á (A with acute), also available for É, Í, Ó, Ú, \'V, Ý, Ǽ,
+% and \'Œ
+% \end{shorthands}
+% The following shorthands are only available for the ¦medieval¦ and the
+% ¦ecclesiastic¦ variant.
+% \begin{shorthands}
+% \item[¦"ae¦] for æ (ae ligature), also available for œ
+% \item[¦"Ae¦] for Æ (AE ligature), also available for Œ
+% \item[¦"AE¦] for Æ (AE ligature), also available for Œ
+% \item[¦'ae¦] for ǽ (ae ligature with acute), also available for \'œ
+% \item[¦'Ae¦] for Ǽ (AE ligature with acute), also available for \'Œ
+% \item[¦'AE¦] for Ǽ (AE ligature with acute), also available for \'Œ
+% \end{shorthands}
+% \item \TB{prosodicshorthands}\new{v.1.46} = true or \emph{false}
+%
+% Enable shorthands for prosodic marks (macrons and breves) very similiar to
+% those provided by \pkg{babel-latin} using the ¦withprosodicmarks¦
+% modifier.
+%
+% Note that the active ¦=¦ character used for macrons will cause problems with
+% commands using \texttt{key=value} interfaces, \eg
+% ¦\includegraphics[scale=2]{...}¦. Use \cmd{\shorthandoff\{=\}} before
+% such commands (and \cmd{\shorthandon\{=\}} thereafter) within every
+% environment with prosodic shorthands enabled.
+%
+% The following shorthands are available.
+% \begin{shorthands}
+% \item[¦=a¦] for ā (a with macron), also available for ē, ī, ō, ū, and ȳ
+% \item[¦=A¦] for Ā (A with macron), also available for Ē, Ī, Ō, Ū, V̄, and Ȳ.
+% Note that a macron above the letter V is only displayed if your font
+% supports the Unicode character ¦0304¦ (\emph{combining macron}).
+% \item[¦=ae¦] for a͞e (ae diphthong with macron), also available for a͞u, e͞u,
+% and o͞e. Note that macrons above diphthongs are only displayed if your font
+% supports the Unicode character ¦035E¦ (\emph{combining double
+% macron}).
+% \item[¦=Ae¦] for A͞e (Ae diphthong with macron), also available for A͞u, E͞u,
+% and O͞e.
+% \item[¦=AE¦] for A͞E (AE diphthong with macron), also available for A͞U, E͞U,
+% and O͞E.
+% \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 ¦0306¦ (\emph{combining
+% breve}).
+% \item[¦\textasciicircum A¦] Ă (A with breve), also available for Ĕ, Ĭ, Ŏ,
+% Ŭ, V̆, and Y̆. Note that breves above the letters V and Y are only displayed
+% if your font supports the Unicode character ¦0306¦ (\emph{combining
+% breve}).
+% \end{shorthands}
+% \end{itemize}
%
% \subsection{malay}\label{malay}
% \paragraph*{Options:}
@@ -1043,7 +1389,7 @@ issues and follow progress.
% \begin{itemize}
% \item \Cmd\Asbuk: produces uppercased Cyrillic alphanumerals, for
% environments such as ¦enumerate¦. The command takes a counter as argument,
-% \eg ¦\textrussian{\Asbuk{page}}¦ produces \textrussian{\Asbuk{page}}.
+% \eg ¦\textmongolian{\Asbuk{page}}¦ produces \textrussian{\Asbuk{page}}.
% \item \Cmd\asbuk: same in lowercase
% \end{itemize}
%
@@ -1059,8 +1405,8 @@ issues and follow progress.
% \item \TB{numerals} = western or \textit{eastern}
% \item \TB{abjadjimnotail} = \textit{false} or true. \new{v1.0.3}
% Set this to true if you want the \textit{abjad} form of the number three to be \textarabic{ج‍} – as in the manuscript tradition – instead of the modern usage \textarabic{ج}.
-% \item \TB{locale} (not yet implemented)
-% \item \TB{calendar} (not yet implemented)
+% ^^A \item \TB{locale} (not yet implemented)
+% ^^A \item \TB{calendar} (not yet implemented)
% \end{itemize}
% \paragraph*{Commands:}
% \begin{itemize}
@@ -1096,6 +1442,9 @@ issues and follow progress.
% ^^A \item[¦"<¦] for French left double quotes (looks like <<).
% ^^A \item[¦">¦] for French right double quotes (looks like >>).
% \end{shorthands}
+% \item \TB{indentfirst}\new{v1.46} = \textit{true} or false. By default, all paragraphs are indented in Russian,
+% also those after a chapter or section heading. If this option is false, the latter paragraphs
+% are not indented, as normal in \LaTeX.
% \item \TB{spelling} = \textit{modern} or old (for captions and date only, not for hyphenation)
% \item \TB{numerals} = \textit{arabic} or cyrillic. Uses either Arabic numerals or Cyrillic
% alphanumerical numbering.
@@ -1115,17 +1464,17 @@ issues and follow progress.
% \subsection{sanskrit}\label{sanskrit}
% \paragraph*{Options:}
% \begin{itemize}
-% \item \TB{Script} = \textit{Devanagari}\new{v1.0.2}, Gujarati, Malayalam, Bengali, Kannada,
+% \item \TB{script} = \textit{Devanagari}\new{v1.0.2}, Gujarati, Malayalam, Bengali, Kannada,
% Telugu or Latin.
-% The value is passed to \pkg{fontspec} in cases where the respective ¦\<script>font¦ is not defined.
+% The value is passed to \pkg{fontspec} in cases where the respective ¦\⟨script⟩font¦ is not defined.
% This can be useful if you typeset Sanskrit texts in scripts other than Devanagari.
-% \item \TB{Numerals} = \textit{Devanagari}\new{v1.45} or Western
+% \item \TB{numerals} = \textit{Devanagari}\new{v1.45} or Western
% \end{itemize}
%
% \subsection{serbian}\label{serbian}
% \paragraph*{Options:}
% \begin{itemize}
-% \item \TB{Script} = \textit{Cyrillic} or Latin. Will likely go to a variant.
+% \item \TB{script} = \textit{Cyrillic} or Latin.
% \item \TB{numerals} = \textit{arabic} or cyrillic. Uses either Arabic numerals or Cyrillic
% alphanumerical numbering.
% \end{itemize}
@@ -1138,6 +1487,44 @@ issues and follow progress.
% \end{itemize}
%
%
+% \subsection{slovak}\label{slovak}
+%
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \TB{babelshorthands} = \textit{false} or true. \new{v1.46}
+% if this is turned on, the following shorthands for Slovak are activated:
+% \begin{shorthands}
+% \item[¦"=¦] for an explicit hyphen sign which is repeated at the beginning
+% of the next line when hyphenated, as common in Slovak typesetting
+% (only needed with ¦splithyphens=false¦).
+% \item[¦"|¦] disables a ligature at this position.
+% \item[\texttt{"\textasciitilde}] for a hyphen sign without a breakpoint. Useful for
+% cases where the hyphen should stick at the following syllable.
+% \item[¦"-¦] adds a hyphenation point that does still allow for hyphenation at the points preset
+% in the hyphenation patterns (as opposed to ¦\-¦).
+% \item[¦""¦] allows for a line break at this position (without hyphenation sign).
+% \item[¦"/¦] a slash that allows for a subsequent line break. As opposed to ¦\slash¦, hyphenation at the breakpoints
+% preset in the hyphenation patterns is still allowed.
+% \item[¦"‘¦] for Slovak left double quotes (looks like ,,).
+% \item[¦"’¦] for Slovak right double quotes (looks like “).
+% \item[¦">¦] for Slovak left double guillemets (looks like >>).
+% \item[¦"<¦] for Slovak right double guillemets (looks like <<).
+% \end{shorthands}
+% \item \TB{splithyphens} = \textit{false} or true. \new{v1.46}
+% According to Slovak typesetting conventions, if a word with a hard hyphen (such as \emph{je-li})
+% is hyphenated at this hyphen, a second hyphenation character is to be inserted at the beginning
+% of the line that follows the hyphenation (\emph{je-/-li}).
+% By default, this is done automatically (if you are using \LuaTeX, the \pkg{luavlna} package is
+% loaded to achieve this).
+% Set this option to ¦false¦ to disable the feature.
+% \item \TB{vlna} = \textit{false} or true. \new{v1.46}
+% According to Slovak typesetting conventions, single-letter words (non-syllable prepositions)
+% must not occur at line ends.
+% \pkg{Polyglossia} takes care of this automatically by default (if you are using \LuaTeX, the
+% \pkg{luavlna} package is loaded to achieve this).
+% Set this option to ¦false¦ to disable the feature.
+% \end{itemize}
+%
% \subsection{slovenian}\label{slovenian}
% \paragraph*{Options:}
% \begin{itemize}
@@ -1156,6 +1543,35 @@ issues and follow progress.
% \item \Cmd\oldtoday: outputs the current date using traditional Sorbian month names, even if \TB{olddate} is false.
% \end{itemize}
%
+% \subsection{spanish}\label{spanish}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \TB{variant} = \textit{spanish} or mexican.\new{v1.46}
+% \item \TB{spanishoperators} = all, accented, spaced or none or \textit{false} (default value = all).\new{v1.46}
+% Determines of and how math operators are localized to Spanish.
+% \begin{itemize}
+% \item ¦accented¦ causes some math operators to use accents where usual in Spanish (\emph{lím},
+% \emph{lím\,sup}, \emph{lím\,inf}, \emph{máx}, \emph{mín}, \emph{ínf}, \emph{mód}).
+% \item ¦spaced¦ causes some math operators to use spaces where usual in Spanish (\emph{arc\,cos},
+% \emph{arc\,sen}, \emph{arc\,tg}).
+% \item ¦all¦ activates ¦accented¦ and ¦spaced¦ and furthermore provides Spanish localizations of
+% ¦\sin¦ (\emph{sen}), ¦\tan¦ (\emph{tg}), ¦\sinh¦ (\emph{senh}), and ¦\tanh¦ (\emph{tgh}).
+% \item ¦none¦ does no localization at all (default setting).
+% \end{itemize}
+% \end{itemize}
+% \paragraph*{\color{black}Commands:}\new{v1.46}
+% \begin{itemize}
+% \item \Cmd\arcsen: alias to ¦\arcsin¦ (\pkg{babel} compatibility)
+% \item \Cmd\arctg: alias to ¦\arctan¦ (\pkg{babel} compatibility)
+% \item \Cmd\sen: alias to ¦\sin¦ (\pkg{babel} compatibility)
+% \item \Cmd\senh: alias to ¦\sinh¦ (\pkg{babel} compatibility)
+% \item \Cmd\tg: alias to ¦\tan¦ (\pkg{babel} compatibility)
+% \item \Cmd\tgh: alias to ¦\tanh¦ (\pkg{babel} compatibility)
+% \item \Cmd\spanishoperator: allows you to define further localized operators. For instance, ¦\spanishoperator{cotg}¦
+% defines a command ¦\cotg¦ that outputs \emph{cotg} in math. The optional argument of the command lets you specify the
+% spelling, if needed, \eg ¦\spanishoperator[arc\,ctg]{arcctg}¦.
+% \end{itemize}
+%
% \subsection{syriac}\label{syriac}
% \paragraph*{Options:}
% \begin{itemize}
@@ -1352,6 +1768,9 @@ issues and follow progress.
% \item \Cmd\armeniannumeral produces Armenian alphabetic numbering.
% Example: ¦\armeniannumeral{1863}¦ yields \textarmenian{\armeniannumeral{1863}}.
%
+% \item \Cmd\georgiannumeral produces Georgian alphabetic numbering.\\
+% Example: ¦\georgiannumeral{1863}¦ yields \textgeorgian{\georgiannumeral{1863}}.
+%
% \item \Cmd\greeknumeral produces Greek alphabetic numbering, \Cmd\Greeknumeral outputs uppercased variants.
% Example: ¦\greeknumeral{1863}¦ yields \textgreek{\greeknumeral{1863}},
% ¦\Greeknumeral{1863}¦ results in \textgreek{\Greeknumeral{1863}}.
@@ -1505,7 +1924,7 @@ issues and follow progress.
% by other people. I take this opportunity to thank the following individuals,
% whose splendid work has made my task almost trivial in comparision: \TA{Johannes
% Braams} and the numerous contributors to the \pkg{babel} package (in particular
-% \TA{Boris Lavva} and others for its Hebrew support), \TA{Alexej Kryuko}v (\pkg{antomega}),
+% \TA{Boris Lavva} and others for its Hebrew support), \TA{Alexej Kryukov} (\pkg{antomega}),
% \TA{Will Robertson} (\pkg{fontspec}), \TA{Apostolos Syropoulos} (\pkg{xgreek}), \TA{Youssef Jabri}
% (\pkg{arabi}), and \TA{Vafa Khalighi} (\pkg{xepersian} and \pkg{bidi}).
% The work of \TA{Mojca Miklavec} and \TA{Arthur Reutenauer} on hyphenation patterns with their package
@@ -1525,12 +1944,26 @@ issues and follow progress.
% I also thank \TA{Alan Munn} for kindly proof-reading the penultimate version of this documentation.
% And of course my gratitude also goes to \TA{Jonathan Kew}, the formidable author of \XeTeX!
%
-% \section{More acknowledgements (by Arthur Reutenauer)}
-% Many thanks to all the people who have contributed bugfixes and new features to
-% Polyglossia since I took over. Most of them can be identified from the contributor statistics on \href{https://github.com/reutenauer/polyglossia/graphs/contributors}{GitHub} and I won’t try to name them
-% all (maybe, one day ...); among the ones who sent contributions directly to me
-% I would like to especially thank \TA{Claudio Beccari}, the indefatigable champion of
-% Romance languages, and beyond!
+% \section{More acknowledgements (by the current development team)}
+% Many thanks to all the people who have contributed bugfixes and new features to \pkg{polyglossia}
+% since we took over.
+% In alphabetical order: \TA{Ignas Anikevicius}, \TA{Sina Ahmadi}, \TA{Wouter Bolsterlee}, \TA{Christian Buhtz},
+% \TA{Zgarbul Andrey}, \TA{Oleg Domanov}, \TA{Philipp Gesang}, \TA{Kevin Godby}, \TA{Enrico Gregorio},
+% \TA{Khaled Hosny}, \TA{Najib Idrissi}, user \TA{julroy67}, \TA{Dohyun Kim}, \TA{Phil Kime}, \TA{Mike Kroutikov},
+% \TA{Ivan Kokan}, \TA{Caleb Maclennan}, \TA{José Mancera}, \TA{Yevgen Pogribnyi}, \TA{Maïeul Rouquette},
+% \TA{Elie Roux}, \TA{Hugo Roy}, \TA{Guy Rutenberg}, \TA{Philipp Stephani}, \TA{Keno Wehr}, \TA{Dominik Wujastyk},
+% \TA{Sertaç Ö. Yıldız}, \TA{Maksim Zholudev}, \TA{Yan Zhou}, and \TA{Stefan Zlatinov}.
+% Their respective contributions can be identified from the contributor statistics on
+% \href{https://github.com/reutenauer/polyglossia/graphs/contributors}{GitHub}.
+%
+% Among the ones who sent contributions directly to us we would like to especially thank
+% \TA{Claudio Beccari}, the indefatigable champion of Romance languages, and beyond! Furthermore,
+% kudos go to \TA{Moritz Wemheuer} (of \pkg{biblatex}) who has helped a lot to improve \pkg{polyglossia} interaction
+% with \pkg{biblatex} and \pkg{csquotes}.
+%
+% Not at least, we are very grateful for all bug reports and feature enhancement requests we received from
+% the numerous users we cannot list all here (but again, you can find all names on \href{https://github.com/reutenauer/polyglossia/issues?utf8=%E2%9C%93&q=is%3Aissue}{GitHub}).
+% Please go on with that, you are keeping \pkg{polyglossia} running!
%
%
%
@@ -1538,6 +1971,115 @@ issues and follow progress.
% \StopEventually{}
% \section{Implementation}
% \iffalse
+%<*gloss-acadien.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-acadien.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-acadien.ldf}[polyglossia: module for canadian (acadian) french]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{french}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-acadien.ldf>
+%<*gloss-afrikaans.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-afrikaans.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-afrikaans.ldf}[polyglossia: module for afrikaans]
+
+\PolyglossiaSetup{afrikaans}{
+ hyphennames={afrikaans,dutch},
+ hyphenmins={2,2},
+ langtag=AFK,
+ frenchspacing=true,
+ fontsetup=true,
+}
+
+\define@boolkey{afrikaans}[afrikaans@]{babelshorthands}[true]{}
+
+\ifsystem@babelshorthands
+ \setkeys{afrikaans}{babelshorthands=true}
+\else
+ \setkeys{afrikaans}{babelshorthands=false}
+\fi
+
+\ifcsundef{initiate@active@char}{%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
+}{}
+
+\def\afrikaans@shorthands{%
+ \bbl@activate{"}%
+ \def\language@group{afrikaans}%
+ \declare@shorthand{afrikaans}{"-}{\nobreak-\bbl@allowhyphens}
+ \declare@shorthand{afrikaans}{"~}{\textormath{\leavevmode\hbox{-}}{-}}
+ \declare@shorthand{afrikaans}{"|}{%
+ \textormath{\discretionary{-}{}{\kern.03em}}{}}
+ \declare@shorthand{afrikaans}{""}{\hskip\z@skip}
+ \declare@shorthand{afrikaans}{"/}{\textormath
+ {\bbl@allowhyphens\discretionary{/}{}{/}\bbl@allowhyphens}{}}%
+ \def\-{\bbl@allowhyphens\discretionary{-}{}{}\bbl@allowhyphens}%
+}
+
+\def\noafrikaans@shorthands{%
+ \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
+}
+
+\def\captionsafrikaans{%
+ \def\prefacename{Voorwoord}%
+ \def\refname{Verwysings}%
+ \def\abstractname{Samevatting}%
+ \def\bibname{Bibliografie}%
+ \def\chaptername{Hoofstuk}%
+ \def\appendixname{Bylae}%
+ \def\contentsname{Inhoudsopgawe}%
+ \def\listfigurename{Lys van figure}%
+ \def\listtablename{Lys van tabelle}%
+ \def\indexname{Inhoud}%
+ \def\figurename{Figuur}%
+ \def\tablename{Tabel}%
+ \def\partname{Deel}%
+ \def\enclname{Bylae(n)}%
+ \def\ccname{a.\,a.}%
+ \def\headtoname{Aan}%
+ \def\pagename{Bladsy}%
+ \def\seename{sien}%
+ \def\alsoname{sien ook}%
+ \def\proofname{Bewys}%
+% \def\glossaryname{}%
+}
+
+\def\dateafrikaans{%
+ \def\today{\number\day~\ifcase\month\or
+ Januarie\or Februarie\or Maart\or April\or Mei\or Junie\or
+ Julie\or Augustus\or September\or Oktober\or November\or
+ Desember\fi
+ \space \number\year}%
+}
+
+\def\noextras@afrikaans{%
+ \noafrikaans@shorthands%
+}
+
+\def\blockextras@afrikaans{%
+ \ifafrikaans@babelshorthands\afrikaans@shorthands\fi%
+}
+
+\def\inlineextras@afrikaans{%
+ \ifafrikaans@babelshorthands\afrikaans@shorthands\fi%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-afrikaans.ldf>
%<*gloss-albanian.ldf>
% \fi
% \clearpage
@@ -1587,6 +2129,21 @@ issues and follow progress.
% \end{macrocode}
% \iffalse
%</gloss-albanian.ldf>
+%<*gloss-american.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-american.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-american.ldf}[polyglossia: module for american english]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{english}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-american.ldf>
%<*gloss-amharic.ldf>
% \fi
% \clearpage
@@ -1950,9 +2507,8 @@ and may look very wrong.}
\def\arabicnumber#1{%
\ifeastern@numerals
- \arabicdigits{\number#1}%
+ \@ensure@dir{\arabicdigits{\number#1}}%
\else
- %%\RL{\protect\reset@font\number#1}%
\number#1%
\fi}
@@ -2261,6 +2817,51 @@ and may look very wrong.}
% \end{macrocode}
% \iffalse
%</gloss-asturian.ldf>
+%<*gloss-australian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-australian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-australian.ldf}[polyglossia: module for australian english]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{english}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-australian.ldf>
+%<*gloss-austrian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-austrian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-acadien.ldf}[polyglossia: module for austrian german (old spelling)]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-austrian.ldf>
+%<*gloss-bahasa.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-bahasa.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-kurmanji.ldf}[polyglossia: module for kurmanji kurdish]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{kurdish}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-bahasa.ldf>
%<*gloss-bahasai.ldf>
% \fi
% \clearpage
@@ -2272,20 +2873,7 @@ and may look very wrong.}
% We only provide this gloss for babel compatibility. Since bahasai is
% a malay variety, we use 'malay' with variant 'indonesian' now.
-\input{gloss-malay.ldf}
-
-\PolyglossiaSetup{bahasai}{%
- language=Indonesian,
- langtag=IND,
- hyphennames={indonesian,indon,bahasai,bahasa,bahasam,malay,melayu},
- hyphenmins={2,2},
- fontsetup=true}
-
-\let\captionsbahasai\captionsmalay@indonesian
-\let\datebahasai\datemalay@indonesian
-
-\DefineFormatHijriDate{bahasai}{%
- \number\value{Hijriday}\space\hijrimonthmalay@indonesian{\value{Hijrimonth}}\space\number\value{Hijriyear}}
+\xpg@load@master@language{malay}
% \end{macrocode}
% \iffalse
@@ -2298,23 +2886,10 @@ and may look very wrong.}
% \begin{macrocode}
\ProvidesFile{gloss-bahasam.ldf}[polyglossia: module for bahasa melayu]
-% We only provide this gloss for babel compatibility. Since bahasai is
-% a malay variety, we use 'malay' with variant 'indonesian' now.
-
-\input{gloss-malay.ldf}
-
-\PolyglossiaSetup{bahasam}{%
- language=Malay,
- langtag=MLY,
- hyphennames={malay,melayu,bahasam,bahasa,bahasai,indonesian,indon},
- hyphenmins={2,2},
- fontsetup=true}
-
-\let\captionsbahasam\captionsmalay@malay
-\let\datebahasam\datemalay@malay
+% We only provide this gloss for babel compatibility. Since bahasam is
+% a malay variety, we use 'malay' with variant 'malaysian' now.
-\DefineFormatHijriDate{bahasam}{%
- \number\value{Hijriday}\space\hijrimonthmalay@malay{\value{Hijrimonth}}\space\number\value{Hijriyear}}
+\xpg@load@master@language{malay}
% \end{macrocode}
% \iffalse
@@ -2368,6 +2943,285 @@ and may look very wrong.}
% \end{macrocode}
% \iffalse
%</gloss-basque.ldf>
+%<*gloss-belarusian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-belarusian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-belarusian.ldf}[polyglossia: module for belarusian]
+
+\RequirePackage{xpg-cyrillicnumbers}
+
+\PolyglossiaSetup{belarusian}{
+ script=Cyrillic,
+ scripttag=cyrl,
+ langtag=BEL,
+ hyphennames={belarusian},
+ hyphenmins={2,2},
+ frenchspacing=true,
+ fontsetup,
+ localnumeral=belarusiannumerals,
+ Localnumeral=Belarusiannumerals
+}
+
+\def\belarusian@spelling{modern}
+\define@choicekey*+{belarusian}{spelling}[\val\nr]{modern,classic,tarask}[modern]{%
+ \ifcase\nr\relax
+ % modern:
+ \def\belarusian@spelling{modern}
+ \or
+ % classic:
+ \def\belarusian@spelling{tarask}
+ \or
+ % tarask:
+ \def\belarusian@spelling{tarask}
+ \fi
+}{\xpg@warning{Unknown Belarusian spelling `#1'}}
+
+\newif\ifcyrillic@numerals
+\define@key{belarusian}{numerals}[arabic]{%
+ \ifstrequal{#1}{cyrillic}%
+ {\cyrillic@numeralstrue}%
+ {\cyrillic@numeralsfalse}%
+}
+
+\define@boolkey{belarusian}[belarusian@]{babelshorthands}[false]{}
+
+\setkeys{belarusian}{numerals}
+
+\ifsystem@babelshorthands
+ \setkeys{belarusian}{babelshorthands=true}
+\else
+ \setkeys{belarusian}{babelshorthands=false}
+\fi
+
+\ifcsundef{initiate@active@char}{%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
+}{}
+
+\def\belarusian@shorthands{%
+ \bbl@activate{"}%
+ \def\language@group{belarusian}%
+ \declare@shorthand{belarusian}{"`}{„}%
+ \declare@shorthand{belarusian}{"'}{“}%
+ \declare@shorthand{belarusian}{"<}{«}%
+ \declare@shorthand{belarusian}{">}{»}%
+ \declare@shorthand{belarusian}{""}{\hskip\z@skip}%
+ \declare@shorthand{belarusian}{"~}{\textormath{\leavevmode\hbox{-}}{-}}%
+ \declare@shorthand{belarusian}{"=}{\nobreak-\hskip\z@skip}%
+ \declare@shorthand{belarusian}{"|}{\textormath{\nobreak\discretionary{-}{}{\kern.03em}\allowhyphens}{}}%
+ \declare@shorthand{belarusian}{"-}{%
+ \def\belarusian@sh@tmp{%
+ \if\belarusian@sh@next-\expandafter\belarusian@sh@emdash%
+ \else\expandafter\belarusian@sh@hyphen\fi%
+ }%
+ \futurelet\belarusian@sh@next\belarusian@sh@tmp%
+ }%
+ \def\belarusian@sh@hyphen{%
+ \nobreak\-\bbl@allowhyphens}%
+ \def\belarusian@sh@emdash##1##2{\cdash-##1##2}%
+ \def\cdash##1##2##3{\def\tempx@{##3}%
+ \def\tempa@{-}\def\tempb@{~}\def\tempc@{*}%
+ \ifx\tempx@\tempa@\@Acdash\else
+ \ifx\tempx@\tempb@\@Bcdash\else
+ \ifx\tempx@\tempc@\@Ccdash\else
+ \errmessage{Wrong usage of cdash}\fi\fi\fi}%
+ \def\@Acdash{\ifdim\lastskip>\z@\unskip\nobreak\hskip.2em\fi
+ \cyrdash\hskip.2em\ignorespaces}%
+ \def\@Bcdash{\leavevmode\ifdim\lastskip>\z@\unskip\fi
+ \nobreak\cyrdash\penalty\exhyphenpenalty\hskip\z@skip\ignorespaces}%
+ \def\@Ccdash{\leavevmode
+ \nobreak\cyrdash\nobreak\hskip.35em\ignorespaces}%
+ \ifx\cyrdash\undefined
+ \def\cyrdash{\hbox to.8em{--\hss--}}%
+ \fi
+ \declare@shorthand{belarusian}{",}{\nobreak\hskip.2em\ignorespaces}%
+}
+
+\def\nobelarusian@shorthands{%
+ \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
+}
+
+% Taken from babel-belarusian
+\def\captionsbelarusian@modern{%
+ \def\prefacename{Прадмова}%
+ \def\refname{Спіс літаратуры}%
+ \def\abstractname{Анатацыя}%
+ \def\bibname{Літаратура}%
+ \def\chaptername{Глава}%
+ \def\appendixname{Дадатак}%
+ \def\contentsname{Змест}%
+ \def\listfigurename{Спіс ілюстрацый}%
+ \def\listtablename{Спіс табліц}%
+ \def\indexname{Прадметны паказальнік}%
+ \def\authorname{Паказальнік імён}%
+ \def\figurename{Рыс.}%
+ \def\tablename{Табліца}%
+ \def\partname{Частка}%
+ \def\enclname{укл.}%
+ \def\ccname{зых.}%
+ \def\headtoname{вх.}%
+ \def\pagename{с.}%
+ \def\seename{гл.}%
+ \def\alsoname{гл.\ таксама}%
+ \def\proofname{Доказ}%
+ \def\glossaryname{Слоўнік тэрмінаў}%
+ \def\acronymname{Абрэвіятуры}%
+ \def\lstlistingname{Лістынг}%
+ \def\lstlistlistingname{Лістынгі}%
+ \def\notesname{Нататкі}%
+}
+
+\def\captionsbelarusian@tarask{%
+ \def\prefacename{Прадмова}%
+ \def\refname{Сьпіс літаратуры}%
+ \def\abstractname{Анатацыя}%
+ \def\bibname{Літаратура}%
+ \def\chaptername{Глава}%
+ \def\appendixname{Дадатак}%
+ \def\contentsname{Зьмест}%
+ \let\tocname=\contentsname
+ \def\listfigurename{Сьпіс ілюстрацый}%
+ \def\listtablename{Сьпіс табліц}%
+ \def\indexname{Прадметны паказальнік}%
+ \def\authorname{Паказальнік імён}%
+ \def\figurename{Рыс.}%
+ \def\tablename{Табліца}%
+ \def\partname{Частка}%
+ \def\enclname{укл.}%
+ \def\ccname{зых.}%
+ \def\headtoname{вх.}%
+ \def\pagename{с.}%
+ \def\seename{гл.}%
+ \def\alsoname{гл.\ таксама}%
+ \def\proofname{Доказ}%
+ \def\glossaryname{Слоўнік тэрмінаў}%
+ \def\acronymname{Абрэвіятуры}%
+ \def\lstlistingname{Лістынг}%
+ \def\lstlistlistingname{Лістынгі}%
+ \def\nomname{Азначэньні}%
+ \def\notesname{Нататкі}%
+}
+
+\def\captionsbelarusian{%
+ \csuse{captionsbelarusian@\belarusian@spelling}%
+}
+
+\def\datebelarusian@modern{%
+ \def\today{\number\day~\ifcase\month\or
+ студзеня\or
+ лютага\or
+ сакавіка\or
+ красавіка\or
+ мая\or
+ чэрвеня\or
+ ліпеня\or
+ жніўня\or
+ верасня\or
+ кастрычніка\or
+ лістапада\or
+ снежня\fi
+ \space \number\year~г.}%
+}
+
+\def\datebelarusian@tarask{%
+ \def\today{\number\day~\ifcase\month\or%
+ студзеня\or
+ лютага\or
+ сакавіка\or
+ красавіка\or
+ траўня\or
+ чэрвеня\or
+ ліпеня\or
+ жніўня\or
+ верасьня\or
+ кастрычніка\or
+ лістапада\or
+ сьнежня\fi%
+ \space \number\year~г.}%
+}
+
+\def\datebelarusian{%
+ \csuse{datebelarusian@\belarusian@spelling}%
+}
+
+\newcommand{\belarusiannumerals}[2]{\belarusiannumber{#2}}
+\newcommand{\Belarusiannumerals}[2]{\Belarusiannumber{#2}}
+
+\def\belarusiannumber#1{%
+ \ifcyrillic@numerals
+ \cyr@alph{#1}%
+ \else
+ \number#1%
+ \fi%
+}
+
+\def\Belarusiannumber#1{%
+ \ifcyrillic@numerals
+ \cyr@Alph{#1}%
+ \else
+ \number#1%
+ \fi%
+}
+
+\let\belarusiannumeral=\belarusiannumber
+\let\Belarusiannumeral=\Belarusiannumber
+
+\def\Asbuk#1{\expandafter\cyr@Alph\csname c@#1\endcsname}
+
+\def\asbuk#1{\expandafter\cyr@alph\csname c@#1\endcsname}
+
+% This is a poor man's cyrillic alphanumeric. It just uses the alphabet and
+% thus ends at 30. We now use proper cyrillic numbering.
+
+%\def\belarusian@Alph#1{\ifcase#1\or
+% А\or Б\or В\or Г\or Д\or Е\or Ж\or
+% З\or И\or К\or Л\or М\or Н\or О\or
+% П\or Р\or С\or Т\or У\or Ф\or Х\or
+% Ц\or Ч\or Ш\or Щ\or Э\or Ю\or Я\else\xpg@ill@value{#1}{belarusian@Alph}\fi}
+
+%\def\belarusian@alph#1{\ifcase#1\or
+% а\or б\or в\or г\or д\or е\or ж\or
+% з\or и\or к\or л\or м\or н\or о\or
+% п\or р\or с\or т\or у\or ф\or х\or
+% ц\or ч\or ш\or щ\or э\or ю\or я\else\xpg@ill@value{#1}{belarusian@alph}\fi}
+
+\def\belarusian@numbers{%
+ \let\latin@alph\@alph
+ \let\latin@Alph\@Alph
+ \ifcyrillic@numerals%
+ \def\belarusian@alph##1{\expandafter\belarusiannumeral\expandafter{\the##1}}%
+ \def\belarusian@Alph##1{\expandafter\belarusiannumeral\expandafter{\the##1}}%
+ \let\@alph\belarusian@alph%
+ \let\@Alph\belarusian@Alph%
+ \fi
+}
+
+\def\nobelarusian@numbers{%
+ \let\@alph\latin@alph%
+ \let\@Alph\latin@Alph%
+}
+
+\def\noextras@belarusian{%
+ \ifcyrillic@numerals\nobelarusian@numbers\fi%
+ \nobelarusian@shorthands%
+}
+
+\def\blockextras@belarusian{%
+ \ifcyrillic@numerals\belarusian@numbers\fi%
+ \ifbelarusian@babelshorthands\belarusian@shorthands\fi%
+}
+
+\def\inlineextras@belarusian{%
+ \ifbelarusian@babelshorthands\belarusian@shorthands\fi%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-belarusian.ldf>
%<*gloss-bengali.ldf>
% \fi
% \clearpage
@@ -2523,6 +3377,60 @@ and may look very wrong.}
% \end{macrocode}
% \iffalse
%</gloss-bengali.ldf>
+%<*gloss-bosnian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-bosnian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-bosnian.ldf}[polyglossia: module for bosnian]
+
+\PolyglossiaSetup{bosnian}{
+ langtag=BOS,
+ hyphennames={bosnian,croatian},
+ hyphenmins={2,2}, % adapted from gloss-croatian
+ frenchspacing=true, % adapted from gloss-croatian
+ indentfirst=false, % adapted from gloss-croatian
+ fontsetup=true
+}
+
+% TODO: Add script=Cyrillic
+
+% from babel-bosnian
+\def\captionsbosnian{%
+ \def\prefacename{Predgovor}%
+ \def\refname{Literatura}%
+ \def\abstractname{Sažetak}%
+ \def\bibname{Bibliografija}%
+ \def\chaptername{Poglavlje}%
+ \def\appendixname{Dodatak}%
+ \def\contentsname{Sadržaj}%
+ \def\listfigurename{Popis slika}%
+ \def\listtablename{Popis tablica}%
+ \def\indexname{Indeks}%
+ \def\figurename{Slika}%
+ \def\tablename{Tablica}%
+ \def\partname{Dio}%
+ \def\enclname{Prilozi}%
+ \def\ccname{Kopija}%
+ \def\headtoname{Prima}%
+ \def\pagename{Stranica}%
+ \def\seename{Vidjeti}%
+ \def\alsoname{Također vidjeti}%
+ \def\proofname{Dokaz}%
+ \def\glossaryname{Rječnik}%
+}
+
+\def\datebosnian{%
+ \def\today{\number\day.~\ifcase\month\or
+ januar\or februar\or mart\or april\or maj\or
+ juni\or juli\or august\or septembar\or oktobar\or novembar\or
+ decembar\fi \space \number\year.~}%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-bosnian.ldf>
%<*gloss-brazil.ldf>
% \fi
% \clearpage
@@ -2535,24 +3443,8 @@ and may look very wrong.}
% 'brazil' was selected in accordance with babel.
% Since brazil is a variety of portuguese, we use 'portuguese' now.
-% FIXME: Once we support babel aliases (#112) this gloss can go.
-
-\xpg@warning{The language name 'brazil' is deprectated.\MessageBreak
- Please use 'portuguese' with variant 'brazilian' instead.}
-
-\input{gloss-portuguese.ldf}
+\xpg@load@master@language{portuguese}
-\PolyglossiaSetup{brazil}{
- language=Brazilian Portuguese,
- langtag=PTG,
- hyphennames={brazil,portuguese,portuges},
- hyphenmins={2,3},
- fontsetup=true,
-}
-
-\let\captionsportuges\captionsportuguese@brazil
-\let\dateportuges\dateportuguese@brazil
-
% \end{macrocode}
% \iffalse
%</gloss-brazil.ldf>
@@ -2655,6 +3547,21 @@ and may look very wrong.}
% \end{macrocode}
% \iffalse
%</gloss-breton.ldf>
+%<*gloss-british.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-british.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-acadien.ldf}[polyglossia: module for british english]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{english}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-british.ldf>
%<*gloss-bulgarian.ldf>
% \fi
% \clearpage
@@ -2747,6 +3654,36 @@ and may look very wrong.}
% \end{macrocode}
% \iffalse
%</gloss-bulgarian.ldf>
+%<*gloss-canadian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-canadian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-canadian.ldf}[polyglossia: module for canadian english]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{english}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-canadian.ldf>
+%<*gloss-canadien.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-canadien.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-acadien.ldf}[polyglossia: module for canadian french]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{french}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-canadien.ldf>
%<*gloss-catalan.ldf>
% \fi
% \clearpage
@@ -3022,12 +3959,18 @@ and may look very wrong.}
fontsetup=true,
}
+\ifluatex
+ \RequirePackage{luavlna}
+\fi
+
\define@boolkey{czech}[czech@]{babelshorthands}[true]{}
\define@boolkey{czech}[czech@]{splithyphens}[true]{}
\define@boolkey{czech}[czech@]{vlna}[true]{}
+\setkeys{czech}{splithyphens,vlna}
+
\ifsystem@babelshorthands
\setkeys{czech}{babelshorthands=true}
\else
@@ -3085,8 +4028,7 @@ and may look very wrong.}
\def\czech@hyphens{%
\ifluatex
- \xpg@warning{The 'splithyphens' option only works for XeLaTeX.\MessageBreak
- Please use the luavlna package to enable the feature for LuaLaTeX}
+ \AfterPreamble{\enablesplithyphens{czech}}%
\else
\XeTeXinterchartokenstate=1
\XeTeXcharclass `\- \czech@hyphen
@@ -3097,7 +4039,9 @@ and may look very wrong.}
}
\def\noczech@hyphens{%
- \ifxetex
+ \ifluatex
+ \AfterPreamble{\disablesplithyphens{czech}}%
+ \else
\XeTeXcharclass `\- \z@
\fi%
}
@@ -3106,8 +4050,7 @@ and may look very wrong.}
% prevent them to land at the end of a line
\def\czech@vlna{%
\ifluatex
- \xpg@warning{The 'vlna' option only works for XeLaTeX.\MessageBreak
- Please use the luavlna package to enable the feature for LuaLaTeX}
+ \preventsingleon
\else
% Code taken and adapted from xevlna.sty
\XeTeXinterchartokenstate=1
@@ -3151,6 +4094,7 @@ and may look very wrong.}
\def\noczech@vlna{%
\ifluatex
+ \preventsingleoff
\else
\XeTeXcharclass`\(\z@
\XeTeXcharclass`\[\z@
@@ -3218,14 +4162,14 @@ and may look very wrong.}
\def\blockextras@czech{%
\ifczech@babelshorthands\czech@shorthands\fi%
- \ifczech@vlna\czech@vlna\fi%
- \ifczech@splithyphens\czech@hyphens\fi%
+ \ifczech@vlna\czech@vlna\else\noczech@vlna\fi%
+ \ifczech@splithyphens\czech@hyphens\else\noczech@hyhens\fi%
}
\def\inlineextras@czech{%
\ifczech@babelshorthands\czech@shorthands\fi%
- \ifczech@vlna\czech@vlna\fi%
- \ifczech@splithyphens\czech@hyphens\fi%
+ \ifczech@vlna\czech@vlna\else\noczech@vlna\fi%
+ \ifczech@splithyphens\czech@hyphens\else\noczech@hyhens\fi%
}
% \end{macrocode}
@@ -3412,11 +4356,15 @@ and may look very wrong.}
\def\alsoname{zie ook}%
\def\proofname{Bewijs}%
\def\glossaryname{Verklarende woordenlijst}%
+}
+
+\def\datedutch{%
\def\today{\number\day~\ifcase\month%
\or januari\or februari\or maart\or april\or mei\or juni\or
juli\or augustus\or september\or oktober\or november\or
december\fi
- \space \number\year}}
+ \space \number\year}%
+}
\def\noextras@dutch{%
\nodutch@shorthands%
@@ -3440,6 +4388,7 @@ and may look very wrong.}
% \subsection{gloss-english.ldf}
% \begin{macrocode}
\ProvidesFile{gloss-english.ldf}[polyglossia: module for english]
+
\PolyglossiaSetup{english}{
hyphennames={english,american,usenglish,USenglish},
hyphenmins={2,3},
@@ -3447,6 +4396,13 @@ and may look very wrong.}
fontsetup=true,
}
+% Babel aliases
+\setlanguagealias[variant=us]{english}{american}
+\setlanguagealias[variant=australian]{english}{australian}
+\setlanguagealias[variant=british]{english}{british}
+\setlanguagealias[variant=canadian]{english}{canadian}
+\setlanguagealias[variant=newzealand]{english}{newzealand}
+
\providebool{british@hyphen}
\providebool{english@ordinalmonthday}
\providebool{british@dateformat}
@@ -3741,41 +4697,7 @@ and may look very wrong.}
% We only provide this gloss for babel compatibility.
% The proper English language name is Persian.
-\input{gloss-persian.ldf}
-
-\PolyglossiaSetup{farsi}{
- script=Arabic,
- direction=RL,
- scripttag=arab,
- langtag=FAR,
- hyphennames={nohyphenation},
- fontsetup=true,
- localnumeral=farsinumerals
-}
-
-\define@key{farsi}{numerals}[eastern]{%
- \setkeys{persian}{numerals=#1}}
-
-\define@key{farsi}{abjadjimnotail}[true]{%
- \setkeys{persian}{abjadjimnotail=#1}}
-
-\define@key{farsi}{locale}[default]{%
- \setkeys{persian}{locale=#1}}
-
-\setkeys{farsi}{locale,numerals}
-
-%\Hijritoday is now locale-aware and will format the date with this macro:
-\DefineFormatHijriDate{farsi}{\@ensure@RTL{%
- \farsinumber{\value{Hijriday}}\space\HijriMonthArabic{\value{Hijrimonth}}\space\farsinumber{\value{Hijriyear}}}}
-
-\let\captionsfarsi\captionspersian
-\let\datefarsi\datepersian
-\let\farsi@numbers\persian@numbers
-\let\nofarsi@numbers\nopersian@numbers
-\let\farsi@globalnumbers\persian@globalnumbers
-\let\nofarsi@globalnumbers\nopersian@globalnumbers
-\let\blockextras@farsi\blockextras@persian
-\let\noextras@farsi\noextras@persian
+\xpg@load@master@language{persian}
% \end{macrocode}
% \iffalse
@@ -3889,6 +4811,10 @@ and may look very wrong.}
hyphenmins={2,2},
fontsetup=true}
+% Babel aliases
+\setlanguagealias[variant=acadian]{french}{acadien}
+\setlanguagealias[variant=canadian]{french}{canadien}
+
\def\french@variant{french}
\define@choicekey*+{french}{variant}[\val\nr]{french,canadian,acadian}[french]{%
\ifcase\nr\relax
@@ -3899,17 +4825,17 @@ and may look very wrong.}
\def\french@variant{canadien}%
\SetLanguageKeys{french}{babelname=canadien}%
\xpg@ifdefined{canadien}{}%
- {\xpg@warning{No hyphenation patterns were loaded for "French (Canada)"\MessageBreak
- I will use the standard patterns for French instead}%
- \adddialect\l@canadien\l@french\relax}%
+ {\xpg@warning{No hyphenation patterns were loaded for "French (Canada)"\MessageBreak
+ I will use the standard patterns for French instead}%
+ \adddialect\l@canadien\l@french\relax}%
\or
% acadian:
\def\french@variant{acadian}%
\SetLanguageKeys{french}{babelname=canadien}%
\xpg@ifdefined{acadian}{}%
- {\xpg@warning{No hyphenation patterns were loaded for "French (Canada)"\MessageBreak
- I will use the standard patterns for French instead}%
- \adddialect\l@acadian\l@french\relax}%
+ {\xpg@warning{No hyphenation patterns were loaded for "French (Canada)"\MessageBreak
+ I will use the standard patterns for French instead}%
+ \adddialect\l@acadian\l@french\relax}%
\fi
\xpg@info{Option: French, variant=\val}%
}{\xpg@warning{Unknown French variant `#1'}}
@@ -3920,8 +4846,7 @@ and may look very wrong.}
}%
\ifluatex
- \newluatexattribute\xpg@frpt %
- \directlua{polyglossia.load_frpt()}%
+ \directlua{require('polyglossia-french')}%
\else
\newXeTeXintercharclass\french@openbrackets % ( ] {
\newXeTeXintercharclass\french@closebrackets % ( ] {
@@ -3962,6 +4887,10 @@ and may look very wrong.}
\define@boolkey{french}[french@]{autospaceguillemets}[true]{}
\french@autospaceguillemetstrue
+\newif\iffrench@thincolonspace
+\define@boolkey{french}[french@]{thincolonspace}[true]{}
+\french@thincolonspacefalse
+
% Backwards compatibility
\define@boolkey{french}[french@]{automaticspacesaroundguillemets}[true]{%
\iffrench@automaticspacesaroundguillemets
@@ -3988,6 +4917,51 @@ and may look very wrong.}
\fi
}
+% Configuration of item labels
+\def\french@itemi{\textemdash}
+\def\french@itemii{\textemdash}
+\def\french@itemiii{\textemdash}
+\def\french@itemiv{\textemdash}
+
+\define@key{french}{itemlabels}[\textemdash]{%
+ \def\french@itemi{#1}
+ \def\french@itemii{#1}
+ \def\french@itemiii{#1}
+ \def\french@itemiv{#1}
+}
+
+\define@key{french}{itemlabeli}[\textemdash]{%
+ \def\french@itemi{#1}
+}
+
+\define@key{french}{itemlabelii}[\textemdash]{%
+ \def\french@itemii{#1}
+}
+
+\define@key{french}{itemlabeliii}[\textemdash]{%
+ \def\french@itemiii{#1}
+}
+
+\define@key{french}{itemlabeliv}[\textemdash]{%
+ \def\french@itemiv{#1}
+}
+
+\define@boolkey{french}[french@]{frenchitemlabels}[true]{%
+ \AfterPreamble{%
+ \ifdefstring{\xpg@main@language}{french}{%
+ \iffrench@frenchitemlabels
+ \renewcommand{\labelitemi}{\french@itemi}%
+ \renewcommand{\labelitemii}{\french@itemii}%
+ \renewcommand{\labelitemiii}{\french@itemiii}%
+ \renewcommand{\labelitemiv}{\french@itemiv}%
+ \else
+ \let\@makefntext\xpg@orig@makefntext
+ \fi
+ }{\xpg@warning{Option 'frenchitemlabels' only supported if French is main language!}}%
+ }%
+}
+
+
\def\french@fontsetup{%
\unless\iffrench@autospacetypewriter
\let\ttfamily\french@ttfamilyFB
@@ -3999,11 +4973,24 @@ and may look very wrong.}
\let\ttfamily\french@ttfamilyORI
}
+\def\xpg@french@thinsp{\kern 0.5\fontdimen2\font}
+
\def\french@punctuation{%
\lccode"2019="2019
\ifluatex
- \xpg@frpt=1\relax %
- \directlua{polyglossia.activate_frpt()}%
+ \iffrench@thincolonspace
+ \iffrench@autospaceguillemets
+ \directlua{polyglossia.activate_french_punct(true, true)}%
+ \else
+ \directlua{polyglossia.activate_french_punct(true, false)}%
+ \fi
+ \else
+ \iffrench@autospaceguillemets
+ \directlua{polyglossia.activate_french_punct(false, true)}%
+ \else
+ \directlua{polyglossia.activate_french_punct(false, false)}%
+ \fi
+ \fi
\else
\XeTeXinterchartokenstate=1
\XeTeXcharclass `\! \french@punctthin
@@ -4013,50 +5000,53 @@ and may look very wrong.}
\XeTeXcharclass `\⁈ \french@punctthin
\XeTeXcharclass `\⁉ \french@punctthin
\XeTeXcharclass `\; \french@punctthin
- \XeTeXcharclass `\: \french@punctthick
+ \iffrench@thincolonspace
+ \XeTeXcharclass `\: \french@punctthin
+ \else
+ \XeTeXcharclass `\: \french@punctthick
+ \fi
\XeTeXcharclass `\« \french@punctguillstart
\XeTeXcharclass `\» \french@punctguillend
\XeTeXcharclass `\‹ \french@punctguillstart
\XeTeXcharclass `\› \french@punctguillend
\XeTeXcharclass `\( \french@openbrackets
\XeTeXcharclass `\) \french@closebrackets
- \XeTeXcharclass `\] \french@openbrackets
- \XeTeXcharclass `\[ \french@closebrackets
+ \XeTeXcharclass `\[ \french@openbrackets
+ \XeTeXcharclass `\] \french@closebrackets
\XeTeXcharclass `\{ \french@openbrackets
\XeTeXcharclass `\} \french@closebrackets
- \XeTeXinterchartoks \z@ \french@punctthin = {\thinspace}%
+ \XeTeXcharclass `\⟨ \french@openbrackets
+ \XeTeXcharclass `\⟩ \french@closebrackets
+ \XeTeXinterchartoks \z@ \french@punctthin = {\xpg@french@thinsp}%
\XeTeXinterchartoks \z@ \french@punctthick = {\nobreakspace}%
- \XeTeXinterchartoks \xpg@boundaryclass \french@punctthin = {\xpg@unskip\thinspace}%
+ \XeTeXinterchartoks \xpg@boundaryclass \french@punctthin = {\xpg@unskip\xpg@french@thinsp}%
\XeTeXinterchartoks \xpg@boundaryclass \french@punctthick = {\xpg@unskip\nobreakspace}%
\iffrench@autospaceguillemets
- \XeTeXinterchartoks \french@punctguillstart \z@ = {\thinspace}% "«a" -> "«\,a"
- % \XeTeXinterchartoks \z@ \french@punctguillstart = {\nobreakspace}% "a«" unchanged?
- % \XeTeXinterchartoks \french@punctguillend \z@ = {\nobreakspace}% "»a" unchanged?
- \XeTeXinterchartoks \z@ \french@punctguillend = {\thinspace}% "a»" -> "a\,»"
- \XeTeXinterchartoks \french@punctguillstart \xpg@boundaryclass = {\thinspace\ignorespaces}% "« " -> "«\,"
- \XeTeXinterchartoks \xpg@boundaryclass \french@punctguillend = {\xpg@unskip\thinspace}% " »" -> "\,»"
+ \let\xpg@french@guillspace\xpg@french@thinsp%
+ \XeTeXinterchartoks \french@punctguillstart \z@ = {\xpg@french@guillspace}% "«a" -> "«\,a"
+ % \XeTeXinterchartoks \z@ \french@punctguillstart = {\nobreakspace}% "a«" unchanged?
+ % \XeTeXinterchartoks \french@punctguillend \z@ = {\nobreakspace}% "»a" unchanged?
+ \XeTeXinterchartoks \z@ \french@punctguillend = {\xpg@french@guillspace}% "a»" -> "a\,»"
+ \XeTeXinterchartoks \french@punctguillstart \xpg@boundaryclass = {\xpg@french@guillspace\ignorespaces}% "« " -> "«\,"
+ \XeTeXinterchartoks \xpg@boundaryclass \french@punctguillend = {\xpg@unskip\xpg@french@guillspace}% " »" -> "\,»"
+ \XeTeXinterchartoks \french@closebrackets \french@punctguillend = {\xpg@french@guillspace}% ")»" -> ")\,»"
+ \else
+ \def\xpg@french@guillspace{}%
\fi
- \XeTeXinterchartoks \french@punctguillend \french@punctthin = {\thinspace}% "»;" -> "»\,;"
+ \XeTeXinterchartoks \french@punctguillend \french@punctthin = {\xpg@french@thinsp}% "»;" -> "»\,;"
\XeTeXinterchartoks \french@punctguillend \french@punctthick = {\nobreakspace}% "»:" -> "» :"
- \XeTeXinterchartoks \french@punctthin \french@punctguillend = {\thinspace}% "?»" -> "?\,»"
+ \XeTeXinterchartoks \french@punctthin \french@punctguillend = {\xpg@french@thinsp}% "?»" -> "?\,»"
\XeTeXinterchartoks \french@openbrackets \french@punctthin = {\xpg@unskip}% "(?" -> "(?" and not "( ?"
\XeTeXinterchartoks \french@punctthin \french@closebrackets = {\xpg@unskip}% "?)" -> "?)" (code not need, just for symetry with previous one)
- \XeTeXinterchartoks \french@closebrackets \french@punctthin = {\thinspace}% ")?" -> ")\,?"
+ \XeTeXinterchartoks \french@closebrackets \french@punctthin = {\xpg@french@thinsp}% ")?" -> ")\,?"
\XeTeXinterchartoks \french@closebrackets \french@punctthick = {\nobreakspace}% "):" -> ") :"
\fi
- }
+}
\def\nofrench@punctuation{%
\lccode"2019=\z@
\ifluatex
- \xpg@frpt=0\relax %
- % Though it would make compilation slightly faster, it is not possible to
- % safely uncomment the following line. Imagine the following case: you start
- % a paragraph by some french text, then, in the same paragraph, you change
- % the language to something else, and thus call the following line. This means
- % that, at then end of the paragraph, the function won't be in the callback,
- % so the beginning of the paragraph won't be processed by it.
- %\directlua{polyglossia.desactivate_frpt()}
+ \directlua{polyglossia.deactivate_french_punct()}%
\else
\XeTeXcharclass `\! \z@
\XeTeXcharclass `\? \z@
@@ -4070,9 +5060,17 @@ and may look very wrong.}
\XeTeXcharclass `\» \z@
\XeTeXcharclass `\‹ \z@
\XeTeXcharclass `\› \z@
+ \XeTeXcharclass `\( \z@
+ \XeTeXcharclass `\) \z@
+ \XeTeXcharclass `\[ \z@
+ \XeTeXcharclass `\] \z@
+ \XeTeXcharclass `\{ \z@
+ \XeTeXcharclass `\} \z@
+ \XeTeXcharclass `\⟨ \z@
+ \XeTeXcharclass `\⟩ \z@
\XeTeXinterchartokenstate=0
\fi
- }
+}
\def\captionsfrench{%
\def\refname{Références}%
@@ -4102,7 +5100,7 @@ and may look very wrong.}
\def\ccname{Copie à }%
\def\headtoname{}%
\def\proofname{Démonstration}%
- }
+}
\def\datefrench{%
\def\today{\ifx\ier\undefined\def\ier{er}\fi
@@ -4172,23 +5170,7 @@ and may look very wrong.}
% We only provide this gloss for babel compatibility.
-\input{gloss-friulian.ldf}
-
-\PolyglossiaSetup{friulan}{%
- language=Friulian,
- hyphennames={friulan,furlan},
- hyphenmins={2,2},
- langtag=FRL,
- indentfirst=false,
- fontsetup=true,
- frenchspacing=true,
-}
-
-\let\captionsfriulan\captionsfriulian
-\let\datefriulan\datefriulian
-\let\noextras@friulan\noextras@friulian
-\let\blockextras@friulan\blockextras@friulian
-\let\inlineextras@friulan\inlineextras@friulian
+\xpg@load@master@language{friulian}
% \end{macrocode}
% \iffalse
@@ -4212,6 +5194,9 @@ and may look very wrong.}
frenchspacing=true,
}
+% Babel and backwards compat. alias
+\setlanguagealias{friulian}{friulan}
+
\def\captionsfriulian{%
\def\prefacename{Prefazion}%
\def\refname{Riferiments}%
@@ -4285,6 +5270,10 @@ and may look very wrong.}
fontsetup=true,
}
+% Babel aliases
+\setlanguagealias[variant=irish]{gaelic}{irish}
+\setlanguagealias[variant=scottish]{gaelic}{scottish}
+
\def\gaelic@variant{irish}
\define@choicekey*+{gaelic}{variant}[\val\nr]{irish,scottish}[irish]{%
\ifcase\nr\relax
@@ -4431,6 +5420,239 @@ and may look very wrong.}
% \end{macrocode}
% \iffalse
%</gloss-galician.ldf>
+%<*gloss-georgian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-georgian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-georgian.ldf}[polyglossia: module for georgian]
+
+\PolyglossiaSetup{georgian}{
+ script=Georgian,
+ scripttag=geor,
+ langtag=KAT,
+ hyphennames={georgian},
+ fontsetup=true,
+ localnumeral=georgiannumerals
+}
+
+\newif\ifgeorgian@numerals
+\define@key{georgian}{numerals}[arabic]{%
+ \ifstrequal{#1}{georgian}%
+ {\georgian@numeralstrue}%
+ {\georgian@numeralsfalse}%
+}
+
+\define@boolkey{georgian}[georgian@]{babelshorthands}[true]{}
+
+\define@boolkey{georgian}[georgian@]{oldmonthnames}[true]{}
+
+\ifsystem@babelshorthands
+ \setkeys{georgian}{babelshorthands=true}
+\else
+ \setkeys{georgian}{babelshorthands=false}
+\fi
+
+\ifcsundef{initiate@active@char}{%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
+}{}
+
+\def\georgian@shorthands{%
+ \bbl@activate{"}%
+ \def\language@group{georgian}%
+ \declare@shorthand{georgian}{"`}{„}%
+ \declare@shorthand{georgian}{"'}{“}%
+ \declare@shorthand{georgian}{"<}{«}%
+ \declare@shorthand{georgian}{">}{»}%
+ \declare@shorthand{georgian}{""}{\hskip\z@skip}%
+ \declare@shorthand{georgian}{"~}{\textormath{\leavevmode\hbox{-}}{-}}%
+ \declare@shorthand{georgian}{"=}{\nobreak-\hskip\z@skip}%
+ \declare@shorthand{georgian}{"|}{\textormath{\nobreak\discretionary{-}{}{\kern.03em}\allowhyphens}{}}%
+ \declare@shorthand{georgian}{"-}{%
+ \def\georgian@sh@tmp{%
+ \if\georgian@sh@next-\expandafter\georgian@sh@emdash%
+ \else\expandafter\georgian@sh@hyphen\fi%
+ }%
+ \futurelet\georgian@sh@next\georgian@sh@tmp}%
+ \def\georgian@sh@hyphen{%
+ \nobreak\-\bbl@allowhyphens}%
+ \def\georgian@sh@emdash##1##2{\cdash-##1##2}%
+ \def\cdash##1##2##3{\def\tempx@{##3}%
+ \def\tempa@{-}\def\tempb@{~}\def\tempc@{*}%
+ \ifx\tempx@\tempa@\@Acdash\else
+ \ifx\tempx@\tempb@\@Bcdash\else
+ \ifx\tempx@\tempc@\@Ccdash\else
+ \errmessage{Wrong usage of cdash}\fi\fi\fi}%
+ \def\@Acdash{\ifdim\lastskip>\z@\unskip\nobreak\hskip.2em\fi
+ \cyrdash\hskip.2em\ignorespaces}%
+ \def\@Bcdash{\leavevmode\ifdim\lastskip>\z@\unskip\fi
+ \nobreak\cyrdash\penalty\exhyphenpenalty\hskip\z@skip\ignorespaces}%
+ \def\@Ccdash{\leavevmode
+ \nobreak\cyrdash\nobreak\hskip.35em\ignorespaces}%
+ \ifx\cyrdash\undefined
+ \def\cyrdash{\hbox to.8em{--\hss--}}%
+ \fi
+ \declare@shorthand{georgian}{",}{\nobreak\hskip.2em\ignorespaces}%
+}
+
+\def\nogeorgian@shorthands{%
+ \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
+}
+
+\def\captionsgeorgian{%
+ \def\prefacename{წინასიტყვაობა}%
+ \def\refname{ლიტერატურა}%
+ \def\abstractname{ანოტაცია}%
+ \def\bibname{ლიტერატურა}%
+ \def\chaptername{თავი}%
+ \def\appendixname{დანართი}%
+ \@ifundefined{thechapter}
+ {\def\contentsname{შინაარსი}}%
+ {\def\contentsname{შინაარსი}}%
+ \let\tocname=\contentsname
+ \def\listfigurename{სურათი}%
+ \def\listtablename{ცხრილი}%
+ \def\indexname{საძიებელი}%
+ \def\authorname{სახელთა საძიებელი}%
+ \def\figurename{სურ.}%
+ \def\tablename{ცხრ.}%
+ \def\partname{ნაწილი}%
+ \def\enclname{ჩათვ.}%
+ \def\ccname{წყარ.}%
+ \def\headtoname{შ.}%
+ \def\pagename{გვ.}%
+ \def\seename{იხ.}%
+ \def\alsoname{იხ.\ ასევე}%
+ \def\proofname{დამტკიცება}%
+ \def\glossaryname{ტერმინები}%
+}%
+
+\def\dategeorgian{%
+ \def\today{\number\day~\ifcase\month\or
+ იანვარი\or
+ თებერვალი\or
+ მარტი\or
+ აპრილი\or
+ მაისი\or
+ ივნისი\or
+ ივლისი\or
+ აგვისტო\or
+ სექტემბერი\or
+ ოქტომბერი\or
+ ნოემბერი\or
+ დეკემბერი\fi
+ \space \number\year~წ.}%
+ \ifgeorgian@oldmonthnames
+ \dategeorgian@old%
+ \fi
+}
+
+\def\dategeorgian@old{%
+ \def\today{\number\day~\ifcase\month\or
+ აპნისი\or
+ სურწყუნისი\or
+ მირკანი\or
+ იგრიკა\or
+ ვარდობისთვე\or
+ თიბათვე\or
+ მკათათვე\or
+ მარიამობისთვე\or
+ ახალწლისა ენკენისთვე\or
+ ღვინობისთვე\or
+ გიორგობისთვე\or
+ ქრისტეშობისთვე\fi
+ \space \number\year~წ.}%
+}
+
+\def\georgian@numbers{%
+ \ifgeorgian@numerals%
+ \def\georgian@alph##1{\expandafter\georgiannumeral\expandafter{\the##1}}%
+ \let\@alph\georgian@@alph%
+ \fi
+}
+
+\def\nogeorgian@numbers{%
+ \let\@alph\latin@alph%
+ \let\georgian@alph\@undefined%
+}
+
+\def\georgian@globalnumbers{%
+ \ifgeorgian@numerals
+ \let\@arabic\georgiannumber%
+ \renewcommand\thefootnote{\localnumeral*{footnote}}%
+ \renewcommand\theequation{\localnumeral*{equation}}%
+ \fi
+}
+
+% Store original definition
+\let\xpg@save@arabic\@arabic
+
+\def\nogeorgian@globalnumbers{
+ \let\@arabic\xpg@save@arabic%
+}
+
+\newcommand{\georgiannumerals}[2]{%
+ \ifgeorgian@numerals
+ \georgiannumber{#2}%
+ \else
+ #2%
+ \fi%
+}
+
+\protected\def\georgiannumber#1{\expandafter\@georgiannumber\expandafter{\number#1}}
+\def\@georgiannumber#1{%
+ \ifnum#1<\@ne\space\geor@ill@value{#1}%
+ \else
+ \ifnum#1<10\expandafter\geor@num@i\number#1%
+ \else
+ \ifnum#1<100\expandafter\geor@num@ii\number#1%
+ \else
+ \ifnum#1<\@m\expandafter\geor@num@iii\number#1%
+ \else
+ \ifnum#1<\@M\expandafter\geor@num@iv\number#1%
+ \else
+ \space\geor@ill@value{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\let\georgiannumeral=\georgiannumber
+\def\geor@num@i#1{% 1--9
+ \ifcase#1\or ა\or ბ\or გ\or დ\or ე\or ვ\or ზ\or ჱ\or თ\fi}
+\def\geor@num@ii#1{% 10--90
+ \ifcase#1\or ი\or კ\or ლ\or მ\or ნ\or ჲ\or ო\or პ\or ჟ\fi
+ \geor@num@i}
+\def\geor@num@iii#1{% 100--900
+ \ifcase#1\or რ\or ს\or ტ\or ჳ\or ფ\or ქ\or ღ\or ყ\or შ\fi
+ \geor@num@ii}
+\def\geor@num@iv#1{% 1000--9000
+ \ifcase#1\or ჩ\or ც\or ძ\or წ\or ჭ\or ხ\or ჴ\or ჯ\or ჰ\fi
+ \geor@num@iii}
+\def\geor@ill@value#1{\xpg@warning{Illegal value (#1) for Georgian numeral}[$#1$]}
+
+\def\noextras@georgian{%
+ \ifgeorgian@numerals\nogeorgian@numbers\fi%
+ \nogeorgian@shorthands%
+}
+
+\def\blockextras@georgian{%
+ \ifgeorgian@numerals\georgian@numbers\fi%
+ \ifgeorgian@babelshorthands\georgian@shorthands\fi%
+}
+
+\def\inlineextras@georgian{%
+ \ifgeorgian@babelshorthands\georgian@shorthands\fi%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-georgian.ldf>
%<*gloss-german.ldf>
% \fi
% \clearpage
@@ -4438,6 +5660,7 @@ and may look very wrong.}
% \subsection{gloss-german.ldf}
% \begin{macrocode}
\ProvidesFile{gloss-german.ldf}[polyglossia: module for german]
+
\PolyglossiaSetup{german}{
hyphenmins={2,2},
frenchspacing=true,
@@ -4446,6 +5669,14 @@ and may look very wrong.}
babelname=ngerman
}
+% Babel aliases
+\setlanguagealias[variant=austrian,spelling=old]{german}{austrian}
+\setlanguagealias[variant=austrian,spelling=new]{german}{naustrian}
+\setlanguagealias[variant=german,spelling=old]{german}{germanb}
+\setlanguagealias[variant=german,spelling=new]{german}{ngerman}
+\setlanguagealias[variant=swiss,spelling=old]{german}{swissgerman}
+\setlanguagealias[variant=swiss,spelling=new]{german}{nswissgerman}
+
\newif\if@german@oldspelling
\@german@oldspellingfalse
\define@choicekey*+{german}{spelling}[\val\nr]{new,old,1901}[new]{%
@@ -4504,21 +5735,26 @@ and may look very wrong.}
\else
\if@swiss@locale
\SetLanguageKeys{german}{babelname=nswissgerman}%
- \fi
+ \else
\if@austrian@locale
\SetLanguageKeys{german}{babelname=naustrian}%
- \fi
+ \else
+ \SetLanguageKeys{german}{babelname=ngerman}%
+ \fi\fi
\fi
}
-\newif\if@german@fraktur
-\define@choicekey*+{german}{script}[\val\nr]{latin,fraktur}[latin]{%
+\newif\if@german@blackletter
+\define@choicekey*+{german}{script}[\val\nr]{latin,blackletter,fraktur}[latin]{%
\ifcase\nr\relax
% latin:
- \@german@frakturfalse%
+ \@german@blackletterfalse%
+ \or
+ % blackletter:
+ \@german@blacklettertrue%
\or
% fraktur:
- \@german@frakturtrue%
+ \@german@blacklettertrue%
\fi
\xpg@info{Option: German, script=\val}%
}{\xpg@warning{Unknown German script `#1'}}
@@ -4626,7 +5862,7 @@ and may look very wrong.}
}
%%Strings for Fraktur contributed by Gerrit <z0idberg . gmx . de>
-\def\captions@german@fraktur{%
+\def\captions@german@blackletter{%
\captions@german%
\def\abstractname{Zuſammenfaſſung}%
\def\seename{ſiehe}%
@@ -4634,7 +5870,7 @@ and may look very wrong.}
\def\glossaryname{Gloſſar}%
}
-\def\date@german@fraktur{%
+\def\date@german@blackletter{%
\def\today{\number\day.%
\space \ifcase\month%
\or\if@austrian@locale Jänner\else Januar\fi\or Februar\or März\or%
@@ -4644,13 +5880,13 @@ and may look very wrong.}
}
\def\captionsgerman{%
- \if@german@fraktur\captions@german@fraktur\else\captions@german\fi
+ \if@german@blackletter\captions@german@blackletter\else\captions@german\fi
\if@austrian@locale\captions@german@austrian\fi
\if@swiss@locale\captions@german@swiss\fi
}
\def\dategerman{%
- \if@german@fraktur\date@german@fraktur\else\date@german\fi
+ \if@german@blackletter\date@german@blackletter\else\date@german\fi
}
\def\german@language{%
@@ -4692,6 +5928,21 @@ and may look very wrong.}
% \end{macrocode}
% \iffalse
%</gloss-german.ldf>
+%<*gloss-germanb.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-germanb.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-germanb.ldf}[polyglossia: module for german (old spelling)]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-germanb.ldf>
%<*gloss-greek.ldf>
% \fi
% \clearpage
@@ -4699,6 +5950,7 @@ and may look very wrong.}
% \subsection{gloss-greek.ldf}
% \begin{macrocode}
\ProvidesFile{gloss-greek.ldf}[polyglossia: module for greek]
+
\PolyglossiaSetup{greek}{
script=Greek,
scripttag=grek,
@@ -4711,6 +5963,9 @@ and may look very wrong.}
%TODO localalph={greek@alph,greek@Alph}
}
+% Babel aliases
+\setlanguagealias[variant=polytonic]{greek}{polutonikogreek}
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% The code in this file was initially adapted from the antomega
%% module for greek. Currently large parts of it derive from the
@@ -5366,7 +6621,7 @@ and may look very wrong.}
\PolyglossiaSetup{hungarian}{
babelname=magyar,
- hyphennames={magyar,hungarian},
+ hyphennames={hungarian,magyar},
langtag=HUN,
hyphenmins={2,2},
fontsetup=true,
@@ -5374,6 +6629,49 @@ and may look very wrong.}
\frenchspacing
+% Babel and backwards compat. alias
+\setlanguagealias{hungarian}{magyar}
+
+\newif\if@hungarian@swapcaptions
+\newif\if@hungarian@swapheadings
+\newif\if@hungarian@swapheaders
+\define@choicekey*+{hungarian}{swapstrings}[\val\nr]{all,captions,headings,headers,hheaders,none}[all]{%
+ \ifcase\nr\relax
+ % all:
+ \@hungarian@swapcaptionstrue%
+ \@hungarian@swapheadingstrue%
+ \@hungarian@swapheaderstrue%
+ \or
+ % captions:
+ \@hungarian@swapcaptionstrue%
+ \@hungarian@swapheadingsfalse%
+ \@hungarian@swapheadersfalse%
+ \or
+ % headings:
+ \@hungarian@swapcaptionsfalse%
+ \@hungarian@swapheadingstrue%
+ \@hungarian@swapheadersfalse%
+ \or
+ % headers:
+ \@hungarian@swapcaptionsfalse%
+ \@hungarian@swapheadingsfalse%
+ \@hungarian@swapheaderstrue%
+ \or
+ % hheaders:
+ \@hungarian@swapcaptionsfalse%
+ \@hungarian@swapheadingstrue%
+ \@hungarian@swapheaderstrue%
+ \or
+ % none:
+ \@hungarian@swapcaptionsfalse%
+ \@hungarian@swapheadingsfalse%
+ \@hungarian@swapheadersfalse%
+ \fi
+ \xpg@info{Option: Hungarian, swapstrings=\val}%
+}{\xpg@warning{Unknown Hungarian swapstrings value `#1'}}
+
+\setkeys{hungarian}{swapstrings}
+
\def\captionshungarian{%
\def\refname{Hivatkozások}%
\def\abstractname{Kivonat}%
@@ -5421,25 +6719,188 @@ and may look very wrong.}
21-én\or 22-én\or 23-án\or 24-én\or 25-én\or
26-án\or 27-én\or 28-án\or 29-én\or 30-án\or
31-én\fi}%
- \let\ontoday\ondatehungarian}
+ \let\ontoday\ondatehungarian%
+ \let\ondatemagyar\ondatehungarian%
+}
-% change 'táblázat x.x' to 'x.x. táblázat'
-\def\xpg@hungarian@fnum@table{\thetable.~\tablename}
+% Save original capsformats
\let\xpg@save@fnum@table\fnum@table
-
-% change 'ábra x.x' to 'x.x. ábra'
-\def\xpg@hungarian@fnum@figure{\thefigure.~\figurename}
\let\xpg@save@fnum@figure\fnum@figure
+\def\hungarian@capsformat{%
+ %
+ % Change captions
+ \if@hungarian@swapcaptions
+ % change 'ábra x.x' to 'x.x. ábra'
+ \def\fnum@figure{\thefigure.~\figurename}
+ %
+ % change 'táblázat x.x' to 'x.x. táblázat'
+ \def\fnum@table{\thetable.~\tablename}
+ \fi
+ %
+ % change chapter and part headings
+ \if@hungarian@swapheadings
+ % With titlesec
+ \ifdefined\titleformat%
+ \ifdefined\@part%
+ \let\xpg@save@part@format\@part%
+ \patchcmd{\@part}%
+ {\partname\nobreakspace\thepart}%
+ {\thepart.\nobreakspace\partname}%
+ {}%
+ {\xpg@warning{Failed to patch part for Hungarian}}%
+ \fi%
+ \ifdefined\chapter%
+ \titleformat\chapter[display]%
+ {\@ifundefined{ttl@fil}{\raggedright}{\ttl@fil}\ttl@fonts\ttl@sizes6}
+ {\thechapter.\space\@chapapp}{.8\baselineskip}{\ttl@sizes\z@\ttl@passexplicit}
+ \fi%
+ \else% (not \ifdefined\titleformat)
+ % With KOMA
+ \ifdefined\sectionformat%
+ \ifdefined\partformat%
+ \let\xpg@save@part@format\partformat%
+ \renewcommand{\partformat}{\thepart.~\partname}%
+ \fi%
+ \ifdefined\chapterformat%
+ \let\xpg@save@chap@format\chapterformat%
+ \renewcommand{\chapterformat}{\mbox{\thechapter\autodot%
+ \IfUsePrefixLine{\nobreakspace\chapapp}{\enskip}}}%
+ \fi%
+ \else% (not \ifdefined\sectionformat)
+ % With memoir
+ \ifdefined\@memptsize%
+ \ifdefined\@makechapterhead%
+ \let\xpg@save@chap@format\@makechapterhead%
+ \patchcmd{\@makechapterhead}{\printchaptername \chapternamenum \printchapternum}%
+ {\printchapternum.\chapternamenum\printchaptername}%
+ {}%
+ {\xpg@warning{Failed to patch chapter for Hungarian}}%
+ \fi%
+ \ifdefined\@part%
+ \let\xpg@save@part@format\@part%
+ \patchcmd{\@part}{\printpartname \partnamenum \printpartnum}%
+ {\printpartnum.\partnamenum\printpartname}%
+ {}%
+ {\xpg@warning{Failed to patch part for Hungarian}}%
+ \fi%
+ \else% (not \ifdefined\@memptsize)
+ % With standard classes
+ \ifdefined\@makechapterhead%
+ \let\xpg@save@chap@format\@makechapterhead%
+ \patchcmd{\@makechapterhead}%
+ {\@chapapp\space \thechapter}%
+ {\thechapter.\space \@chapapp}%
+ {}%
+ {\xpg@warning{Failed to patch chapter for Hungarian}}%
+ \fi%
+ \ifdefined\@part%
+ \let\xpg@save@part@format\@part%
+ \patchcmd{\@part}%
+ {\partname\nobreakspace\thepart}%
+ {\thepart.\nobreakspace\partname}%
+ {}%
+ {\xpg@warning{Failed to patch part for Hungarian}}%
+ \fi% (end \ifdefined\@part)
+ \fi% (end \ifdefined\@memptsize)
+ \fi% (end \ifdefined\sectionformat)
+ \fi% (end \ifdefined\titleformat)
+ \fi% (end \if@hungarian@swapheadings)
+ %
+ % Change running headers
+ \if@hungarian@swapheaders
+ \ifdefined\chapterformat%
+ % With KOMA
+ \let\xpg@save@chaptermark@format\chaptermarkformat%
+ \renewcommand*\chaptermarkformat{%
+ \thechapter\autodot\ \IfChapterUsesPrefixLine{\chapapp\enskip}{}}
+ \else% (not \ifdefined\chapterformat)
+ \ifdefined\@memptsize%
+ % With memoir
+ \let\xpg@save@chaptermark@format\chaptermark%
+ \renewcommand*\chaptermark[1]{%
+ \markboth{\memUChead{%
+ \ifnum \c@secnumdepth >\m@ne
+ \if@mainmatter
+ \thechapter.\ \@chapapp\ %
+ \fi
+ \fi
+ ##1}}{}}%
+ \else% (not \ifdefined\@memptsize)
+ % With standard classes
+ \ifdefined\chaptermark%
+ \let\xpg@save@chaptermark@format\chaptermark%
+ \patchcmd{\chaptermark}%
+ {\@chapapp\ \thechapter.}%
+ {\thechapter.\ \@chapapp}%
+ {}%
+ {\xpg@warning{Failed to patch chaptermark for Hungarian}}%
+ \fi% (end \ifdefined\chaptermark)
+ \fi% (end \ifdefined\@memptsize)
+ \fi% (end \ifdefined\chapterformat)
+ \fi% (end \if@hungarian@swapheaders)
+}
+
+\def\nohungarian@capsformat{%
+ %
+ % Reset changes of \hungarian@capsformat
+ \let\fnum@table\xpg@save@fnum@table%
+ \let\fnum@figure\xpg@save@fnum@figure%
+ %
+ % Reset chapter and part heading
+ \ifdefined\titleformat%
+ % With titlesec
+ \ifdefined\xpg@save@part@format
+ \let\@part\xpg@save@part@format
+ \fi%
+ \ifdefined\chapter
+ \titleformat\chapter[display]%
+ {\@ifundefined{ttl@fil}{\raggedright}{\ttl@fil}\ttl@fonts\ttl@sizes6}
+ {\@chapapp\space\thechapter}{.8\baselineskip}{\ttl@sizes\z@\ttl@passexplicit}
+ \fi%
+ \else% (not \ifdefined\titleformat)
+ \ifdefined\sectionformat%
+ % With KOMA
+ \ifdefined\xpg@save@part@format
+ \let\partformat\xpg@save@part@format
+ \fi%
+ \ifdefined\xpg@save@chap@format
+ \let\chapterformat\xpg@save@chap@format
+ \fi%
+ \else%
+ % With memoir and standard classes
+ \ifdefined\xpg@save@part@format
+ \let\@part\xpg@save@part@format
+ \fi%
+ \ifdefined\xpg@save@chap@format
+ \let\@makechapterhead\xpg@save@chap@format
+ \fi%
+ \fi% (end \ifdefined\sectionformat)
+ \fi% (end \ifdefined\titleformat)
+ %
+ % Reset headers
+ \ifdefined\chaptermarkformat%
+ % With KOMA
+ \ifdefined\xpg@save@chaptermark@format
+ \let\chaptermarkformat\xpg@save@chaptermark@format%
+ \fi
+ \else%
+ \ifdefined\chaptermark%
+ % With memoir and standard classes
+ \ifdefined\xpg@save@chaptermark@format
+ \let\chaptermark\xpg@save@chaptermark@format%
+ \fi
+ \fi% (end \ifdefined\chaptermark)
+ \fi% (end \ifdefined\chapterformat)
+}
+
\def\blockextras@hungarian{%
- \let\fnum@table\xpg@hungarian@fnum@table
- \let\fnum@figure\xpg@hungarian@fnum@figure
+ \hungarian@capsformat%
}
\def\noextras@hungarian{%
- \let\fnum@table\xpg@save@fnum@table
- \let\fnum@figure\xpg@save@fnum@figure
- \let\ontoday\@undefined
+ \nohungarian@capsformat%
+ \let\ontoday\@undefined%
}
% \end{macrocode}
@@ -5556,17 +7017,7 @@ and may look very wrong.}
% We only provide this gloss for babel compatibility. Since irish is
% a gaelic variety, we use 'gaelic' with variant 'irish' now.
-\input{gloss-gaelic.ldf}
-
-\PolyglossiaSetup{irish}{
- hyphennames={irish},
- hyphenmins={2,2},
- langtag=IRI,
- fontsetup=true,
-}
-
-\let\captionsirish\captionsgaelic@irish
-\let\dateirish\dategaelic@irish
+\xpg@load@master@language{gaelic}
% \end{macrocode}
% \iffalse
@@ -6445,6 +7896,9 @@ and may look very wrong.}
localnumeral=kurdishnumerals
}
+% Babel aliases
+\setlanguagealias[variant=kurmanji]{kurdish}{kurmanji}
+
\newif\if@kurdish@kurmanji
\def\kurdish@variant{sorani}
\define@choicekey*+{kurdish}{variant}[\val\nr]{sorani,kurmanji}[sorani]{%
@@ -6966,301 +8420,910 @@ and may look very wrong.}
%
% \subsection{gloss-latin.ldf}
% \begin{macrocode}
-%%
-%% This is file `gloss-latin.ldf',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% gloss-latin.dtx (with options: `lamodern')
-%% ------------------------------------------------------------------
-%% Latin module for polyglossia
-%% Copyright (C) Claudio Beccari 2013-2016
-%% Copyright (C) Élie Roux 2016
-%% This work is distributed under the MIT License.
-%%
-%% See the postamble.
-%% ------------------------------------------------------------------
-\ProvidesFile{gloss-latin.ldf}
- [2016/09/10 v.1.03 Latin support from polyglossia]
-%%
+\ProvidesFile{gloss-latin.ldf}[polyglossia: module for Latin v.2.0 2019-10-28]
+\ExplSyntaxOn
-\PolyglossiaSetup{latin}{%
- hyphennames={latin},
- hyphenmins={2,2},
- langtag=LAT,
- frenchspacing=true,
- fontsetup=true,
-}
-\def\classicuclccodes{\lccode`\V=`\u \uccode`\u=`\V}
-\def\noclassicuclccodes{\lccode`\V=`\v \uccode`\u=`\U}
-\def\tmp@modern{modern}
-\def\tmp@medieval{medieval}
-\unless\ifluatex
- \def\tmp@classic{classic}
- \def\tmp@liturgical{liturgical}
-\fi
-\newif\ifmedieval\medievalfalse
-\newif\ifclassic\classicfalse
-\define@boolkey{latin}[latin@]{ecclesiastic}[true]{}
+\PolyglossiaSetup {latin}
+ {
+ hyphennames = {latin},
+ hyphenmins = {2,2},
+ frenchspacing = true,
+ fontsetup = true,
+ langtag = LAT
+ }
-\let\latin@variant\l@latin
-\ifluatex
- \ifcsname l@latin\endcsname\xpg@set@language@luatex@ii{latin}\fi
-\fi
-\def\captionslatin{\latincaptions}%
-\def\datelatin{\latindate}%
-\define@key{latin}{variant}[modern]{%
-\def\@tempa{#1}%
-\ifx\@tempa\tmp@medieval
- \ifluatex
- \ifcsname l@latin\endcsname\xpg@set@language@luatex@ii{latin}\fi
- \fi
- \let\latin@variant\l@latin
- \xpg@set@language@luatex@ii{latin}
- \medievaltrue \classictrue
- \xpg@info{Option: Medieval Latin}%
-\else
- \ifx\@tempa\tmp@classic
- \unless\ifluatex
- \unless\ifcsname l@classiclatin\endcsname
- \xpg@nopatterns{Classic Latin}%
- \adddialect\l@classiclatin\l@latin
- \let\latin@variant\l@latin
- \else
- \let\latin@variant\l@classiclatin
- \fi
- \fi
- \medievalfalse\classictrue
- \xpg@info{Option: Classic Latin}%
- \else
- \ifx\@tempa\tmp@liturgical\unless\ifluatex
- \unless\ifcsname l@liturgicallatin\endcsname
- \xpg@nopatterns{Liturgical Latin}%
- \adddialect\l@liturgicallatin\l@latin
- \def\latin@variant{\l@latin}%
- \else
- \let\latin@variant\l@liturgicallatin
- \fi
- \medievaltrue\classicfalse
- \xpg@info{Option: Liturgical Latin}\fi
- \else
- \ifx\@tempa\tmp@modern
- \let\latin@variant\l@latin
- \ifluatex\xpg@set@language@luatex@ii{latin}\fi
- \xpg@info{Option: Modern Latin}%
- \else
- \def\latin@variant{\l@nohyphenation}%
- \PackageWarning{polyglossia}{%
- *******************\MessageBreak
- No hyphenation set for \@tempa
- *******************\MessageBreak
- }{}%
- \fi
- \fi
- \fi
-\fi
-}
+% Babel aliases
+\setlanguagealias[variant=classic]{latin}{latinclassic}
+\setlanguagealias[variant=ecclesiastic]{latin}{latinecclesiastic}
+\setlanguagealias[variant=medieval]{latin}{latinmedieval}
-\def\latin@language{\language=\latin@variant}%
-\ifluatex
- \PackageWarning{polyglossia}{\MessageBreak\MessageBreak
- *****************\MessageBreak
- The ecclesiastic option is not active\MessageBreak
- when typesetting with LuaLaTeX\MessageBreak
- *****************\MessageBreak
- \MessageBreak}{}
- \else
- \def\ecclesiasticlatin@punctuation{%
- \def\xpg@unskip{\ifhmode\ifdim\lastskip>\z@\unskip\fi\fi}
- \lccode\string"2019=\string"2019
- \newXeTeXintercharclass\ecclesiasticlatin@punctthin
- \newXeTeXintercharclass\ecclesiasticlatin@punctguillstart
- \newXeTeXintercharclass\ecclesiasticlatin@punctguillend
- \XeTeXinterchartokenstate=1
- \XeTeXcharclass `\! \ecclesiasticlatin@punctthin
- \XeTeXcharclass `\? \ecclesiasticlatin@punctthin
- \XeTeXcharclass `\; \ecclesiasticlatin@punctthin
- \XeTeXcharclass `\: \ecclesiasticlatin@punctthin
- \XeTeXcharclass `\« \ecclesiasticlatin@punctguillstart
- \XeTeXcharclass `\» \ecclesiasticlatin@punctguillend
- \XeTeXinterchartoks \z@ \ecclesiasticlatin@punctthin = {\penalty\@M
- \hskip.2\fontdimen2\font \@plus\z@\@minus\z@}%
- \XeTeXinterchartoks 255 \ecclesiasticlatin@punctthin = {\xpg@unskip}
- \XeTeXinterchartoks \ecclesiasticlatin@punctguillstart \z@ = {\penalty\@M
- \hskip.2\fontdimen2\font \@plus\z@\@minus\z@\ignorespaces}
- \XeTeXinterchartoks \z@ \ecclesiasticlatin@punctguillend = {\xpg@unskip
- \penalty\@M\hskip.2\fontdimen2\font \@plus\z@\@minus\z@}
- }
- \def\noecclesiasticlatin@punctuation{%
- \lccode\string"2019=\z@
+%%%%% Variables and commands concerning spelling
+
+\bool_new:N \l_polyglossia_latin_use_j_bool
+\bool_new:N \l_polyglossia_latin_use_v_bool
+\bool_new:N \l_polyglossia_latin_use_digraphs_bool
+\bool_new:N \l_polyglossia_latin_capitalize_month_bool
+
+\cs_new:Npn \polyglossia_latin_classical_character_codes:
+ {
+ \char_set_lccode:nn {`\V} {`\u}
+ \char_set_uccode:nn {`\u} {`\V}
+ \char_set_uccode:nn {`\ú} {`\V}
+ \char_set_uccode:nn {`\ū} {`\V}
+ \char_set_uccode:nn {`\ŭ} {`\V}
+ }
+
+\cs_new:Npn \polyglossia_latin_modern_character_codes:
+ {
+ \char_set_lccode:nn {`\V} {`\v}
+ \char_set_uccode:nn {`\u} {`\U}
+ \char_set_uccode:nn {`\ú} {`\Ú}
+ \char_set_uccode:nn {`\ū} {`\Ū}
+ \char_set_uccode:nn {`\ŭ} {`\Ŭ}
+ }
+
+
+%%%%% Messages and commands concerning hyphenation
+
+\msg_new:nnn {polyglossia} {latin / missing modern patterns}
+ {
+ No~hyphenation~patterns~were~found~for~Latin~\msg_line_context:.~
+ I~will~not~hyphenate~Latin~words.
+ }
+
+\msg_new:nnn {polyglossia} {latin / missing patterns}
+ {
+ The~"#1"~hyphenation~patterns~were~not~found~\msg_line_context:.~
+ I~will~use~the~patterns~for~modern~Latin~instead.
+ }
+
+\cs_new:Npn \polyglossia_latin_use_modern_patterns:
+ {
+ \xpg@ifdefined {latin}
+ {
+ \def \latin@language
+ {
+ \polyglossia@setup@language@patterns {latin}
+ }
+ }
+ {
+ \msg_warning:nn {polyglossia} {latin / missing modern patterns}
+ \adddialect \l@latin \l@nohyphenation
+ }
+ }
+
+\cs_new:Npn \polyglossia_latin_set_patterns:n #1
+% #1 may be "classiclatin" or "liturgicallatin"
+ {
+ \xpg@ifdefined {#1}
+ {
+ \def \latin@language
+ {
+ \polyglossia@setup@language@patterns {#1}
+ }
+ }
+ {
+ \xpg@ifdefined {latin}
+ {
+ \msg_warning:nnn {polyglossia} {latin / missing patterns} {#1}
+ \adddialect \l@ #1 \l@latin
+ \polyglossia_latin_use_modern_patterns:
+ }
+ {
+ \msg_warning:nn {polyglossia} {latin / missing modern patterns}
+ \adddialect \l@ #1 \l@nohyphenation
+ }
+ }
+ }
+
+
+%%%%% Settings for the spacing of the punctuation for ecclesiastical Latin
+
+\bool_new:N \g_polyglossia_latin_punctuation_spacing_bool
+
+\sys_if_engine_luatex:TF
+ {
+ \directlua { require('polyglossia-latin') }
+ }
+ {
+ \newXeTeXintercharclass \g_polyglossia_latin_punctuation_class
+ \newXeTeXintercharclass \g_polyglossia_latin_opening_guillemet_class
+ \newXeTeXintercharclass \g_polyglossia_latin_closing_guillemet_class
+ \newXeTeXintercharclass \g_polyglossia_latin_opening_bracket_class
+ \newXeTeXintercharclass \g_polyglossia_latin_closing_bracket_class
+
+ \cs_new:Npn \polyglossia_latin_insert_punctuation_space:
+ {
+ \nobreak
+ \skip_horizontal:n { 0.08333 \fontdimen6 \font } % 1/12 quad
+ }
+ \cs_new:Npn \polyglossia_latin_replace_preceding_space:
+ {
+ \dim_compare:nNnT {\lastskip} > {\c_zero_dim} {\unskip}
+ \polyglossia_latin_insert_punctuation_space:
+ }
+ \cs_new:Npn \polyglossia_latin_replace_following_space:
+ {
+ \polyglossia_latin_insert_punctuation_space:
+ \ignorespaces
+ }
+ }
+
+\cs_new:Npn \polyglossia_latin_punctuation_spacing:
+ {
+ \sys_if_engine_luatex:TF
+ {
+ \directlua { polyglossia.activate_latin_punct() }
+ }
+ {
+ \XeTeXinterchartokenstate = 1
+ \XeTeXcharclass `\! \g_polyglossia_latin_punctuation_class
+ \XeTeXcharclass `\? \g_polyglossia_latin_punctuation_class
+ \XeTeXcharclass `\‼ \g_polyglossia_latin_punctuation_class
+ \XeTeXcharclass `\⁇ \g_polyglossia_latin_punctuation_class
+ \XeTeXcharclass `\⁈ \g_polyglossia_latin_punctuation_class
+ \XeTeXcharclass `\⁉ \g_polyglossia_latin_punctuation_class
+ \XeTeXcharclass `\; \g_polyglossia_latin_punctuation_class
+ \XeTeXcharclass `\: \g_polyglossia_latin_punctuation_class
+ \XeTeXcharclass `\« \g_polyglossia_latin_opening_guillemet_class
+ \XeTeXcharclass `\» \g_polyglossia_latin_closing_guillemet_class
+ \XeTeXcharclass `\‹ \g_polyglossia_latin_opening_guillemet_class
+ \XeTeXcharclass `\› \g_polyglossia_latin_closing_guillemet_class
+ \XeTeXcharclass `\( \g_polyglossia_latin_opening_bracket_class
+ \XeTeXcharclass `\) \g_polyglossia_latin_closing_bracket_class
+ \XeTeXcharclass `\[ \g_polyglossia_latin_opening_bracket_class
+ \XeTeXcharclass `\] \g_polyglossia_latin_closing_bracket_class
+ \XeTeXcharclass `\{ \g_polyglossia_latin_opening_bracket_class
+ \XeTeXcharclass `\} \g_polyglossia_latin_closing_bracket_class
+ \XeTeXcharclass `\⟨ \g_polyglossia_latin_opening_bracket_class
+ \XeTeXcharclass `\⟩ \g_polyglossia_latin_closing_bracket_class
+
+ % punctuation followed by a closing guillemet
+ \XeTeXinterchartoks \g_polyglossia_latin_punctuation_class \g_polyglossia_latin_closing_guillemet_class =
+ {
+ \polyglossia_latin_insert_punctuation_space:
+ }
+ % closing bracket followed by punctuation
+ \XeTeXinterchartoks \g_polyglossia_latin_closing_bracket_class \g_polyglossia_latin_punctuation_class =
+ {
+ \polyglossia_latin_insert_punctuation_space:
+ }
+ % closing bracket followed by a closing guillemet
+ \XeTeXinterchartoks \g_polyglossia_latin_closing_bracket_class \g_polyglossia_latin_closing_guillemet_class =
+ {
+ \polyglossia_latin_insert_punctuation_space:
+ }
+ % opening guillemet followed by a space
+ \XeTeXinterchartoks \g_polyglossia_latin_opening_guillemet_class \xpg@boundaryclass =
+ {
+ \polyglossia_latin_replace_following_space:
+ }
+ % opening guillemet followed by an ordinary character
+ \XeTeXinterchartoks \g_polyglossia_latin_opening_guillemet_class \z@ =
+ {
+ \polyglossia_latin_insert_punctuation_space:
+ }
+ % closing guillemet followed by punctuation
+ \XeTeXinterchartoks \g_polyglossia_latin_closing_guillemet_class \g_polyglossia_latin_punctuation_class =
+ {
+ \polyglossia_latin_insert_punctuation_space:
+ }
+ % space followed by punctuation
+ \XeTeXinterchartoks \xpg@boundaryclass \g_polyglossia_latin_punctuation_class =
+ {
+ \polyglossia_latin_replace_preceding_space:
+ }
+ % space followed by closing guillemet
+ \XeTeXinterchartoks \xpg@boundaryclass \g_polyglossia_latin_closing_guillemet_class =
+ {
+ \polyglossia_latin_replace_preceding_space:
+ }
+ % ordinary character followed by punctuation
+ \XeTeXinterchartoks \z@ \g_polyglossia_latin_punctuation_class =
+ {
+ \polyglossia_latin_insert_punctuation_space:
+ }
+ % ordinary character followed by closing guillemet
+ \XeTeXinterchartoks \z@ \g_polyglossia_latin_closing_guillemet_class =
+ {
+ \polyglossia_latin_insert_punctuation_space:
+ }
+ }
+ }
+
+\cs_new:Npn \polyglossia_latin_no_punctuation_spacing:
+ {
+ \sys_if_engine_luatex:TF
+ {
+ \directlua { polyglossia.deactivate_latin_punct() }
+ }
+ {
\XeTeXcharclass `\! \z@
\XeTeXcharclass `\? \z@
+ \XeTeXcharclass `\‼ \z@
+ \XeTeXcharclass `\⁇ \z@
+ \XeTeXcharclass `\⁈ \z@
+ \XeTeXcharclass `\⁉ \z@
\XeTeXcharclass `\; \z@
\XeTeXcharclass `\: \z@
\XeTeXcharclass `\« \z@
\XeTeXcharclass `\» \z@
- \XeTeXinterchartokenstate=0
+ \XeTeXcharclass `\‹ \z@
+ \XeTeXcharclass `\› \z@
+ \XeTeXcharclass `\( \z@
+ \XeTeXcharclass `\) \z@
+ \XeTeXcharclass `\[ \z@
+ \XeTeXcharclass `\] \z@
+ \XeTeXcharclass `\{ \z@
+ \XeTeXcharclass `\} \z@
+ \XeTeXcharclass `\⟨ \z@
+ \XeTeXcharclass `\⟩ \z@
+ \XeTeXinterchartokenstate = 0
}
- \let\latin@original@makefntext\@makefntext
- \newcommand\latin@ecclesiastic@makefntext[1]{%
- \parindent 1em \noindent
- \latin@Makefnmark{\enspace #1}}
- \newcommand\latin@Makefnmark{\hbox{\normalfont\@thefnmark.}}
-\fi
-\setkeys{latin}{variant,ecclesiastic=false}
-\def\latincaptions{%
- \def\prefacename{\ifmedieval Præfatio\else Praefatio\fi}%
- \def\refname{Conspectus librorum}%
- \def\abstractname{Summarium}%
- \def\bibname{Conspectus librorum}%
- \def\chaptername{Caput}%
- \def\appendixname{Additamentum}%
- \def\contentsname{Index}%
- \def\listfigurename{Conspectus descriptionum}%
- \def\listtablename{Conspectus tabularum}%
- \def\indexname{Index rerum notabilium}%
- \def\figurename{Descriptio}%
- \def\tablename{Tabula}%
- \def\partname{Pars}%
- \def\enclname{Additur}%
- \def\ccname{Exemplar}%
- \def\headtoname{\ignorespaces}%
- \def\pagename{charta}%
- \def\seename{cfr.}%
- \def\alsoname{cfr.}%
- \def\proofname{Demonstratio}%
- \def\glossaryname{Glossarium}%
- }
+ }
-\def\latindate{%
- \def\today{\uppercase\expandafter{\romannumeral\day}%
- \space \ifcase\month%
- \or Januarii\or Februarii\or Martii\or Aprilis\or Maji\or
- Junii\or Julii\or Augusti\or Septembris\or Octobris\or
- \ifclassic Nouembris\else Novembris\fi
- \or Decembris\fi%
- \space \uppercase\expandafter{\romannumeral\year}}}
-%%%%%%%%% Latin shorthands
-\define@boolkey{latin}[latin@]{babelshorthands}[true]{}
+%%%%% Messages and commands concerning footnotes
+
+\cs_if_exist:NT \@makefntext
+ {
+ \cs_set_eq:NN \polyglossia_latin_original_footnote:n \@makefntext
+ }
+
+% This is the footnote style as defined by the "ecclesiastic" package.
+\cs_new:Npn \polyglossia_latin_variant_footnote:n #1
+ {
+ \parindent 1em
+ \noindent
+ \hbox { \normalfont \@thefnmark . }
+ \enspace #1
+ }
+
+\msg_new:nnn {polyglossia} {latin / ineffective footnote option}
+ {
+ The~option~"ecclesiasticfootnotes"~is~ineffective~\msg_line_context:
+ \c_space_tl as~Latin~is~not~the~main~language.
+ }
+
+\cs_new:Npn \polyglossia_latin_apply_footnote_option:
+ {
+ \str_if_eq:VnTF \xpg@main@language {latin}
+ {
+ \cs_if_exist:NT \@makefntext
+ {
+ \iflatin@ecclesiasticfootnotes
+ \let \@makefntext \polyglossia_latin_variant_footnote:n
+ \else
+ \let \@makefntext \polyglossia_latin_original_footnote:n
+ \fi
+ }
+ }
+ {
+ \msg_warning:nn {polyglossia} {latin / ineffective footnote option}
+ }
+ }
+
+\define@boolkey {latin} [latin@] {ecclesiasticfootnotes} [true]
+ {
+ \token_if_eq_meaning:NNTF \@onlypreamble \@notprerr
+ {
+ % within the document
+ \polyglossia_latin_apply_footnote_option:
+ }
+ {
+ % within the preamble
+ % The application of the option has to be postponed as the main
+ % language may be undefined when the option is called.
+ \AtBeginDocument { \polyglossia_latin_apply_footnote_option: }
+ }
+ }
+
+
+%%%%% Language variants: classic, medieval, modern, and ecclesiastic
+
+\msg_new:nnn {polyglossia} {latin / language variant}
+ {
+ Activating~Latin~language~variant~"#1"~\msg_line_context:.
+ }
+
+\msg_new:nnn {polyglossia} {latin / illegal language variant}
+ {
+ The~Latin~language~variant~"#1"~is~undefined~\msg_line_context:.
+ }
+
+\cs_new:Npn \polyglossia_latin_classic_settings:
+ {
+ \bool_set_false:N \l_polyglossia_latin_use_j_bool
+ \bool_set_false:N \l_polyglossia_latin_use_v_bool
+ \bool_set_false:N \l_polyglossia_latin_use_digraphs_bool
+ \bool_set_true:N \l_polyglossia_latin_capitalize_month_bool
+ \bool_set_false:N \l_polyglossia_latin_punctuation_spacing_bool
+ \SetLanguageKeys {latin} { babelname = latin.classic }
+ \polyglossia_latin_set_patterns:n {classiclatin}
+ }
+
+\cs_new:Npn \polyglossia_latin_medieval_settings:
+ {
+ \bool_set_false:N \l_polyglossia_latin_use_j_bool
+ \bool_set_false:N \l_polyglossia_latin_use_v_bool
+ \bool_set_true:N \l_polyglossia_latin_use_digraphs_bool
+ \bool_set_true:N \l_polyglossia_latin_capitalize_month_bool
+ \bool_set_false:N \l_polyglossia_latin_punctuation_spacing_bool
+ \SetLanguageKeys {latin} { babelname = latin.medieval }
+ \polyglossia_latin_use_modern_patterns:
+ }
+
+\cs_new:Npn \polyglossia_latin_modern_settings:
+ {
+ \bool_set_false:N \l_polyglossia_latin_use_j_bool
+ \bool_set_true:N \l_polyglossia_latin_use_v_bool
+ \bool_set_false:N \l_polyglossia_latin_use_digraphs_bool
+ \bool_set_true:N \l_polyglossia_latin_capitalize_month_bool
+ \bool_set_false:N \l_polyglossia_latin_punctuation_spacing_bool
+ \SetLanguageKeys {latin} { babelname = latin }
+ \polyglossia_latin_use_modern_patterns:
+ }
+
+\cs_new:Npn \polyglossia_latin_ecclesiastic_settings:
+ {
+ \bool_set_false:N \l_polyglossia_latin_use_j_bool
+ \bool_set_true:N \l_polyglossia_latin_use_v_bool
+ \bool_set_true:N \l_polyglossia_latin_use_digraphs_bool
+ \bool_set_false:N \l_polyglossia_latin_capitalize_month_bool
+ \bool_set_true:N \l_polyglossia_latin_punctuation_spacing_bool
+ \SetLanguageKeys {latin} { babelname = latin.ecclesiastic }
+ \polyglossia_latin_use_modern_patterns:
+ }
+
+\define@key{latin}{variant}
+ {
+ \str_case:nnF {#1}
+ {
+ {classic}
+ {
+ \msg_info:nnn {polyglossia} {latin / language variant} {classic}
+ \polyglossia_latin_classic_settings:
+ }
+ {medieval}
+ {
+ \msg_info:nnn {polyglossia} {latin / language variant} {medieval}
+ \polyglossia_latin_medieval_settings:
+ }
+ {modern}
+ {
+ \msg_info:nnn {polyglossia} {latin / language variant} {modern}
+ \polyglossia_latin_modern_settings:
+ }
+ {ecclesiastic}
+ {
+ \msg_info:nnn {polyglossia} {latin / language variant} {ecclesiastic}
+ \polyglossia_latin_ecclesiastic_settings:
+ }
+ }
+ {
+ \msg_warning:nnn {polyglossia} {latin / illegal language variant} {#1}
+ }
+ }
+
+
+%%%%% Boolean options concerning spelling
+
+\define@boolkey{latin}[latin@]{usej}[true]
+ {
+ \iflatin@usej
+ \bool_set_true:N \l_polyglossia_latin_use_j_bool
+ \else
+ \bool_set_false:N \l_polyglossia_latin_use_j_bool
+ \fi
+ }
+
+\define@boolkey{latin}[latin@]{capitalizemonth}[true]
+ {
+ \iflatin@capitalizemonth
+ \bool_set_true:N \l_polyglossia_latin_capitalize_month_bool
+ \else
+ \bool_set_false:N \l_polyglossia_latin_capitalize_month_bool
+ \fi
+ }
+
+
+%%%%% Hyphenation variants: classic, liturgical, and modern
+
+\msg_new:nnn {polyglossia} {latin / hyphenation variant}
+ {
+ Activating~hyphenation~patterns~for~#1~Latin~\msg_line_context:.
+ }
+
+\msg_new:nnn {polyglossia} {latin / illegal hyphenation variant}
+ {
+ The~Latin~hyphenation~variant~"#1"~is~undefined~\msg_line_context:.
+ }
+
+\define@key{latin}{hyphenation}
+ {
+ \str_case:nnTF {#1}
+ {
+ {classic} { \polyglossia_latin_set_patterns:n {classiclatin} }
+ {liturgical} { \polyglossia_latin_set_patterns:n {liturgicallatin} }
+ {modern} { \polyglossia_latin_use_modern_patterns: }
+ }
+ {
+ \msg_info:nnn {polyglossia} {latin / hyphenation variant} {#1}
+ }
+ {
+ \msg_warning:nnn {polyglossia} {latin / illegal hyphenation variant} {#1}
+ }
+ }
+
+
+%%%%% Latin captions and date
+
+\def \captionslatin
+ {
+ \def \prefacename
+ {
+ \bool_if:NTF \l_polyglossia_latin_use_digraphs_bool {Præfatio} {Praefatio}
+ }
+ \def \refname {Conspectus~librorum}
+ \def \abstractname {Summarium}
+ \def \bibname {Conspectus~librorum}
+ \def \chaptername {Caput}
+ \def \appendixname {Additamentum}
+ \def \contentsname {Index}
+ \def \listfigurename {Conspectus~descriptionum}
+ \def \listtablename {Conspectus~tabularum}
+ \def \indexname {Index~rerum~notabilium}
+ \def \figurename {Descriptio}
+ \def \tablename {Tabula}
+ \def \partname {Pars}
+ \def \enclname {Additur}
+ \def \ccname {Exemplar}
+ \def \headtoname {\ignorespaces}
+ \def \pagename {charta}
+ \def \seename {cfr.}
+ \def \alsoname {cfr.}
+ \def \proofname {Demonstratio}
+ \def \glossaryname {Glossarium}
+ }
+
+\cs_new:Npn \polyglossia_latin_month_name:
+ {
+ \str_set:Nx \l_tmpa_str
+ {
+ \int_case:nn { \month }
+ {
+ {1} { \bool_if:NTF \l_polyglossia_latin_use_j_bool {januarii} {ianuarii} }
+ {2} {februarii}
+ {3} {martii}
+ {4} {aprilis}
+ {5} { \bool_if:NTF \l_polyglossia_latin_use_j_bool {maji} {maii} }
+ {6} { \bool_if:NTF \l_polyglossia_latin_use_j_bool {junii} {iunii} }
+ {7} { \bool_if:NTF \l_polyglossia_latin_use_j_bool {julii} {iulii} }
+ {8} {augusti}
+ {9} {septembris}
+ {10} {octobris}
+ {11} { \bool_if:NTF \l_polyglossia_latin_use_v_bool {novembris} {nouembris} }
+ {12} {decembris}
+ }
+ }
+ \bool_if:NTF \l_polyglossia_latin_capitalize_month_bool
+ {
+ \tl_mixed_case:n { \l_tmpa_str }
+ }
+ {
+ \str_use:N \l_tmpa_str
+ }
+ }
+
+\def \datelatin
+ {
+ \def \today
+ {
+ \int_to_Roman:n { \day }
+ \c_space_tl
+ \polyglossia_latin_month_name:
+ \c_space_tl
+ \int_to_Roman:n { \year }
+ }
+ }
+
+
+%%%%% Latin shorthands
+
+\define@boolkey{latin}[latin@]{babelshorthands}[true]
+ {
+ }
+
+\define@boolkey{latin}[latin@]{prosodicshorthands}[true]
+ {
+ }
\ifsystem@babelshorthands
\setkeys{latin}{babelshorthands=true}
\else
\setkeys{latin}{babelshorthands=false}
\fi
-\ifcsundef{initiate@active@char}{%
-\input{babelsh.def}%
-\initiate@active@char{"}%
-\initiate@active@char{'}%
-}{}
-\def\latin@shorthands{%
- \def\language@group{latin}%
- \bbl@activate{"}%
- \declare@shorthand{latin}{"}{\relax
- \ifmmode
- \def\xpgla@nextdq{''}%
- \else
- \def\xpgla@nextdq{\futurelet\xpgla@temp\xpgla@cwm}%
- \fi
- \xpgla@nextdq}%
- \bbl@activate{'}%
- \declare@shorthand{latin}{'}{\relax
- \ifmmode
- \def\xpgla@nextsq{'}%
- \else
- \def\xpgla@nextsq{\futurelet\xpgla@temp@A\xpgla@putacute}%
- \fi
- \xpgla@nextsq}%
-}
-\def\xpgla@allowhyphens{\bbl@allowhyphens
- \discretionary{-}{}{}\bbl@allowhyphens}
-\newcommand*{\xpgla@cwm}{\let\xpgla@@nextdq\relax
- \ifcat\noexpand\xpgla@temp a%
- \let\xpgla@@nextdq\xpgla@allowhyphens
- \else
- \ifx\xpgla@temp\ae
- \let\xpgla@@nextdq\xpgla@allowhyphens
- \else
- \ifx\xpgla@temp\oe
- \let\xpgla@@nextdq\xpgla@allowhyphens
+
+\ExplSyntaxOff % babelsh.def does not support expl3 syntax
+\ifcsundef{initiate@active@char}{\input{babelsh.def}}{}
+\ExplSyntaxOn
+
+\initiate@active@char {"}
+\initiate@active@char {'}
+\initiate@active@char {^}
+\initiate@active@char {=}
+
+\shorthandoff {"}
+\shorthandoff {'}
+\shorthandoff {^}
+\shorthandoff {=}
+
+% The active '=' character may cause problems with key=value interfaces.
+% We have to make sure here that no problems can occur outside a Latin
+% prosodic shorthand environment.
+
+\protected@write \@auxout { } { \shorthandoff {=} } % for the aux file
+
+\AtBeginDocument
+ {
+ \str_if_eq:VnTF \xpg@main@language {latin}
+ {
+ \iflatin@prosodicshorthands
\else
- \if\noexpand\xpgla@temp\string|%
- \def\xpgla@@nextdq{\xpgla@allowhyphens\@gobble}%
- \fi
+ \shorthandoff {=}
\fi
+ }
+ {
+ % The following command should not be called if the main language
+ % defines a '=' shorthand. However, there are no languages besides
+ % Latin defining such a shorthand in polyglossia.
+ \shorthandoff {=}
+ }
+ }
+
+\cs_new:Npn \polyglossia_latin_shorthands:
+ {
+ \def \language@group {latin}
+ \bbl@activate {"}
+ \declare@shorthand {latin} {"}
+ {
+ \mode_if_math:TF
+ {
+ \token_to_str:N "
+ }
+ {
+ \polyglossia_latin_apply_quotemark:N
+ }
+ }
+ \bbl@activate {'}
+ \declare@shorthand {latin} {'}
+ {
+ \mode_if_math:TF
+ {
+ \active@math@prime % defined in "latex.ltx"
+ }
+ {
+ \polyglossia_latin_put_acute:N
+ }
+ }
+ }
+
+\cs_new:Npn \polyglossia_latin_prosodic_shorthands:
+ {
+ \def \language@group {latin}
+ % The '=' shorthand is normally turned off to avoid problems with key=value
+ % interfaces. We turn it on here to enable prosodic shorthands.
+ \shorthandon {=}
+ \bbl@activate {=}
+ \declare@shorthand {latin} {=}
+ {
+ \mode_if_math:TF
+ {
+ \token_to_str:N =
+ }
+ {
+ \polyglossia_latin_put_macron:N
+ }
+ }
+ \bbl@activate {^}
+ \declare@shorthand {latin} {^}
+ {
+ \mode_if_math:TF
+ {
+ \token_to_str:N ^
+ }
+ {
+ \polyglossia_latin_put_breve:N
+ }
+ }
+ }
+
+\cs_new:Npn \polyglossia_latin_apply_quotemark:N #1
+ {
+ \str_case:nnF {#1}
+ {
+ {A} { \polyglossia_latin_digraph_shorthand:Nnn E { Æ }
+ {
+ \polyglossia_latin_digraph_shorthand:Nnn e { Æ }
+ {
+ \polyglossia_latin_allow_hyphens: A
+ }
+ }
+ }
+ {a} { \polyglossia_latin_digraph_shorthand:Nnn e { æ }
+ {
+ \polyglossia_latin_allow_hyphens: a
+ }
+ }
+ {O} { \polyglossia_latin_digraph_shorthand:Nnn E { Π}
+ {
+ \polyglossia_latin_digraph_shorthand:Nnn e { Π}
+ {
+ \polyglossia_latin_allow_hyphens: O
+ }
+ }
+ }
+ {o} { \polyglossia_latin_digraph_shorthand:Nnn e { œ }
+ {
+ \polyglossia_latin_allow_hyphens: o
+ }
+ }
+ {|} { \polyglossia_latin_allow_hyphens: }
+ {<} { « }
+ {>} { » }
+ }
+ {
+ \token_if_letter:NTF #1 { \polyglossia_latin_allow_hyphens: #1 }
+ {
+ \token_if_eq_meaning:NNTF #1 \AE { \polyglossia_latin_allow_hyphens: #1 }
+ {
+ \token_if_eq_meaning:NNTF #1 \ae { \polyglossia_latin_allow_hyphens: #1 }
+ {
+ \token_if_eq_meaning:NNTF #1 \OE { \polyglossia_latin_allow_hyphens: #1 }
+ {
+ \token_if_eq_meaning:NNTF #1 \oe { \polyglossia_latin_allow_hyphens: #1 }
+ {
+ \token_to_str:N "
+ #1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+\cs_new:Npn \polyglossia_latin_put_acute:N #1
+ {
+ \str_case:nnF {#1}
+ {
+ {A} { \polyglossia_latin_digraph_shorthand:Nnn E { Ǽ }
+ {
+ \polyglossia_latin_digraph_shorthand:Nnn e { Ǽ } { Á }
+ }
+ }
+ {a} { \polyglossia_latin_digraph_shorthand:Nnn e { ǽ } { á } }
+ {E} { É }
+ {e} { é }
+ {I} { Í }
+ {i} { í }
+ {O} { \polyglossia_latin_digraph_shorthand:Nnn E { \'Π}
+ {
+ \polyglossia_latin_digraph_shorthand:Nnn e { \'Œ } { Ó }
+ }
+ }
+ {o} { \polyglossia_latin_digraph_shorthand:Nnn e { \'œ } { ó } }
+ {U} { Ú }
+ {u} { ú }
+ {V} { \' V } % V may be a vowel, but lowercase v is never used as a vowel.
+ {Y} { Ý }
+ {y} { ý }
+ {Æ} { Ǽ }
+ {æ} { ǽ }
+ {Œ} { \'Œ }
+ {œ} { \'œ }
+ }
+ {
+ \token_if_eq_meaning:NNTF #1 \AE { Ǽ }
+ {
+ \token_if_eq_meaning:NNTF #1 \ae { ǽ }
+ {
+ \token_if_eq_meaning:NNTF #1 \OE { \'Π}
+ {
+ \token_if_eq_meaning:NNTF #1 \oe { \'œ }
+ {
+ \token_to_str:N '
+ #1
+ }
+ }
+ }
+ }
+ }
+ }
+
+\cs_new:Npn \polyglossia_latin_put_macron:N #1
+ {
+ \str_case:nnF {#1}
+ {
+ {A} { \polyglossia_latin_diphthong_macron:NNn AE
+ {
+ \polyglossia_latin_diphthong_macron:NNn Ae
+ {
+ \polyglossia_latin_diphthong_macron:NNn AU
+ {
+ \polyglossia_latin_diphthong_macron:NNn Au { Ā }
+ }
+ }
+ }
+ }
+ {a} { \polyglossia_latin_diphthong_macron:NNn ae
+ {
+ \polyglossia_latin_diphthong_macron:NNn au { ā }
+ }
+ }
+ {E} { \polyglossia_latin_diphthong_macron:NNn EU
+ {
+ \polyglossia_latin_diphthong_macron:NNn Eu { Ē }
+ }
+ }
+ {e} { \polyglossia_latin_diphthong_macron:NNn eu { ē } }
+ {I} { Ī }
+ {i} { ī }
+ {O} { \polyglossia_latin_diphthong_macron:NNn OE
+ {
+ \polyglossia_latin_diphthong_macron:NNn Oe { Ō }
+ }
+ }
+ {o} { \polyglossia_latin_diphthong_macron:NNn oe { ō } }
+ {U} { Ū }
+ {u} { ū }
+ {V} { \= V } % V may be a vowel, but lowercase v is never used as a vowel.
+ {Y} { Ȳ }
+ {y} { ȳ }
+ }
+ {
+ \token_to_str:N =
+ #1
+ }
+ }
+
+\cs_new:Npn \polyglossia_latin_put_breve:N #1
+ {
+ \str_case:nnF {#1}
+ {
+ {A} { Ă }
+ {a} { ă }
+ {E} { Ĕ }
+ {e} { ĕ }
+ {I} { Ĭ }
+ {i} { ĭ }
+ {O} { Ŏ }
+ {o} { ŏ }
+ {U} { Ŭ }
+ {u} { ŭ }
+ {V} { \u{V} } % V may be a vowel, but lowercase v is never used as a vowel.
+ {Y} { \u{Y} }
+ {y} { \u{y} }
+ }
+ {
+ \token_to_str:N ^
+ #1
+ }
+ }
+
+
+\cs_new:Npn \polyglossia_latin_allow_hyphens:
+ {
+ \bbl@allowhyphens
+ \discretionary {-} {} {}
+ \bbl@allowhyphens
+ }
+
+\cs_new:Npn \polyglossia_latin_digraph_shorthand:Nnn #1#2#3
+% #1: second letter of digraph (E or e)
+% #2: digraph character
+% #3: non-digraph code
+ {
+ \bool_if:NTF \l_polyglossia_latin_use_digraphs_bool
+ {
+ \peek_meaning_remove:NTF #1 {#2} {#3}
+ }
+ {
+ #3
+ }
+ }
+
+\cs_new:Npn \polyglossia_latin_diphthong_macron:NNn #1#2#3
+% #1: first character of diphthong
+% #2: second character of diphthong
+% #3: non-diphthong code
+ {
+ \peek_meaning:NTF #2 { #1 \char "35E \relax } {#3} % U+35E: combining double macron
+ }
+
+\cs_new:Npn \polyglossia_latin_no_shorthands:
+ {
+ \bbl@deactivate {"}
+ \bbl@deactivate {'}
+ \bbl@deactivate {=}
+ \bbl@deactivate {^}
+ % The active '=' character may cause problems with key=value interfaces.
+ % We have to make sure here that no problems can occur outside a Latin
+ % prosodic shorthand environment.
+ \shorthandoff {=}
+ }
+
+
+%%%%% Further settings
+
+\let \xpgla@savedvalues \empty
+
+\AtEndPreamble
+ {
+ \edef \xpgla@savedvalues
+ {
+ \clubpenalty = \the \clubpenalty \space
+ \@clubpenalty = \the \@clubpenalty \space
+ \widowpenalty = \the \widowpenalty \space
+ \finalhyphendemerits = \the \finalhyphendemerits
+ }
+ }
+
+\def \noextras@latin
+ {
+ \polyglossia_latin_no_shorthands:
+ \xpgla@savedvalues
+ \polyglossia_latin_no_punctuation_spacing:
+ \polyglossia_latin_modern_character_codes:
+ }
+
+\cs_new:Npn \polyglossia_latin_inline_extras:
+ {
+ \bool_if:NF \l_polyglossia_latin_use_v_bool
+ {
+ \polyglossia_latin_classical_character_codes:
+ }
+ \bool_if:NT \l_polyglossia_latin_punctuation_spacing_bool
+ {
+ \polyglossia_latin_punctuation_spacing:
+ }
+ \iflatin@babelshorthands
+ \polyglossia_latin_shorthands:
\fi
- \fi
- \xpgla@@nextdq}%
-\def\xpgla@putacute#1{\let\xpgla@nextsq\relax%
-\if a\xpgla@temp@A
- æ\kern-0.175em^^^^0301\kern0.175em\xpgla@allowhyphens
-\else
-\if o\xpgla@temp@A
- œ\kern-0.175em^^^^0301\kern0.175em\xpgla@allowhyphens
-\else
- \if æ\xpgla@temp@A
- æ^^^^0301%
- \else
- \if œ\xpgla@temp@A
- œ^^^^0301%
- \else
- \string'%
+ \iflatin@prosodicshorthands
+ \polyglossia_latin_prosodic_shorthands:
\fi
- \fi
-\fi
-\fi}%
+ }
-\def\nolatin@shorthands{%
- \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
- \@ifundefined{initiate@active@char}{}{\bbl@deactivate{'}}%
-}
+\def \blockextras@latin
+ {
+ % The following four values were overtaken from the Italian language module.
+ % It is unclear why they were chosen.
+ \clubpenalty = 3000
+ \@clubpenalty = 3000
+ \widowpenalty = 3000
+ \finalhyphendemerits = 50000000
+ \polyglossia_latin_inline_extras:
+ }
-\let\xpgla@savedvalues\empty
-\AtEndPreamble{%
- \edef\xpgla@savedvalues{%
- \clubpenalty=\the\clubpenalty\space
- \@clubpenalty=\the\@clubpenalty\space
- \widowpenalty=\the\widowpenalty\space
- \finalhyphendemerits=\the\finalhyphendemerits}
-}
-\def\noextras@latin{%
- \lccode\string"2019=\z@
- \nolatin@shorthands
- \xpgla@savedvalues
- \noclassicuclccodes
- \iflatin@ecclesiastic
- \unless\ifluatex\noecclesiasticlatin@punctuation
- \let\@makefntext\latin@original@makefntext\fi
- \fi
-}
+\def \inlineextras@latin
+ {
+ \polyglossia_latin_inline_extras:
+ }
-\def\blockextras@latin{%
- \lccode\string"2019=\string"2019
- \clubpenalty=3000 \@clubpenalty=3000 \widowpenalty=3000
- \finalhyphendemerits=50000000
- \ifclassic\classicuclccodes\fi
- \iflatin@babelshorthands\latin@shorthands\fi
- \iflatin@ecclesiastic\unless\ifluatex\ecclesiasticlatin@punctuation
- \let\@makefntext\latin@ecclesiastic@makefntext\fi
- \fi
-}
-\def\inlineextras@latin{%
- \lccode\string"2019=\string"2019
- \ifclassic\classicuclccodes\fi
- \iflatin@babelshorthands\latin@shorthands\fi
- \iflatin@ecclesiastic
- \unless\ifluatex\ecclesiasticlatin@punctuation
- \let\@makefntext\latin@ecclesiastic@makefntext\fi
- \fi
-}
+%% Default settings
+
+\polyglossia_latin_modern_settings:
+
+\ExplSyntaxOff
+
%% Copyright (C) Claudio Beccari 2013-2016
-%% Copyright (C) Élie Roux 2016
-%%
+%% Copyright (C) Élie Roux 2016-2019
+%% Copyright (C) Keno Wehr 2019
+%%
%% Permission is hereby granted, free of charge, to any person obtaining
%% a copy of this software and associated documentation files
%% (the "Software"), to deal in the Software without restriction, including
@@ -7268,10 +9331,10 @@ and may look very wrong.}
%% distribute, sublicense, and/or sell copies of the Software, and to permit
%% persons to whom the Software is furnished to do so, subject to the following
%% conditions:
-%%
+%%
%% The above copyright notice and this permission notice shall be included in
%% all copies or substantial portions of the Software.
-%%
+%%
%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
@@ -7284,6 +9347,51 @@ and may look very wrong.}
% \end{macrocode}
% \iffalse
%</gloss-latin.ldf>
+%<*gloss-latinclassic.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-latinclassic.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-latinclassic.ldf}[polyglossia: module for classic latin]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{latin}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-latinclassic.ldf>
+%<*gloss-latinecclesiastic.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-latinecclesiastic.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-latinecclesiastic.ldf}[polyglossia: module for ecclesiastic latin]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{latin}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-latinecclesiastic.ldf>
+%<*gloss-latinmedieval.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-latinmedieval.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-latinmedieval.ldf}[polyglossia: module for medieval latin]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{latin}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-latinmedieval.ldf>
%<*gloss-latvian.ldf>
% \fi
% \clearpage
@@ -7406,6 +9514,21 @@ and may look very wrong.}
% \end{macrocode}
% \iffalse
%</gloss-lithuanian.ldf>
+%<*gloss-lowersorbian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-lowersorbian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-lowersorbian.ldf}[polyglossia: module for lower sorbian]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{sorbian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-lowersorbian.ldf>
%<*gloss-lsorbian.ldf>
% \fi
% \clearpage
@@ -7417,19 +9540,7 @@ and may look very wrong.}
% We only provide this gloss for babel compatibility. Since lsorbian is
% a sorbian variety, we use 'sorbian' with variant 'lower' now.
-\input{gloss-sorbian.ldf}
-
-\PolyglossiaSetup{lsorbian}{
- language=Lower Sorbian,
- babelname=lowersorbian,
- hyphennames={lsorbian,lowersorbian,Lsorbian},
- langtag=LSB,
- hyphenmins={2,2},
- fontsetup=true,
-}
-
-\let\captionslsorbian\captionssorbian@lsorbian
-\let\datelsorbian\datesorbian@lsorbian
+\xpg@load@master@language{sorbian}
% \end{macrocode}
% \iffalse
@@ -7535,20 +9646,7 @@ and may look very wrong.}
% We only provide this gloss for babel compatibility.
-\input{gloss-hungarian.ldf}
-
-\PolyglossiaSetup{magyar}{
- hyphennames={magyar,hungarian},
- langtag=HUN,
- hyphenmins={2,2},
- fontsetup=true,
-}
-
-\let\captionsmagyar\captionshungarian
-\let\datemagyar\datehungarian
-\let\ondatemagyar\ondatehungarian
-\let\blockextras@magyar\blockextras@hungarian
-\let\noextras@magyar\noextras@hungarian
+\xpg@load@master@language{hungarian}
% \end{macrocode}
% \iffalse
@@ -7570,6 +9668,13 @@ and may look very wrong.}
hyphenmins={2,2},
fontsetup=true}
+% Babel aliases
+\setlanguagealias[variant=indonesian]{malay}{bahasai}
+\setlanguagealias[variant=malaysian]{malay}{bahasa}
+
+% Backwards compat. alias
+\setlanguagealias[variant=malaysian]{malay}{bahasam}
+
\providebool{malay@melayu}
\malay@melayufalse
\def\malay@variant{malay}
@@ -7902,7 +10007,7 @@ and may look very wrong.}
% \begin{macrocode}
\ProvidesFile{gloss-mongolian.ldf}[polyglossia: module for mongolian]
-\RequirePackage{cyrillicnumbers}
+\RequirePackage{xpg-cyrillicnumbers}
\PolyglossiaSetup{mongolian}{
script=Cyrillic,
@@ -8095,6 +10200,51 @@ and may look very wrong.}
% \end{macrocode}
% \iffalse
%</gloss-mongolian.ldf>
+%<*gloss-naustrian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-naustrian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-naustrian.ldf}[polyglossia: module for austrian german (current spelling)]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-naustrian.ldf>
+%<*gloss-newzealand.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-newzealand.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-newzealand.ldf}[polyglossia: module for newzealand english]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{english}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-newzealand.ldf>
+%<*gloss-ngerman.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ngerman.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ngerman.ldf}[polyglossia: module for german (current spelling)]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ngerman.ldf>
%<*gloss-nko.ldf>
% \fi
% \clearpage
@@ -8198,18 +10348,7 @@ and may look very wrong.}
% We only provide this gloss for babel compatibility. Since norsk is
% actually norwegian bokmal, we use 'norwegian' with variant 'bokmal' now.
-\input{gloss-norwegian.ldf}
-
-\PolyglossiaSetup{norsk}{
- hyphennames={norsk},
- hyphenmins={2,2},
- langtag=NOR,
- frenchspacing=true,
- fontsetup=true,
-}
-
-\let\captionsnorsk\captionsnorwegian@norsk
-\let\datenorsk\datenorwegian@norsk
+\xpg@load@master@language{norwegian}
% \end{macrocode}
% \iffalse
@@ -8229,6 +10368,10 @@ and may look very wrong.}
fontsetup=false,
}
+% Babel and backwards compat. aliases
+\setlanguagealias[variant=bokmal]{norwegian}{norsk}
+\setlanguagealias[variant=nynorsk]{norwegian}{nynorsk}
+
\def\norwegian@variant{nynorsk}
\define@choicekey*+{norwegian}{variant}[\val\nr]{nynorsk,bokmal}[nynorsk]{%
\ifcase\nr\relax
@@ -8325,6 +10468,21 @@ and may look very wrong.}
% \end{macrocode}
% \iffalse
%</gloss-norwegian.ldf>
+%<*gloss-nswissgerman.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-nswissgerman.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-nswissgerman.ldf}[polyglossia: module for swiss german (current spelling)]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-nswissgerman.ldf>
%<*gloss-nynorsk.ldf>
% \fi
% \clearpage
@@ -8336,18 +10494,7 @@ and may look very wrong.}
% We only provide this gloss for babel compatibility. Since nynorsk is
% a norwegian variety, we use 'norwegian' with variant 'nynorsk' now.
-\input{gloss-norwegian.ldf}
-
-\PolyglossiaSetup{nynorsk}{
- hyphennames={nynorsk},
- langtag=NYN,
- hyphenmins={2,2},
- frenchspacing=true,
- fontsetup=true,
-}
-
-\let\captionsnorsk\captionsnorwegian@nynorsk
-\let\datenorsk\datenorwegian@nynorsk
+\xpg@load@master@language{norwegian}
% \end{macrocode}
% \iffalse
@@ -8550,6 +10697,9 @@ and may look very wrong.}
localnumeral=farsinumerals
}
+% Babel and backwards compat. alias
+\setlanguagealias{persian}{farsi}
+
\newif\if@western@numerals
\def\tmp@western{western}
\define@key{persian}{numerals}[eastern]{%
@@ -8855,35 +11005,35 @@ and may look very wrong.}
% \end{macrocode}
% \iffalse
%</gloss-polish.ldf>
+%<*gloss-polutonikogreek.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-polutonikogreek.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-polutonikogreek.ldf}[polyglossia: module for polytonic greek]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{greek}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-polutonikogreek.ldf>
%<*gloss-portuges.ldf>
% \fi
% \clearpage
%
% \subsection{gloss-portuges.ldf}
% \begin{macrocode}
-\ProvidesFile{gloss-portuges.ldf}[polyglossia: module for portuguese (DEPRECATED!)]
+\ProvidesFile{gloss-portuges.ldf}[polyglossia: module for portuguese]
% We only provide this gloss for backwards compatibility. The name
% 'portuges' was selected in accordance with babel (which probably
% introduced it in 8.3 filename times). Since polyglossia uses full
% English language names, we use 'portuguese' now.
-% FIXME: Once we support babel aliases (#112) this gloss can go.
-
-\xpg@warning{The language name 'portuges' is deprectated.\MessageBreak
- Please use 'portuguese' instead.}
-
-\input{gloss-portuguese.ldf}
-
-\PolyglossiaSetup{portuges}{
- hyphennames={portuges,portuguese},
- hyphenmins={2,3},
- langtag=PTG,
- fontsetup=true,
-}
-
-\let\captionsportuges\captionsportuguese@portuges
-\let\dateportuges\dateportuguese@portuges
+\xpg@load@master@language{portuguese}
% \end{macrocode}
% \iffalse
@@ -8895,6 +11045,7 @@ and may look very wrong.}
% \subsection{gloss-portuguese.ldf}
% \begin{macrocode}
\ProvidesFile{gloss-portuguese.ldf}[polyglossia: module for portuguese]
+
\PolyglossiaSetup{portuguese}{
babelname=portuges,
hyphennames={portuges,portuguese},
@@ -8903,11 +11054,16 @@ and may look very wrong.}
fontsetup=true,
}
+% Babel aliases
+\setlanguagealias[variant=portuguese]{portuguese}{portuges}
+\setlanguagealias[variant=brazilian]{portuguese}{brazil}
+
\def\portuguese@variant{portuges}
\define@choicekey*+{portuguese}{variant}[\val\nr]{portuguese,brazilian}[portuguese]{%
\ifcase\nr\relax
% portuguese:
\def\portuguese@variant{portuges}%
+ \SetLanguageKeys{portuguese}{babelname=portuges}%
\or
% brazilian:
\def\portuguese@variant{brazil}%
@@ -9109,7 +11265,7 @@ and may look very wrong.}
% \begin{macrocode}
\ProvidesFile{gloss-russian.ldf}[polyglossia: module for russian]
-\RequirePackage{cyrillicnumbers}
+\RequirePackage{xpg-cyrillicnumbers}
\PolyglossiaSetup{russian}{
script=Cyrillic,
@@ -9118,6 +11274,7 @@ and may look very wrong.}
hyphennames={russian},
hyphenmins={2,2},
frenchspacing=true,
+ indentfirst=true,
fontsetup,
localnumeral=russiannumerals,
Localnumeral=Russiannumerals
@@ -9145,6 +11302,14 @@ and may look very wrong.}
{\cyrillic@numeralsfalse}%
}
+\define@boolkey{russian}[russian@]{indentfirst}{
+ \ifrussian@indentfirst
+ \SetLanguageKeys{russian}{indentfirst=true}
+ \else
+ \SetLanguageKeys{russian}{indentfirst=false}
+ \fi
+}
+
\define@boolkey{russian}[russian@]{babelshorthands}[false]{}
\setkeys{russian}{spelling,numerals}
@@ -9454,6 +11619,10 @@ and may look very wrong.}
fontsetup=true,
}
+% Babel and backwards compat. alias
+\setlanguagealias{sami}{samin}
+%\setlanguagealias[variant=northern]{sami}{samin}
+
% TODO: Add other Sami varieties
\def\sami@variant{northern}
%\define@choicekey*+{sami}{variant}[\val\nr]{northern}[nothern]{%
@@ -9540,18 +11709,7 @@ and may look very wrong.}
% We only provide this gloss for babel compatibility. Since samin is
% a sami variety, we use 'sami' with variant 'northern' now.
-\input{gloss-sami.ldf}
-
-\PolyglossiaSetup{samin}{
- hyphennames={samin},
- hyphenmins={2,2},
- language={Northern Sami},
- langtag=NSM,
- fontsetup=true,
-}
-
-\let\captionssamin\captionssami@nothern
-\let\datesamin\datesami@nothern
+\xpg@load@master@language{sami}
% \end{macrocode}
% \iffalse
@@ -9588,6 +11746,8 @@ and may look very wrong.}
}%
}
+\define@key{sanskrit}{script}[Devanagari]{\setkeys{sanskrit}{Script=#1}}
+
\def\fontsetup@sanskrit@Devanagari{%
\SetLanguageKeys{sanskrit}{scripttag=deva,script=Devanagari}
\xpg@fontsetup@nonlatin{sanskrit}}
@@ -9612,16 +11772,20 @@ and may look very wrong.}
\setkeys{sanskrit}{Script} %sets the default for Devanagari
-\def\tmp@western{Western}
+
\newif\ifsanskrit@devanagari@numerals
\sanskrit@devanagari@numeralstrue
+\define@choicekey*+{sanskrit}{numerals}[\val\nr]{Devanagari,Western}[Devanagari]{%
+ \ifcase\nr\relax
+ % Devanagari:
+ \sanskrit@devanagari@numeralstrue%
+ \or
+ % Western:
+ \sanskrit@devanagari@numeralsfalse%
+ \fi
+ \xpg@info{Option: Sanskrit, numerals=\val}%
+}{\xpg@warning{Unknown Sanskrit numeral `#1'}}
-\define@key{sanskrit}{numerals}[Devanagari]{%
- \def\@tmpa{#1}%
- \ifx\@tmpa\tmp@western
- \sanskrit@devanagari@numeralsfalse
- \fi%
-}
\newcommand{\sanskritnumerals}[2]{\sanskritnumber{#2}}
@@ -9633,34 +11797,45 @@ and may look very wrong.}
\fi%
}
-% FIXME: Support LuaTeX
-\ifxetex
- \newXeTeXintercharclass\sanskrit@punctthin % ! ? ; : danda double_danda
+\ifluatex
+ \directlua{require('polyglossia-sanskrit')}%
+\else
+ \newXeTeXintercharclass\sanskrit@punctthin % ! ? ‼ ⁇ ⁈ ⁉ : ; danda double_danda
\fi
\def\sanskrit@punctthinspace{{\unskip\thinspace}}
\def\sanskrit@punctuation{%
- % FIXME: Support LuaTeX
- \ifxetex
+ \ifluatex
+ \directlua{polyglossia.activate_sanskrit_punct()}%
+ \else
\XeTeXinterchartokenstate=1%
\XeTeXcharclass `\! \sanskrit@punctthin
\XeTeXcharclass `\? \sanskrit@punctthin
- \XeTeXcharclass `\; \sanskrit@punctthin
+ \XeTeXcharclass `\‼ \sanskrit@punctthin
+ \XeTeXcharclass `\⁇ \sanskrit@punctthin
+ \XeTeXcharclass `\⁈ \sanskrit@punctthin
+ \XeTeXcharclass `\⁉ \sanskrit@punctthin
\XeTeXcharclass `\: \sanskrit@punctthin
- \XeTeXcharclass `\। \sanskrit@punctthin
- \XeTeXcharclass `\॥ \sanskrit@punctthin
+ \XeTeXcharclass `\; \sanskrit@punctthin
+ \XeTeXcharclass `\। \sanskrit@punctthin % danda, U+0964
+ \XeTeXcharclass `\॥ \sanskrit@punctthin % double danda, U+0965
\XeTeXinterchartoks \z@ \sanskrit@punctthin = \sanskrit@punctthinspace
\fi
}
\def\nosanskrit@punctuation{%
- % FIXME: Support LuaTeX
- \ifxetex
+ \ifluatex
+ \directlua{polyglossia.deactivate_sanskrit_punct()}%
+ \else
\XeTeXcharclass `\! \z@
\XeTeXcharclass `\? \z@
- \XeTeXcharclass `\; \z@
+ \XeTeXcharclass `\‼ \z@
+ \XeTeXcharclass `\⁇ \z@
+ \XeTeXcharclass `\⁈ \z@
+ \XeTeXcharclass `\⁉ \z@
\XeTeXcharclass `\: \z@
+ \XeTeXcharclass `\; \z@
\XeTeXcharclass `\। \z@
\XeTeXcharclass `\॥ \z@
\XeTeXinterchartokenstate=0%
@@ -9689,17 +11864,7 @@ and may look very wrong.}
% We only provide this gloss for babel compatibility. Since scottish is
% a gaelic variety, we use 'gaelic' with variant 'scottish' now.
-\input{gloss-gaelic.ldf}
-
-\PolyglossiaSetup{scottish}{
- hyphennames={scottish},
- hyphenmins={2,2},
- langtag=GAE,
- fontsetup=true,
-}
-
-\let\captionsscottish\captionsgaelic@scottish
-\let\datescottish\dategaelic@scottish
+\xpg@load@master@language{gaelic}
% \end{macrocode}
% \iffalse
@@ -9716,7 +11881,7 @@ and may look very wrong.}
%% same thing for all languages that have a "script" key !
%% BETTER APPROACH: see gloss-sanskrit!
-\RequirePackage{cyrillicnumbers}
+\RequirePackage{xpg-cyrillicnumbers}
\PolyglossiaSetup{serbian}{
langtag=SRB,
@@ -9729,25 +11894,27 @@ and may look very wrong.}
%TODO localalph
}
+% Babel aliases
+\setlanguagealias[script=Cyrillic]{serbian}{serbianc}
+
\newif\if@serbian@cyr
+\define@choicekey*+{serbian}{Script}[\val\nr]{cyrillic,latin}[cyrillic]{%
+ \ifcase\nr\relax
+ % cyrillic:
+ \@serbian@cyrtrue
+ \SetLanguageKeys{serbian}{scripttag=cyrl,script=Cyrillic,babelname=serbianc}
+ \xpg@fontsetup@nonlatin{serbian}%
+ \or
+ % latin:
+ \@serbian@cyrfalse
+ \SetLanguageKeys{serbian}{scripttag=latn,script=Latin}
+ \xpg@fontsetup@latin{serbian}%
+ %TODO \def\serbian@language{\language=\l@serbianlat}%
+ % or should we use Croatian patterns as a fallback for the time being???
+ \fi
+ \xpg@info{Option: Serbian, script=\val}%
+}{\xpg@warning{Unknown Serbian script `#1'}}
-\define@key{serbian}{Script}[Cyrillic]{%
- \ifstrequal{#1}{Cyrillic}%
- {\@serbian@cyrtrue
- \SetLanguageKeys{serbian}{scripttag=cyrl,script=Cyrillic,babelname=serbianc}
- \xpg@fontsetup@nonlatin{serbian}%
- }%
- {\ifstrequal{#1}{Latin}%
- {\@serbian@cyrfalse
- \SetLanguageKeys{serbian}{scripttag=latn,script=Latin}
- \xpg@fontsetup@latin{serbian}%
- %TODO \def\serbian@language{\language=\l@serbianlat}%
- % or should we use Croatian patterns as a fallback for the time being???
- }%
- {\xpg@error{Unknown script `#1' for Serbian language\MessageBreak
- Valid values are "Cyrillic" and "Latin"}}%
- }%
-}
\define@key{serbian}{script}[Cyrillic]{\setkeys{serbian}{Script=#1}}
\newif\ifserbian@numerals
@@ -9910,6 +12077,21 @@ and may look very wrong.}
% \end{macrocode}
% \iffalse
%</gloss-serbian.ldf>
+%<*gloss-serbianc.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-serbianc.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-serbianc.ldf}[polyglossia: module for serbian (cyrillic)]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{serbian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-serbianc.ldf>
%<*gloss-slovak.ldf>
% \fi
% \clearpage
@@ -9925,6 +12107,176 @@ and may look very wrong.}
fontsetup=true,
}
+\ifluatex
+ \RequirePackage{luavlna}
+\fi
+
+\define@boolkey{slovak}[slovak@]{babelshorthands}[true]{}
+
+\define@boolkey{slovak}[slovak@]{splithyphens}[true]{}
+
+\define@boolkey{slovak}[slovak@]{vlna}[true]{}
+
+\setkeys{slovak}{splithyphens,vlna}
+
+\ifsystem@babelshorthands
+ \setkeys{slovak}{babelshorthands=true}
+\else
+ \setkeys{slovak}{babelshorthands=false}
+\fi
+
+\ifcsundef{initiate@active@char}{%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
+}{}
+
+\def\slovak@@splhyphen#1{%
+ \kern\z@\discretionary{-}{\char\hyphenchar\the\font}{#1}%
+ \nobreak\hskip\z@%
+}
+
+\def\slovak@splhyphen{%
+ \slovak@@splhyphen{-}%
+}
+
+\def\slovak@shorthands{%
+ \bbl@activate{"}%
+ \def\language@group{slovak}%
+ \declare@shorthand{slovak}{"=}{\slovak@splhyphen}%
+ \declare@shorthand{slovak}{""}{\hskip\z@skip}%
+ \declare@shorthand{slovak}{"~}{\textormath{\leavevmode\hbox{-}}{-}}%
+ \declare@shorthand{slovak}{"-}{\nobreak\-\bbl@allowhyphens}%
+ \declare@shorthand{slovak}{"|}{%
+ \textormath{\penalty\@M\discretionary{-}{}{\kern.03em}%
+ \bbl@allowhyphens}{}%
+ }%
+ \declare@shorthand{slovak}{"/}{\textormath
+ {\bbl@allowhyphens\discretionary{/}{}{/}\bbl@allowhyphens}{}}%
+ \declare@shorthand{slovak}{"`}{„}%
+ \declare@shorthand{slovak}{"'}{“}%
+ \declare@shorthand{slovak}{"<}{«}%
+ \declare@shorthand{slovak}{">}{»}%
+}
+
+\def\noslovak@shorthands{%
+ \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
+}
+
+\ifxetex
+ % splithyphens
+ \newXeTeXintercharclass\slovak@hyphen % -
+ % vlna
+ \newXeTeXintercharclass\slovak@openpunctuation
+ \newXeTeXintercharclass\slovak@nonsyllabicpreposition
+ \ifdefined\e@alloc@intercharclass@top
+ \chardef\slovak@boundary=\e@alloc@intercharclass@top
+ \else
+ \ifdefined\XeTeXinterwordspaceshaping
+ \chardef\slovak@boundary=4095 %
+ \def\newXeTeXintercharclass{%
+ \e@alloc\XeTeXcharclass\chardef
+ \xe@alloc@intercharclass\m@ne\@ucharclass@boundary}
+ \else
+ \chardef\slovak@boundary=255
+ \fi
+ \fi
+\fi
+
+\def\slovak@hyphens{%
+ \ifluatex
+ \AfterPreamble{\enablesplithyphens{slovak}}%
+ \else
+ \XeTeXinterchartokenstate=1
+ \XeTeXcharclass `\- \slovak@hyphen
+ \XeTeXinterchartoks \z@ \slovak@hyphen = {\slovak@@splhyphen}% "-" -> "\slovak@@splhyphen-"
+ % necessary if used together with vlna:
+ \XeTeXinterchartoks \slovak@nonsyllabicpreposition \slovak@hyphen = {\slovak@@splhyphen}% "-" -> "\slovak@@splhyphen-"
+ \fi%
+}
+
+\def\noslovak@hyphens{%
+ \ifluatex
+ \AfterPreamble{\disablesplithyphens{slovak}}%
+ \else
+ \XeTeXcharclass `\- \z@
+ \fi%
+}
+
+% Add nonbreakable space after single-letter word to
+% prevent them to land at the end of a line
+\def\slovak@vlna{%
+ \ifluatex
+ \preventsingleon
+ \else
+ % Code taken and adapted from xevlna.sty
+ \XeTeXinterchartokenstate=1
+ \XeTeXcharclass `\( \slovak@openpunctuation
+ \XeTeXcharclass `\[ \slovak@openpunctuation
+ \XeTeXcharclass `\„ \slovak@openpunctuation
+ \XeTeXcharclass `\» \slovak@openpunctuation
+ \XeTeXcharclass `\K \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\k \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\S \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\s \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\V \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\v \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\Z \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\z \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\O \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\o \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\U \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\u \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\A \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\a \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\I \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\i \slovak@nonsyllabicpreposition
+ \XeTeXinterchartoks \slovak@boundary \slovak@nonsyllabicpreposition {\slovak@interchartoks}
+ \XeTeXinterchartoks \slovak@openpunctuation \slovak@nonsyllabicpreposition {\slovak@interchartoks}
+ \def\slovak@nointerchartoks{\let\slovak@interchartoks\slovak@PreCSpreposition}
+ \def\slovak@PreCSpreposition{\def\next{}%
+ \ifnum\catcode`\ =10 % nothing will be done in verbatim
+ \ifmmode % nothing in math
+ \else
+ \let\slovak@interchartoks\slovak@nointerchartoks
+ \let\next\slovak@ExamineCSpreposition
+ \fi \fi
+ \next%
+ }
+ \def\slovak@ExamineCSpreposition ##1{##1\futurelet\next\slovak@ProcessCSpreposition}
+ \def\slovak@ProcessCSpreposition{\ifx\next\slovak@XeTeXspace\nobreak\fi}
+ \futurelet\slovak@XeTeXspace{ }\slovak@nointerchartoks
+ \fi
+}
+
+\def\noslovak@vlna{%
+ \ifluatex
+ \preventsingleoff
+ \else
+ \XeTeXcharclass`\(\z@
+ \XeTeXcharclass`\[\z@
+ \XeTeXcharclass`\„\z@
+ \XeTeXcharclass`\»\z@
+ \XeTeXcharclass`\K\z@
+ \XeTeXcharclass`\k\z@
+ \XeTeXcharclass`\S\z@
+ \XeTeXcharclass`\s\z@
+ \XeTeXcharclass`\V\z@
+ \XeTeXcharclass`\v\z@
+ \XeTeXcharclass`\Z\z@
+ \XeTeXcharclass`\z\z@
+ \XeTeXcharclass`\O\z@
+ \XeTeXcharclass`\o\z@
+ \XeTeXcharclass`\U\z@
+ \XeTeXcharclass`\u\z@
+ \XeTeXcharclass`\A\z@
+ \XeTeXcharclass`\a\z@
+ \XeTeXcharclass`\I\z@
+ \XeTeXcharclass`\i\z@
+ \fi
+}
+
+
\def\captionsslovak{%
\def\refname{Referencie}%
\def\abstractname{Abstrakt}%
@@ -9948,7 +12300,7 @@ and may look very wrong.}
\def\headtoname{Pre}% was komu
\def\proofname{Dôkaz}%
\def\glossaryname{Slovník}%
- }
+}
\def\dateslovak{%
\def\today{\number\day.~\ifcase\month\or
@@ -9956,11 +12308,45 @@ and may look very wrong.}
júna\or júla\or augusta\or septembra\or októbra\or
novembra\or decembra\fi
\space \number\year}%
- }
+}
+
+\def\noextras@slovak{%
+ \noslovak@shorthands%
+ \noslovak@hyphens%
+ \noslovak@vlna%
+ \ifxetex\XeTeXinterchartokenstate=0\fi%
+}
+
+\def\blockextras@slovak{%
+ \ifslovak@babelshorthands\slovak@shorthands\fi%
+ \ifslovak@vlna\slovak@vlna\else\noslovak@vlna\fi%
+ \ifslovak@splithyphens\slovak@hyphens\else\noslovak@hyhens\fi%
+}
+
+\def\inlineextras@slovak{%
+ \ifslovak@babelshorthands\slovak@shorthands\fi%
+ \ifslovak@vlna\slovak@vlna\else\noslovak@vlna\fi%
+ \ifslovak@splithyphens\slovak@hyphens\else\noslovak@hyhens\fi%
+}
% \end{macrocode}
% \iffalse
%</gloss-slovak.ldf>
+%<*gloss-slovene.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-slovene.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-slovene.ldf}[polyglossia: module for slovenian]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{slovenian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-slovene.ldf>
%<*gloss-slovenian.ldf>
% \fi
% \clearpage
@@ -9977,6 +12363,9 @@ and may look very wrong.}
fontsetup=true,
}
+% Babel aliases
+\setlanguagealias{slovenian}{slovene}
+
\providebool{slovenian@localalph}
\define@boolkey{slovenian}[slovenian@]{localalph}[false]{%
\def\@tmpa{#1}%
@@ -10057,6 +12446,14 @@ and may look very wrong.}
fontsetup=true,
}
+% Backwards compat. aliases
+\setlanguagealias[variant=lower]{sorbian}{lsorbian}
+\setlanguagealias[variant=upper]{sorbian}{usorbian}
+
+% Babel aliases
+\setlanguagealias[variant=lower]{sorbian}{lowersorbian}
+\setlanguagealias[variant=upper]{sorbian}{uppersorbian}
+
\def\sorbian@variant{usorbian}
\define@choicekey*+{sorbian}{variant}[\val\nr]{upper,lower}[upper]{%
\ifcase\nr\relax
@@ -10221,6 +12618,7 @@ and may look very wrong.}
% \subsection{gloss-spanish.ldf}
% \begin{macrocode}
\ProvidesFile{gloss-spanish.ldf}[polyglossia: module for spanish]
+
\PolyglossiaSetup{spanish}{
hyphennames={spanish},
hyphenmins={2,2},
@@ -10228,6 +12626,152 @@ and may look very wrong.}
frenchspacing=true,
indentfirst=true,
fontsetup=true,
+ babelname=spanish
+}
+
+% Babel aliases
+\setlanguagealias[variant=mexican]{spanish}{spanishmx}
+
+\newif\if@spanish@mexico
+\@spanish@mexicofalse
+\define@choicekey*+{spanish}{variant}[\val\nr]{spanish,mexican}[spanish]{%
+ \ifcase\nr\relax
+ % spanish:
+ \@spanish@mexicofalse%
+ \SetLanguageKeys{spanish}{babelname=spanish}%
+ \or
+ % mexican:
+ \@spanish@mexicotrue%
+ \SetLanguageKeys{spanish}{babelname=spanishmx}%
+ \fi
+ \xpg@info{Option: spanish, variant=\val}%
+}{\xpg@warning{Unknown spanish variant `#1'}}
+
+% Localized math operators à la babel
+\newif\ifspanish@accentedoperators
+\newif\ifspanish@spacedoperators
+\newif\ifspanish@locoperators
+
+\define@choicekey*+{spanish}{spanishoperators}[\val\nr]{all,accented,spaced,none}[all]{%
+ \ifcase\nr\relax
+ % all:
+ \spanish@locoperatorstrue%
+ \spanish@accentedoperatorstrue%
+ \spanish@spacedoperatorstrue%
+ \or
+ % accented:
+ \spanish@locoperatorsfalse%
+ \spanish@accentedoperatorstrue%
+ \spanish@spacedoperatorsfalse%
+ \or
+ % spaced:
+ \spanish@locoperatorsfalse%
+ \spanish@accentedoperatorsfalse%
+ \spanish@spacedoperatorstrue%
+ \or
+ % none:
+ \spanish@locoperatorsfalse%
+ \spanish@accentedoperatorsfalse%
+ \spanish@spacedoperatorsfalse%
+ \fi
+ \xpg@info{Option: Spanish, spanishoperators=\val}%
+}{\xpg@warning{Unknown spanishoperators value `#1'}}
+
+\let\xpg@save@lim\lim
+\let\xpg@save@limsup\limsup
+\let\xpg@save@liminf\liminf
+\let\xpg@save@max\max
+\let\xpg@save@min\min
+\let\xpg@save@inf\inf
+\let\xpg@save@bmod\bmod
+\let\xpg@save@pmod\pmod
+
+\def\spanish@accentedoperators{%
+ \DeclareRobustCommand\lim{\mathop{\operator@font lím}}%
+ \DeclareRobustCommand\limsup{\mathop{\operator@font lím\,sup}}%
+ \DeclareRobustCommand\liminf{\mathop{\operator@font lím\,inf}}%
+ \DeclareRobustCommand\max{\mathop{\operator@font máx}}%
+ \DeclareRobustCommand\min{\mathop{\operator@font mín}}%
+ \DeclareRobustCommand\inf{\mathop{\operator@font ínf}}%
+ \DeclareRobustCommand\bmod{%
+ \nonscript\mskip-\medmuskip\mkern5mu%
+ \mathbin{\operator@font mód}\penalty900\mkern5mu%
+ \nonscript\mskip-\medmuskip}%
+ \@ifundefined{@amsmath@err}%
+ {\DeclareRobustCommand\pmod[1]{%
+ \allowbreak\mkern18mu({\operator@font mód}\,\,##1)}}%
+ {\let\xpg@save@mod\mod
+ \DeclareRobustCommand\mod[1]{\allowbreak\if@display\mkern18mu
+ \else\mkern12mu\fi{\operator@font mód}\,\,##1}%
+ \DeclareRobustCommand\pmod[1]{\pod{{\operator@font mód}%
+ \mkern6mu##1}}}%
+}
+
+\def\nospanish@accentedoperators{%
+ \let\lim\xpg@save@lim%
+ \let\limsup\xpg@save@limsup%
+ \let\liminf\xpg@save@liminf%
+ \let\max\xpg@save@max%
+ \let\min\xpg@save@min%
+ \let\inf\xpg@save@inf%
+ \let\bmod\xpg@save@bmod%
+ \let\pmod\xpg@save@pmod%
+ \@ifundefined{@amsmath@err}{}{\let\mod\xpg@save@mod}%
+}
+
+\let\xpg@save@arccos\arccos
+\let\xpg@save@arcsin\arcsin
+\let\xpg@save@arctan\arctan
+\let\arcsen\arcsin
+\let\arctg\arctan
+
+
+\def\spanish@spacedoperators{%
+ \DeclareRobustCommand\arccos{\mathop{\operator@font arc\,cos}\nolimits}%
+ \DeclareRobustCommand\arcsin{\mathop{\operator@font arc\,sen}\nolimits}%
+ \DeclareRobustCommand\arctan{\mathop{\operator@font arc\,tg}\nolimits}%
+}
+
+\def\nospanish@spacedoperators{%
+ \let\arccos\xpg@save@arccos%
+ \let\arcsen\arcsin%
+ \let\arctg\arctan%
+}
+
+
+\let\xpg@save@sin\sin
+\let\xpg@save@tan\tan
+\let\xpg@save@sinh\sinh
+\let\xpg@save@tanh\tanh
+\let\sen\sin
+\let\tg\tan
+\let\senh\sinh
+\let\tgh\tanh
+
+\def\spanish@locoperators{%
+ \DeclareRobustCommand\sin{\mathop{\operator@font sen}\nolimits}%
+ \DeclareRobustCommand\tan{\mathop{\operator@font tg}\nolimits}%
+ \DeclareRobustCommand\sinh{\mathop{\operator@font senh}\nolimits}%
+ \DeclareRobustCommand\tanh{\mathop{\operator@font tgh}\nolimits}%
+}
+
+\def\nospanish@locoperators{%
+ \let\sen\xpg@save@sin%
+ \let\tg\xpg@save@tan%
+ \let\sinh\xpg@save@sinh%
+ \let\tanh\xpg@save@tanh%
+ \let\sen\relax%
+ \let\tg\relax%
+ \let\senh\relax%
+ \let\tgh\relax%
+}
+
+\newcommand*\spanishoperator[2][]{%
+ \ifx#1\\\\
+ \protected@csxdef{#2}{\mathop{\operator@font #2}\nolimits}%
+ \else
+ \protected@csxdef{#2}{\mathop{\operator@font #1}\nolimits}%
+ \fi
}
\def\captionsspanish{%
@@ -10252,18 +12796,58 @@ and may look very wrong.}
\def\alsoname{véase también}%
\def\proofname{Prueba}%
\def\glossaryname{Glosario}%
- }
+ \if@spanish@mexico
+ \captionsspanish@mexico%
+ \fi%
+}
+
+\def\captionsspanish@mexico{%
+ \def\tablename{Tabla}%
+}
\def\datespanish{%
\def\today{\number\day~de~\ifcase\month\or
enero\or febrero\or marzo\or abril\or mayo\or junio\or
julio\or agosto\or septiembre\or octubre\or noviembre\or
diciembre\fi\space de~\number\year}%
- }
+}
+
+\def\noextras@spanish{%
+ \nospanish@accentedoperators%
+ \nospanish@spacedoperators%
+ \nospanish@locoperators%
+}
+
+\def\blockextras@spanish{%
+ \ifspanish@accentedoperators\spanish@accentedoperators\fi%
+ \ifspanish@spacedoperators\spanish@spacedoperators\fi%
+ \ifspanish@locoperators\spanish@locoperators\fi%
+}
+
+\def\inlineextras@spanish{%
+ \ifspanish@accentedoperators\spanish@accentedoperators\fi%
+ \ifspanish@spacedoperators\spanish@spacedoperators\fi%
+ \ifspanish@locoperators\spanish@locoperators\fi%
+}
% \end{macrocode}
% \iffalse
%</gloss-spanish.ldf>
+%<*gloss-spanishmx.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-spanishmx.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-spanishmx.ldf}[polyglossia: module for mexican spanish]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{spanish}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-spanishmx.ldf>
%<*gloss-swedish.ldf>
% \fi
% \clearpage
@@ -10321,6 +12905,21 @@ and may look very wrong.}
% \end{macrocode}
% \iffalse
%</gloss-swedish.ldf>
+%<*gloss-swissgerman.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-swissgerman.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-swissgerman.ldf}[polyglossia: module for swiss german (old spelling)]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-swissgerman.ldf>
%<*gloss-syriac.ldf>
% \fi
% \clearpage
@@ -11352,6 +13951,21 @@ and may look very wrong.}
% \end{macrocode}
% \iffalse
%</gloss-ukrainian.ldf>
+%<*gloss-uppersorbian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-uppersorbian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-uppersorbian.ldf}[polyglossia: module for upper sorbian]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{sorbian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-uppersorbian.ldf>
%<*gloss-urdu.ldf>
% \fi
% \clearpage
@@ -11518,19 +14132,7 @@ and may look very wrong.}
% We only provide this gloss for babel compatibility. Since usorbian is
% a sorbian variety, we use 'sorbian' with variant 'upper' now.
-\input{gloss-sorbian.ldf}
-
-\PolyglossiaSetup{usorbian}{
- language=Upper Sorbian,
- babelname=uppersorbian,
- hyphennames={usorbian,uppersorbian},
- hyphenmins={2,2},
- langtag=USB,
- fontsetup=true,
-}
-
-\let\captionsusorbian\captionssorbian@usorbian
-\let\dateusorbian\datesorbian@usorbian
+\xpg@load@master@language{sorbian}
% \end{macrocode}
% \iffalse
@@ -11796,239 +14398,67 @@ U+0039 <> U+0E59 ;
% \end{macrocode}
% \iffalse
%</thaidigits.map>
-%<*polyglossia-frpt.lua>
+%<*polyglossia-french.lua>
% \fi
% \clearpage
%
-% \subsection{polyglossia-frpt.lua}
+% \subsection{polyglossia-french.lua}
% \begin{macrocode}
-require('polyglossia') -- just in case...
-
-local add_to_callback = luatexbase.add_to_callback
-local remove_from_callback = luatexbase.remove_from_callback
-local priority_in_callback = luatexbase.priority_in_callback
-
-local get_quad = luaotfload.aux.get_quad -- needs luaotfload > 20130516
-
-local next, type = next, type
-
-local nodes, fonts, node = nodes, fonts, node
-
-local nodecodes = nodes.nodecodes
-
-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 math_code = nodecodes.math
-local end_of_math = node.end_of_math
-if not end_of_math then -- luatex < .76
- local traverse_nodes = node.traverse_id
- local end_of_math = function (n)
- for n in traverse_nodes(math_code, n.next) do
- return n
- end
- end
-end
-
--- node types according to node.types()
-local glue_code = nodecodes.glue
-local glue_spec_code = nodecodes.glue_spec
-local glyph_code = nodecodes.glyph
-local penalty_code = nodecodes.penalty
-local kern_code = nodecodes.kern
+require('polyglossia-punct')
--- we make a new node, so that we can copy it later on
-local penalty_node = new_node(penalty_code)
-penalty_node.penalty = 10000
-
-local function get_penalty_node()
- return node_copy(penalty_node)
+local function set_left_space(lang, char, kern, rubber)
+ polyglossia.add_left_spaced_character(lang, char, kern, "space", rubber)
end
--- same for glue node
-local kern_node = new_node(kern_code)
-
-local function get_kern_node(dim)
- local n = node_copy(kern_node)
- n.kern = dim
- return n
+local function set_right_space(lang, char, kern, rubber)
+ polyglossia.add_right_spaced_character(lang, char, kern, "space", rubber)
end
--- we have here all possible space characters, referenced by their
--- unicode slot number, taken from char-def.lua
-local space_chars = {[32]=1, [160]=1, [5760]=1, [6158]=1, [8192]=1, [8193]=1, [8194]=1, [8195]=1,
- [8196]=1, [8197]=1, [8198]=1, [8199]=1, [8200]=1, [8201]=1, [8202]=1, [8239]=1, [8287]=1, [12288]=1}
-
--- from nodes-tst.lua, adapted
-local function somespace(n,all)
- if n then
- local id = n.id
- if id == glue_code then
- return (all or (n.spec.width ~= 0)) and glue_code
- elseif id == kern_code then
- return (all or (n.kern ~= 0)) and kern_code
- elseif id == glyph_code then
- if space_chars[n.char] then
- return true
- else
- return false
- end
- end
+local function activate_french_punct(thincolonspace, autospaceguillemets)
+ -- We need different language tags here to make switching of options possible
+ -- within a paragraph.
+ local lang = "french"
+ if thincolonspace then
+ lang = lang.."-thincolon"
end
- return false
-end
-
--- idem
-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
+ if autospaceguillemets then
+ lang = lang.."-autospace"
end
- return false
-end
-local xpgfrptattr = luatexbase.attributes['xpg@frpt']
-
-local left=1
-local right=2
-local byte = unicode.utf8.byte
-
--- Now there is a good question: how do we now, in lua, what a \thinspace is?
--- In the LaTeX source (ltspace.dtx) it is defined as:
--- \def\thinspace{\kern .16667em }. I see no way of seeing if it has been
--- overriden or not... So we stick to this value.
-local thinspace = 0.16667
--- thickspace is defined in amsmath.sty as:
--- \renewcommand{\;}{\mspace+\thickmuskip{.2777em}}. Same problem as above, we
--- stick to this fixed value.
-local thickspace = 0.2777 -- 5/18
-
-local mappings = {
- [byte(':')] = {left, thickspace}, --really?
- [byte('!')] = {left, thinspace},
- [byte('?')] = {left, thinspace},
- [byte(';')] = {left, thinspace},
- [byte('‼')] = {left, thinspace},
- [byte('⁇')] = {left, thinspace},
- [byte('⁈')] = {left, thinspace},
- [byte('⁉')] = {left, thinspace},
- [byte('»')] = {left, thinspace},
- [byte('›')] = {left, thinspace},
- [byte('«')] = {right, thinspace},
- [byte('‹')] = {right, thinspace},
- }
+ polyglossia.activate_punct(lang)
+ polyglossia.clear_spaced_characters(lang)
-local function set_spacings(thinsp, thicksp)
- for _, m in pairs(mappings) do
- if m[2] == thinspace then
- m[2] = thinsp
- elseif m[2] == thickspace then
- m[2] = thicksp
+ if thincolonspace then
+ set_left_space(lang, ':', 0.5)
+ else
+ set_left_space(lang, ':', 1, true) -- stretchable and shrinkable space
end
- end
- thickspace = thicksp
- thinspace = thinsp
-end
--- from typo-spa.lua
-local function process(head)
- local done = false
- local start = head
- -- head is always begin of par (whatsit), so we have at least two prev nodes
- -- penalty followed by glue
- while start do
- local id = start.id
- if id == glyph_code then
- local attr = has_attribute(start, xpgfrptattr)
- if attr and attr > 0 then
- local char = start.char
- local map = mappings[char]
- --node.unset_attribute(start, xpgfrptattr) -- needed?
- if map then
- local quad = get_quad(start.font) -- might be optimized
- local prev = start.prev
- if map[1] == left and prev then
- local prevprev = prev.prev
- local somespace = somespace(prev,true)
- -- TODO: there is a question here: do we override a preceding space or not?...
- if somespace then
- local somepenalty = somepenalty(prevprev,10000)
- if somepenalty then
- head = remove_node(head,prev)
- head = remove_node(head,prevprev)
- else
- head = remove_node(head,prev)
- end
- end
- insert_node_before(head,start,get_penalty_node())
- insert_node_before(head,start,get_kern_node(map[2]*quad))
- done = true
- end
- local next = start.next
- if map[1] == right and next then
- local nextnext = next.next
- local somepenalty = somepenalty(next,10000)
- if somepenalty then
- local somespace = somespace(nextnext,true)
- if somespace then
- head = remove_node(head,next)
- head = remove_node(head,nextnext)
- end
- else
- local somespace = somespace(next,true)
- if somespace then
- head = remove_node(head,next)
- end
- end
- insert_node_after(head,start,get_kern_node(map[2]*quad))
- insert_node_after(head,start,get_penalty_node())
- done = true
- end
- end
- end
- elseif id == math_code then
- -- warning: this is a feature of luatex > 0.76
- start = end_of_math(start) -- weird, can return nil .. no math end?
- end
- if start then
- start = start.next
- end
+ set_left_space(lang, '!', 0.5)
+ set_left_space(lang, '?', 0.5)
+ set_left_space(lang, ';', 0.5)
+ set_left_space(lang, '‼', 0.5)
+ set_left_space(lang, '⁇', 0.5)
+ set_left_space(lang, '⁈', 0.5)
+ set_left_space(lang, '⁉', 0.5)
+
+ if autospaceguillemets then
+ set_left_space(lang, '»', 0.5)
+ set_left_space(lang, '›', 0.5)
+ set_right_space(lang, '«', 0.5)
+ set_right_space(lang, '‹', 0.5)
end
- return head, done
-end
-
-local callback_name = "pre_linebreak_filter"
-
-local function activate()
- if not priority_in_callback (callback_name, "polyglossia-frpt.process") then
- add_to_callback(callback_name, process, "polyglossia-frpt.process", 1)
- end
end
-local function desactivate()
- if priority_in_callback (callback_name, "polyglossia-frpt.process") then
- remove_from_callback(callback_name, "polyglossia-frpt.process")
- end
+local function deactivate_french_punct()
+ polyglossia.deactivate_punct()
end
-polyglossia.activate_frpt = activate
-polyglossia.desactivate_frpt = desactivate
-polyglossia.set_spacings = set_spacings
-polyglossia.thinspace = thinspace
-polyglossia.thickspace = thickpace
+polyglossia.activate_french_punct = activate_french_punct
+polyglossia.deactivate_french_punct = deactivate_french_punct
% \end{macrocode}
% \iffalse
-%</polyglossia-frpt.lua>
+%</polyglossia-french.lua>
%<*polyglossia-korean.lua>
% \fi
% \clearpage
@@ -12641,6 +15071,399 @@ prepend_to_callback ("hpack_filter",
% \end{macrocode}
% \iffalse
%</polyglossia-korean.lua>
+%<*polyglossia-latin.lua>
+% \fi
+% \clearpage
+%
+% \subsection{polyglossia-latin.lua}
+% \begin{macrocode}
+require('polyglossia-punct')
+
+-- For ecclesiastic Latin (and sometimes for Italian) a very small space is
+-- used for the punctuation. The ecclesiastic package uses a space of
+-- 0.3\fontdimen2, where \fontdimen2 is a interword space, which is typically
+-- between 1/4 and 1/3 of a quad. We choose a half of a \thinspace here.
+local hairspace = 0.08333 -- 1/12
+
+local function activate_latin_punct()
+ polyglossia.activate_punct('latin')
+ polyglossia.clear_spaced_characters('latin')
+ polyglossia.add_left_spaced_character('latin',':',hairspace,'quad')
+ polyglossia.add_left_spaced_character('latin','!',hairspace,'quad')
+ polyglossia.add_left_spaced_character('latin','?',hairspace,'quad')
+ polyglossia.add_left_spaced_character('latin',';',hairspace,'quad')
+ polyglossia.add_left_spaced_character('latin','‼',hairspace,'quad')
+ polyglossia.add_left_spaced_character('latin','⁇',hairspace,'quad')
+ polyglossia.add_left_spaced_character('latin','⁈',hairspace,'quad')
+ polyglossia.add_left_spaced_character('latin','⁉',hairspace,'quad')
+ polyglossia.add_left_spaced_character('latin','»',hairspace,'quad')
+ polyglossia.add_left_spaced_character('latin','›',hairspace,'quad')
+ polyglossia.add_right_spaced_character('latin','«',hairspace,'quad')
+ polyglossia.add_right_spaced_character('latin','‹',hairspace,'quad')
+end
+
+local function deactivate_latin_punct()
+ polyglossia.deactivate_punct()
+end
+
+polyglossia.activate_latin_punct = activate_latin_punct
+polyglossia.deactivate_latin_punct = deactivate_latin_punct
+% \end{macrocode}
+% \iffalse
+%</polyglossia-latin.lua>
+%<*polyglossia-punct.lua>
+% \fi
+% \clearpage
+%
+% \subsection{polyglossia-punct.lua}
+% \begin{macrocode}
+require('polyglossia') -- just in case...
+
+local add_to_callback = luatexbase.add_to_callback
+local remove_from_callback = luatexbase.remove_from_callback
+local priority_in_callback = luatexbase.priority_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 getnext = node.getnext
+local getprev = node.getprev
+
+-- node types according to node.types()
+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"
+
+-- we need some node subtypes
+local userkern = 1
+local userskip = 0
+local removable_skip = {
+ [0] = true, -- userskip
+ [13] = true, -- spaceskip
+ [14] = true, -- xspaceskip
+}
+
+-- we make a new node, so that we can copy it later on
+local kern_node = new_node(kern_code)
+kern_node.subtype = userkern -- this kern can be removed later on
+
+local function get_kern_node(dim)
+ local n = node_copy(kern_node)
+ n.kern = dim
+ return n
+end
+
+local glue_node = new_node(glue_code)
+glue_node.subtype = userskip
+
+local function get_glue_node(dim, stretch, shrink)
+ local n = node_copy(glue_node)
+ n.width = dim
+ n.stretch = stretch
+ n.shrink = shrink
+ return n
+end
+
+local penalty_node = new_node(penalty_code)
+penalty_node.penalty = 10000
+
+local function get_penalty_node()
+ return node_copy(penalty_node)
+end
+
+-- we have here all possible space characters, referenced by their unicode slot
+-- number, taken from char-def.lua
+local space_chars = {[32] = true, [160] = true, [5760] = true, [6158] = true,
+ [8192] = true, [8193] = true, [8194] = true, [8195] = true, [8196] = true,
+ [8197] = true, [8198] = true, [8199] = true, [8200] = true, [8201] = true,
+ [8202] = true, [8239] = true, [8287] = true, [12288] = true}
+
+-- from nodes-tst.lua, adapted
+local function somespace(n)
+ if n then
+ local id, subtype = n.id, n.subtype
+ if id == glue_code then
+ -- it is dangerous to remove all the type of glue
+ return removable_skip[subtype]
+ elseif id == kern_code then
+ -- remove only user's kern
+ return subtype == userkern
+ elseif id == glyph_code then
+ return space_chars[n.char]
+ end
+ end
+end
+
+-- we have here all left bracket characters, referenced by their unicode slot
+local left_bracket_chars = {[40] = true, [123] = true, [91] = true, [10216] = true}
+
+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
+
+-- we have here all right bracket characters, referenced by their unicode slot
+local right_bracket_chars = {[41] = true, [125] = true, [93] = true, [10217] = true}
+
+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
+
+-- idem
+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("polyglossia_punct")
+
+local lang_id = {}
+local lang_counter = 0
+local left_space = {}
+local right_space = {}
+
+local function ensure_lang_id(lang)
+ if not lang_id[lang] then
+ lang_counter = lang_counter + 1
+ lang_id[lang] = lang_counter
+ end
+ return lang_id[lang]
+end
+
+local function clear_spaced_characters(lang)
+ local id = ensure_lang_id(lang)
+ left_space[id] = {}
+ right_space[id] = {}
+end
+
+local function illegal_unit(unit)
+ if unit then
+ texio.write_nl('Illegal spacing unit "'..unit..'".')
+ else
+ texio.write_nl('Spacing unit is a nil value.')
+ end
+end
+
+local function add_left_spaced_character(lang, char, kern, unit, rubber)
+-- The parameter kern is a number meant as a fraction of the unit.
+-- The unit can be "quad" (1em) or "space" (interword space).
+-- The parameter rubber is a Boolean value indicating if the inserted space is
+-- stretchable and shrinkable (only relevant if the unit is "space").
+ local id = ensure_lang_id(lang)
+ if unit == "quad" or unit == "space" then
+ left_space[id][char] = {}
+ left_space[id][char]["kern"] = kern
+ left_space[id][char]["unit"] = unit
+ left_space[id][char]["rubber"] = rubber
+ else
+ illegal_unit(unit)
+ end
+end
+
+local function add_right_spaced_character(lang, char, kern, unit, rubber)
+ local id = ensure_lang_id(lang)
+ if unit == "quad" or unit == "space" then
+ right_space[id][char] = {}
+ right_space[id][char]["kern"] = kern
+ right_space[id][char]["unit"] = unit
+ right_space[id][char]["rubber"] = rubber
+ else
+ illegal_unit(unit)
+ end
+end
+
+-- from typo-spa.lua, adapted
+local function process(head)
+ local current = head
+ while current do
+ local id = current.id
+ if id == glyph_code then
+ local attr = has_attribute(current, punct_attr)
+ if attr then
+ local char = utf8.char(current.char) -- requires Lua 5.3
+ local leftspace = left_space[attr][char]
+ local rightspace = right_space[attr][char]
+ if leftspace or rightspace then
+ local fontparameters = fonts.hashes.parameters[current.font]
+ local unit, stretch, shrink, spacing_node
+ if leftspace then
+ local prev = getprev(current)
+ local space_exception = false
+ if prev then
+ local prevprev = getprev(prev)
+ -- do not add space after left (opening) bracket
+ space_exception = someleftbracket(prev)
+ if somespace(prev) then
+ -- TODO: there is a question here: do we override a preceding space or not?...
+ if somepenalty(prevprev, 10000) then
+ head = remove_node(head, prevprev)
+ end
+ head = remove_node(head, prev)
+ end
+ end
+ if leftspace.unit == "quad" then
+ unit = fontparameters.quad
+ spacing_node = get_kern_node(leftspace.kern*unit)
+ elseif leftspace.unit == "space" then
+ unit = fontparameters.space
+ if leftspace.rubber then
+ stretch = leftspace.kern*fontparameters.space_stretch
+ shrink = leftspace.kern*fontparameters.space_shrink
+ spacing_node = get_glue_node(leftspace.kern*unit, stretch, shrink)
+ head = insert_node_before(head, current, get_penalty_node())
+ else
+ spacing_node = get_kern_node(leftspace.kern*unit)
+ end
+ end
+ if not space_exception then
+ head = insert_node_before(head, current, spacing_node)
+ end
+ end
+ if rightspace then
+ local next = getnext(current)
+ local space_exception = false
+ if next then
+ -- do not add space before right (closing) bracket
+ space_exception = somerightbracket(next)
+ local nextnext = getnext(next)
+ if somepenalty(next, 10000) and somespace(nextnext) then
+ head = remove_node(head, next)
+ head = remove_node(head, nextnext)
+ elseif somespace(next) then
+ head = remove_node(head, next)
+ end
+ end
+ if rightspace.unit == "quad" then
+ unit = fontparameters.quad
+ spacing_node = get_kern_node(rightspace.kern*unit)
+ elseif rightspace.unit == "space" then
+ unit = fontparameters.space
+ if rightspace.rubber then
+ stretch = rightspace.kern*fontparameters.space_stretch
+ shrink = rightspace.kern*fontparameters.space_shrink
+ spacing_node = get_glue_node(rightspace.kern*unit, stretch, shrink)
+ if not space_exception then
+ head, current = insert_node_after(head, current, get_penalty_node())
+ end
+ else
+ spacing_node = get_kern_node(rightspace.kern*unit)
+ end
+ end
+ if not space_exception then
+ head, current = insert_node_after(head, current, spacing_node)
+ end
+ end
+ end
+ end
+ elseif id == math_code then
+ -- warning: this is a feature of luatex > 0.76
+ current = end_of_math(current) -- weird, can return nil .. no math end?
+ end
+ current = getnext(current) -- no error even if current is nil
+ end
+ return head
+end
+
+local function activate(lang)
+ local id = ensure_lang_id(lang)
+ -- We set the punctuation attribute to a language id here. This is
+ -- important to be able to intermix languages with different spacings
+ -- in one paragraph.
+ tex.setattribute(punct_attr, id)
+ for _, callback_name in ipairs{ "pre_linebreak_filter", "hpack_filter" } do
+ if not priority_in_callback(callback_name, "polyglossia-punct.process") then
+ add_to_callback(callback_name, process, "polyglossia-punct.process", 1)
+ end
+ end
+end
+
+local function deactivate()
+ tex.setattribute(punct_attr, -0x7FFFFFFF) -- this value means "unset"
+ -- Though it would make compilation slightly faster, it is not possible to
+ -- safely uncomment the following lines. Imagine the following case: you
+ -- start a paragraph by some spaced punctuation text, then, in the same
+ -- paragraph, you change the language to something else, and thus call the
+ -- following lines. This means that, at the end of the paragraph, the
+ -- function won't be in the callback, so the beginning of the paragraph
+ -- won't be processed by it.
+ -- if priority_in_callback(callback_name, "polyglossia-punct.process") then
+ -- remove_from_callback(callback_name, "polyglossia-punct.process")
+ -- end
+end
+
+polyglossia.activate_punct = activate
+polyglossia.deactivate_punct = deactivate
+polyglossia.add_left_spaced_character = add_left_spaced_character
+polyglossia.add_right_spaced_character = add_right_spaced_character
+polyglossia.clear_spaced_characters = clear_spaced_characters
+% \end{macrocode}
+% \iffalse
+%</polyglossia-punct.lua>
+%<*polyglossia-sanskrit.lua>
+% \fi
+% \clearpage
+%
+% \subsection{polyglossia-sanskrit.lua}
+% \begin{macrocode}
+require('polyglossia-punct')
+
+-- How do we now, in Lua, what a \thinspace is? In the LaTeX source (latex.ltx)
+-- it is defined as:
+-- \def\thinspace{\leavevmode@ifvmode\kern .16667em }
+-- I see no way of seeing if it has been overriden or not. So we stick to this
+-- value.
+local thinspace = 0.16667 -- 1/6
+
+local function activate_sanskrit_punct()
+ polyglossia.activate_punct('sanskrit')
+ polyglossia.clear_spaced_characters('sanskrit')
+ polyglossia.add_left_spaced_character('sanskrit','!',thinspace,'quad')
+ polyglossia.add_left_spaced_character('sanskrit','?',thinspace,'quad')
+ polyglossia.add_left_spaced_character('sanskrit','‼',thinspace,'quad')
+ polyglossia.add_left_spaced_character('sanskrit','⁇',thinspace,'quad')
+ polyglossia.add_left_spaced_character('sanskrit','⁈',thinspace,'quad')
+ polyglossia.add_left_spaced_character('sanskrit','⁉',thinspace,'quad')
+ polyglossia.add_left_spaced_character('sanskrit',':',thinspace,'quad')
+ polyglossia.add_left_spaced_character('sanskrit',';',thinspace,'quad')
+ polyglossia.add_left_spaced_character('sanskrit','।',thinspace,'quad') -- danda, U+0964
+ polyglossia.add_left_spaced_character('sanskrit','॥',thinspace,'quad') -- double danda, U+0965
+end
+
+local function deactivate_sanskrit_punct()
+ polyglossia.deactivate_punct()
+end
+
+polyglossia.activate_sanskrit_punct = activate_sanskrit_punct
+polyglossia.deactivate_sanskrit_punct = deactivate_sanskrit_punct
+% \end{macrocode}
+% \iffalse
+%</polyglossia-sanskrit.lua>
%<*polyglossia-tibt.lua>
% \fi
% \clearpage
@@ -12745,10 +15568,6 @@ polyglossia.desactivate_tibt_eol = desactivate
%
% \subsection{polyglossia.lua}
% \begin{macrocode}
-require('luatex-hyphen')
-
-local luatexhyphen = luatexhyphen
-local byte = unicode.utf8.byte
local module_name = "polyglossia"
local polyglossia_module = {
@@ -12763,82 +15582,73 @@ local polyglossia_module = {
luatexbase.provides_module(polyglossia_module)
-local log_info = function(message)
- luatexbase.module_info(module_name, message)
+local log_info = function(message, ...)
+ luatexbase.module_info(module_name, message:format(...))
end
-local log_warning = function(message)
- luatexbase.module_warning(module_name, message)
+local log_warn = function(message, ...)
+ luatexbase.module_warning(module_name, message:format(...))
end
polyglossia = polyglossia or {}
local polyglossia = polyglossia
--- predefined l@nohyphenation or dummy new language
-local nohyphid = luatexbase.registernumber'l@nohyphenation' or lang.id(lang.new())
--- key `nohyphenation` is for .sty file when possibly undefined l@nohyphenation
-local newloader_loaded_languages = { nohyphenation = nohyphid }
-
-local newloader_available_languages = dofile(kpse.find_file('language.dat.lua'))
--- Suggestion by Dohyun Kim on #129
-local t = { }
-for k, v in pairs(newloader_available_languages) do
- t[k] = v
- for _, vv in pairs(v.synonyms) do
- t[vv] = v
- end
-end
-newloader_available_languages = t
-
-local function loadlang(lang, id)
- if luatexhyphen.lookupname(lang) then
- luatexhyphen.loadlanguage(lang, id)
- end
-end
-
local function select_language(lang, id)
- loadlang(lang, id)
- polyglossia.current_language = lang
+ polyglossia.current_language = lang
end
local function set_default_language(lang, id)
- polyglossia.default_language = lang
+ polyglossia.default_language = lang
end
+local byte = utf8.codepoint -- use standard module of lua 5.3
+
local check_char
if luaotfload and luaotfload.aux and luaotfload.aux.font_has_glyph then
- local font_has_glyph = luaotfload.aux.font_has_glyph
- function check_char(chr)
- local codepoint = tonumber(chr)
- if not codepoint then codepoint = byte(chr) end
- if font_has_glyph(font.current(), codepoint) then
- tex.sprint('1')
- else
- tex.sprint('0')
+ local font_has_glyph = luaotfload.aux.font_has_glyph
+ function check_char(chr)
+ local codepoint = tonumber(chr) or byte(chr)
+ if font_has_glyph(font.current(), codepoint) then
+ tex.sprint('1')
+ else
+ tex.sprint('0')
+ end
end
- end
else
- local ids = fonts.identifiers or fonts.ids or fonts.hashes.identifiers
- function check_char(chr) -- always in current font
- local otfdata = ids[font.current()].characters
- local codepoint = tonumber(chr)
- if not codepoint then codepoint = byte(chr) end
- if otfdata and otfdata[codepoint] then
- tex.print('1')
- else
- tex.print('0')
- end
- end
-end
-
-local function load_frpt()
- require('polyglossia-frpt')
+ function check_char(chr) -- always in current font
+ local fontid = font.current()
+ local fontdata = font.getfont(fontid) or font.fonts[fontid]
+ local chardata = fontdata.characters
+ local codepoint = tonumber(chr) or byte(chr)
+ if chardata and chardata[codepoint] then
+ tex.sprint('1')
+ else
+ tex.sprint('0')
+ end
+ end
end
local function load_tibt_eol()
require('polyglossia-tibt')
end
+-- predefined l@nohyphenation or LuaTeX's maximum value for \language
+local nohyphid = luatexbase.registernumber'l@nohyphenation' or 16383
+
+-- key `nohyphenation` is for .sty file when possibly undefined l@nohyphenation
+local newloader_loaded_languages = { nohyphenation = nohyphid }
+
+local newloader_available_languages = require'language.dat.lua'
+-- Suggestion by Dohyun Kim on #129
+local t = { }
+for k, v in pairs(newloader_available_languages) do
+ t[k] = v
+ for _, vv in pairs(v.synonyms) do
+ t[vv] = v
+ end
+end
+newloader_available_languages = t
+
-- LaTeX's language register is \count19
local lang_register = 19
@@ -12846,19 +15656,36 @@ local lang_register = 19
local function newloader(langentry)
local loaded_language = newloader_loaded_languages[langentry]
if loaded_language then
- log_info('Language ' .. langentry .. ' already loaded; id is ' .. lang.id(loaded_language))
- -- texio.write_nl('term and log', 'Language ' .. langentry .. ' already loaded with patterns ' .. tostring(loaded_language) .. '; id is ' .. lang.id(loaded_language))
- -- texio.write_nl('term and log', 'Language ' .. langentry .. ' already loaded with patterns ' .. loaded_language['patterns'] .. '; id is ' .. lang.id(loaded_language))
- return lang.id(loaded_language)
+ local langid = lang.id(loaded_language)
+ log_info('Language %s already loaded; id is %i', langentry, langid)
+ return langid
else
local langdata = newloader_available_languages[langentry]
- if langdata and langdata['special'] == 'language0' then return 0 end
-
if langdata then
- local s = "Language data for " .. langentry
+
+ local special = langdata.special
+ if special then
+ -- language0 (USenglish) is already included in the format
+ if special == 'language0' then
+ return 0
+
+ -- disabled language should not be used for utf-8 text
+ elseif special:find'^disabled:' then
+ log_warn('Hyphenation of language %s %s', langentry, special)
+ return nohyphid
+ end
+ end
+
+ -- language info will be written into the .log file
+ local s = { "Language data for " .. langentry }
for k, v in pairs(langdata) do
- s = s .. "\n" .. k .. "\t" .. tostring(v)
+ if type(v) == 'table' then -- for 'synonyms'
+ s[#s+1] = k .. "\t" .. table.concat(v,',')
+ else
+ s[#s+1] = k .. "\t" .. tostring(v)
+ end
end
+ log_info(table.concat(s,"\n"))
--
-- LaTeX's \newlanguage increases language register (count19),
@@ -12880,47 +15707,47 @@ local function newloader(langentry)
local langobject = lang.new()
local langid = lang.id(langobject)
-- get bigger one between \newlanguage and new lang obj id
- local maxlangid = math.max(langcnt, langid)
+ local newlangid = math.max(langcnt, langid)
-- set language register for possible \newlanguage
- tex.setcount('global', lang_register, maxlangid)
+ tex.setcount('global', lang_register, newlangid)
-- get new lang object if needeed
- if langid ~= maxlangid then
- langobject = lang.new(maxlangid)
- end
- s = s .. "\npatterns: " .. langdata.patterns
- log_info(s)
- if langdata.patterns and langdata.patterns ~= '' then
- local pattfilepath = kpse.find_file(langdata.patterns)
- if pattfilepath then
- local pattfile = io.open(pattfilepath)
- lang.patterns(langobject, pattfile:read('*all'))
- pattfile:close()
- end
+ if langid ~= newlangid then
+ langobject = lang.new(newlangid)
end
- if langdata.hyphenation and langdata.hyphenation ~= '' then
- local hyphfilepath = kpse.find_file(langdata.hyphenation)
- if hyphfilepath then
- local hyphfile = io.open(hyphfilepath)
- lang.hyphenation(langobject, hyphfile:read('*all'))
- hyphfile:close()
+
+ -- load hyphenation patterns and exceptions
+ for _,v in ipairs{ 'patterns', 'hyphenation' } do
+ local data = langdata[v]
+ if data and data ~= '' then
+ -- cope with comma separated list, such as serbian
+ for _,vv in ipairs(data:explode',+') do
+ local filepath = kpse.find_file(vv)
+ if filepath then
+ local fh = io.open(filepath)
+ lang[v](langobject, fh:read'a')
+ fh:close()
+ else
+ log_warn('Hyphenation file %s not found', vv)
+ end
+ end
end
end
+
newloader_loaded_languages[langentry] = langobject
- log_info('Language ' .. langentry .. ' was not yet loaded; created with id ' .. lang.id(langobject))
- return lang.id(langobject)
+ log_info('Language %s was not yet loaded; created with id %i',
+ langentry, newlangid)
+ return newlangid
else
- log_warning('Language ' .. langentry .. ' not found in language.dat.lua')
+ log_warn('Language %s not found in language.dat.lua', langentry)
return nohyphid
end
end
end
-polyglossia.loadlang = loadlang
polyglossia.select_language = select_language
polyglossia.set_default_language = set_default_language
polyglossia.check_char = check_char
-polyglossia.load_frpt = load_frpt
polyglossia.load_tibt_eol = load_tibt_eol
polyglossia.newloader = newloader
polyglossia.newloader_loaded_languages = newloader_loaded_languages
@@ -12940,7 +15767,7 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
¦----------------------------------------------¦
¦ ¦
- ¦ THE POLYGLOSSIA PACKAGE v1.45 ¦
+ ¦ THE POLYGLOSSIA PACKAGE v1.46 ¦
¦ ¦
¦ Modern multilingual typesetting ¦
¦ with XeLaTeX and LuaLaTeX ¦
@@ -12949,8 +15776,8 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages
This package provides an alternative to Babel for users of XeLaTeX and LuaLaTeX
(with a few languages incompletely supported for the latter). This version
-includes support for 75 different languages, some of which in different regional,
-national or scriptal varieties.
+includes support for 79 different languages, some of which in different
+regional or national varieties, or using a different writing system.
Polyglossia makes it possible to automate the following tasks:
@@ -12973,25 +15800,69 @@ Polyglossia makes it possible to automate the following tasks:
LICENSE
-Copyright (c) 2008-2010 François Charette, 2013 Élie Roux, 2011-2019 Arthur Reutenauer
+Copyright (c) 2008-2010 François Charette, 2013 Élie Roux, 2011-2019 Arthur Reutenauer,
+Copyright (c) 2019 Bastien Roucariès, 2019 Jürgen Spitzmüller
-Polyglossia is placed under the terms of the LaTeX Project Public Licence
-(LPPL), either version 1.3, or, at your option, any later version. See
-LICENCE.txt for the text of the LPPL v1.3c, or
-http://www.latex-project.org/lppl.txt for the latest version.
-
-This work has the LPPL maintenance status ‘maintained’. The current maintainer is
-Arthur Reutenauer.
+Except where otherwise noted, Polyglossia is placed under the terms of the MIT licence
+(https://opensource.org/licenses/MIT).
BUGS
If you run into a bug, or suspect you do, or you have a request or comment, please
use the GitHub issue tracker: http://github.com/reutenauer/polyglossia/issues
-This is more efficient than contacting me by email as it allows me to track the
-issues and follow progress.
+This is more efficient than contacting the maintainer by email as it allows me
+to track the issues and follow progress.
%</../README>
%<*Changelog>
+1.46 (15-11-2019)
+
+New features:
+ * Add option "indentfirst" to Russian (#78).
+ * Add options to set and customize French-style itemize item labels to French (#89).
+ * Polyglossia now understands all babel language names in \setdefaultlanguage,
+ \setotherlanguage and the language switching commands (#112, #132).
+ * Add optional localized math operators to Spanish (#123).
+ * Swap section headings in Hungarian (#344). New option "swapstrings" provides control
+ over this.
+ * Introduce macro \setlanguagealias and \setlanguagealias*.
+ * Introduce language switching command \textlang{lang}{...} (equivalent to \text<lang>,
+ but also available with \setlanguagealias* which does not define \text<alias>).
+ * Add support for Afrikaans.
+ * Add support for Belarusian.
+ * Add support for Bosnian.
+ * Add support for Georgian.
+ * Add Spanish variant "mexican".
+ * Add babelshorthands as well as options "splithyphens" and "vlna" to Slovak.
+ * Add Latin language variant "ecclesiastic".
+ * Add Latin language options "capitalizemonth", "ecclesiasticfootnotes", "hyphenation",
+ "prosodicshorthands", and "usej".
+ * Add Latin shorthands for "«", "»", "æ", "Æ", "œ", and "Œ".
+ * Add French language option "thincolonspace".
+
+Bug fixes:
+ * Fix problems with fragile font settings (#24).
+ * Fix clash of French punctuation spacing with the soul package (#52).
+ * Re-enable the possibility to pass a macro as main argumente to \setmainlanguage and
+ \setotherlanguage (#331).
+ * Fix detection of default \languagevariant (#332).
+ * Fix LaTeX error with undefined hyphenation pattern (#346).
+ * Fix some babel shorthand issues by updating the shorthand code from recent babel.
+ * Fix some problems with French and Latin auto-spacing (#345, #352).
+ * Fix an expl3 declaration (#348).
+
+Interface and defaults changes:
+ * Per TeXLive request, the sub-package cyrillicnumbers.sty has been renamed to
+ xpg-cyrillicnumbers.sty.
+ * In Russian, all paragraphs are now indented by default, as common in Russian typography.
+ The behavior can be opted out by indentfirst=false.
+ * In Czech, splithyphens and lvna are enabled by default. Also, the option does now work
+ as well with LuaTeX.
+ * Changed option name "fraktur" to "blackletter" in German (the former is still available
+ as an alias).
+ * In French, high punctuation characters and guillemets are spaced by half an interword
+ space now instead of a \thinspace (cf. #345).
+
1.45 (27-10-2019)
New features:
@@ -13581,7 +16452,7 @@ Quamquam sermone nativo fungi desinit, cumque nostris diebus perpauci Latine loq
مباشرا أو غير مباشر على كثير من اللغات الأخرى في العالم الإسلامي، كالتركية
والفارسية والأردية مثلا.
-\textfarsi{\bfseries فارسی}\footnote{%
+\textlang{farsi}{\bfseries فارسی}\footnote{%
از «\LR{\textenglish{\url{http://fa.wikipedia.org/wiki/}}\RL{\ttfamily فارسي}}»}
\begin{farsi}
یا پارسی، (که دری، فارسی دری، و پارسی دری نیز نامیده می‌شود) زبانی است که
diff --git a/macros/latex/contrib/polyglossia/polyglossia.ins b/macros/latex/contrib/polyglossia/polyglossia.ins
index 18037987e8..56050f53cb 100644
--- a/macros/latex/contrib/polyglossia/polyglossia.ins
+++ b/macros/latex/contrib/polyglossia/polyglossia.ins
@@ -30,18 +30,29 @@
\endpostamble
\let\MetaPrefix\DoubleperCent
\askforoverwritefalse
+\generate{\file{gloss-acadien.ldf}{\from{polyglossia.dtx}{gloss-acadien.ldf}}}
+\generate{\file{gloss-afrikaans.ldf}{\from{polyglossia.dtx}{gloss-afrikaans.ldf}}}
\generate{\file{gloss-albanian.ldf}{\from{polyglossia.dtx}{gloss-albanian.ldf}}}
+\generate{\file{gloss-american.ldf}{\from{polyglossia.dtx}{gloss-american.ldf}}}
\generate{\file{gloss-amharic.ldf}{\from{polyglossia.dtx}{gloss-amharic.ldf}}}
\generate{\file{gloss-arabic.ldf}{\from{polyglossia.dtx}{gloss-arabic.ldf}}}
\generate{\file{gloss-armenian.ldf}{\from{polyglossia.dtx}{gloss-armenian.ldf}}}
\generate{\file{gloss-asturian.ldf}{\from{polyglossia.dtx}{gloss-asturian.ldf}}}
+\generate{\file{gloss-australian.ldf}{\from{polyglossia.dtx}{gloss-australian.ldf}}}
+\generate{\file{gloss-austrian.ldf}{\from{polyglossia.dtx}{gloss-austrian.ldf}}}
+\generate{\file{gloss-bahasa.ldf}{\from{polyglossia.dtx}{gloss-bahasa.ldf}}}
\generate{\file{gloss-bahasai.ldf}{\from{polyglossia.dtx}{gloss-bahasai.ldf}}}
\generate{\file{gloss-bahasam.ldf}{\from{polyglossia.dtx}{gloss-bahasam.ldf}}}
\generate{\file{gloss-basque.ldf}{\from{polyglossia.dtx}{gloss-basque.ldf}}}
+\generate{\file{gloss-belarusian.ldf}{\from{polyglossia.dtx}{gloss-belarusian.ldf}}}
\generate{\file{gloss-bengali.ldf}{\from{polyglossia.dtx}{gloss-bengali.ldf}}}
+\generate{\file{gloss-bosnian.ldf}{\from{polyglossia.dtx}{gloss-bosnian.ldf}}}
\generate{\file{gloss-brazil.ldf}{\from{polyglossia.dtx}{gloss-brazil.ldf}}}
\generate{\file{gloss-breton.ldf}{\from{polyglossia.dtx}{gloss-breton.ldf}}}
+\generate{\file{gloss-british.ldf}{\from{polyglossia.dtx}{gloss-british.ldf}}}
\generate{\file{gloss-bulgarian.ldf}{\from{polyglossia.dtx}{gloss-bulgarian.ldf}}}
+\generate{\file{gloss-canadian.ldf}{\from{polyglossia.dtx}{gloss-canadian.ldf}}}
+\generate{\file{gloss-canadien.ldf}{\from{polyglossia.dtx}{gloss-canadien.ldf}}}
\generate{\file{gloss-catalan.ldf}{\from{polyglossia.dtx}{gloss-catalan.ldf}}}
\generate{\file{gloss-coptic.ldf}{\from{polyglossia.dtx}{gloss-coptic.ldf}}}
\generate{\file{gloss-croatian.ldf}{\from{polyglossia.dtx}{gloss-croatian.ldf}}}
@@ -59,7 +70,9 @@
\generate{\file{gloss-friulian.ldf}{\from{polyglossia.dtx}{gloss-friulian.ldf}}}
\generate{\file{gloss-gaelic.ldf}{\from{polyglossia.dtx}{gloss-gaelic.ldf}}}
\generate{\file{gloss-galician.ldf}{\from{polyglossia.dtx}{gloss-galician.ldf}}}
+\generate{\file{gloss-georgian.ldf}{\from{polyglossia.dtx}{gloss-georgian.ldf}}}
\generate{\file{gloss-german.ldf}{\from{polyglossia.dtx}{gloss-german.ldf}}}
+\generate{\file{gloss-germanb.ldf}{\from{polyglossia.dtx}{gloss-germanb.ldf}}}
\generate{\file{gloss-greek.ldf}{\from{polyglossia.dtx}{gloss-greek.ldf}}}
\generate{\file{gloss-hebrew.ldf}{\from{polyglossia.dtx}{gloss-hebrew.ldf}}}
\generate{\file{gloss-hindi.ldf}{\from{polyglossia.dtx}{gloss-hindi.ldf}}}
@@ -76,8 +89,12 @@
\generate{\file{gloss-lao.ldf}{\from{polyglossia.dtx}{gloss-lao.ldf}}}
\generate{\file{gloss-latex.ldf}{\from{polyglossia.dtx}{gloss-latex.ldf}}}
\generate{\file{gloss-latin.ldf}{\from{polyglossia.dtx}{gloss-latin.ldf}}}
+\generate{\file{gloss-latinclassic.ldf}{\from{polyglossia.dtx}{gloss-latinclassic.ldf}}}
+\generate{\file{gloss-latinecclesiastic.ldf}{\from{polyglossia.dtx}{gloss-latinecclesiastic.ldf}}}
+\generate{\file{gloss-latinmedieval.ldf}{\from{polyglossia.dtx}{gloss-latinmedieval.ldf}}}
\generate{\file{gloss-latvian.ldf}{\from{polyglossia.dtx}{gloss-latvian.ldf}}}
\generate{\file{gloss-lithuanian.ldf}{\from{polyglossia.dtx}{gloss-lithuanian.ldf}}}
+\generate{\file{gloss-lowersorbian.ldf}{\from{polyglossia.dtx}{gloss-lowersorbian.ldf}}}
\generate{\file{gloss-lsorbian.ldf}{\from{polyglossia.dtx}{gloss-lsorbian.ldf}}}
\generate{\file{gloss-macedonian.ldf}{\from{polyglossia.dtx}{gloss-macedonian.ldf}}}
\generate{\file{gloss-magyar.ldf}{\from{polyglossia.dtx}{gloss-magyar.ldf}}}
@@ -85,14 +102,19 @@
\generate{\file{gloss-malayalam.ldf}{\from{polyglossia.dtx}{gloss-malayalam.ldf}}}
\generate{\file{gloss-marathi.ldf}{\from{polyglossia.dtx}{gloss-marathi.ldf}}}
\generate{\file{gloss-mongolian.ldf}{\from{polyglossia.dtx}{gloss-mongolian.ldf}}}
+\generate{\file{gloss-naustrian.ldf}{\from{polyglossia.dtx}{gloss-naustrian.ldf}}}
+\generate{\file{gloss-newzealand.ldf}{\from{polyglossia.dtx}{gloss-newzealand.ldf}}}
+\generate{\file{gloss-ngerman.ldf}{\from{polyglossia.dtx}{gloss-ngerman.ldf}}}
\generate{\file{gloss-nko.ldf}{\from{polyglossia.dtx}{gloss-nko.ldf}}}
\generate{\file{gloss-norsk.ldf}{\from{polyglossia.dtx}{gloss-norsk.ldf}}}
\generate{\file{gloss-norwegian.ldf}{\from{polyglossia.dtx}{gloss-norwegian.ldf}}}
+\generate{\file{gloss-nswissgerman.ldf}{\from{polyglossia.dtx}{gloss-nswissgerman.ldf}}}
\generate{\file{gloss-nynorsk.ldf}{\from{polyglossia.dtx}{gloss-nynorsk.ldf}}}
\generate{\file{gloss-occitan.ldf}{\from{polyglossia.dtx}{gloss-occitan.ldf}}}
\generate{\file{gloss-persian.ldf}{\from{polyglossia.dtx}{gloss-persian.ldf}}}
\generate{\file{gloss-piedmontese.ldf}{\from{polyglossia.dtx}{gloss-piedmontese.ldf}}}
\generate{\file{gloss-polish.ldf}{\from{polyglossia.dtx}{gloss-polish.ldf}}}
+\generate{\file{gloss-polutonikogreek.ldf}{\from{polyglossia.dtx}{gloss-polutonikogreek.ldf}}}
\generate{\file{gloss-portuges.ldf}{\from{polyglossia.dtx}{gloss-portuges.ldf}}}
\generate{\file{gloss-portuguese.ldf}{\from{polyglossia.dtx}{gloss-portuguese.ldf}}}
\generate{\file{gloss-romanian.ldf}{\from{polyglossia.dtx}{gloss-romanian.ldf}}}
@@ -103,11 +125,15 @@
\generate{\file{gloss-sanskrit.ldf}{\from{polyglossia.dtx}{gloss-sanskrit.ldf}}}
\generate{\file{gloss-scottish.ldf}{\from{polyglossia.dtx}{gloss-scottish.ldf}}}
\generate{\file{gloss-serbian.ldf}{\from{polyglossia.dtx}{gloss-serbian.ldf}}}
+\generate{\file{gloss-serbianc.ldf}{\from{polyglossia.dtx}{gloss-serbianc.ldf}}}
\generate{\file{gloss-slovak.ldf}{\from{polyglossia.dtx}{gloss-slovak.ldf}}}
+\generate{\file{gloss-slovene.ldf}{\from{polyglossia.dtx}{gloss-slovene.ldf}}}
\generate{\file{gloss-slovenian.ldf}{\from{polyglossia.dtx}{gloss-slovenian.ldf}}}
\generate{\file{gloss-sorbian.ldf}{\from{polyglossia.dtx}{gloss-sorbian.ldf}}}
\generate{\file{gloss-spanish.ldf}{\from{polyglossia.dtx}{gloss-spanish.ldf}}}
+\generate{\file{gloss-spanishmx.ldf}{\from{polyglossia.dtx}{gloss-spanishmx.ldf}}}
\generate{\file{gloss-swedish.ldf}{\from{polyglossia.dtx}{gloss-swedish.ldf}}}
+\generate{\file{gloss-swissgerman.ldf}{\from{polyglossia.dtx}{gloss-swissgerman.ldf}}}
\generate{\file{gloss-syriac.ldf}{\from{polyglossia.dtx}{gloss-syriac.ldf}}}
\generate{\file{gloss-tamil.ldf}{\from{polyglossia.dtx}{gloss-tamil.ldf}}}
\generate{\file{gloss-telugu.ldf}{\from{polyglossia.dtx}{gloss-telugu.ldf}}}
@@ -116,6 +142,7 @@
\generate{\file{gloss-turkish.ldf}{\from{polyglossia.dtx}{gloss-turkish.ldf}}}
\generate{\file{gloss-turkmen.ldf}{\from{polyglossia.dtx}{gloss-turkmen.ldf}}}
\generate{\file{gloss-ukrainian.ldf}{\from{polyglossia.dtx}{gloss-ukrainian.ldf}}}
+\generate{\file{gloss-uppersorbian.ldf}{\from{polyglossia.dtx}{gloss-uppersorbian.ldf}}}
\generate{\file{gloss-urdu.ldf}{\from{polyglossia.dtx}{gloss-urdu.ldf}}}
\generate{\file{gloss-usorbian.ldf}{\from{polyglossia.dtx}{gloss-usorbian.ldf}}}
\generate{\file{gloss-vietnamese.ldf}{\from{polyglossia.dtx}{gloss-vietnamese.ldf}}}
@@ -126,8 +153,11 @@
\generate{\file{farsidigits.map}{\from{polyglossia.dtx}{farsidigits.map}}}
\generate{\file{thaidigits.map}{\from{polyglossia.dtx}{thaidigits.map}}}
\def\MetaPrefix{-- }
-\generate{\file{polyglossia-frpt.lua}{\from{polyglossia.dtx}{polyglossia-frpt.lua}}}
+\generate{\file{polyglossia-french.lua}{\from{polyglossia.dtx}{polyglossia-french.lua}}}
\generate{\file{polyglossia-korean.lua}{\from{polyglossia.dtx}{polyglossia-korean.lua}}}
+\generate{\file{polyglossia-latin.lua}{\from{polyglossia.dtx}{polyglossia-latin.lua}}}
+\generate{\file{polyglossia-punct.lua}{\from{polyglossia.dtx}{polyglossia-punct.lua}}}
+\generate{\file{polyglossia-sanskrit.lua}{\from{polyglossia.dtx}{polyglossia-sanskrit.lua}}}
\generate{\file{polyglossia-tibt.lua}{\from{polyglossia.dtx}{polyglossia-tibt.lua}}}
\generate{\file{polyglossia.lua}{\from{polyglossia.dtx}{polyglossia.lua}}}
\let\MetaPrefix\DoubleperCent
diff --git a/macros/latex/contrib/polyglossia/polyglossia.pdf b/macros/latex/contrib/polyglossia/polyglossia.pdf
index 0da109cf9d..0698550579 100644
--- a/macros/latex/contrib/polyglossia/polyglossia.pdf
+++ b/macros/latex/contrib/polyglossia/polyglossia.pdf
Binary files differ