summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/polyglossia
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2019-10-28 20:58:49 +0000
committerKarl Berry <karl@freefriends.org>2019-10-28 20:58:49 +0000
commitffd652038baef26fb84de26fce9991a02e875485 (patch)
treec02e3f8fde2e20bb8ba3cc9ab3216e609648e350 /Master/texmf-dist/tex/latex/polyglossia
parentcffa8e2910c5d2a7b6b26032eef37d9e18b8b72d (diff)
polyglossia (28oct19)
git-svn-id: svn://tug.org/texlive/trunk@52555 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/polyglossia')
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/babel-hebrewalph.def25
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/cyrillicnumbers.sty119
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-albanian.ldf1
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-arabic.ldf45
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-armenian.ldf178
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-asturian.ldf1
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-bahasai.ldf45
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-bahasam.ldf55
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-basque.ldf1
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-bengali.ldf31
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-brazil.ldf47
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-breton.ldf1
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-bulgarian.ldf2
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-catalan.ldf7
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-classiclatin.ldf157
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-croatian.ldf2
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-czech.ldf181
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-danish.ldf6
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-divehi.ldf13
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-dutch.ldf6
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-english.ldf166
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-esperanto.ldf3
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-estonian.ldf1
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-farsi.ldf129
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-finnish.ldf47
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-french.ldf172
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-friulan.ldf66
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-friulian.ldf66
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-gaelic.ldf107
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-galician.ldf1
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-german.ldf149
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-greek.ldf137
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-hebrew.ldf49
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-hindi.ldf32
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-hungarian.ldf81
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-icelandic.ldf1
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-interlingua.ldf1
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-irish.ldf42
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-italian.ldf6
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-kannada.ldf9
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-khmer.ldf17
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-korean.ldf606
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-kurdish.ldf384
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-lao.ldf7
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-latex.ldf33
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-latin.ldf6
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-latvian.ldf1
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-lithuanian.ldf18
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-liturgicallatin.ldf185
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-lsorbian.ldf47
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-macedonian.ldf2
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-magyar.ldf72
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-malay.ldf171
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-marathi.ldf9
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-mongolian.ldf194
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-nko.ldf48
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-norsk.ldf42
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-norwegian.ldf104
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-nynorsk.ldf40
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-occitan.ldf8
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-persian.ldf151
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-piedmontese.ldf6
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-polish.ldf1
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-portuges.ldf49
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-portuguese.ldf103
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-romanian.ldf1
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-romansh.ldf1
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-russian.ldf148
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-sami.ldf84
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-samin.ldf49
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-sanskrit.ldf99
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-scottish.ldf42
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-serbian.ldf112
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-slovak.ldf1
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-slovenian.ldf6
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-sorbian.ldf166
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-spanish.ldf1
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-swedish.ldf1
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-syriac.ldf75
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-thai.ldf15
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-tibetan.ldf18
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-ukrainian.ldf7
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-urdu.ldf40
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-usorbian.ldf48
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/gloss-welsh.ldf8
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/hebrewcal.sty17
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/polyglossia-frpt.lua16
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/polyglossia-korean.lua603
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/polyglossia.lua83
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/polyglossia.sty1801
-rw-r--r--Master/texmf-dist/tex/latex/polyglossia/xgreek-fixes.def19
91 files changed, 5313 insertions, 2640 deletions
diff --git a/Master/texmf-dist/tex/latex/polyglossia/babel-hebrewalph.def b/Master/texmf-dist/tex/latex/polyglossia/babel-hebrewalph.def
index 3158d7c7a35..b68d98256a1 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/babel-hebrewalph.def
+++ b/Master/texmf-dist/tex/latex/polyglossia/babel-hebrewalph.def
@@ -4,13 +4,22 @@
Adapted from hebrew.ldf (2005/03/30 v2.3h)]
\newif\if@gim@apost % whether we print apostrophes (gereshayim)
\newif\if@gim@final % whether we use final or initial letters
-\newrobustcmd*{\hebrewnumeral}[1] % no apostrophe, no final letters
- {{\@gim@finalfalse\@gim@apostfalse\@hebrew@numeral{#1}}}
-\newrobustcmd*{\Hebrewnumeral}[1] % apostrophe, no final letters
- {{\@gim@finalfalse\@gim@aposttrue\@hebrew@numeral{#1}}}
-\newrobustcmd*{\Hebrewnumeralfinal}[1] % apostrophe, final letters
- {{\@gim@finaltrue\@gim@aposttrue\@hebrew@numeral{#1}}}
-\newcommand*{\@hebrew@numeral}[1]{%
+\newcommand*\hebrewnumeral[1]{%
+ \expandafter\@hebrew@numeral\expandafter{\the\numexpr#1}%
+}
+\newcommand*\Hebrewnumeral[1]{%
+ \expandafter\@Hebrew@numeral\expandafter{\the\numexpr#1}%
+}
+\newcommand*\Hebrewnumeralfinal[1]{%
+ \expandafter\@Hebrew@numeralfinal\expandafter{\the\numexpr#1}%
+}
+\newrobustcmd*{\@hebrew@numeral}[1] % no apostrophe, no final letters
+ {{\@gim@finalfalse\@gim@apostfalse\@hebrew@@numeral{#1}}}
+\newrobustcmd*{\@Hebrew@numeral}[1] % apostrophe, no final letters
+ {{\@gim@finalfalse\@gim@aposttrue\@hebrew@@numeral{#1}}}
+\newrobustcmd*{\@Hebrew@numeralfinal}[1] % apostrophe, final letters
+ {{\@gim@finaltrue\@gim@aposttrue\@hebrew@@numeral{#1}}}
+\newcommand*{\@hebrew@@numeral}[1]{%
\ifnum#1<\z@\space\xpg@warning{Illegal value (#1) for Hebrew numeral}%
\else
\@tempcnta=#1\@tempcntb=#1\relax
@@ -75,5 +84,5 @@
\else#2\if@gim@apost ׳\fi\fi%
\else{\@gim@finalfalse#2}\@gim@prevtrue\fi}
\def\Alphfinal#1{\expandafter\@Alphfinal\csname c@#1\endcsname}%
-\providecommand*{\@Alphfinal}[1]{\protect\Hebrewnumeralfinal{\number#1}}
+\providecommand*{\@Alphfinal}[1]{\Hebrewnumeralfinal{#1}}
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/cyrillicnumbers.sty b/Master/texmf-dist/tex/latex/polyglossia/cyrillicnumbers.sty
new file mode 100644
index 00000000000..171ac441568
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/polyglossia/cyrillicnumbers.sty
@@ -0,0 +1,119 @@
+\ProvidesPackage{cyrillicnumbers}
+ [2019/09/13 v0.1 %
+ Formatting of Cyrillic alphabetic numbers]
+
+%% This follows https://en.wikipedia.org/wiki/Cyrillic_numerals
+
+% Numbers are often distinguished from text by centered dots.
+% The commented code does this. We leave it deactivated until
+% we get some expertise.
+\newrobustcmd\cnw@print{}
+\newrobustcmd\cnw@false{%
+ \renewrobustcmd\cnw@print{}}
+\newrobustcmd\cnw@true{%
+% \renewrobustcmd\cnw@print{$\cdot$}%
+}
+\cnw@true
+
+\protected\def\cyr@alph#1{\expandafter\@cyr@alph\expandafter{\number#1}}
+\def\@cyr@alph#1{%
+ \ifnum#1<\@ne\space\cyr@ill@value{#1}%
+ \else
+ \cnw@print
+ \ifnum#1<10\expandafter\cyr@num@i\number#1%
+ \else
+ \ifnum#1<100\expandafter\cyr@num@ii\number#1%
+ \else
+ \ifnum#1<\@m\expandafter\cyr@num@iii\number#1%
+ \else
+ \ifnum#1<\@M\expandafter\cyr@num@iv\number#1%
+ \else
+ \ifnum#1<100000\expandafter\cyr@num@v\number#1%
+ \else
+ \ifnum#1<1000000\expandafter\cyr@num@vi\number#1%
+ \else
+ \space\cyr@ill@value{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\protected\def\cyr@Alph#1{\expandafter\@cyr@Alph\expandafter{\number#1}}
+\def\@cyr@Alph#1{%
+ \ifnum#1<\@ne\space\cyr@ill@value{#1}%
+ \else
+ \cnw@print
+ \ifnum#1<10\expandafter\cyr@Num@i\number#1%
+ \else
+ \ifnum#1<100\expandafter\cyr@Num@ii\number#1%
+ \else
+ \ifnum#1<\@m\expandafter\cyr@Num@iii\number#1%
+ \else
+ \ifnum#1<\@M\expandafter\cyr@Num@iv\number#1%
+ \else
+ \ifnum#1<100000\expandafter\cyr@Num@v\number#1%
+ \else
+ \ifnum#1<1000000\expandafter\cyr@Num@vi\number#1%
+ \else
+ \space\cyr@ill@value{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+% Lowercase
+\def\cyr@num@i#1{%
+ \ifcase#1 \or а\or в\or г\or д\or е\or ѕ\or з\or и\or ѳ\fi
+ \ifnum#1=\z@\else\cnw@true\fi\cnw@print}
+\def\cyr@num@ii#1{%
+ \ifcase#1 \or і\or к\or л\or м\or н\or ѯ\or о\or п\or ч\fi
+ \ifnum#1=\z@\else\cnw@true\fi\cyr@num@i}
+\def\cyr@num@iii#1{%
+ \ifcase#1 \or р\or с\or т\or у\or ф\or х\or ѱ\or ѡ\or ц\fi
+ \ifnum#1=\z@\cnw@false\else\cnw@true\fi\cyr@num@ii}
+\def\cyr@num@iv#1{%
+ \ifnum#1=\z@\else ҂\fi
+ \ifcase#1 \or а\or в\or г\or д\or е\or ѕ\or з\or и\or ѳ\fi
+ \cyr@num@iii}
+\def\cyr@num@v#1{%
+ \ifnum#1=\z@\else ҂\fi
+ \ifcase#1 \or і\or к\or л\or м\or н\or ѯ\or о\or п\or ч\fi
+ \cyr@num@iv}
+\def\cyr@Num@vi#1{%
+ \ifnum#1=\z@\else ҂\fi
+ \ifcase#1 \or р\or с\or т\or у\or ф\or х\or ѱ\or ѡ\or ц\fi
+ \cyr@num@v}
+
+% Uppercase
+\def\cyr@Num@i#1{%
+ \ifcase#1 \or А\or В\or Г\or Д\or Е\or Ѕ\or З\or И\or Ѳ\fi
+ \ifnum#1=\z@\else\cnw@true\fi\cnw@print}
+\def\cyr@Num@ii#1{%
+ \ifcase#1 \or І\or К\or Л\or М\or Н\or Ѯ\or О\or П\or Ч\fi
+ \ifnum#1=\z@\else\cnw@true\fi\cyr@Num@i}
+\def\cyr@Num@iii#1{%
+ \ifcase#1 \or Р\or С\or Т\or У\or Ф\or Х\or Ѱ\or Ѡ\or Ц\fi
+ \ifnum#1=\z@\cnw@false\else\cnw@true\fi\cyr@Num@ii}
+\def\cyr@Num@iv#1{%
+ \ifnum#1=\z@\else ҂\fi
+ \ifcase#1 \or А\or В\or Г\or Д\or Е\or Ѕ\or З\or И\or Ѳ\fi
+ \cyr@Num@iii}
+\def\cyr@Num@v#1{%
+ \ifnum#1=\z@\else ҂\fi
+ \ifcase#1 \or І\or К\or Л\or М\or Н\or Ѯ\or О\or П\or Ч\fi
+ \cyr@Num@iv}
+\def\cyr@Num@vi#1{%
+ \ifnum#1=\z@\else ҂\fi
+ \ifcase#1 \or Р\or С\or Т\or У\or Ф\or Х\or Ѱ\or Ѡ\or Ц\fi
+ \cyr@Num@v}
+\def\cyr@ill@value#1{\xpg@warning{Illegal value (#1) for cyr numeral}[$#1$]}
+
+\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-albanian.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-albanian.ldf
index dcafbad943b..617bdca2755 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-albanian.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-albanian.ldf
@@ -2,6 +2,7 @@
\PolyglossiaSetup{albanian}{
hyphennames={albanian},
+ langtag=SQI,
hyphenmins={2,2},
indentfirst=true,
fontsetup=true,
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-arabic.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-arabic.ldf
index 72eff1260bb..858719b6a71 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-arabic.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-arabic.ldf
@@ -15,9 +15,10 @@ and may look very wrong.}
langtag=ARA,
scripttag=arab,
hyphennames={nohyphenation},
- fontsetup=true
+ fontsetup=true,
+ envname=Arabic,
+ localnumeral=arabicnumerals
%TODO localalph={abjad,abjad}
- %TODO localnumber=arabicnumber
}
\newif\ifeastern@numerals
@@ -137,6 +138,9 @@ and may look very wrong.}
\fi%
\fi}}
+
+\newcommand{\arabicnumerals}[2]{\arabicnumber{#2}}
+
\def\arabicnumber#1{%
\ifeastern@numerals
\arabicdigits{\number#1}%
@@ -182,34 +186,39 @@ and may look very wrong.}
\ifnum#1=\z@\fi\abj@maghribi@num@iii}
\def\arabic@numbers{%
- \let\@origalph\@alph%
- \let\@origAlph\@Alph%
\let\@alph\abjad%
\let\@Alph\abjad%
}
+
\def\noarabic@numbers{%
- \let\@alph\@origalph%
- \let\@Alph\@origAlph%
- }
+ \let\@alph\latin@alph%
+ \let\@Alph\latin@Alph%
+}
+
+% Store original definition
+\let\xpg@save@arabic\@arabic
\def\arabic@globalnumbers{%
- \let\orig@arabic\@arabic%
\let\@arabic\arabicnumber%
- \renewcommand\thefootnote{\protect\arabicnumber{\c@footnote}}%
- }
+ \renewcommand\thefootnote{\localnumeral*{footnote}}%
+ \renewcommand\theequation{\localnumeral*{equation}}%
+}
-\def\noarabic@globalnumbers{
- \let\@arabic\orig@arabic%
- \renewcommand\thefootnote{\protect\number{\c@footnote}}%
- }
+\def\noarabic@globalnumbers{%
+ \let\@arabic\xpg@save@arabic%
+}
+
+% Save original \MakeUppercase definition
+\let\xpg@save@MakeUppercase\MakeUppercase
\def\blockextras@arabic{%
- \let\orig@MakeUppercase\MakeUppercase%
\def\MakeUppercase##1{##1}%
% TODO disable \@Roman and \@roman ?
- }
+}
+
\def\noextras@arabic{%
- \let\MakeUppercase\orig@MakeUppercase%
- }
+ % restore original \MakeUppercase definition
+ \let\MakeUppercase\xpg@save@MakeUppercase
+}
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-armenian.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-armenian.ldf
index 2f22748e713..b645a3af818 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-armenian.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-armenian.ldf
@@ -6,35 +6,57 @@
langtag=HYE,
hyphennames={armenian},
hyphenmins={2,2},
- fontsetup=true
-}
-
-%\def\captionsarmenian{%
-% \def\refname{}%
-% \def\abstractname{}%
-% \def\bibname{}%
-% \def\prefacename{}%
-% \def\chaptername{}%
-% \def\appendixname{}%
-% \def\contentsname{}%
-% \def\listfigurename{}%
-% \def\listtablename{}%
-% \def\indexname{}%
-% \def\authorname{}%
-% \def\figurename{}%
-% \def\tablename{}%
-% %\def\thepart{}%
-% \def\partname{}%
-% \def\pagename{}%
-% \def\seename{}%
-% \def\alsoname{}%
-% \def\enclname{}%
-% \def\ccname{}%
-% \def\headtoname{}%
-% \def\proofname{}%
-% \def\glossaryname{}%
-%}
-\def\datearmenian{%
+ fontsetup=true,
+ localnumeral=armeniannumerals
+}
+
+\newif\if@eastern@armenian
+\@eastern@armenianfalse
+\define@choicekey*+{armenian}{variant}[\val\nr]{western,eastern}[western]{%
+ \ifcase\nr\relax
+ % western:
+ \@eastern@armenianfalse%
+ \or
+ % eastern:
+ \@eastern@armeniantrue%
+ \fi
+ \xpg@info{Option: Armenian, variant=\val}%
+}{\xpg@warning{Unknown Armenian variant `#1'}}
+
+\newif\if@armenian@numerals
+\@armenian@numeralsfalse
+\define@key{armenian}{numerals}[armenian]{%
+ \ifstrequal{#1}{arabic}{\@armenian@numeralsfalse}{\@armenian@numeralstrue}%
+}
+
+% Taken from ArmTeX. Audit!
+\def\captionsarmenian{%
+ \def\refname{Հղումներ}%
+ \def\abstractname{Սեղմագիր}%
+ \def\bibname{Գրականություն}%
+ \def\prefacename{Նախաբան}%
+ \def\chaptername{Գլուխ}%
+ \def\appendixname{Հավելված}%
+ \def\contentsname{Բովանդակություն}%
+ \def\listfigurename{Նկարների ցանկ}%
+ \def\listtablename{Աղյուսակների ցանկ}%
+ \def\indexname{Առարկայական ցանկ}%
+ \def\figurename{Նկար}%
+ \def\tablename{Աղյուսակ}%
+ \def\partname{Մաս}%
+ \def\pagename{էջ}%
+ \def\seename{տե՛ս}%
+ \def\alsoname{տե՛ս նաեւ}%
+ \def\enclname{Կից՝}%
+ \def\ccname{Կրկնօրինակը՝}%
+% The \headtoname is empty: the typesetter should use the dative (trakan
+% holov) of the recipient's name.
+ \def\headtoname{}%
+ \def\proofname{Ապացույց}%
+ \def\glossaryname{Տերմինների ցանկ}%
+}
+
+\def\date@western@armenian{%
\def\today{\ifcase\month\or
Յունուար\or
Փետրուար\or
@@ -48,5 +70,101 @@
Հոկտեմբեր\or
Նոյեմբեր\or
Դեկտեմբեր\fi
- \number\day,\space\number\year}}
+ \number\day,\space\number\year}%
+}
+
+\def\date@eastern@armenian{%
+ \def\today{\ifcase\month\or
+ Հունվար\or
+ Փետրվար\or
+ Մարտ\or
+ Ապրիլ\or
+ Մայիս\or
+ Հունիս\or
+ Հուլիս\or
+ Օգոստոս\or
+ Սեպտեմբեր\or
+ Հոկտեմբեր\or
+ Նոյեմբեր\or
+ Դեկտեմբեր\fi
+ \number\day,\space\number\year}%
+}
+
+\def\datearmenian{%
+ \if@eastern@armenian
+ \date@eastern@armenian%
+ \else
+ \date@western@armenian%
+ \fi
+}
+
+\newcommand{\armeniannumerals}[2]{%
+ \if@armenian@numerals
+ \armeniannumber{#2}%
+ \else
+ #2%
+ \fi%
+}
+
+\def\armenian@numbers{%
+ \if@armenian@numerals
+ \def\armenian@alph##1{\expandafter\armeniannumeral\expandafter{\the##1}}%
+ \let\@alph\armenian@alph%
+ \fi%
+}
+
+\def\noarmenian@numbers{%
+ \let\@alph\latin@alph%
+ \let\armenian@alph\@undefined%
+}
+
+\def\armenian@globalnumbers{%
+ \if@armenian@numerals
+ \let\@arabic\armeniannumber%
+ \renewcommand\thefootnote{\localnumeral*{footnote}}%
+ \renewcommand\theequation{\localnumeral*{equation}}%
+ \fi
+}
+
+% Store original definition
+\let\xpg@save@arabic\@arabic
+
+\def\noarmenian@globalnumbers{
+ \let\@arabic\xpg@save@arabic%
+}
+
+\protected\def\armeniannumber#1{\expandafter\@armeniannumber\expandafter{\number#1}}
+\def\@armeniannumber#1{%
+ \ifnum#1<\@ne\space\arm@ill@value{#1}%
+ \else
+ \ifnum#1<10\expandafter\arm@num@i\number#1%
+ \else
+ \ifnum#1<100\expandafter\arm@num@ii\number#1%
+ \else
+ \ifnum#1<\@m\expandafter\arm@num@iii\number#1%
+ \else
+ \ifnum#1<\@M\expandafter\arm@num@iv\number#1%
+ \else
+ \space\arm@ill@value{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\let\armeniannumeral=\armeniannumber
+\def\arm@num@i#1{%
+ \ifcase#1\or Ա\or Բ\or Գ\or Դ\or Ե\or Զ\or Է\or Ը\or Թ\fi}
+\def\arm@num@ii#1{%
+ \ifcase#1\or Ժ\or Ի\or Լ\or Խ\or Ծ\or Կ\or Հ\or Ձ\or Ղ\fi
+ \arm@num@i}
+\def\arm@num@iii#1{%
+ \ifcase#1\or Ճ\or Մ\or Յ\or Ն\or Շ\or Ո\or Չ\or Պ\or Ջ\fi
+ \arm@num@ii}
+\def\arm@num@iv#1{%
+ \ifcase#1\or Ռ\or Ս\or Վ\or Տ\or Ր\or Ց\or Ւ\or Փ\or Ք\fi
+ \arm@num@iii}
+\def\arm@ill@value#1{\xpg@warning{Illegal value (#1) for Armenian numeral}[$#1$]}
+
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-asturian.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-asturian.ldf
index b1eb5089331..5c21fde3175 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-asturian.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-asturian.ldf
@@ -5,6 +5,7 @@
\PolyglossiaSetup{asturian}{
hyphennames={asturian,catalan},
hyphenmins={2,2},
+ langtag=AST,
frenchspacing=true,
indentfirst=true,
fontsetup=true,
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-bahasai.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-bahasai.ldf
index 28dc408a4ea..aeed3e82ab4 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-bahasai.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-bahasai.ldf
@@ -1,46 +1,21 @@
\ProvidesFile{gloss-bahasai.ldf}[polyglossia: module for bahasa indonesia]
-\RequirePackage{hijrical}
+
+% 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=Bahasa Indonesia,
+ language=Indonesian,
+ langtag=IND,
hyphennames={indonesian,indon,bahasai,bahasa,bahasam,malay,melayu},
hyphenmins={2,2},
fontsetup=true}
-\def\captionsbahasai{%
- \def\refname{Pustaka}%
- \def\abstractname{Ringkasan}%
- \def\bibname{Bibliografi}%
- \def\prefacename{Pendahuluan}%
- \def\chaptername{Bab}%
- \def\appendixname{Lampiran}%
- \def\contentsname{Daftar Isi}%
- \def\listfigurename{Daftar Gambar}%
- \def\listtablename{Daftar Tabel}%
- \def\indexname{Indeks}%
- \def\figurename{Gambar}%
- \def\tablename{Tabel}%
- %\def\thepart{}%
- \def\partname{Bagian}%
- \def\pagename{Halaman}%
- \def\seename{lihat}%
- \def\alsoname{lihat juga}%
- \def\enclname{Lampiran}%
- \def\ccname{cc}%
- \def\headtoname{Kepada}%
- \def\proofname{Bukti}%
- \def\glossaryname{Daftar Istilah}%
- }
-\def\datebahasai{%
- \def\today{\number\day~\ifcase\month\or
- Januari\or Pebruari\or Maret\or April\or Mei\or Juni\or
- Juli\or Agustus\or September\or Oktober\or Nopember\or Desember\fi
- \space \number\year}}
+\let\captionsbahasai\captionsmalay@indonesian
+\let\datebahasai\datemalay@indonesian
-\def\hijrimonthbahasai#1{\ifcase#1%
-\or Muharram\or Safar\or Rabiul awal\or Rabiul akhir\or Jumadil awal\or Jumadil akhir\or Rajab%
-\or Sya'ban\or Ramadhan\or Syawal\or Dzulkaidah\or Dzulhijjah\fi}
\DefineFormatHijriDate{bahasai}{%
-\number\value{Hijriday}\space\hijrimonthbahasai{\value{Hijrimonth}}\space\number\value{Hijriyear}}
+ \number\value{Hijriday}\space\hijrimonthmalay@indonesian{\value{Hijrimonth}}\space\number\value{Hijriyear}}
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-bahasam.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-bahasam.ldf
index eb5c3749c85..59dce4f9036 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-bahasam.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-bahasam.ldf
@@ -1,54 +1,21 @@
\ProvidesFile{gloss-bahasam.ldf}[polyglossia: module for bahasa melayu]
-\RequirePackage{hijrical}
+
+% 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=Bahasa Melayu,
+ language=Malay,
+ langtag=MLY,
hyphennames={malay,melayu,bahasam,bahasa,bahasai,indonesian,indon},
hyphenmins={2,2},
fontsetup=true}
-\def\captionsbahasam{%
- \def\refname{Rujukan}%
- \def\abstractname{Abstrak}%
- \def\bibname{Bibliografi}%
- \def\prefacename{Pendahuluan}%
- \def\chaptername{Bab}%
- \def\appendixname{Lampiran}%
- \def\contentsname{Kandungan}%
- \def\listfigurename{Senarai Rajah}%
- \def\listtablename{Senarai Jadual}%
- \def\indexname{Indeks}%
- \def\figurename{Rajah}%
- \def\tablename{Jadual}%
- \def\thepart{}%
- \def\partname{Bahagian}%
- \def\pagename{Halaman}%
- \def\seename{lihat}%
- \def\alsoname{lihat juga}%
- \def\enclname{Lampiran}%
- \def\ccname{salinan kpd}%
- \def\headtoname{Kepada}%
- \def\proofname{Bukti}%
- \def\glossaryname{Senarai Istilah}%
- }
-\def\datebahasam{%
- \def\bahasam@day{%
- \ifcase\day\or%
- 1hb\or 2hb\or 3hb\or 4hb\or 5hb\or%
- 6hb\or 7hb\or 8hb\or 9hb\or 10hb\or%
- 11hb\or 12hb\or 13hb\or 14hb\or 15hb\or%
- 16hb\or 17hb\or 18hb\or 19hb\or 20hb\or%
- 21hb\or 22hb\or 23hb\or 24hb\or 25hb\or%
- 26hb\or 27hb\or 28hb\or 29hb\or 30hb\or%
- 31hb\fi}%
- \def\today{\bahasam@day~\ifcase\month\or
- Januari\or Februari\or Mac\or April\or Mei\or Jun\or
- Julai\or Ogos\or September\or Oktober\or November\or Disember\fi
- \space \number\year}}
+\let\captionsbahasam\captionsmalay@malay
+\let\datebahasam\datemalay@malay
-\def\hijrimonthbahasam#1{\ifcase#1%
-\or Muharram\or Safar\or Rabiulawal\or Rabiulakhir\or Jamadilawal\or Jamadilakhir\or Rejab%
-\or Syaaban\or Ramadan\or Syawal\or Zulkaedah\or Zulhijah\fi}
\DefineFormatHijriDate{bahasam}{%
-\number\value{Hijriday}\space\hijrimonthbahasam{\value{Hijrimonth}}\space\number\value{Hijriyear}}
+ \number\value{Hijriday}\space\hijrimonthmalay@malay{\value{Hijrimonth}}\space\number\value{Hijriyear}}
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-basque.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-basque.ldf
index c6c1d3d1b92..16ee1d3b909 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-basque.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-basque.ldf
@@ -2,6 +2,7 @@
\PolyglossiaSetup{basque}{
hyphennames={basque},
hyphenmins={2,2},
+ langtag=EUQ,
indentfirst=true,
fontsetup=true,
}
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-bengali.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-bengali.ldf
index 31587b0a433..3b2226be3b5 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-bengali.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-bengali.ldf
@@ -18,8 +18,8 @@ and may look very wrong.}
hyphennames={bengali},
hyphenmins={2,2},%CHECK
fontsetup=true,
+ localnumeral=bengalinumerals
%TODO nouppercase=true,
- %TODO localnumber=bengalinumber
}
\def\tmp@western{Western}
@@ -73,7 +73,7 @@ and may look very wrong.}
}
\def\captionsbengali{%
- \def\refname{তথ্যসুত্রসমূহ}%
+ \def\refname{তথ্যসূত্রসমূহ}%
\def\abstractname{সারসংক্ষেপ}%
\def\bibname{তথ্যবিবরণ}%
\def\prefacename{পূর্বকথা}%
@@ -83,8 +83,8 @@ and may look very wrong.}
\def\listfigurename{ছবি/নকশা সমূহের তালিকা}%
\def\listtablename{তালিকাসারণী}%
\def\indexname{সূচক/নির্দেশক}%
- \def\figurename{ছবি/নকশা}%
- \def\tablename{সারনী}%
+ \def\figurename{চিত্র}%
+ \def\tablename{সারণী}%
%\def\thepart{}% TODO
\def\partname{খন্ড}%
\def\pagename{পৃষ্ঠা}%
@@ -99,14 +99,14 @@ and may look very wrong.}
\def\datebengali{%
\def\bengalimonth{%
\ifcase\month\or
- জানুয়ারী\or
- ফেব্রুয়ারী\or
+ জানুয়ারি\or
+ ফেব্রুয়ারি\or
মার্চ\or
এপ্রিল\or
মে\or
জুন\or
জুলাই\or
- আগষ্ট\or
+ আগস্ট\or
সেপ্টেম্বর\or
অক্টোবর\or
নভেম্বর\or
@@ -114,6 +114,8 @@ and may look very wrong.}
\def\today{\bengalinumber\day\space\bengalimonth\space\bengalinumber\year}%
}
+\newcommand{\bengalinumerals}[2]{\bengalinumber{#2}}
+
\def\bengalinumber#1{%
\ifbengali@devanagari@numerals
\devanagaridigits{\number#1}%
@@ -125,8 +127,19 @@ and may look very wrong.}
\fi
\fi}
-\def\bengalinumber#1{\bengalidigits{\number#1}}% Takes number
-\def\bengalinumeral#1{\bengalinumber{\csname c@#1\endcsname}}% Takes counter
+\def\bengalinumeral#1{\expandafter\bengalinumber\expandafter{\the##1}}% Takes counter
+
+\def\bengali@globalnumbers{%
+ \let\@arabic\bengalinumber%
+ \renewcommand\thefootnote{\localnumeral*{footnote}}%
+}
+
+% Store original definition
+\let\xpg@save@arabic\@arabic
+
+\def\nobengali@globalnumbers{%
+ \let\@arabic\xpg@save@arabic%
+}
\def\blockextras@bengali{\extras@bengali}
\def\inlineextras@bengali{\extras@bengali}
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-brazil.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-brazil.ldf
index 3079e0778d3..9a703e79e08 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-brazil.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-brazil.ldf
@@ -1,40 +1,25 @@
-\ProvidesFile{gloss-brazil.ldf}[polyglossia: module for portuguese]
+\ProvidesFile{gloss-brazil.ldf}[polyglossia: module for brazilian portuguese]
+
+% We only provide this gloss for backwards compatibility. The name
+% '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}
+
\PolyglossiaSetup{brazil}{
language=Brazilian Portuguese,
+ langtag=PTG,
hyphennames={brazil,portuguese,portuges},
hyphenmins={2,3},
fontsetup=true,
}
-\def\captionsbrazil{%
- \def\refname{Referências}%
- \def\abstractname{Resumo}%
- \def\bibname{Referências Bibliográficas}%
- \def\prefacename{Prefácio}%
- \def\chaptername{Capítulo}%
- \def\appendixname{Apêndice}%
- \def\contentsname{Sumário}%
- \def\listfigurename{Lista de Figuras}%
- \def\listtablename{Lista de Tabelas}%
- \def\indexname{Índice Remissivo}%
- \def\figurename{Figura}%
- \def\tablename{Tabela}%
- %\def\thepart{}%
- \def\partname{Parte}%
- \def\pagename{Página}%
- \def\seename{veja}%
- \def\alsoname{veja também}%
- \def\enclname{Anexo}%
- \def\ccname{Cópia para}%
- \def\headtoname{Para}%
- \def\proofname{Demonstração}%
- \def\glossaryname{Glossário}%
- }
-\def\datebrazil{%
- \def\today{\number\day\space de\space\ifcase\month\or
- janeiro\or fevereiro\or março\or abril\or maio\or junho\or
- julho\or agosto\or setembro\or outubro\or novembro\or dezembro%
- \fi\space de\space\number\year}%
- }
+\let\captionsportuges\captionsportuguese@brazil
+\let\dateportuges\dateportuguese@brazil
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-breton.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-breton.ldf
index 5c49542c128..a3d1eee2a12 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-breton.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-breton.ldf
@@ -2,6 +2,7 @@
\PolyglossiaSetup{breton}{
hyphennames={breton},
hyphenmins={2,2},
+ langtag=BRE,
frenchspacing=true,
indentfirst=true,
fontsetup=true,
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-bulgarian.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-bulgarian.ldf
index 4739d9916bf..8f8aef1b727 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-bulgarian.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-bulgarian.ldf
@@ -29,8 +29,6 @@
\xpg@ill@value{#1}{bulgarian@alph}\fi}%
\def\bulgarian@numbers{%
- \let\latin@Alph\@Alph%
- \let\latin@alph\@alph%
\let\@Alph\bulgarian@Alph%
\let\@alph\bulgarian@alph%
}
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-catalan.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-catalan.ldf
index feba1f98128..6dbd8df9130 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-catalan.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-catalan.ldf
@@ -2,6 +2,7 @@
\PolyglossiaSetup{catalan}{
hyphennames={catalan},
hyphenmins={2,2},
+ langtag=CAT,
frenchspacing=true,
indentfirst=true,
fontsetup=true,
@@ -13,9 +14,11 @@
\else
\setkeys{catalan}{babelshorthands=false}
\fi
+
\ifcsundef{initiate@active@char}{%
-\input{babelsh.def}%
-\initiate@active@char{"}%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
}{}
%%% adapted from Babel's catalan.ldf
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-classiclatin.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-classiclatin.ldf
deleted file mode 100644
index 016646a3db2..00000000000
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-classiclatin.ldf
+++ /dev/null
@@ -1,157 +0,0 @@
-%%
-%% This is file `gloss-classiclatin.ldf',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% gloss-latin.dtx (with options: `laclassic')
-%% ------------------------------------------------------------------
-%% 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-classiclatin.ldf}
- [2016/09/10 v.1.03 Latin support from polyglossia]
-%%
-
-
-\PolyglossiaSetup{classiclatin}{%
- hyphennames={classiclatin},
- hyphenmins={2,2},
- frenchspacing=true,
- fontsetup=true,
-}
-\def\classicuclccodes{\lccode`\V=`\u \uccode`\u=`\V}
-\def\noclassicuclccodes{\lccode`\V=`\v \uccode`\u=`\U}
-\def\classiclatincaptions{%
- \def\prefacename{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}%
- }
-
-\def\classiclatindate{%
- \def\today{\uppercase\expandafter{\romannumeral\day}%
- \space \ifcase\month
- \or Januarii\or Februarii\or Martii\or Aprilis\or Maii\or Junii\or
- Julii\or Augusti\or Septembris\or Octobris\or Nouembris\or
- Decembris\fi
- \space \uppercase\expandafter{\romannumeral\year}}}
-
-\define@boolkey{classiclatin}[classiclatin@]{babelshorthands}[true]{}
-
-\ifsystem@babelshorthands
- \setkeys{classiclatin}{babelshorthands=true}
-\else
- \setkeys{classiclatin}{babelshorthands=false}
-\fi
-
-\ifcsundef{initiate@active@char}{%
- \input{babelsh.def}\initiate@active@char{"}}{}
-
-\def\classiclatin@shorthands{%
- \def\language@group{classiclatin}%
- \bbl@activate{"}%
- \declare@shorthand{classiclatin}{"}{\relax
- \ifmmode
- \def\xpgcla@next{''}%
- \else
- \def\xpgcla@nextdq{\futurelet\xpgla@temp\xpgla@cwm}%
- \fi
- \xpgcla@nextdq}%
-}
-
-\def\xpgcla@allowhyphens{\bbl@allowhyphens\discretionary{-}{}{}\bbl@allowhyphens}
-\newcommand*{\xpgcla@cwm}{\let\xpgcla@@nextdq\relax
- \ifcat\noexpand\xpgcla@temp a%
- \let\xpgcla@@nextdq\xpgcla@allowhyphens
- \else
- \ifx\xpgcla@temp\ae
- \let\xpgcla@@nextdq\xpgcla@allowhyphens
- \else
- \ifx\xpgcla@temp\oe
- \let\xpgcla@@nextdq\xpgcla@allowhyphens
- \else
- \if\noexpand\xpgla@temp\string|%
- \def\xpgcla@@nextdq{\xpgcla@allowhyphens\@gobble}%
- \fi
- \fi
- \fi
- \fi
- \xpgla@@nextdq}%
-\def\noclassiclatin@shorthands{%
- \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
-}
-
-\let\xpgcla@savedvalues\empty
-\AtEndPreamble{%
- \edef\xpgcla@savedvalues{%
- \clubpenalty=\the\clubpenalty\space
- \@clubpenalty=\the\@clubpenalty\space
- \widowpenalty=\the\widowpenalty\space
- \finalhyphendemerits=\the\finalhyphendemerits}%
-}
-
-\def\noextras@classiclatin{%
- \lccode\string"2019=\z@
- \noclassiclatin@shorthands
- \noclassicuclccodes
- \xpgcla@savedvalues
-}
-
-\def\blockextras@classiclatin{%
- \lccode\string"2019=\string"2019
- \clubpenalty=3000 \@clubpenalty=3000 \widowpenalty=3000
- \finalhyphendemerits=50000000
- \classicuclccodes
- \ifclassiclatin@babelshorthands\classiclatin@shorthands\fi
-}
-
-\def\inlineextras@classiclatin{%
- \lccode\string"2019=\string"2019
- \classicuclccodes
- \ifclassiclatin@babelshorthands\classiclatin@shorthands\fi
-}
-%% Copyright (C) Claudio Beccari 2013-2016
-%% Copyright (C) Élie Roux 2016
-%%
-%% 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
-%% without limitation the rights to use, copy, modify, merge, publish,
-%% 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
-%% THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-%% IN THE SOFTWARE.
-%%
-%% End of file `gloss-classiclatin.ldf'.
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-croatian.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-croatian.ldf
index 923fc2bb22a..50574e1ddd0 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-croatian.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-croatian.ldf
@@ -1,7 +1,9 @@
\ProvidesFile{gloss-croatian.ldf}[polyglossia: module for croatian]
\PolyglossiaSetup{croatian}{
+ langtag=HRV,
hyphennames={croatian},
hyphenmins={2,2}, % aligned with https://ctan.org/pkg/hrhyph patterns and http://lebesgue.math.hr/~nenad/Diplomski/Maja_Ribaric_2011.pdf
+ frenchspacing=true, % recommendation from Damir Bralić
indentfirst=false, % recommendation from Damir Bralić
fontsetup=true
}
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-czech.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-czech.ldf
index 8704aa043be..c4ccb5f869f 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-czech.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-czech.ldf
@@ -1,11 +1,167 @@
\ProvidesFile{gloss-czech.ldf}[polyglossia: module for czech]
+
\PolyglossiaSetup{czech}{
hyphennames={czech},
hyphenmins={2,2},
+ langtag=CSY,
frenchspacing=true,
fontsetup=true,
}
+\define@boolkey{czech}[czech@]{babelshorthands}[true]{}
+
+\define@boolkey{czech}[czech@]{splithyphens}[true]{}
+
+\define@boolkey{czech}[czech@]{vlna}[true]{}
+
+\ifsystem@babelshorthands
+ \setkeys{czech}{babelshorthands=true}
+\else
+ \setkeys{czech}{babelshorthands=false}
+\fi
+
+\ifcsundef{initiate@active@char}{%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
+}{}
+
+\def\cs@@splithyphen#1{%
+ \kern\z@\discretionary{-}{\char\hyphenchar\the\font}{#1}%
+ \nobreak\hskip\z@%
+}
+
+\def\cs@splithyphen{%
+ \cs@@splithyphen{-}%
+}
+
+\def\czech@shorthands{%
+ \bbl@activate{"}%
+ \def\language@group{czech}%
+ \declare@shorthand{czech}{"=}{\cs@splithyphen}%
+ \declare@shorthand{czech}{"`}{„}%
+ \declare@shorthand{czech}{"'}{“}%
+ \declare@shorthand{czech}{"<}{«}%
+ \declare@shorthand{czech}{">}{»}%
+}
+
+\def\noczech@shorthands{%
+ \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
+}
+
+\ifxetex
+ % splithyphens
+ \newXeTeXintercharclass\czech@hyphen % -
+ % vlna
+ \newXeTeXintercharclass\czech@openpunctuation
+ \newXeTeXintercharclass\czech@nonsyllabicpreposition
+ \ifdefined\e@alloc@intercharclass@top
+ \chardef\czech@boundary=\e@alloc@intercharclass@top
+ \else
+ \ifdefined\XeTeXinterwordspaceshaping
+ \chardef\czech@boundary=4095 %
+ \def\newXeTeXintercharclass{%
+ \e@alloc\XeTeXcharclass\chardef
+ \xe@alloc@intercharclass\m@ne\@ucharclass@boundary}
+ \else
+ \chardef\czech@boundary=255
+ \fi
+ \fi
+\fi
+
+\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}
+ \else
+ \XeTeXinterchartokenstate=1
+ \XeTeXcharclass `\- \czech@hyphen
+ \XeTeXinterchartoks \z@ \czech@hyphen = {\cs@@splithyphen}% "-" -> "\cs@@splithyphen-"
+ % necessary if used together with vlna:
+ \XeTeXinterchartoks \czech@nonsyllabicpreposition \czech@hyphen = {\cs@@splithyphen}% "-" -> "\cs@@splithyphen-"
+ \fi%
+}
+
+\def\noczech@hyphens{%
+ \ifxetex
+ \XeTeXcharclass `\- \z@
+ \fi%
+}
+
+% Add nonbreakable space after single-letter word to
+% 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}
+ \else
+ % Code taken and adapted from xevlna.sty
+ \XeTeXinterchartokenstate=1
+ \XeTeXcharclass `\( \czech@openpunctuation
+ \XeTeXcharclass `\[ \czech@openpunctuation
+ \XeTeXcharclass `\„ \czech@openpunctuation
+ \XeTeXcharclass `\» \czech@openpunctuation
+ \XeTeXcharclass `\K \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\k \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\S \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\s \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\V \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\v \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\Z \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\z \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\O \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\o \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\U \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\u \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\A \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\a \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\I \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\i \czech@nonsyllabicpreposition
+ \XeTeXinterchartoks \czech@boundary \czech@nonsyllabicpreposition {\czech@interchartoks}
+ \XeTeXinterchartoks \czech@openpunctuation \czech@nonsyllabicpreposition {\czech@interchartoks}
+ \def\czech@nointerchartoks{\let\czech@interchartoks\czech@PreCSpreposition}
+ \def\czech@PreCSpreposition{\def\next{}%
+ \ifnum\catcode`\ =10 % nothing will be done in verbatim
+ \ifmmode % nothing in math
+ \else
+ \let\czech@interchartoks\czech@nointerchartoks
+ \let\next\czech@ExamineCSpreposition
+ \fi \fi
+ \next%
+ }
+ \def\czech@ExamineCSpreposition ##1{##1\futurelet\next\czech@ProcessCSpreposition}
+ \def\czech@ProcessCSpreposition{\ifx\next\czech@XeTeXspace\nobreak\fi}
+ \futurelet\czech@XeTeXspace{ }\czech@nointerchartoks
+ \fi
+}
+
+\def\noczech@vlna{%
+ \ifluatex
+ \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\captionsczech{%
\def\refname{Reference}%
\def\abstractname{Abstrakt}%
@@ -29,12 +185,33 @@
\def\headtoname{Komu}%
\def\proofname{Důkaz}%
\def\glossaryname{Slovník}%was Glosář
- }
+}
+
\def\dateczech{%
\def\today{\number\day.~\ifcase\month\or
ledna\or února\or března\or dubna\or května\or
června\or července\or srpna\or září\or
října\or listopadu\or prosince\fi
- \space \number\year}}
+ \space \number\year}%
+}
+
+\def\noextras@czech{%
+ \noczech@shorthands%
+ \noczech@hyphens%
+ \noczech@vlna%
+ \ifxetex\XeTeXinterchartokenstate=0\fi%
+}
+
+\def\blockextras@czech{%
+ \ifczech@babelshorthands\czech@shorthands\fi%
+ \ifczech@vlna\czech@vlna\fi%
+ \ifczech@splithyphens\czech@hyphens\fi%
+}
+
+\def\inlineextras@czech{%
+ \ifczech@babelshorthands\czech@shorthands\fi%
+ \ifczech@vlna\czech@vlna\fi%
+ \ifczech@splithyphens\czech@hyphens\fi%
+}
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-danish.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-danish.ldf
index 282ea8277f6..2de0ae89278 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-danish.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-danish.ldf
@@ -2,6 +2,7 @@
\PolyglossiaSetup{danish}{
hyphennames={danish},
hyphenmins={2,3},
+ langtag=DAN,
frenchspacing=true,
fontsetup=true,
}
@@ -25,12 +26,15 @@
\def\headtoname{Til}% in letter
\def\pagename{Side}%
\def\seename{Se}%
- \def\alsoname{Se også}}%
+ \def\alsoname{Se også}%
\def\proofname{Bevis}%
\def\glossaryname{Gloseliste}%
+}
+\def\datedanish{%
\def\today{\number\day.~\ifcase\month\or
januar\or februar\or marts\or april\or maj\or juni\or
juli\or august\or september\or oktober\or november\or december\fi
\space\number\year}
+}
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-divehi.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-divehi.ldf
index 8685b26c5df..ad5dc56bd4d 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-divehi.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-divehi.ldf
@@ -9,6 +9,7 @@ and may look very wrong.}
\PolyglossiaSetup{divehi}{
script=Thaana,
scripttag=thaa,
+ langtag=DIV,% TODO Support DHV as well?
direction=RL,
hyphennames={nohyphenation},
fontsetup=true
@@ -40,12 +41,16 @@ and may look very wrong.}
% }
%\def\datedivehi{\def\today{<++>}}
+% Save original \MakeUppercase definition
+\let\xpg@save@MakeUppercase\MakeUppercase
+
\def\blockextras@divehi{%
- \let\@@MakeUppercase\MakeUppercase%
\def\MakeUppercase##1{##1}%
- }
+}
+
\def\noextras@divehi{%
- \let\MakeUppercase\@@MakeUppercase%
- }
+ % restore original \MakeUppercase definition
+ \let\MakeUppercase\xpg@save@MakeUppercase%
+}
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-dutch.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-dutch.ldf
index 2633956a9d8..f94a684af92 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-dutch.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-dutch.ldf
@@ -2,6 +2,7 @@
\PolyglossiaSetup{dutch}{
hyphennames={dutch},
hyphenmins={2,2},
+ langtag=NLD,
frenchspacing=true,
fontsetup=true,
}
@@ -15,8 +16,9 @@
\fi
\ifcsundef{initiate@active@char}{%
-\input{babelsh.def}%
-\initiate@active@char{"}%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
}{}
\def\dutch@shorthands{%
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-english.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-english.ldf
index b0699f716d1..9c666b15c49 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-english.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-english.ldf
@@ -2,66 +2,124 @@
\PolyglossiaSetup{english}{
hyphennames={english,american,usenglish,USenglish},
hyphenmins={2,3},
+ langtag=ENG,
fontsetup=true,
}
-\newif\if@british@locale
-\@british@localefalse
-\providebool{@british@hyphen}
+\providebool{british@hyphen}
\providebool{english@ordinalmonthday}
+\providebool{british@dateformat}
+% US English (\l@english) is default
+% Initialize its settings
+\def\english@variant{english}
+\british@hyphenfalse
+\english@ordinalmonthdayfalse
+\british@dateformatfalse
+
+% Option ordinalmonthday
\define@boolkey{english}[english@]{ordinalmonthday}[true]{}
-%% English is a special case in that \l@english is reserved for US English, so
-%% we need to handle it differently
-\define@key{english}{variant}{%
- %needs to be reset for loop over hyphennames below:
- \def\do##1{%
- \xpg@ifdefined{#1}%
- {\csletcs{l@english}{l@#1}\listbreak}%
- {}%
- }%
- \ifstrequal{#1}{uk}%
- {\@british@localetrue
- \xpg@info{Option: english variant=british}}%
- {\ifstrequal{#1}{british}%
- {\@british@localetrue
- \xpg@info{Option: english variant=british}}%
- {\ifstrequal{#1}{us}% these patterns are the default so we don't need to reset them
- {\@british@hyphenfalse\english@ordinalmonthdayfalse
- \xpg@info{Option: english variant=american}}%
- {\ifstrequal{#1}{american}%
- {\@british@hyphenfalse\english@ordinalmonthdayfalse
- \xpg@info{Option: english variant=american}}%
- {\ifstrequal{#1}{usmax}%
- {\@british@hyphenfalse\english@ordinalmonthdayfalse
- \ifluatex\else\setkeys[xpg@setup]{english}{hyphennames={usenglishmax}}\fi
- \xpg@info{Option: english variant=american (with additional patterns)}%
- \xpg@ifdefined{usenglishmax}{}%
- {\xpg@warning{No hyphenation patterns were loaded for "US English Max"\MessageBreak
- I will use the standard patterns for US English instead}%
- \adddialect\l@usenglishmax\l@english\relax}%
- \gdef\english@language{\language=\l@usenglishmax}}%
- {\ifstrequal{#1}{australian}%
- {\@british@hyphentrue\english@ordinalmonthdayfalse
- \xpg@info{Option: english variant=australian}}%
- {\ifstrequal{#1}{newzealand}%
- {\@british@hyphentrue\english@ordinalmonthdayfalse
- \xpg@info{Option: english variant=newzealand}}%
- {\xpg@warning{Unknown English variant `#1'}}%
- }}}}}}%
- \if@british@locale\@british@hyphentrue\english@ordinalmonthdaytrue\fi
- \if@british@hyphen
- \ifluatex\else\setkeys[xpg@setup]{english}{hyphennames={ukenglish,british,UKenglish}}\fi
- \xpg@ifdefined{ukenglish}{}%
- {\xpg@warning{No hyphenation patterns were loaded for British English\MessageBreak
- I will use the patterns for US English instead}%
- \adddialect\l@ukenglish\l@english\relax}%
- \gdef\english@language{\language=\l@ukenglish\xpg@set@language@luatex@ii{ukenglish}}%
- \fi
- % and we reset \do to its previous definition here:
- \def\do##1{\setotherlanguage{#1}}%
-}
+\define@choicekey*+{english}{variant}[\val\nr]{uk,british,us,american,usmax,australian,newzealand,canadian}{%
+ \ifcase\nr\relax
+ % uk:
+ \british@hyphentrue
+ \british@dateformattrue
+ \english@ordinalmonthdaytrue
+ \SetLanguageKeys{english}{babelname=british}%
+ \xpg@info{Option: English, variant=british}%
+ \or
+ % british:
+ \british@hyphentrue
+ \british@dateformattrue
+ \english@ordinalmonthdaytrue
+ \SetLanguageKeys{english}{babelname=british}%
+ \xpg@info{Option: english variant=british}%
+ \or
+ % us:
+ \british@hyphenfalse
+ \british@dateformatfalse
+ \english@ordinalmonthdayfalse
+ \SetLanguageKeys{english}{babelname=american}%
+ \xpg@info{Option: English, variant=american}%
+ \or
+ % american:
+ \british@hyphenfalse
+ \british@dateformatfalse
+ \english@ordinalmonthdayfalse
+ \SetLanguageKeys{english}{babelname=american}%
+ \xpg@info{Option: English, variant=american}%
+ \or
+ % usmax:
+ \british@hyphenfalse
+ \british@dateformatfalse
+ \english@ordinalmonthdayfalse
+ \SetLanguageKeys{english}{babelname=american}%
+ \xpg@info{Option: english variant=american (with additional patterns)}%
+ \xpg@ifdefined{usenglishmax}{}%
+ {\xpg@warning{No hyphenation patterns were loaded for "US English Max"\MessageBreak
+ I will use the standard patterns for US English instead}%
+ \adddialect\l@usenglishmax\l@english\relax%
+ }%
+ \def\english@variant{usenglishmax}%
+ \or
+ % australian:
+ % These use the british hyphenation patterns
+ % but date formats without ordinals
+ \british@hyphentrue
+ \british@dateformattrue
+ \english@ordinalmonthdayfalse
+ \SetLanguageKeys{english}{babelname=australian}%
+ \xpg@info{Option: English, variant=australian}%
+ \or
+ % newzealand:
+ % These use the british hyphenation patterns
+ % but date formats without ordinals
+ \british@hyphentrue
+ \british@dateformattrue
+ \english@ordinalmonthdayfalse
+ \SetLanguageKeys{english}{babelname=newzealand}%
+ \xpg@info{Option: English, variant=newzealand}%
+ \or
+ % canadian:
+ % This is currently equivalent to usenglish (as in babel)
+ \british@hyphenfalse
+ \british@dateformatfalse
+ \english@ordinalmonthdayfalse
+ \SetLanguageKeys{english}{babelname=canadian}%
+ \xpg@info{Option: English, variant=american}%
+ \fi
+ \ifbritish@hyphen
+ \xpg@ifdefined{ukenglish}{}%
+ {\xpg@warning{No hyphenation patterns were loaded for British English\MessageBreak
+ I will use the patterns for US English instead}%
+ \adddialect\l@ukenglish\l@english\relax%
+ }%
+ \def\english@variant{ukenglish}%
+ \fi
+}{\xpg@warning{Unknown English variant `#1'}}
+
+\ifxetex
+ % Check if \l@english is defined. If not, try to set it to some variety
+ % (specific order as in the csv list below), or null language if everything fails
+ \xpg@ifdefined{english}{}{%
+ \def\do##1{%
+ \xpg@ifdefined{#1}%
+ {\csletcs{l@english}{l@#1}\listbreak}%
+ {%
+ \xpg@warning{No hyphenation patterns for English found"\MessageBreak
+ I will use the 'null' language instead}%
+ \adddialect\l@english0
+ }%
+ }%
+ \docsvlist{british, american, usenglishmax, australian, newzealand}
+ \xpg@ifdefined{english}{}{}
+ }%
+\fi
+
+\def\english@language{%
+ \polyglossia@setup@language@patterns{\english@variant}
+}%
\def\captionsenglish{%
\def\prefacename{Preface}%
@@ -101,7 +159,7 @@
January\or February\or March\or April\or May\or June\or
July\or August\or September\or October\or November\or December\fi}%
\def\today{%
- \if@british@locale
+ \ifbritish@dateformat
\english@day\space\english@month\space\number\year
\else
\english@month\space\english@day,\space\number\year
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-esperanto.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-esperanto.ldf
index e3bc8d31ac4..f3a6bf09911 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-esperanto.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-esperanto.ldf
@@ -2,6 +2,7 @@
\PolyglossiaSetup{esperanto}{
hyphennames={esperanto},
hyphenmins={2,2},
+ langtag=NTO,
fontsetup=true,
%TODO localalph={esperanto@alph,esperanto@Alph}
}
@@ -51,8 +52,6 @@
P\or R\or S\or Ŝ\or T\or U\or Ŭ\or V\or Z\else\xpg@ill@value{#1}{esperanto@Alph}\fi}%
\def\esperanto@numbers{%
- \let\latin@Alph\@Alph%
- \let\latin@alph\@alph%
\let\@Alph\esperanto@Alph%
\let\@alph\esperanto@alph%
}
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-estonian.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-estonian.ldf
index e84aa304712..f8df426a94f 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-estonian.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-estonian.ldf
@@ -2,6 +2,7 @@
\PolyglossiaSetup{estonian}{
hyphennames={estonian},
hyphenmins={2,2},
+ langtag=ETI,
frenchspacing=true,
fontsetup=true,
}
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-farsi.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-farsi.ldf
index f9149badf6e..0c65b37574f 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-farsi.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-farsi.ldf
@@ -1,131 +1,42 @@
\ProvidesFile{gloss-farsi.ldf}[polyglossia: module for farsi]
-\ifluatex
- \xpg@warning{Farsi is not supported with LuaTeX.\MessageBreak
-I will proceed with the compilation, but\MessageBreak
-the output is not guaranteed to be correct\MessageBreak
-and may look very wrong.}
-\fi
-\RequireBidi
-\RequirePackage{arabicnumbers}
-\RequirePackage{farsical}
-\RequirePackage{hijrical}
+
+% 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
+ fontsetup=true,
+ localnumeral=farsinumerals
}
-\newif\if@western@numerals
-\def\tmp@western{western}
\define@key{farsi}{numerals}[eastern]{%
- \def\@tmpa{#1}%
- \ifx\@tmpa\tmp@western\@western@numeralstrue\else%
- \@western@numeralsfalse%
- \fi}
+ \setkeys{persian}{numerals=#1}}
-%this is needed for \abjad in arabicnumbers.sty
-\def\tmp@true{true}
\define@key{farsi}{abjadjimnotail}[true]{%
- \def\@tmpa{#1}%
- \ifx\@tmpa\tmp@true\abjad@jim@notailtrue%
- \else
- \abjad@jim@notailfalse
- \fi}
+ \setkeys{persian}{abjadjimnotail=#1}}
-% NOT YET USED
\define@key{farsi}{locale}[default]{%
- \def\@farsi@locale{#1}}
-
-%TODO add option for CALENDAR
+ \setkeys{persian}{locale=#1}}
\setkeys{farsi}{locale,numerals}
-\def\farsigregmonth#1{\ifcase#1%
- \or ژانویه\or فوریه\or مارس\or آوریل\or مه\or ژوئن\or ژوئیه\or اوت\or سپتامبر\or اکتبر\or نوامبر\or دسامبر\fi}
-\def\farsimonth#1{\ifcase#1%
- \or کانون ثانی\or شباط\or اذار%%or ادار
- \or نیسان\or ایار\or حزیران\or تموز\or آب\or ایلول\or تشرین اول\or تشرین ثانی\or کانون اول\fi}
-
%\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}}}}
-
-\def\captionsfarsi{%
-\def\prefacename{\@ensure@RTL{پیشگفتار}}%
-\def\refname{\@ensure@RTL{مراجع}}%
-\def\abstractname{\@ensure@RTL{چکیده}}%
-\def\bibname{\@ensure@RTL{کتاب‌نامه}}%
-\def\chaptername{\@ensure@RTL{فصل}}%
-\def\appendixname{\@ensure@RTL{پیوست}}%
-\def\contentsname{\@ensure@RTL{فهرست مطالب}}%
-\def\listfigurename{\@ensure@RTL{لیست تصاویر}}%
-\def\listtablename{\@ensure@RTL{لیست جداول}}%
-\def\indexname{\@ensure@RTL{نمایه}}%
-\def\figurename{\@ensure@RTL{شكل}}%
-\def\tablename{\@ensure@RTL{جدول}}%
-\def\partname{\@ensure@RTL{بخش}}%
-\def\enclname{\@ensure@RTL{پیوست}}%
-\def\ccname{\@ensure@RTL{رونوشت}}%
-\def\headtoname{\@ensure@RTL{به}}%
-\def\pagename{\@ensure@RTL{صفحة}}%
-\def\seename{\@ensure@RTL{ببینید}}%
-\def\alsoname{\@ensure@RTL{نیز ببینید}}%
-\def\proofname{\@ensure@RTL{برهان}}%
-\def\glossaryname{\@ensure@RTL{دانش‌نامه}}%
-}
-\def\datefarsi{%
- \def\today{\@ensure@RTL{\farsinumber\day\space\farsigregmonth{\month}\space\farsinumber\year}}%
-}
-
-\def\farsinumber#1{%
- \if@western@numerals
- \number#1%
- \else
- \ifnum\XeTeXcharglyph"06F0 > 0%
- \farsidigits{\number#1}%
- %%{\protect\addfontfeature{Mapping=farsidigits}\number#1}%
- \else%
- \arabicdigits{\number#1}%
- %%{\protect\addfontfeature{Mapping=arabicdigits}\number#1}%
- \fi
- \fi}
-
-%\def\farsinum#1{\expandafter\farsinumber\csname c@#1\endcsname}
-%\def\farsibracenum#1{(\expandafter\farsinumber\csname c@#1\endcsname)}
-%\def\farsiornatebracenum#1{\char"FD3E\expandafter\farsinumber\csname c@#1\endcsname\char"FD3F}
-%\def\farsialph#1{\expandafter\@farsialph\csname c@#1\endcsname}
-
-\def\farsi@numbers{%
- \let\@latinalph\@alph%
- \let\@latinAlph\@Alph%
- \let\@alph\abjad%
- \let\@Alph\abjad%
-}
-\def\nofarsi@numbers{%
- \let\@alph\@latinalph%
- \let\@Alph\@latinAlph%
- }
-
-\def\farsi@globalnumbers{%
- \let\orig@arabic\@arabic%
- \let\@arabic\farsinumber%
- % For some reason \thefootnote needs to be set separately:
- \renewcommand\thefootnote{\protect\farsinumber{\c@footnote}}%
- }
+ \farsinumber{\value{Hijriday}}\space\HijriMonthArabic{\value{Hijrimonth}}\space\farsinumber{\value{Hijriyear}}}}
-\def\nofarsi@globalnumbers{
- \let\@arabic\orig@arabic%
- \renewcommand\thefootnote{\protect\number{\c@footnote}}%
- }
+\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
-\def\blockextras@farsi{%
- \let\@@MakeUppercase\MakeUppercase%
- \def\MakeUppercase##1{##1}%
- }
-\def\noextras@farsi{%
- \let\MakeUppercase\@@MakeUppercase%
- }
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-finnish.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-finnish.ldf
index 6b271e531d9..e0c884f9664 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-finnish.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-finnish.ldf
@@ -2,10 +2,41 @@
\PolyglossiaSetup{finnish}{
hyphennames={finnish},
hyphenmins={2,2},
+ langtag=FIN,
frenchspacing=true,
fontsetup=true,
}
+\define@boolkey{finnish}[finnish@]{babelshorthands}[true]{}
+
+\ifsystem@babelshorthands
+ \setkeys{finnish}{babelshorthands=true}
+\else
+ \setkeys{finnish}{babelshorthands=false}
+\fi
+
+\ifcsundef{initiate@active@char}{%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
+}{}
+
+\def\finnish@shorthands{%
+ \bbl@activate{"}%
+ \def\language@group{finnish}%
+ \declare@shorthand{finnish}{"-}{\nobreak-\bbl@allowhyphens}
+ \declare@shorthand{finnish}{"|}{\textormath{\penalty@M\discretionary{-}{}{\kern.03em}}{}}%
+ \declare@shorthand{finnish}{""}{\hskip\z@skip}%
+ \declare@shorthand{finnish}{"~}{\textormath{\leavevmode\hbox{-}}{-}}%
+ \declare@shorthand{finnish}{"=}{\penalty@M-\hskip\z@skip}%
+ \declare@shorthand{finnish}{"/}{\textormath
+ {\bbl@allowhyphens\discretionary{/}{}{/}\bbl@allowhyphens}{}}%
+}
+
+\def\nofinnish@shorthands{%
+ \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
+}
+
\def\captionsfinnish{%
\def\refname{Viitteet}%
\def\abstractname{Tiivistelmä}%
@@ -29,7 +60,7 @@
\def\headtoname{Vastaanottaja}%
\def\proofname{Todistus}%
\def\glossaryname{Sanasto}%
- }
+}
\def\datefinnish{%
\def\today{\number\day.~\ifcase\month\or
tammikuuta\or helmikuuta\or maaliskuuta\or huhtikuuta\or
@@ -37,6 +68,18 @@
syyskuuta\or lokakuuta\or marraskuuta\or joulukuuta\fi
\space\number\year}}
+\def\noextras@finnish{%
+ \nofinnish@shorthands%
+}
+
+\def\blockextras@finnish{%
+ \iffinnish@babelshorthands\finnish@shorthands\fi%
+}
+
+\def\inlineextras@finnish{%
+ \iffinnish@babelshorthands\finnish@shorthands\fi%
+}
+
\endinput
% TODO ? this is set in babel:
@@ -45,4 +88,4 @@
\babel@savevariable\exhyphenpenalty\exhyphenpenalty=30%
\babel@savevariable\doublehyphendemerits\doublehyphendemerits=5000%
\babel@savevariable\finalhyphendemerits\finalhyphendemerits=5000%
- }
+}
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-french.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-french.ldf
index fdffd36cf9d..8cb0731d2df 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-french.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-french.ldf
@@ -3,12 +3,43 @@
\PolyglossiaSetup{french}{%
language=French,
script=Latin,
+ langtag=FRA,
hyphennames={french,francais},
frenchspacing=true,
indentfirst=true,
hyphenmins={2,2},
fontsetup=true}
+\def\french@variant{french}
+\define@choicekey*+{french}{variant}[\val\nr]{french,canadian,acadian}[french]{%
+ \ifcase\nr\relax
+ % french:
+ \def\french@variant{french}%
+ \or
+ % canadian:
+ \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}%
+ \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}%
+ \fi
+ \xpg@info{Option: French, variant=\val}%
+}{\xpg@warning{Unknown French variant `#1'}}
+
+
+\def\french@language{%
+ \polyglossia@setup@language@patterns{\french@variant}
+}%
+
\ifluatex
\newluatexattribute\xpg@frpt %
\directlua{polyglossia.load_frpt()}%
@@ -22,36 +53,77 @@
\fi
\def\xpg@unskip{\ifhmode\ifdim\lastskip>\z@\unskip\fi\fi}
-\def\xpg@nospace#1{#1}
-
-\ifx\@makefntext\undefined\else
- \let\nofrench@makefntext\@makefntext
- \long\def\french@makefntext#1{\parindent1em \noindent\quad\ifx\@thefnmark\empty\else\@thefnmark.\space\fi #1}
- \let\@makefntext\french@makefntext
- \define@boolkey{french}[french@]{frenchfootnote}[true]{%
- \def\@tmpa{#1}
- \def\@tmptrue{true}
- \ifx\@tmpa\@tmptrue
- \let\@makefntext\french@makefntext
- \else
- \let\@makefntext\nofrench@makefntext
- \fi
- }
-\fi
+% Save original footnote definition
+\let\xpg@orig@makefntext\@makefntext
+
+\define@boolkey{french}[french@]{frenchfootnote}[true]{%
+ \AfterPreamble{%
+ \ifdefstring{\xpg@main@language}{french}{%
+ \iffrench@frenchfootnote
+ \ifx\@makefntext\undefined\else
+ \long\def\french@makefntext##1{%
+ \parindent1em \noindent\quad%
+ \ifx\@thefnmark\empty\else%
+ \@thefnmark.\space\fi ##1%
+ }
+ \let\@makefntext\french@makefntext
+ \fi
+ \else
+ \let\@makefntext\xpg@orig@makefntext
+ \fi
+ }{\xpg@warning{Option 'frenchfootnote' only supported if French is main language!}}%
+ }%
+}
+
+\define@boolkey{french}[french@]{autospacing}[true]{}
+\french@autospacingtrue
+
+\newif\iffrench@autospaceguillemets
+\define@boolkey{french}[french@]{autospaceguillemets}[true]{}
+\french@autospaceguillemetstrue
-\newif\iffrench@automaticspacesaroundguillemets
+% Backwards compatibility
\define@boolkey{french}[french@]{automaticspacesaroundguillemets}[true]{%
- %\def\tmp@true{true}%
- %\def\@tmpa{#1}%
- %\ifx\@tmpa\tmp@true
+ \iffrench@automaticspacesaroundguillemets
+ \setkeys{french}{autospaceguillemets=true}%
+ \else
+ \setkeys{french}{autospaceguillemets=false}%
+ \fi
+}
+
+% name is for compatibility with babel
+\let\french@ttfamilyORI\ttfamily
+\DeclareRobustCommand\french@ttfamilyFB{\nofrench@punctuation\french@ttfamilyORI}
+
+% Allow to switch on autospacing in ttfamily context
+\define@boolkey{french}[french@]{autospacetypewriter}[true]{}
+\french@autospacetypewriterfalse
+
+% This is how babel-french has it
+\define@boolkey{french}[french@]{OriginalTypewriter}[true]{%
+ \iffrench@OriginalTypewriter
+ \setkeys{french}{autospacetypewriter=false}%
+ \else
+ \setkeys{french}{autospacetypewriter=true}%
+ \fi
+}
+
+\def\french@fontsetup{%
+ \unless\iffrench@autospacetypewriter
+ \let\ttfamily\french@ttfamilyFB
+ \fi
+}
+
+
+\def\nofrench@fontsetup{%
+ \let\ttfamily\french@ttfamilyORI
}
-\french@automaticspacesaroundguillemetstrue
\def\french@punctuation{%
\lccode"2019="2019
\ifluatex
- \global\xpg@frpt=1\relax %
+ \xpg@frpt=1\relax %
\directlua{polyglossia.activate_frpt()}%
\else
\XeTeXinterchartokenstate=1
@@ -73,24 +145,24 @@
\XeTeXcharclass `\[ \french@closebrackets
\XeTeXcharclass `\{ \french@openbrackets
\XeTeXcharclass `\} \french@closebrackets
- \XeTeXinterchartoks \z@ \french@punctthin = {\nobreak\thinspace}%
+ \XeTeXinterchartoks \z@ \french@punctthin = {\thinspace}%
\XeTeXinterchartoks \z@ \french@punctthick = {\nobreakspace}%
- \XeTeXinterchartoks \xpg@boundaryclass \french@punctthin = {\xpg@unskip\nobreak\thinspace}%
+ \XeTeXinterchartoks \xpg@boundaryclass \french@punctthin = {\xpg@unskip\thinspace}%
\XeTeXinterchartoks \xpg@boundaryclass \french@punctthick = {\xpg@unskip\nobreakspace}%
- \XeTeXinterchartoks \french@punctguillstart \z@ = {\nobreakspace}% "«a" -> "« a"
- % \XeTeXinterchartoks \z@ \french@punctguillstart = {\nobreakspace}% "a«" unchanged?
- % \XeTeXinterchartoks \french@punctguillend \z@ = {\nobreakspace}% "»a" unchanged?
- \XeTeXinterchartoks \z@ \french@punctguillend = {\nobreakspace}% "a»" -> "a »"
- \iffrench@automaticspacesaroundguillemets
- \XeTeXinterchartoks \french@punctguillstart \xpg@boundaryclass = {\nobreakspace\xpg@nospace\relax}% "« " -> "«~"
- \XeTeXinterchartoks \xpg@boundaryclass \french@punctguillend = {\xpg@unskip\nobreakspace}% " »" -> "~»"
- \fi
- \XeTeXinterchartoks \french@punctguillend \french@punctthin = {\nobreak\thinspace}% "»;" -> "» ;"
- \XeTeXinterchartoks \french@punctguillend \french@punctthick = {\nobreakspace}% "»:" -> "» :"
- \XeTeXinterchartoks \french@punctthin \french@punctguillend = {\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}% " »" -> "\,»"
+ \fi
+ \XeTeXinterchartoks \french@punctguillend \french@punctthin = {\thinspace}% "»;" -> "»\,;"
+ \XeTeXinterchartoks \french@punctguillend \french@punctthick = {\nobreakspace}% "»:" -> "» :"
+ \XeTeXinterchartoks \french@punctthin \french@punctguillend = {\thinspace}% "?»" -> "?\,»"
\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 = {\nobreak\thinspace}% ")?" -> ") ?"
+ \XeTeXinterchartoks \french@closebrackets \french@punctthin = {\thinspace}% ")?" -> ")\,?"
\XeTeXinterchartoks \french@closebrackets \french@punctthick = {\nobreakspace}% "):" -> ") :"
\fi
}
@@ -98,7 +170,7 @@
\def\nofrench@punctuation{%
\lccode"2019=\z@
\ifluatex
- \global\xpg@frpt=0\relax %
+ \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
@@ -152,6 +224,7 @@
\def\headtoname{}%
\def\proofname{Démonstration}%
}
+
\def\datefrench{%
\def\today{\ifx\ier\undefined\def\ier{er}\fi
\ifnum\day=1\relax 1\ier%
@@ -164,15 +237,30 @@
\def\noextras@french{%
\nofrench@punctuation%
- }
+ \nofrench@fontsetup%
+}
\def\blockextras@french{%
- \french@punctuation%
- }
+ \iffrench@autospacing
+ \french@punctuation%
+ \fi
+ \french@fontsetup%
+}
\def\inlineextras@french{%
- \french@punctuation%
- }
+ \iffrench@autospacing
+ \french@punctuation%
+ \fi
+ \french@fontsetup%
+}
+
+\def\NoAutoSpacing{%
+ \nofrench@punctuation%
+}
+
+\def\AutoSpacing{%
+ \french@punctuation%
+}
\def\ier{\textsuperscript{er}}
\def\iers{\textsuperscript{ers}}
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-friulan.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-friulan.ldf
index a753c04e41f..b395c7d4a27 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-friulan.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-friulan.ldf
@@ -1,64 +1,22 @@
\ProvidesFile{gloss-friulan.ldf}[polyglossia: module for friulan]
-\makeatletter
+
+% 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,
}
-
-\def\captionsfriulan{%
- \def\prefacename{Prefazion}%
- \def\refname{Riferiments}%
- \def\abstractname{Somari}%
- \def\bibname{Bibliografie}%
- \def\chaptername{Cjapitul}%
- \def\appendixname{Zonte}%
- \def\contentsname{Tabele gjenerâl}%
- \def\listfigurename{Liste des figuris}%
- \def\listtablename{Liste des tabelis}%
- \def\indexname{Tabele analitiche}%
- \def\figurename{Figure}%
- \def\tablename{Tabele}%
- \def\partname{Part}%
- \def\enclname{Zonte(is)}%
- \def\ccname{Cun copie a}%
- \def\headtoname{Par}%
- \def\pagename{Pagjine}%
- \def\seename{cjale}%
- \def\alsoname{cjale ancje}%
- \def\proofname{Dimostrazion}%
- \def\glossaryname{Glossari}%
- }
-
-\def\datefriulan{%
- \def\today{\number\day\space di\space\ifcase\month\or
- Genâr\or Fevrâr\or Març\or Avril\or Mai\or Jugn\or
- Lui\or Avost\or Setembar\or Otobar\or Novembar\or Dicembar%
- \fi\space dal\space\number\year}}
-
-\AtEndPreamble{% the user or the class might define different values
- \edef\xpgfu@savedvalues{%
- \clubpenalty=\the\clubpenalty\space
- \@clubpenalty=\the\@clubpenalty\space
- \widowpenalty=\the\widowpenalty\space
- \finalhyphendemerits=\the\finalhyphendemerits}
-}
-
-
-\def\noextras@friulan{%
- \lccode\string"2019=\z@
-}
-
-\def\blockextras@friulan{%
- \lccode\string"2019=\string"2019
- \clubpenalty=3000 \@clubpenalty=3000 \widowpenalty=3000
- \finalhyphendemerits=50000000
-}
-
-\def\inlineextras@friulan{%
- \lccode\string"2019=\string"2019
-}
+\let\captionsfriulan\captionsfriulian
+\let\datefriulan\datefriulian
+\let\noextras@friulan\noextras@friulian
+\let\blockextras@friulan\blockextras@friulian
+\let\inlineextras@friulan\inlineextras@friulian
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-friulian.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-friulian.ldf
new file mode 100644
index 00000000000..87e3705ba56
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-friulian.ldf
@@ -0,0 +1,66 @@
+\ProvidesFile{gloss-friulian.ldf}[polyglossia: module for friulian]
+
+\PolyglossiaSetup{friulian}{%
+ language=Friulian,
+ babelname=friulan,
+ hyphennames={friulan,furlan},
+ hyphenmins={2,2},
+ langtag=FRL,
+ indentfirst=false,
+ fontsetup=true,
+ frenchspacing=true,
+}
+
+\def\captionsfriulian{%
+ \def\prefacename{Prefazion}%
+ \def\refname{Riferiments}%
+ \def\abstractname{Somari}%
+ \def\bibname{Bibliografie}%
+ \def\chaptername{Cjapitul}%
+ \def\appendixname{Zonte}%
+ \def\contentsname{Tabele gjenerâl}%
+ \def\listfigurename{Liste des figuris}%
+ \def\listtablename{Liste des tabelis}%
+ \def\indexname{Tabele analitiche}%
+ \def\figurename{Figure}%
+ \def\tablename{Tabele}%
+ \def\partname{Part}%
+ \def\enclname{Zonte(is)}%
+ \def\ccname{Cun copie a}%
+ \def\headtoname{Par}%
+ \def\pagename{Pagjine}%
+ \def\seename{cjale}%
+ \def\alsoname{cjale ancje}%
+ \def\proofname{Dimostrazion}%
+ \def\glossaryname{Glossari}%
+ }
+
+\def\datefriulian{%
+ \def\today{\number\day\space di\space\ifcase\month\or
+ Genâr\or Fevrâr\or Març\or Avril\or Mai\or Jugn\or
+ Lui\or Avost\or Setembar\or Otobar\or Novembar\or Dicembar%
+ \fi\space dal\space\number\year}}
+
+\AtEndPreamble{% the user or the class might define different values
+ \edef\xpgfu@savedvalues{%
+ \clubpenalty=\the\clubpenalty\space
+ \@clubpenalty=\the\@clubpenalty\space
+ \widowpenalty=\the\widowpenalty\space
+ \finalhyphendemerits=\the\finalhyphendemerits}
+}
+
+
+\def\noextras@friulian{%
+ \lccode\string"2019=\z@
+}
+
+\def\blockextras@friulian{%
+ \lccode\string"2019=\string"2019
+ \clubpenalty=3000 \@clubpenalty=3000 \widowpenalty=3000
+ \finalhyphendemerits=50000000
+}
+
+\def\inlineextras@friulian{%
+ \lccode\string"2019=\string"2019
+}
+
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-gaelic.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-gaelic.ldf
new file mode 100644
index 00000000000..327ce8526d2
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-gaelic.ldf
@@ -0,0 +1,107 @@
+\ProvidesFile{gloss-gaelic.ldf}[polyglossia: module for gaelic]
+
+\PolyglossiaSetup{gaelic}{
+ language=Irish,
+ babelname=irish,
+ hyphennames={irish},
+ hyphenmins={2,2},
+ langtag=IRI,
+ fontsetup=true,
+}
+
+\def\gaelic@variant{irish}
+\define@choicekey*+{gaelic}{variant}[\val\nr]{irish,scottish}[irish]{%
+ \ifcase\nr\relax
+ % irish:
+ \gdef\gaelic@variant{irish}%
+ \SetLanguageKeys{gaelic}{language=Irish,langtag=IRI,babelname=irish}%
+ \xpg@fontsetup@latin{gaelic}%
+ \or
+ % scottish:
+ \gdef\gaelic@variant{scottish}%
+ \SetLanguageKeys{gaelic}{language=Gaelic,langtag=GAE,babelname=scottish}%
+ \xpg@fontsetup@latin{gaelic}%
+ \fi
+ \xpg@info{Option: gaelic, variant=\val}%
+}{\xpg@warning{Unknown gaelic variant `#1'}}
+
+\def\captionsgaelic@irish{%
+ \def\refname{Tagairtí}%
+ \def\abstractname{Achoimre}%
+ \def\bibname{Leabharliosta}%
+ \def\prefacename{Réamhrá}% <-- also "Brollach"
+ \def\refname{Tagairtí}%
+ \def\chaptername{Tagairtí}%
+ \def\appendixname{Aguisín}%
+ \def\contentsname{Clár Ábhair}%
+ \def\listfigurename{Léaráidí}%
+ \def\listtablename{Táblaí}%
+ \def\indexname{Innéacs}%
+ \def\figurename{Léaráid}%
+ \def\tablename{Tábla}%
+ %\def\thepart{}%
+ \def\partname{Cuid}%
+ \def\pagename{Leathanach}%
+ \def\seename{féach}%
+ \def\alsoname{féach freisin}%
+ \def\enclname{faoi iamh}%
+ \def\ccname{cc}%
+ \def\headtoname{Go}%
+ \def\proofname{Cruthúnas}%
+ \def\glossaryname{Glossary}%
+}
+
+\def\captionsgaelic@scottish{%
+ \def\refname{Iomraidh}%
+ \def\abstractname{Brìgh}%
+ \def\bibname{Leabhraichean}%
+ \def\prefacename{Preface}% <-- needs translation
+ \def\chaptername{Caibideil}%
+ \def\appendixname{Ath-sgr`ıobhadh}%
+ \def\contentsname{Clàr-obrach}%
+ \def\listfigurename{Liosta Dhealbh}%
+ \def\listtablename{Liosta Chlàr}%
+ \def\indexname{Clàr-innse}%
+ \def\figurename{Dealbh}%
+ \def\tablename{Clàr}%
+ %\def\thepart{}%
+ \def\partname{Cuid}%
+ \def\pagename{t.d.}%
+ \def\seename{see}% <-- needs translation
+ \def\alsoname{see also}% <-- needs translation
+ \def\enclname{a-staigh}%
+ \def\ccname{lethbhreac gu}%
+ \def\headtoname{gu}%
+ \def\proofname{Proof}% <-- needs translation
+ \def\glossaryname{Glossary}% <-- needs translation
+}
+
+\def\captionsgaelic{%
+ \csname captionsgaelic@\gaelic@variant\endcsname%
+}
+
+\def\dategaelic@irish{%
+ \def\today{%
+ \number\day\space \ifcase\month\or
+ Eanáir\or Feabhra\or Márta\or Aibreán\or
+ Bealtaine\or Meitheamh\or Iúil\or Lúnasa\or
+ Meán Fómhair\or Deireadh Fómhair\or
+ Mí na Samhna\or Mí na Nollag\fi
+ \space \number\year}%
+}
+
+\def\dategaelic@scottish{%
+ \def\today{%
+ \number\day\space \ifcase\month\or
+ am Faoilteach\or an Gearran\or am Màrt\or an Giblean\or
+ an Cèitean\or an t-Òg mhios\or an t-Iuchar\or
+ Lùnasdal\or an Sultuine\or an Dàmhar\or
+ an t-Samhainn\or an Dubhlachd\fi
+ \space \number\year}%
+}
+
+\def\dategaelic{%
+ \csname dategaelic@\gaelic@variant\endcsname%
+}
+
+\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-galician.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-galician.ldf
index 76459f275cd..be4853ebbef 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-galician.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-galician.ldf
@@ -2,6 +2,7 @@
\PolyglossiaSetup{galician}{
hyphennames={galician},
hyphenmins={2,2},
+ langtag=GAL,
indentfirst=true,
fontsetup=true,
}
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-german.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-german.ldf
index 8cbdeac2157..bf4a690060e 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-german.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-german.ldf
@@ -3,63 +3,86 @@
hyphenmins={2,2},
frenchspacing=true,
fontsetup=true,
+ langtag=DEU,
+ babelname=ngerman
}
-\def\tmp@old{old}
-\def\tmp@oldyr{1901}
\newif\if@german@oldspelling
\@german@oldspellingfalse
-\define@key{german}{spelling}[new]{%
- \def\@tmpa{#1}%
- \ifx\@tmpa\tmp@oldyr\def\@tmpa{old}\fi
- \ifx\@tmpa\tmp@old
- \xpg@ifdefined{german}{}{%
- \xpg@nopatterns{german}%
- \adddialect\l@german\l@nohyphenation
- }
- \@german@oldspellingtrue
- \else % try ngerman
- \xpg@ifdefined{ngerman}{%
+\define@choicekey*+{german}{spelling}[\val\nr]{new,old,1901}[new]{%
+ \ifcase\nr\relax
+ % new:
\@german@oldspellingfalse
- }{% fall back to german
- \xpg@ifdefined{german}{%
- \xpg@warning{You asked for `ngerman' but only `german' hyphenation is available!}%
- \@german@oldspellingtrue
- }{%
- \xpg@nopatterns{ngerman}%
- \adddialect\l@ngerman\l@nohyphenation
- }%
- }%
- \fi
-}
+ \or
+ % old:
+ \@german@oldspellingtrue
+ \or
+ % 1901:
+ \@german@oldspellingtrue
+ \fi
+ \german@set@babelname%
+ \xpg@info{Option: German, spelling=\val}%
+}{\xpg@warning{Unknown German spelling `#1'}}
\newif\if@austrian@locale
\@austrian@localefalse
\newif\if@swiss@locale
\@swiss@localefalse
-\def\tmp@austrian{austrian}
-\def\tmp@swiss{swiss}
-\define@key{german}{variant}[german]{%
- \def\@tmpa{#1}%
- \ifx\@tmpa\tmp@austrian\@austrian@localetrue\else
- \@austrian@localefalse%
- \fi
- \ifx\@tmpa\tmp@swiss\@swiss@localetrue
- \xpg@ifdefined{swissgerman}{}%
- {\xpg@warning{No hyphenation patterns were loaded for "Swiss German (Old Spelling)"\MessageBreak
- I will use the standard patterns for German (old spelling) instead}%
- \adddialect\l@swissgerman\l@german\relax}%
- \else
- \@swiss@localefalse%
- \fi}
+\define@choicekey*+{german}{variant}[\val\nr]{german,austrian,swiss}[german]{%
+ \ifcase\nr\relax
+ % german:
+ \@swiss@localefalse%
+ \@austrian@localefalse%
+ \or
+ % austrian:
+ \@austrian@localetrue%
+ \@swiss@localefalse%
+ \or
+ % swiss:
+ \@swiss@localetrue%
+ \@austrian@localefalse%
+ \xpg@ifdefined{swissgerman}{}%
+ {%
+ \xpg@warning{No hyphenation patterns were loaded for "Swiss German (Old Spelling)"\MessageBreak
+ I will use the standard patterns for German (old spelling) instead}%
+ \adddialect\l@swissgerman\l@german\relax%
+ }%
+ \fi
+ \german@set@babelname%
+ \xpg@info{Option: German, variant=\val}%
+}{\xpg@warning{Unknown German variant `#1'}}
+
+\def\german@set@babelname{%
+ \if@german@oldspelling
+ \if@swiss@locale
+ \SetLanguageKeys{german}{babelname=swissgerman}%
+ \else
+ \if@austrian@locale
+ \SetLanguageKeys{german}{babelname=austrian}%
+ \else
+ \SetLanguageKeys{german}{babelname=german}%
+ \fi\fi
+ \else
+ \if@swiss@locale
+ \SetLanguageKeys{german}{babelname=nswissgerman}%
+ \fi
+ \if@austrian@locale
+ \SetLanguageKeys{german}{babelname=naustrian}%
+ \fi
+ \fi
+}
\newif\if@german@fraktur
-\def\tmp@fraktur{fraktur}
-\define@key{german}{script}[latin]{%
- \def\@tmpa{#1}%
- \ifx\@tmpa\tmp@fraktur\@german@frakturtrue\else
- \@german@frakturfalse%
- \fi}
+\define@choicekey*+{german}{script}[\val\nr]{latin,fraktur}[latin]{%
+ \ifcase\nr\relax
+ % latin:
+ \@german@frakturfalse%
+ \or
+ % fraktur:
+ \@german@frakturtrue%
+ \fi
+ \xpg@info{Option: German, script=\val}%
+}{\xpg@warning{Unknown German script `#1'}}
\define@boolkey{german}[german@]{latesthyphen}[false]{}
@@ -74,8 +97,9 @@
\fi
\ifcsundef{initiate@active@char}{%
-\input{babelsh.def}%
-\initiate@active@char{"}%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
}{}
\def\german@shorthands{%
@@ -190,43 +214,28 @@
\if@german@fraktur\date@german@fraktur\else\date@german\fi
}
-\def\german@language{\ifxetex\language=%
- \csname l@%
- \if@swiss@locale
- \if@german@oldspelling
- swissgerman%
- \else
- ngerman%
- \ifgerman@latesthyphen
- -x-latest
- \fi
- \fi
- \else% (german, austrian)
- \if@german@oldspelling\else n\fi german\ifgerman@latesthyphen -x-latest\fi
- \fi
- \endcsname\else\ifluatex
- % LuaTeX
+\def\german@language{%
\ifgerman@latesthyphen
\if@german@oldspelling
\if@swiss@locale
- \xpg@set@language@luatex@iv{swissgerman}%
+ \polyglossia@setup@language@patterns{swissgerman}%
\else
- \xpg@set@language@luatex@iv{german-x-latest}%
+ \polyglossia@setup@language@patterns{german-x-latest}%
\fi
\else
- \xpg@set@language@luatex@iv{ngerman-x-latest}%
+ \polyglossia@setup@language@patterns{ngerman-x-latest}%
\fi
\else% (latesthyphen=false)
\if@german@oldspelling
\if@swiss@locale
- \xpg@set@language@luatex@iv{swissgerman}%
+ \polyglossia@setup@language@patterns{swissgerman}%
\else
- \xpg@set@language@luatex@iv{german}%
+ \polyglossia@setup@language@patterns{german}%
\fi
\else
- \xpg@set@language@luatex@iv{ngerman}%
+ \polyglossia@setup@language@patterns{ngerman}%
\fi
- \fi\fi\fi
+ \fi
}
\def\noextras@german{%
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-greek.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-greek.ldf
index 229688ef5bc..ecef64d772a 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-greek.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-greek.ldf
@@ -2,9 +2,12 @@
\PolyglossiaSetup{greek}{
script=Greek,
scripttag=grek,
+ langtag=ELL,
frenchspacing=true,
indentfirst=true,
fontsetup=true,
+ localnumeral=greeknumerals,
+ Localnumeral=Greeknumerals
%TODO localalph={greek@alph,greek@Alph}
}
@@ -16,31 +19,6 @@
% this file imported from xgreek fixes the \lccode and \uccode of Greek letters:
\input{xgreek-fixes.def}
-%TODO: set these in \define@key instead:
-\ifx\l@greek\@undefined
- \ifx\l@polygreek\@undefined
- \xpg@nopatterns{Greek}%
- \adddialect\l@greek\l@nohyphenation
- \else
- \let\l@greek\l@polygreek
- \fi
-\fi
-\ifx\l@monogreek\@undefined
- \xpg@warning{No hyphenation patterns were loaded for Monotonic Greek\MessageBreak
- I will use the patterns loaded for \string\l@greek instead}
- \adddialect\l@monogreek\l@greek
-\fi
-\ifx\l@ancientgreek\@undefined
- \xpg@warning{No hyphenation patterns were loaded for Ancient Greek\MessageBreak
- I will use the patterns loaded for \string\l@greek instead}
- \adddialect\l@ancientgreek\l@greek
-\fi
-
-%set monotonic as default
-\def\greek@variant{\l@monogreek}% monotonic
-\def\captionsgreek{\monogreekcaptions}%
-\def\dategreek{\datemonogreek}%
-
\def\tmp@mono{mono}
\def\tmp@monotonic{monotonic}
\def\tmp@poly{poly}
@@ -48,39 +26,62 @@
\def\tmp@ancient{ancient}
\def\tmp@ancientgreek{ancientgreek}
+\def\greek@variant{monogreek}
+
\define@key{greek}{variant}[monotonic]{%
\def\@tmpa{#1}%
+ \xpg@ifdefined{greek}{}{%
+ \xpg@nopatterns{greek}%
+ \adddialect\l@greek\l@nohyphenation
+ }
\ifx\@tmpa\tmp@poly\def\@tmpa{polytonic}\fi
\ifx\@tmpa\tmp@ancientgreek\def\@tmpa{ancient}\fi
\ifx\@tmpa\tmp@polytonic%
- \def\greek@variant{\l@polygreek}%
+ \xpg@ifdefined{polygreek}{}%
+ {\xpg@warning{No hyphenation patterns were loaded for Polytonic Greek\MessageBreak
+ I will use the patterns loaded for \string\l@greek\space instead}%
+ \adddialect\l@polygreek\l@greek\relax}%
+ \def\greek@variant{polygreek}%
\def\captionsgreek{\polygreekcaptions}%
\def\dategreek{\datepolygreek}%
+ \SetLanguageKeys{greek}{babelname=polutonikogreek}%
\xpg@info{Option: Polytonic Greek}%
\else
\ifx\@tmpa\tmp@ancient
- \def\greek@variant{\l@ancientgreek}%
+ \xpg@ifdefined{ancientgreek}{}%
+ {\xpg@warning{No hyphenation patterns were loaded for Ancient Greek\MessageBreak
+ I will use the patterns loaded for \string\l@greek\space instead}%
+ \adddialect\l@ancientgreek\l@greek\relax}%
+ \def\greek@variant{ancientgreek}%
\def\captionsgreek{\ancientgreekcaptions}%
\def\dategreek{\dateancientgreek}%
\xpg@info{Option: Ancient Greek}%
\else %monotonic
- \def\greek@variant{\l@monogreek}% monotonic
+ \xpg@ifdefined{monogreek}{}%
+ {\xpg@warning{No hyphenation patterns were loaded for Monotonic Greek\MessageBreak
+ I will use the patterns loaded for \string\l@greek\space instead}%
+ \adddialect\l@monogreek\l@greek\relax}%
+ \def\greek@variant{monogreek}% monotonic
\def\captionsgreek{\monogreekcaptions}%
\def\dategreek{\datemonogreek}%
\xpg@info{Option: Monotonic Greek}%
\fi
\fi}
-\def\greek@language{\language=\greek@variant}
+\def\greek@language{%
+ \polyglossia@setup@language@patterns{\greek@variant}
+}
+
\newif\if@greek@numerals
\define@key{greek}{numerals}[greek]{%
-\ifstrequal{#1}{arabic}{\@greek@numeralsfalse}{\@greek@numeralstrue}}
+ \ifstrequal{#1}{arabic}{\@greek@numeralsfalse}{\@greek@numeralstrue}%
+}
\define@boolkey{greek}{attic}[true]{\xpg@warning{Greek option `attic' is no longer required.}}
% This sets the defaults
-\setkeys{greek}{numerals}
+\setkeys{greek}{numerals,variant}
\def\monogreekcaptions{%
\def\refname{Αναφορές}%
@@ -194,8 +195,8 @@
\def\ccname{Κοινοποίησις}%
\def\headtoname{Πρὸς}%
\def\pagename{Σελὶς}%
- \def\seename{ὃρα}%
- \def\alsoname{ὃρα ὡσαύτως}%
+ \def\seename{ὅρα}%
+ \def\alsoname{ὅρα ὡσαύτως}%
\def\proofname{Ἀπόδειξις}%
\def\glossaryname{Γλωσσάριον}%
\def\refname{Ἀναφοραὶ}%
@@ -228,14 +229,18 @@
Δεκεμβρίου\fi}}
% the code for alphabetic numbers and attic numerals
-% is copied verbatim from xgreek.sty
-\DeclareRobustCommand\anw@false{%
- \DeclareRobustCommand\anw@print{}}
-\DeclareRobustCommand\anw@true{%
- \DeclareRobustCommand\anw@print{ʹ}}
+\newrobustcmd\anw@print{}
+\newrobustcmd\anw@false{%
+ \renewrobustcmd\anw@print{}}
+\newrobustcmd\anw@true{%
+ \renewrobustcmd\anw@print{ʹ}}
\anw@true
-\def\greeknumber#1{%
+\newcommand{\greeknumerals}[2]{\greeknumber{#2}}
+\newcommand{\Greeknumerals}[2]{\Greeknumber{#2}}
+
+\protected\def\greeknumber#1{\expandafter\@greeknumber\expandafter{\number#1}}
+\def\@greeknumber#1{%
\ifnum#1<\@ne\space\gr@ill@value{#1}%
\else
\ifnum#1<10\expandafter\gr@num@i\number#1%
@@ -259,8 +264,31 @@
\fi
\fi
}
-\def\Greeknumber#1{%
- \expandafter\MakeUppercase\expandafter{\greeknumber{#1}}}
+\protected\def\Greeknumber#1{\expandafter\@Greeknumber\expandafter{\number#1}}
+\def\@Greeknumber#1{%
+ \ifnum#1<\@ne\space\gr@ill@value{#1}%
+ \else
+ \ifnum#1<10\expandafter\gr@Num@i\number#1%
+ \else
+ \ifnum#1<100\expandafter\gr@Num@ii\number#1%
+ \else
+ \ifnum#1<\@m\expandafter\gr@Num@iii\number#1%
+ \else
+ \ifnum#1<\@M\expandafter\gr@Num@iv\number#1%
+ \else
+ \ifnum#1<100000\expandafter\gr@Num@v\number#1%
+ \else
+ \ifnum#1<1000000\expandafter\gr@Num@vi\number#1%
+ \else
+ \space\gr@ill@value{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
\let\greeknumeral=\greeknumber
\let\Greeknumeral=\Greeknumber
\def\gr@num@i#1{%
@@ -283,6 +311,27 @@
\def\gr@num@vi#1{%
͵\ifcase#1\or ρ\or σ\or τ\or υ\or φ\or χ\or ψ\or ω\or ϡ\fi
\gr@num@v}
+\def\gr@Num@i#1{%
+ \ifcase#1 \or Α\or Β\or Γ\or Δ\or Ε\or \MakeUppercase{Ϛ}\or Ζ\or Η\or θ\fi
+ \ifnum#1=\z@\else\anw@true\fi\anw@print}
+\def\gr@Num@ii#1{%
+ \ifcase#1 \or Ι\or Κ\or Λ\or Μ\or Ν\or Ξ\or Ο\or Π\or \MakeUppercase{ϟ}\fi
+ \ifnum#1=\z@\else\anw@true\fi\gr@Num@i}
+\def\gr@Num@iii#1{%
+ \ifcase#1 \or Ρ\or Σ\or Τ\or Υ\or Φ\or Χ\or Ψ\or Ω\or \MakeUppercase{ϡ}\fi
+ \ifnum#1=\z@\anw@false\else\anw@true\fi\gr@Num@ii}
+\def\gr@Num@iv#1{%
+ \ifnum#1=\z@\else ͵\fi
+ \ifcase#1 \or Α\or Β\or Γ\or Δ\or Ε\or \MakeUppercase{Ϛ}\or Ζ\or Η\or θ\fi
+ \gr@Num@iii}
+\def\gr@Num@v#1{%
+ \ifnum#1=\z@\else ͵\fi
+ \ifcase#1 \or Ι\or Κ\or Λ\or Μ\or Ν\or Ξ\or Ο\or Π\or \MakeUppercase{ϟ}\fi
+\gr@Num@iv}
+ \def\gr@Num@vi#1{%
+͵ \ifcase#1 \or Ρ\or Σ\or Τ\or Υ\or Φ\or Χ\or Ψ\or Ω\or \MakeUppercase{ϡ}\fi
+ \gr@Num@v}
+\def\gr@ill@value#1{\xpg@warning{Illegal value (#1) for Greek numeral}[$#1$]}
%%%% Attic numerals (no longer optional)
\newcount\@attic@num
@@ -326,11 +375,9 @@
\let\atticnum=\atticnumeral
\def\greek@numbers{%
- \let\latin@alph\@alph%
- \let\latin@Alph\@Alph%
\if@greek@numerals
- \def\greek@alph##1{\protect\greeknumber{##1}}%
- \def\greek@Alph##1{\protect\Greeknumber{##1}}%
+ \def\greek@alph##1{\expandafter\greeknumeral\expandafter{\the##1}}%
+ \def\greek@Alph##1{\expandafter\Greeknumeral\expandafter{\the##1}}%
\let\@alph\greek@alph%
\let\@Alph\greek@Alph%
\fi}
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-hebrew.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-hebrew.ldf
index cb6ed7ef2b6..1f366a0f551 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-hebrew.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-hebrew.ldf
@@ -8,14 +8,14 @@ and may look very wrong.}
\RequireBidi
\RequirePackage{hebrewcal}
-\providebool{@hebrew@marcheshvan}
-
\PolyglossiaSetup{hebrew}{
script=Hebrew,
direction=RL,
scripttag=hebr,
+ langtag=IWR,
hyphennames={nohyphenation},
fontsetup=true,
+ localnumeral=hebrewnumerals
%TODO localalph={hebrewnumeral,Hebrewnumeral}
%digits = hebrewnumber
}
@@ -31,16 +31,10 @@ and may look very wrong.}
\@calendar@hebrewfalse%
\fi}
-\define@boolkey{hebrew}[@xpg@hebrew@]{marcheshvan}[false]{%
- \def\@tmpa{#1}%
- \def\@tmptrue{true}%
- \ifx\@tmpa\@tmptrue
- \@xpg@hebrew@marcheshvantrue
- \else
- \@xpg@hebrew@marcheshvanfalse
- \fi}
+\newif\if@xpg@hebrew@marcheshvan
+\@xpg@hebrew@marcheshvanfalse
-\setkeys{hebrew}{marcheshvan}
+\define@boolkey{hebrew}[@xpg@hebrew@]{marcheshvan}[true]{}
% hebrewcal.sty also defines the boolean key fullyear (default=false)
@@ -100,41 +94,48 @@ and may look very wrong.}
\input{babel-hebrewalph.def}
+\newcommand{\hebrewnumerals}[2]{\hebrewnumber{#2}}
+
\def\hebrewnumber#1{%
\if@hebrew@numerals
- \protect\hebrewnumeral{#1}%
+ \hebrewnumeral{#1}%
\else
\number#1%
\fi
}
\def\hebrew@numbers{%
- \let\@origalph\@alph%
- \let\@origAlph\@Alph%
\let\@alph\hebrewnumeral%
\let\@Alph\Hebrewnumeral%
}
+
\def\nohebrew@numbers{%
- \let\@alph\@origalph%
- \let\@Alph\@origAlph%
+ \let\@alph\latin@alph%
+ \let\@Alph\latin@Alph%
}
\def\hebrew@globalnumbers{%
- \let\orig@arabic\@arabic%
\let\@arabic\hebrewnumber%
- \renewcommand\thefootnote{\protect\hebrewnumber{\c@footnote}}%
+ \renewcommand\thefootnote{\localnumeral*{footnote}}%
}
+
+% Store original definition
+\let\xpg@save@arabic\@arabic
+
\def\nohebrew@globalnumbers{%
- \let\@arabic\orig@arabic%
- \renewcommand\thefootnote{\protect\number{\c@footnote}}%
+ \let\@arabic\xpg@save@arabic%
}
+% Save original \MakeUppercase definition
+\let\xpg@save@MakeUppercase\MakeUppercase
+
\def\blockextras@hebrew{%
- \let\@@MakeUppercase\MakeUppercase%
\def\MakeUppercase##1{##1}%
- }
+}
+
\def\noextras@hebrew{%
- \let\MakeUppercase\@@MakeUppercase%
- }
+ % restore original \MakeUppercase definition
+ \let\MakeUppercase\xpg@save@MakeUppercase%
+}
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-hindi.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-hindi.ldf
index 075d5312811..56ca28f404e 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-hindi.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-hindi.ldf
@@ -1,24 +1,18 @@
-% UTF-8 strings kindly provided by Zdenek Wagner, 10-03-2008
+% UTF-8 strings kindly provided by Zdenĕk Wagner, 10-03-2008
% with corrections and additional contributions by Anshuman Pandey
% TODO: add option for velthuis transliteration with link to
% Velthuis Devanagari project.
\ProvidesFile{gloss-hindi.ldf}[polyglossia: module for hindi]
-\ifluatex
- \xpg@warning{Hindi is not supported with LuaTeX.\MessageBreak
-I will proceed with the compilation, but\MessageBreak
-the output is not guaranteed to be correct\MessageBreak
-and may look very wrong.}
-\fi
\RequirePackage{devanagaridigits}
\PolyglossiaSetup{hindi}{
script=Devanagari,
scripttag=deva,
langtag=HIN,
%% hyphennames={hindi,!sanskrit}, TODO: implement fallback patterns (with ! prefix)
- fontsetup=true
+ fontsetup=true,
+ localnumeral=hindinumerals
%TODO nouppercase=true,
- %TODO localnumber=hindinumber
}
\ifx\l@hindi\@undefined%
@@ -32,7 +26,9 @@ and may look very wrong.}
\fi
\fi
-\def\hindi@language{\language=\l@hindi}
+\def\hindi@language{%
+ \polyglossia@setup@language@patterns{hindi}%
+}
\def\tmp@western{Western}
\newif\ifhindi@devanagari@numerals
@@ -44,6 +40,8 @@ and may look very wrong.}
\hindi@devanagari@numeralsfalse
\fi}
+\newcommand{\hindinumerals}[2]{\hindinumber{#2}}
+
\def\hindinumber#1{%
\ifhindi@devanagari@numerals
\devanagaridigits{\number#1}%
@@ -54,13 +52,13 @@ and may look very wrong.}
\def\captionshindi{%
\def\abstractname{सारांश}%
\def\appendixname{परिशिष्ट}%
- \def\bibname{संदर्भ ग्रन्थ}%
+ \def\bibname{संदर्भ ग्रंथ}%
\def\ccname{}%
\def\chaptername{अध्याय}%
\def\contentsname{विषय सूची}%
\def\enclname{}%
\def\figurename{चित्र}% रेखाचित्र
- \def\headpagename{पृषठ}%
+ \def\headpagename{पृष्ठ}%
\def\headtoname{}%
\def\indexname{सूची}%
% सूचक
@@ -68,7 +66,7 @@ and may look very wrong.}
% अनुक्रमणि
\def\listfigurename{चित्रों की सूची}%
\def\listtablename{तालिकाओं की सूची}%
- \def\pagename{पृषठ}%
+ \def\pagename{पृष्ठ}%
\def\partname{खणड}%
\def\prefacename{प्रस्तावना}% प्राक्कथन
\def\refname{हवाले}%
@@ -94,12 +92,16 @@ and may look very wrong.}
\space\hindinumber\year}%
}
+% Save original \MakeUppercase definition
+\let\xpg@save@MakeUppercase\MakeUppercase
+
\def\blockextras@hindi{%
- \let\@@MakeUppercase\MakeUppercase%
\def\MakeUppercase##1{##1}%
}
+
\def\noextras@hindi{%
- \let\MakeUppercase\@@MakeUppercase%
+ % restore original \MakeUppercase definition
+ \let\MakeUppercase\xpg@save@MakeUppercase%
}
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-hungarian.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-hungarian.ldf
new file mode 100644
index 00000000000..5c990cef896
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-hungarian.ldf
@@ -0,0 +1,81 @@
+\ProvidesFile{gloss-hungarian.ldf}[polyglossia: module for hungarian]
+
+\PolyglossiaSetup{hungarian}{
+ babelname=magyar,
+ hyphennames={magyar,hungarian},
+ langtag=HUN,
+ hyphenmins={2,2},
+ fontsetup=true,
+}
+
+\frenchspacing
+
+\def\captionshungarian{%
+ \def\refname{Hivatkozások}%
+ \def\abstractname{Kivonat}%
+ \def\bibname{Irodalomjegyzék}%
+ \def\prefacename{Előszó}%
+ \def\chaptername{fejezet}%
+ \def\appendixname{Függelék}%
+ \def\contentsname{Tartalomjegyzék}%
+ \def\listfigurename{Ábrák jegyzéke}%
+ \def\listtablename{Táblázatok jegyzéke}%
+ \def\indexname{Tárgymutató}%
+ \def\figurename{ábra}%
+ \def\tablename{táblázat}%
+ %\def\thepart{}%
+ \def\partname{rész}%
+ \def\pagename{oldal}%
+ \def\seename{lásd}%
+ \def\alsoname{lásd még}%
+ \def\enclname{Melléklet}%
+ \def\ccname{Körlevél–címzettek}%
+ \def\headtoname{Címzett}%
+ \def\proofname{Bizonyítás}%
+ \def\glossaryname{Szójegyzék}%
+}
+
+\def\datehungarian{%
+ \def\today{%
+ \number\year.\nobreakspace\ifcase\month\or
+ január\or február\or március\or
+ április\or május\or június\or
+ július\or augusztus\or szeptember\or
+ október\or november\or december\fi
+ \space\number\day.}%
+ \def\ondatehungarian{%
+ \number\year.\nobreakspace\ifcase\month\or
+ január\or február\or március\or
+ április\or május\or június\or
+ július\or augusztus\or szeptember\or
+ október\or november\or december\fi
+ \space\ifcase\day\or
+ 1-jén\or 2-án\or 3-án\or 4-én\or 5-én\or
+ 6-án\or 7-én\or 8-án\or 9-én\or 10-én\or
+ 11-én\or 12-én\or 13-án\or 14-én\or 15-én\or
+ 16-án\or 17-én\or 18-án\or 19-én\or 20-án\or
+ 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}
+
+% change 'táblázat x.x' to 'x.x. táblázat'
+\def\xpg@hungarian@fnum@table{\thetable.~\tablename}
+\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\blockextras@hungarian{%
+ \let\fnum@table\xpg@hungarian@fnum@table
+ \let\fnum@figure\xpg@hungarian@fnum@figure
+}
+
+\def\noextras@hungarian{%
+ \let\fnum@table\xpg@save@fnum@table
+ \let\fnum@figure\xpg@save@fnum@figure
+ \let\ontoday\@undefined
+}
+
+\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-icelandic.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-icelandic.ldf
index 2678b4f6129..1520d58472a 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-icelandic.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-icelandic.ldf
@@ -2,6 +2,7 @@
\PolyglossiaSetup{icelandic}{
hyphennames={icelandic},
hyphenmins={2,2},
+ langtag=ISL,
fontsetup=true,
}
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-interlingua.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-interlingua.ldf
index 9e4ca395d6a..4708cf0320b 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-interlingua.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-interlingua.ldf
@@ -2,6 +2,7 @@
\PolyglossiaSetup{interlingua}{
hyphennames={interlingua},
hyphenmins={2,2},
+ langtag=INA,
frenchspacing=true,
indentfirst=true,
fontsetup=true,
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-irish.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-irish.ldf
index 23b0b567c30..aa27c3d3455 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-irish.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-irish.ldf
@@ -1,42 +1,18 @@
\ProvidesFile{gloss-irish.ldf}[polyglossia: module for irish]
+
+% 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,
}
-\def\captionsirish{%
- \def\refname{Tagairtí}%
- \def\abstractname{Achoimre}%
- \def\bibname{Leabharliosta}%
- \def\prefacename{Réamhrá}% <-- also "Brollach"
- \def\refname{Tagairtí}%
- \def\chaptername{Tagairtí}%
- \def\appendixname{Aguisín}%
- \def\contentsname{Clár Ábhair}%
- \def\listfigurename{Léaráidí}%
- \def\listtablename{Táblaí}%
- \def\indexname{Innéacs}%
- \def\figurename{Léaráid}%
- \def\tablename{Tábla}%
- %\def\thepart{}%
- \def\partname{Cuid}%
- \def\pagename{Leathanach}%
- \def\seename{féach}%
- \def\alsoname{féach freisin}%
- \def\enclname{faoi iamh}%
- \def\ccname{cc}%
- \def\headtoname{Go}%
- \def\proofname{Cruthúnas}%
- \def\glossaryname{Glossary}%
- }
-\def\dateirish{%
- \def\today{%
- \number\day\space \ifcase\month\or
- Eanáir\or Feabhra\or Márta\or Aibreán\or
- Bealtaine\or Meitheamh\or Iúil\or Lúnasa\or
- Meán Fómhair\or Deireadh Fómhair\or
- Mí na Samhna\or Mí na Nollag\fi
- \space \number\year}}
+\let\captionsirish\captionsgaelic@irish
+\let\dateirish\dategaelic@irish
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-italian.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-italian.ldf
index 78e2d590488..3d7b02d8951 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-italian.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-italian.ldf
@@ -3,6 +3,7 @@
\PolyglossiaSetup{italian}{
hyphennames={italian},
hyphenmins={2,2},
+ langtag=ITA,
frenchspacing=true,
indentfirst=true,
fontsetup=true,
@@ -19,8 +20,9 @@
\fi
\ifcsundef{initiate@active@char}{%
-\input{babelsh.def}%
-\initiate@active@char{"}%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
}{}
\def\italian@shorthands{%
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-kannada.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-kannada.ldf
index 6362de74d99..0525d6289fd 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-kannada.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-kannada.ldf
@@ -26,10 +26,11 @@ and may look very wrong.}
\PolyglossiaSetup{kannada}{
script=Kannada,
scripttag=knda,
- langtag=KNDA,
+ langtag=KAN,
hyphennames={kannada},
hyphenmins={2,2},
- fontsetup=true
+ fontsetup=true,
+ localnumeral=kannadanumerals
}
%% Defining Kannada digits equivalents to english
@@ -97,7 +98,9 @@ and may look very wrong.}
\def\today{\kannadanumber\day\space\kannadamonth\space\kannadanumber\year}%
}
-%% Based on the settings displays rrespective numbers
+\newcommand{\kannadanumerals}[2]{\kannadanumber{#2}}
+
+%% Based on the settings displays respective numbers
\def\kannadanumber#1{%
\ifkannada@numerals
\kannadadigits{\number#1}%
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-khmer.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-khmer.ldf
index bb57f178a01..00c569c06b1 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-khmer.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-khmer.ldf
@@ -4,7 +4,8 @@
scripttag=khmr,%
langtag=KHM,%
hyphennames={nohyphenation},%
- fontsetup=true%
+ fontsetup=true,%
+ localnumeral=khmernumerals%
}
\newif\if@khmer@numerals
\def\tmp@khmer{khmer}
@@ -71,6 +72,9 @@
\expandafter\@khmer@digits%
\fi
}
+
+\newcommand{\khmernumerals}[2]{\khmernumber{#2}}
+
\def\khmernumber#1{%
\if@khmer@numerals%
\khmerdigits{\number#1}%
@@ -80,11 +84,10 @@
\def\khmer@globalnumbers{%
\let\orig@arabic\@arabic%
\let\@arabic\khmernumber%
- \renewcommand{\thefootnote}{\protect\khmernumber{\c@footnote}}%
+ \renewcommand{\thefootnote}{\localnumeral*{footnote}}%
}
\def\nokhmer@globalnumbers{%
\let\@arabic\orig@arabic%
- \renewcommand\thefootnote{\protect\number{\c@footnote}}%
}
\def\thepart{\arabic{part}}
\def\@khmeralph#1{%
@@ -107,16 +110,14 @@
\or យ\or រ\or ល\or វ\or ស\or ហ\or ឡ\or អ%
\else\xpg@ill@value{#1}{@khmeralph}\fi}
\def\khmer@numbers{%
- \let\@latinalph\@alph%
- \let\@latinAlph\@Alph%
\if@khmer@numerals
\let\@alph\@khmeralph%
\let\@Alph\@khmerAlph%
\fi%
}
\def\nokhmer@numbers{%
- \let\@alph\@latinalph%
- \let\@Alph\@latinAlph%
+ \let\@alph\latin@alph%
+ \let\@Alph\latin@Alph%
}
\def\blockextras@khmer{%
\XeTeXlinebreaklocale "kh" %
@@ -152,6 +153,6 @@
\deftranslation[to=khmer]{Examples}{\examplename}%
\AtEndDocument{\immediate\write\@auxout{\string\@writefile{nav}%
{\noexpand\headcommand{\noexpand\def\noexpand%
- \inserttotalframenumber{\khmernumber{\the\c@framenumber}}}}}}%
+ \inserttotalframenumber{\localnumeral*{framenumber}}}}}}%
}{}
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-korean.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-korean.ldf
index 13a4807c5d4..5aefe04dfa3 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-korean.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-korean.ldf
@@ -5,8 +5,7 @@
scripttag=hang,
language=Korean,
langtag=KOR,
- hyphennames={english,USenglish},
- hyphenmins={2,3},
+ hyphennames={nohyphenation},
frenchspacing=true,
fontsetup=true
}
@@ -27,8 +26,8 @@
\else
\captions@korean@hanja
\fi
- \def\seename{$rightarrow$}%
- \def\alsoname{$Rightarrow$}%
+ \def\seename{$\rightarrow$}%
+ \def\alsoname{$\Rightarrow$}%
}
\def\captions@korean@hangul{%
\def\koreanTHEname{제}%
@@ -94,14 +93,12 @@
}
\def\korean@numbers{%
- \let\@orig@alph\@alph
- \let\@orig@Alph\@Alph
\let\@alph\@koreanalph
\let\@Alph\@koreanAlph
}
\def\nokorean@numbers{%
- \let\@alph\@orig@alph
- \let\@Alph\@orig@Alph
+ \let\@alph\latin@alph
+ \let\@Alph\latin@Alph
}
\let\nokorean@globalnumbers\nokorean@numbers
@@ -135,7 +132,7 @@
\XeTeXinterchartokenstate\z@
\XeTeXlinebreakpenalty\z@
\XeTeXlinebreakskip\z@skip
- \XeTeXlinebreaklocale ""
+ \XeTeXlinebreaklocale "en"
\noextras@korean@common
}
\else % luatex
@@ -155,26 +152,44 @@
\def\@chapapp##1##2{\koreanTHEname ##1##2##1\chaptername}%
\fi
\fi
- \ifdefined\baselinestretch
- \let\xpg@orig@linestretch\baselinestretch
- \def\baselinestretch{1.3888}\selectfont
- \fi
- \ifdefined\footnotesep
- \edef\xpg@orig@footnotesep{\noexpand\footnotesep=\the\footnotesep\relax}%
- \footnotesep=1.3888\footnotesep
- \fi
}
\def\noextras@korean@common{%
- \ifdefined\xpg@orig@footnotesep \xpg@orig@footnotesep \fi
- \ifdefined\xpg@orig@linestretch \let\baselinestretch\xpg@orig@linestretch \fi
- \ifdefined\xpg@orig@@chapapp \let\@chapapp\xpg@orig@@chapapp \fi
+ \ifdefined\xpg@orig@@chapapp \let\@chapapp\xpg@orig@@chapapp \fi
}
-\ifxetex % XeTeX
+\ifluatex % luatex
+\protected\def\inhibitglue{\hskip\z@skip}
+\ifdefined\newattribute\else
+ \let\newattribute\newluatexattribute
+ \let\unsetattribute\unsetluatexattribute
+\fi
+\newattribute\xpg@attr@korean
+\newattribute\xpg@attr@autojosa
% user commands for Josa
% Josa : particles in Korean grammar that immediately follow a noun or pronoun.
% Josa might vary depending on previous character.
+\protected\def\rieul{\global\let\xpg@josa@zwang\@ne}
+\protected\def\jung {\global\let\xpg@josa@zwang\tw@}
+\protected\def\jong {\global\let\xpg@josa@zwang\thr@@}
+\protected\def\은{\begingroup\xpg@attr@autojosa\xpg@josa@zwang 은\endgroup\xpg@reset@josa}
+\let\는\은
+\protected\def\을{\begingroup\xpg@attr@autojosa\xpg@josa@zwang 을\endgroup\xpg@reset@josa}
+\let\를\을
+\protected\def\와{\begingroup\xpg@attr@autojosa\xpg@josa@zwang 와\endgroup\xpg@reset@josa}
+\let\과\와
+\protected\def\가{\begingroup\xpg@attr@autojosa\xpg@josa@zwang 가\endgroup\xpg@reset@josa}
+\protected\def\이{\begingroup\xpg@attr@autojosa\xpg@josa@zwang 이\endgroup\xpg@reset@josa}
+\protected\def\라{\이 라}
+\protected\def\으{\begingroup\xpg@attr@autojosa\xpg@josa@zwang 으\endgroup\xpg@reset@josa}
+\protected\def\로{\으 로}
+\def\xpg@reset@josa {\global\let\xpg@josa@zwang\z@}\xpg@reset@josa
+% load lua file for korean
+\directlua{ require "polyglossia-korean" }
+\endinput\fi
+
+% XeTeX
+% user commands for Josa
\protected\def\jong {\global\let\XPGKO@let@josa=0}\jong
\protected\def\rieul{\global\let\XPGKO@let@josa=1}
\protected\def\jung {\global\let\XPGKO@let@josa=2}
@@ -581,553 +596,4 @@
\@tmpa "FF01=\XPGKOcharclassEX % ! FULLWIDTH EXCLAMATION MARK
\@tmpa "FF1F=\XPGKOcharclassEX % ? FULLWIDTH QUESTION MARK
-\endinput\fi % end of XeTeX
-
-% luatex
-\protected\def\inhibitglue{\hskip\z@skip}
-\ifdefined\newattribute\else
- \let\newattribute\newluatexattribute
- \let\unsetattribute\unsetluatexattribute
-\fi
-\newattribute\xpg@attr@korean
-\newattribute\xpg@attr@autojosa
-\protected\def\rieul{\global\let\xpg@josa@zwang\@ne}
-\protected\def\jung {\global\let\xpg@josa@zwang\tw@}
-\protected\def\jong {\global\let\xpg@josa@zwang\thr@@}
-\protected\def\은{\begingroup\xpg@attr@autojosa\xpg@josa@zwang 은\endgroup\xpg@reset@josa}
-\let\는\은
-\protected\def\을{\begingroup\xpg@attr@autojosa\xpg@josa@zwang 을\endgroup\xpg@reset@josa}
-\let\를\을
-\protected\def\와{\begingroup\xpg@attr@autojosa\xpg@josa@zwang 와\endgroup\xpg@reset@josa}
-\let\과\와
-\protected\def\가{\begingroup\xpg@attr@autojosa\xpg@josa@zwang 가\endgroup\xpg@reset@josa}
-\protected\def\이{\begingroup\xpg@attr@autojosa\xpg@josa@zwang 이\endgroup\xpg@reset@josa}
-\protected\def\라{\이 라}
-\protected\def\으{\begingroup\xpg@attr@autojosa\xpg@josa@zwang 으\endgroup\xpg@reset@josa}
-\protected\def\로{\으 로}
-\def\xpg@reset@josa {\global\let\xpg@josa@zwang\z@}\xpg@reset@josa
-\directlua{
-local glyph_id = node.id("glyph")
-local hbox_id = node.id("hlist")
-local vbox_id = node.id("vlist")
-local glue_id = node.id("glue")
-local penalty_id = node.id("penalty")
-local disc_id = node.id("disc")
-local attr_korean = luatexbase.attributes["xpg@attr@korean"]
-local attr_josa = luatexbase.attributes["xpg@attr@autojosa"]
-local nobr_after = {
- [0x28] = 1, % ( LEFT PARENTHESIS
- [0x3C] = 1, % < LESS-THAN SIGN
- [0x5B] = 1, % [ LEFT SQUARE BRACKET
- [0x60] = 1, % ` GRAVE ACCENT
- [0x7B] = 1, % { LEFT CURLY BRACKET
- [0xAB] = 1, % « LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
- [0x2018] = 1, % ‘ LEFT SINGLE QUOTATION MARK
- [0x201C] = 1, % “ LEFT DOUBLE QUOTATION MARK
- [0x2329] = 1, % 〈 LEFT-POINTING ANGLE BRACKET
- [0x3008] = 1, % 〈 LEFT ANGLE BRACKET
- [0x300A] = 1, % 《 LEFT DOUBLE ANGLE BRACKET
- [0x300C] = 1, % 「 LEFT CORNER BRACKET
- [0x300E] = 1, % 『 LEFT WHITE CORNER BRACKET
- [0x3010] = 1, % 【 LEFT BLACK LENTICULAR BRACKET
- [0x3014] = 1, % 〔 LEFT TORTOISE SHELL BRACKET
- [0x3016] = 1, % 〖 LEFT WHITE LENTICULAR BRACKET
- [0x3018] = 1, % 〘 LEFT WHITE TORTOISE SHELL BRACKET
- [0x301A] = 1, % 〚 LEFT WHITE SQUARE BRACKET
- [0x301D] = 1, % 〝 REVERSED DOUBLE PRIME QUOTATION MARK
- [0xFE17] = 1, % ︗ PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
- [0xFE35] = 1, % ︵ PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
- [0xFE37] = 1, % ︷ PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
- [0xFE39] = 1, % ︹ PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
- [0xFE3B] = 1, % ︻ PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
- [0xFE3D] = 1, % ︽ PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
- [0xFE3F] = 1, % ︿ PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
- [0xFE41] = 1, % ﹁ PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
- [0xFE43] = 1, % ﹃ PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
- [0xFE47] = 1, % ﹇ PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
- [0xFE59] = 1, % ﹙ SMALL LEFT PARENTHESIS
- [0xFE5B] = 1, % ﹛ SMALL LEFT CURLY BRACKET
- [0xFE5D] = 1, % ﹝ SMALL LEFT TORTOISE SHELL BRACKET
- [0xFF08] = 1, % ( FULLWIDTH LEFT PARENTHESIS
- [0xFF3B] = 1, % [ FULLWIDTH LEFT SQUARE BRACKET
- [0xFF5B] = 1, % { FULLWIDTH LEFT CURLY BRACKET
- [0xFF5F] = 1, % ⦅ FULLWIDTH LEFT WHITE PARENTHESIS
- [0xFF62] = 1, % 「 HALFWIDTH LEFT CORNER BRACKET
-}
-local nobr_before = setmetatable({
- [0x21] = 1, % ! EXCLAMATION MARK
- [0x22] = 1, % " QUOTATION MARK
- [0x27] = 1, % ' APOSTROPHE
- [0x29] = 1, % ) RIGHT PARENTHESIS
- [0x2C] = 1, % , COMMA
- [0x2D] = 0, % - HYPHEN-MINUS
- [0x2E] = 1, % . FULL STOP
- [0x2F] = 0, % / SOLIDUS
- [0x3A] = 0, % : COLON
- [0x3B] = 1, % ; SEMICOLON
- [0x3E] = 1, % > GREATER-THAN SIGN
- [0x3F] = 1, % ? QUESTION MARK
- [0x5C] = 0, % \ REVERSE SOLIDUS
- [0x5D] = 1, % ] RIGHT SQUARE BRACKET
- [0x7D] = 1, % } RIGHT CURLY BRACKET
- [0x7E] = 0, % ~ TILDE
- [0xB7] = 1, % · MIDDLE DOT
- [0xBB] = 1, % » RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
- [0x2013] = 0, % – EN DASH
- [0x2014] = 0, % — EM DASH
- [0x2015] = 1, % ― HORIZONTAL BAR
- [0x2019] = 1, % ’ RIGHT SINGLE QUOTATION MARK
- [0x201D] = 1, % ” RIGHT DOUBLE QUOTATION MARK
- [0x2025] = 1, % ‥ TWO DOT LEADER
- [0x2026] = 1, % … HORIZONTAL ELLIPSIS
- [0x232A] = 1, % 〉 RIGHT-POINTING ANGLE BRACKET
- [0x3001] = 1, % 、 IDEOGRAPHIC COMMA
- [0x3002] = 1, % 。 IDEOGRAPHIC FULL STOP
- [0x3005] = 1, % 々 IDEOGRAPHIC ITERATION MARK
- [0x3009] = 1, % 〉 RIGHT ANGLE BRACKET
- [0x300B] = 1, % 》 RIGHT DOUBLE ANGLE BRACKET
- [0x300D] = 1, % 」 RIGHT CORNER BRACKET
- [0x300F] = 1, % 』 RIGHT WHITE CORNER BRACKET
- [0x3011] = 1, % 】 RIGHT BLACK LENTICULAR BRACKET
- [0x3015] = 1, % 〕 RIGHT TORTOISE SHELL BRACKET
- [0x3017] = 1, % 〗 RIGHT WHITE LENTICULAR BRACKET
- [0x3019] = 1, % 〙 RIGHT WHITE TORTOISE SHELL BRACKET
- [0x301B] = 1, % 〛 RIGHT WHITE SQUARE BRACKET
- [0x301C] = 1, % 〜 WAVE DASH
- [0x301E] = 1, % 〞 DOUBLE PRIME QUOTATION MARK
- [0x301F] = 1, % 〟 LOW DOUBLE PRIME QUOTATION MARK
- [0x3035] = 1, % 〵 VERTICAL KANA REPEAT MARK LOWER HALF
- [0x303B] = 1, % 〻 VERTICAL IDEOGRAPHIC ITERATION MARK
- [0x303C] = 1, % 〼 MASU MARK
- [0x3041] = 3, % ぁ HIRAGANA LETTER SMALL A
- [0x3043] = 3, % ぃ HIRAGANA LETTER SMALL I
- [0x3045] = 3, % ぅ HIRAGANA LETTER SMALL U
- [0x3047] = 3, % ぇ HIRAGANA LETTER SMALL E
- [0x3049] = 3, % ぉ HIRAGANA LETTER SMALL O
- [0x3063] = 3, % っ HIRAGANA LETTER SMALL TU
- [0x3083] = 3, % ゃ HIRAGANA LETTER SMALL YA
- [0x3085] = 3, % ゅ HIRAGANA LETTER SMALL YU
- [0x3087] = 3, % ょ HIRAGANA LETTER SMALL YO
- [0x308E] = 3, % ゎ HIRAGANA LETTER SMALL WA
- [0x3095] = 3, % ゕ HIRAGANA LETTER SMALL KA
- [0x3096] = 3, % ゖ HIRAGANA LETTER SMALL KE
- [0x3099] = 1, % COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
- [0x309A] = 1, % COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
- [0x309B] = 1, % ゛ KATAKANA-HIRAGANA VOICED SOUND MARK
- [0x309C] = 1, % ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
- [0x309D] = 1, % ゝ HIRAGANA ITERATION MARK
- [0x309E] = 1, % ゞ HIRAGANA VOICED ITERATION MARK
- [0x30A0] = 1, % ゠ KATAKANA-HIRAGANA DOUBLE HYPHEN
- [0x30A1] = 3, % ァ KATAKANA LETTER SMALL A
- [0x30A3] = 3, % ィ KATAKANA LETTER SMALL I
- [0x30A5] = 3, % ゥ KATAKANA LETTER SMALL U
- [0x30A7] = 3, % ェ KATAKANA LETTER SMALL E
- [0x30A9] = 3, % ォ KATAKANA LETTER SMALL O
- [0x30C3] = 3, % ッ KATAKANA LETTER SMALL TU
- [0x30E3] = 3, % ャ KATAKANA LETTER SMALL YA
- [0x30E5] = 3, % ュ KATAKANA LETTER SMALL YU
- [0x30E7] = 3, % ョ KATAKANA LETTER SMALL YO
- [0x30EE] = 3, % ヮ KATAKANA LETTER SMALL WA
- [0x30F5] = 3, % ヵ KATAKANA LETTER SMALL KA
- [0x30F6] = 3, % ヶ KATAKANA LETTER SMALL KE
- [0x30FB] = 1, % ・ KATAKANA MIDDLE DOT
- [0x30FC] = 1, % ー KATAKANA-HIRAGANA PROLONGED SOUND MARK
- [0x30FD] = 1, % ヽ KATAKANA ITERATION MARK
- [0x30FE] = 1, % ヾ KATAKANA VOICED ITERATION MARK
- [0xFE30] = 1, % ︰ PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
- [0xFE31] = 1, % ︱ PRESENTATION FORM FOR VERTICAL EM DASH
- [0xFE32] = 1, % ︲ PRESENTATION FORM FOR VERTICAL EN DASH
- [0xFE36] = 1, % ︶ PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
- [0xFE38] = 1, % ︸ PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
- [0xFE3A] = 1, % ︺ PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
- [0xFE3C] = 1, % ︼ PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
- [0xFE3E] = 1, % ︾ PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
- [0xFE40] = 1, % ﹀ PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
- [0xFE42] = 1, % ﹂ PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
- [0xFE44] = 1, % ﹄ PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
- [0xFE48] = 1, % ﹈ PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
- [0xFE5A] = 1, % ﹚ SMALL RIGHT PARENTHESIS
- [0xFE5C] = 1, % ﹜ SMALL RIGHT CURLY BRACKET
- [0xFE5E] = 1, % ﹞ SMALL RIGHT TORTOISE SHELL BRACKET
- [0xFF01] = 1, % ! FULLWIDTH EXCLAMATION MARK
- [0xFF09] = 1, % ) FULLWIDTH RIGHT PARENTHESIS
- [0xFF0C] = 1, % , FULLWIDTH COMMA
- [0xFF0E] = 1, % . FULLWIDTH FULL STOP
- [0xFF1A] = 1, % : FULLWIDTH COLON
- [0xFF1B] = 1, % ; FULLWIDTH SEMICOLON
- [0xFF1F] = 1, % ? FULLWIDTH QUESTION MARK
- [0xFF3D] = 1, % ] FULLWIDTH RIGHT SQUARE BRACKET
- [0xFF5D] = 1, % } FULLWIDTH RIGHT CURLY BRACKET
- [0xFF60] = 1, % ⦆ FULLWIDTH RIGHT WHITE PARENTHESIS
- [0xFF61] = 1, % 。 HALFWIDTH IDEOGRAPHIC FULL STOP
- [0xFF63] = 1, % 」 HALFWIDTH RIGHT CORNER BRACKET
- [0xFF64] = 1, % 、 HALFWIDTH IDEOGRAPHIC COMMA
- [0xFF65] = 1, % ・ HALFWIDTH KATAKANA MIDDLE DOT
- [0xFF9E] = 1, % ゙ HALFWIDTH KATAKANA VOICED SOUND MARK
- [0xFF9F] = 1, % ゚ HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
-}, { __index = function(_,c)
- if c >= 0x1160 and c <= 0x11FF then return 2 end
- if c >= 0xD7B0 and c <= 0xD7FF then return 2 end
- if c >= 0x302A and c <= 0x302F then return 1 end
- if c >= 0x31F0 and c <= 0x31FF then return 3 end
- if c >= 0xFF67 and c <= 0xFF70 then return 3 end
- if c >= 0xFE00 and c <= 0xFE0F then return 1 end
- if c >= 0xFE10 and c <= 0xFE19 and not (c == 0xFE17) then return 1 end
- if c >= 0xFE50 and c <= 0xFE58 then return 1 end
- if c >= 0xE0100 and c <= 0xE01EF then return 1 end
- end
-})
-local function is_cjk (c)
- return (c >= 0xAC00 and c <= 0xD7FF)
- or (c >= 0x1100 and c <= 0x11FF)
- or (c >= 0xA960 and c <= 0xA97F)
- or (c >= 0x2E80 and c <= 0x9FFF)
- or (c >= 0xF900 and c <= 0xFAFF)
- or (c >= 0xFE10 and c <= 0xFE1F)
- or (c >= 0xFE30 and c <= 0xFE6F)
- or (c >= 0xFF00 and c <= 0xFFEF)
- or (c >= 0x1F100 and c <= 0x1F2FF)
- or (c >= 0x20000 and c <= 0x2FA1F)
- or (nobr_after[c] and c > 0x2014)
- or (nobr_before[c] and c > 0x2014)
-end
-local charclass = setmetatable({
- [0x2018] = 1, [0x201C] = 1, [0x2329] = 1, [0x3008] = 1,
- [0x300A] = 1, [0x300C] = 1, [0x300E] = 1, [0x3010] = 1,
- [0x3014] = 1, [0x3016] = 1, [0x3018] = 1, [0x301A] = 1,
- [0x301D] = 1, [0xFE17] = 1, [0xFE35] = 1, [0xFE37] = 1,
- [0xFE39] = 1, [0xFE3B] = 1, [0xFE3D] = 1, [0xFE3F] = 1,
- [0xFE41] = 1, [0xFE43] = 1, [0xFE47] = 1, [0xFF08] = 1,
- [0xFF3B] = 1, [0xFF5B] = 1, [0xFF5F] = 1, [0xFF62] = 1,
- [0x2019] = 2, [0x201D] = 2, [0x232A] = 2, [0x3001] = 2,
- [0x3009] = 2, [0x300B] = 2, [0x300D] = 2, [0x300F] = 2,
- [0x3011] = 2, [0x3015] = 2, [0x3017] = 2, [0x3019] = 2,
- [0x301B] = 2, [0x301E] = 2, [0x301F] = 2, [0xFE10] = 2,
- [0xFE11] = 2, [0xFE18] = 2, [0xFE36] = 2, [0xFE38] = 2,
- [0xFE3A] = 2, [0xFE3C] = 2, [0xFE3E] = 2, [0xFE40] = 2,
- [0xFE42] = 2, [0xFE44] = 2, [0xFE48] = 2, [0xFF09] = 2,
- [0xFF0C] = 2, [0xFF3D] = 2, [0xFF5D] = 2, [0xFF60] = 2,
- [0xFF63] = 2, [0xFF64] = 2, [0x00B7] = 3, [0x30FB] = 3,
- [0xFF1A] = 3, [0xFF1B] = 3, [0xFF65] = 3, [0x3002] = 4,
- [0xFE12] = 4, [0xFF0E] = 4, [0xFF61] = 4, [0x2015] = 5,
- [0x2025] = 5, [0x2026] = 5, [0xFE19] = 5, [0xFE30] = 5,
- [0xFE31] = 5, [0xFE15] = 6, [0xFE16] = 6, [0xFF01] = 6,
- [0xFF1F] = 6,
-}, { __index = function() return 0 end })
-local intercharclass = { [0] =
- { [0] = nil, {1,1}, nil, {.5,.5} },
- { [0] = nil, nil, nil, {.5,.5} },
- { [0] = {1,1}, {1,1}, nil, {.5,.5}, nil, {1,1}, {1,1} },
- { [0] = {.5,.5},{.5,.5},{.5,.5},{1,.5}, {.5,.5},{.5,.5},{.5,.5} },
- { [0] = {1,0}, {1,0}, nil, {1.5,.5},nil, {1,0}, {1,0} },
- { [0] = nil, {1,1}, nil, {.5,.5} },
- { [0] = {1,1}, {1,1}, nil, {.5,.5} },
-}
-local function get_new_penalty (p)
- local penalty = node.new("penalty")
- penalty.penalty = p
- return penalty
-end
-local function get_new_glue (wd, st, sh, sto, sho)
- local glue = node.new("glue")
- glue.width = wd or 0
- glue.stretch = st or 0
- glue.shrink = sh or 0
- glue.stretch_order = sto or 0
- glue.shrink_order = sho or 0
- return glue
-end
-local function get_font_size (fid, space)
- local f = fonts.hashes.identifiers[fid] or font.fonts[fid]
- local size = f and f.parameters
- if space then
- size = size and size.space or 196608
- else
- size = size and size.quad or 655360
- end
- return size/2
-end
-local function glyph_to_box (head, curr, class)
- local g, h = curr
- local size = get_font_size(g.font)
- head, curr = node.remove(head, curr)
- g.next, g.prev = nil, nil
- local hss = get_new_glue(0, 65536, 65536, 2, 2)
- if class == 1 then
- h, hss.next, g.prev = hss, g, hss
- elseif class == 2 or class == 4 then
- h, g.next, hss.prev = g, hss, g
- else
- local hss2 = node.copy(hss)
- h, hss.next, g.prev, g.next, hss2.prev = hss, g, hss, hss2, g
- end
- h = nodes.simple_font_handler(h)
- local box = node.hpack(h, size, "exactly")
- head, curr = node.insert_before(head, curr, box)
- return head, curr
-end
-local function insert_cjk_penalty_glue (head, curr, f, var, cc, nc, nobr)
- if nobr or cc == 1 or nc > 1 then
- local penalty = get_new_penalty(10000)
- head, curr = node.insert_after(head, curr, penalty)
- end
- local factor = get_font_size(f, var == 2)
- local t = intercharclass[cc][nc]
- local glue = get_new_glue(t[1]*factor, nil, t[2]*factor)
- head, curr = node.insert_after(head, curr, glue)
- return head, curr
-end
-local function insert_penalty_glue (head, curr, f, var, x)
- if var == 1 then
- else
- local penalty = get_new_penalty(50)
- head, curr = node.insert_after(head, curr, penalty)
- end
- local size, glue = get_font_size(f, x and var == 2)
- if x then
- glue = get_new_glue(size/2, size/4, size/8)
- else
- glue = get_new_glue(0, size/10, size/50)
- end
- head, curr = node.insert_after(head, curr, glue)
- return head, curr
-end
-local function avoid_widow_char (head)
- local curr = node.tail(head)
- while curr do
- if curr.id == glyph_id then
- local c = curr.char or 0
- if not nobr_before[c] or nobr_before[c] == 3 then
- local var = node.has_attribute(curr, attr_korean)
- if var and is_cjk(c) then
- curr = curr.prev
- if curr and curr.id == glue_id then
- curr = curr.prev
- if curr then
- local pv = var == 1 and 500 or 1000
- if curr.id == penalty_id then
- if curr.penalty < pv then curr.penalty = pv end
- else
- node.insert_after(head, curr, get_new_penalty(pv))
- end
- end
- end
- end
- break
- end
- end
- curr = curr.prev
- end
-end
-local function korean_break (head, lb)
- local curr = head
- while curr do
- if curr.id == glyph_id then
- local var = node.has_attribute(curr, attr_korean)
- if var then
- local c, f = curr.char or 0, curr.font or 0
- local cc, cjkc = charclass[c], is_cjk(c)
- if var > 0 and cc > 0 and cc < 5 then
- head, curr = glyph_to_box(head, curr, cc)
- end
- local next = curr.next
- if next and next.id == glyph_id then
- local n = next.char or 0
- local nc = charclass[n]
- local nobr = nobr_before[n] or nobr_after[c]
- if var > 0 and intercharclass[cc][nc] then
- head, curr = insert_cjk_penalty_glue(head, curr, f, var, cc, nc, nobr)
- elseif not nobr then
- local cjkn = is_cjk(n)
- if cjkc or cjkn then
- if var > 0 and not (cjkc and cjkn) and not (nobr_before[c] == 0) then
- head, curr = insert_penalty_glue(head, curr, f, var, true)
- elseif lb then
- head, curr = insert_penalty_glue(head, curr, f, var)
- end
- end
- end
- end
- end
- end
- curr = curr.next
- end
- if lb then avoid_widow_char(head) end
- return head
-end
-local josa_table = {
- % 리을, 중성, 종성
- [0xAC00] = {0xC774, 0xAC00, 0xC774}, % 가 = 이, 가, 이
- [0xC740] = {0xC740, 0xB294, 0xC740}, % 은 = 은, 는, 은
- [0xC744] = {0xC744, 0xB97C, 0xC744}, % 을 = 을, 를, 을
- [0xC640] = {0xACFC, 0xC640, 0xACFC}, % 와 = 과, 와, 과
- [0xC73C] = {nil, nil, 0xC73C}, % 으(로) = , , 으
- [0xC774] = {0xC774, nil, 0xC774}, % 이(라) = 이, , 이
-}
-local function josa_char_num (t, c)
- c = c - math.floor(c/10)*10 + 0x30
- return t[c] or 2
-end
-local josa_code = setmetatable({
- [0x30] = 3, [0x31] = 1, [0x33] = 3, [0x36] = 3, [0x37] = 1,
- [0x38] = 1, [0x4C] = 1, [0x4D] = 3, [0x4E] = 3, [0x6C] = 1,
- [0x6D] = 3, [0x6E] = 3, [0xFB02] = 1, [0xFB04] = 1,
-},{ __index = function(t,c)
- if c >= 0xAC00 and c <= 0xD7A3 then
- c = c - 0xAC00
- c = c - math.floor(c/28)*28 + 0x11A7
- end
- if c >= 0x11A8 and c <= 0x11FF then
- if c == 0x11AF then return 1 end
- return 3
- end
- if c >= 0xD7CB and c <= 0xD7FB then return 3 end
- if c >= 0x2170 and c <= 0x217F then c = c - 0x10 end
- if c >= 0x2160 and c <= 0x216F then
- if c >= 0x216C then return 3 end
- return josa_char_num(t, c - 0x215F)
- end
- if c >= 0x2460 and c <= 0x2473 then return josa_char_num(t, c - 0x245F) end
- if c >= 0x2474 and c <= 0x2487 then return josa_char_num(t, c - 0x2473) end
- if c >= 0x2488 and c <= 0x249B then return josa_char_num(t, c - 0x2487) end
- if c >= 0x249C and c <= 0x24B5 then return t[c - 0x249C + 0x61] or 2 end
- if c >= 0x24B6 and c <= 0x24CF then return t[c - 0x24B6 + 0x61] or 2 end
- if c >= 0x24D0 and c <= 0x24E9 then return t[c - 0x24D0 + 0x61] or 2 end
- if c >= 0x3131 and c <= 0x318E then
- if c == 0x3139 then return 1 end
- if c >= 0x314F and c <= 0x3163 or c >= 0x3187 then return 2 end
- return 3
- end
- if c >= 0x3260 and c <= 0x327E then c = c - 0x60 end
- if c >= 0x3200 and c <= 0x321E then
- if c == 0x3203 then return 1 end
- if c >= 0x320E then return 2 end
- return 3
- end
- if c >= 0xFF10 and c <= 0xFF19 then return josa_char_num(t, c - 0xFF10) end
- if c >= 0xFF21 and c <= 0xFF3A then return t[c - 0xFF21 + 0x61] or 2 end
- if c >= 0xFF41 and c <= 0xFF5A then return t[c - 0xFF41 + 0x61] or 2 end
- return 2
- end })
-local function get_prev_char (p)
- while p do
- if p.id == glyph_id then
- local pc = p.char or 0
- if not nobr_after[pc] then
- if not nobr_before[pc] or nobr_before[pc] >= 2 then
- return pc
- end
- end
- elseif p.id == hbox_id or p.id == vbox_id then
- local pc = get_prev_char(node.tail(p.head))
- if pc then return pc end
- end
- p = p.prev
- end
-end
-local function auto_josa (head)
- local curr, tofree = head, {}
- while curr do
- if curr.id == glyph_id then
- local josa = node.has_attribute(curr, attr_josa)
- if josa then
- local cc = curr.char or 0
- if josa == 0 then
- josa = josa_code[get_prev_char(curr.prev) or 0x30]
- end
- if cc == 0xC774 then
- local n = curr.next
- if n and n.char and n.char >= 0xAC00 and n.char <= 0xD7A3 then
- else
- cc = 0xAC00
- end
- end
- local new = josa_table[cc]
- if new then
- cc = new[josa]
- if cc then
- curr.char = cc
- else
- head = node.remove(head, curr)
- table.insert(tofree, curr)
- end
- end
- node.unset_attribute(curr, attr_josa)
- end
- end
- curr = curr.next
- end
- for _,v in ipairs(tofree) do node.free(v) end
- return head
-end
-local function reorder_tm (head)
- local curr, tone = node.tail(head)
- while curr do
- if curr.id == glyph_id and node.has_attribute(curr, attr_korean) then
- local c, wd = curr.char or 0, curr.width or 0
- if (c == 0x302E or c == 0x302F) and wd > 0 then
- tone = curr
- elseif tone and not nobr_before[c] then
- head = node.remove(head, tone)
- tone.next, tone.prev = nil, nil
- head, curr = node.insert_before(head, curr, tone)
- tone = nil
- end
- end
- curr = curr.prev
- end
- return head
-end
-local prepend_to_callback
-if luatexbase.callbacktypes then
- prepend_to_callback = function(name, func, desc)
- local t = { {func, desc} }
- for _,v in ipairs(luatexbase.callback_descriptions(name)) do
- table.insert(t, {luatexbase.remove_from_callback(name, v)})
- end
- for _,v in ipairs(t) do
- luatexbase.add_to_callback(name, v[1], v[2])
- end
- end
-else
- prepend_to_callback = function(name, func, desc)
- luatexbase.add_to_callback(name, func, desc, 1)
- end
-end
-prepend_to_callback ("hyphenate",
- function(head)
- local in_callback = luatexbase.in_callback or luatexbase.priority_in_callback
- if in_callback("hyphenate", "polyglossia.disable_hyphenation") then
- return false
- end
- local curr = head
- while curr do
- if curr.id == glyph_id and node.has_attribute(curr, attr_korean) and is_cjk(curr.char or 0) then
- if curr.subtype == 1 then
- curr.subtype = 0
- end
- end
- curr = curr.next
- end
- lang.hyphenate(head)
- end,
- "polyglossia.lang_korean")
-prepend_to_callback ("pre_linebreak_filter",
- function(head)
- head = auto_josa(head)
- head = korean_break(head, true)
- head = reorder_tm(head)
- return head
- end,
- "polyglossia.lang_korean")
-prepend_to_callback ("hpack_filter",
- function(head)
- head = auto_josa(head)
- head = korean_break(head)
- head = reorder_tm(head)
- return head
- end,
- "polyglossia.lang_korean")
-}
-
% vim:ft=tex:tw=0:sw=4:ts=4:expandtab
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-kurdish.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-kurdish.ldf
new file mode 100644
index 00000000000..ca050dea61f
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-kurdish.ldf
@@ -0,0 +1,384 @@
+% Created on September 1, 2019
+% Sina Ahmadi (https://sinaahmadi.github.io/)
+\ProvidesFile{gloss-kurdish.ldf}[polyglossia: module for Kurdish]
+
+\RequireBidi
+\RequirePackage{arabicnumbers}
+\RequirePackage{farsical}
+\RequirePackage{hijrical}
+
+\PolyglossiaSetup{kurdish}{
+ script=Arabic,
+ direction=RL,
+ scripttag=arab,
+ langtag=KUR,
+ hyphennames={nohyphenation},
+ fontsetup=true,
+ localnumeral=kurdishnumerals
+}
+
+\newif\if@kurdish@kurmanji
+\def\kurdish@variant{sorani}
+\define@choicekey*+{kurdish}{variant}[\val\nr]{sorani,kurmanji}[sorani]{%
+ \ifcase\nr\relax
+ % sorani:
+ \def\kurdish@variant{sorani}%
+ \@kurdish@kurmanjifalse%
+ \or
+ % kurmanji:
+ \def\kurdish@variant{kurmanji}%
+ \@kurdish@kurmanjitrue%
+ \fi
+ \kurdish@set@variety%
+ \xpg@info{Option: kurdish, variant=\val}%
+}{\xpg@warning{Unknown Kurdish variant `#1'}}
+
+\newif\if@kurdish@latin
+\newif\if@kurdish@arabic
+\define@choicekey*+{kurdish}{script}[\val\nr]{Arabic,Latin}{%
+ \ifcase\nr\relax
+ % Arabic:
+ \@kurdish@latinfalse%
+ \@kurdish@arabictrue%
+ \or
+ % Latin:
+ \@kurdish@latintrue%
+ \@kurdish@arabicfalse%
+ \fi
+ \kurdish@set@variety%
+ \xpg@info{Option: kurdish, script=\val}%
+}{\xpg@warning{Unknown Kurdish script `#1'}}
+
+
+\newif\if@western@numerals
+\newif\if@force@western@numerals
+\def\kurdish@script{arabic}
+\def\kurdish@pattern{nohyphenation}
+
+\def\kurdish@set@variety{%
+ \if@kurdish@latin% Latin explicitly set
+ \@western@numeralstrue%
+ \if@kurdish@kurmanji
+ \def\kurdish@pattern{kurmanji}%
+ \SetLanguageKeys{kurdish}{script=Latin,direction=LR,scripttag=latn,babelname=kurmanji}%
+ \else
+ \SetLanguageKeys{kurdish}{script=Latin,direction=LR,scripttag=latn,babelname=kurdish}%
+ \fi
+ \def\kurdish@script{latin}
+ \xpg@fontsetup@latin{kurdish}%
+ \else
+ \if@kurdish@arabic% Arabic explicitly set
+ \if@kurdish@kurmanji
+ \if@force@western@numerals\else\@western@numeralsfalse\fi%
+ \SetLanguageKeys{kurdish}{script=Arabic,direction=RL,scripttag=arab,babelname=kurmanji}%
+ \def\kurdish@script{arabic}%
+ \else
+ \SetLanguageKeys{kurdish}{script=Arabic,direction=RL,scripttag=arab,babelname=kurdish}%
+ \fi
+ \xpg@fontsetup@nonlatin{kurdish}%
+ \else% sorani=Arabic, kurmanji=Latin
+ \if@kurdish@kurmanji
+ \@western@numeralstrue%
+ \SetLanguageKeys{kurdish}{script=Latin,direction=LR,scripttag=latn,babelname=kurmanji}%
+ \xpg@fontsetup@latin{kurdish}%
+ \def\kurdish@script{latin}
+ \else
+ \SetLanguageKeys{kurdish}{script=Arabic,direction=RL,scripttag=arab,babelname=kurdish}%
+ \xpg@fontsetup@nonlatin{kurdish}%
+ \fi
+ \fi
+ \fi
+}
+
+\def\tmp@western{western}
+\define@key{kurdish}{numerals}[eastern]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@western\@western@numeralstrue\@force@western@numeralstrue\else%
+ \@western@numeralsfalse%
+ \fi%
+}
+
+%this is needed for \abjad in arabicnumbers.sty
+\def\tmp@true{true}
+\define@key{kurdish}{abjadjimnotail}[true]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@true\abjad@jim@notailtrue%
+ \else
+ \abjad@jim@notailfalse
+ \fi%
+}
+
+% NOT YET USED
+\define@key{kurdish}{locale}[default]{%
+ \def\@kurdish@locale{#1}}
+
+
+%TODO add option for CALENDAR
+
+\setkeys{kurdish}{variant,locale}
+
+\def\kurdish@language{%
+ \polyglossia@setup@language@patterns{\kurdish@pattern}%
+}%
+
+\def\kurdishNativemonth#1{\ifcase#1%
+ \or رێبه‌ندان\or ره‌شه‌مێ\or خاكه‌لێوه‌\or گوڵان\or جۆزه‌ردان\or پووشپه‌ڕ\or خه‌رمانان\or گه‌لاوێژ\or ره‌زبه‌ر\or گه‌ڵارێزان\or سه‌رماوه‌ز\or به‌فرانبار\fi}
+\def\kurdishmonth#1{\ifcase#1%
+ \or کانونی دووەم\or شوبات\or ئازار\or نیسان\or ئایار\or حوزه‌یران\or ته‌ممووز\or ئاب\or ئه‌یلوول\or تشرینی یه‌كه‌م\or تشرینی دووهه‌م\or كانوونی یه‌كه‌م\fi}
+
+%\Hijritoday is now locale-aware and will format the date with this macro:
+\DefineFormatHijriDate{kurdish}{%
+ \@ensure@RTL{%
+ \kurdishnumber{\value{Hijriday}}\space\HijriMonthArabic{\value{Hijrimonth}}\space\kurdishnumber{\value{Hijriyear}}%
+ }%
+}
+
+\def\captionskurdish@sorani@arabic{%
+ \def\prefacename{\@ensure@RTL{پێشه‌كی}}%
+ \def\refname{\@ensure@RTL{سه‌رچاوه‌کان}}%
+ \def\abstractname{\@ensure@RTL{پوخته‌}}%
+ \def\bibname{\@ensure@RTL{کتێبنامه‌}}%
+ \def\chaptername{\@ensure@RTL{به‌ندی}}%
+ \def\appendixname{\@ensure@RTL{پاشکۆ}}%
+ \def\contentsname{\@ensure@RTL{نێوه‌ڕۆک}}%
+ \def\listfigurename{\@ensure@RTL{لیستی وێنه‌کان}}%
+ \def\listtablename{\@ensure@RTL{لیستی خشته‌کان}}%
+ \def\indexname{\@ensure@RTL{پێنوێن}}%
+ \def\figurename{\@ensure@RTL{وێنه‌}}%
+ \def\tablename{\@ensure@RTL{خشتە}}%
+ \def\partname{\@ensure@RTL{به‌شی}}%
+ \def\enclname{\@ensure@RTL{هاوپێچ}}%
+ \def\ccname{\@ensure@RTL{روونووس}}%
+ \def\headtoname{\@ensure@RTL{بۆ}}%
+ \def\pagename{\@ensure@RTL{لاپه‌ڕه‌}}%
+ \def\seename{\@ensure@RTL{چاو لێکه‌ن}}%
+ \def\alsoname{\@ensure@RTL{هه‌روه‌ها چاو لێکه‌ن}}%
+ \def\proofname{\@ensure@RTL{سەلماندن}}%
+ \def\glossaryname{\@ensure@RTL{فه‌رهه‌نگۆک}}%
+}
+
+\def\captionskurdish@sorani@latin{%
+ \def\prefacename{Pêşekî}%
+ \def\refname{Serçawekan}%
+ \def\abstractname{Puxte}%
+ \def\bibname{Kitêbname}%
+ \def\chaptername{Bendî}%
+ \def\appendixname{Paşko}%
+ \def\contentsname{Nêwerrok}%
+ \def\listfigurename{Lîstî Wênekan}%
+ \def\listtablename{Lîstî Xiştekan}%
+ \def\indexname{Pêrrist}%
+ \def\figurename{Wêney}%
+ \def\tablename{Xiştey}%
+ \def\partname{Beşî}%
+ \def\enclname{Hawpêç}%
+ \def\ccname{Rûnûs}%
+ \def\headtoname{Bo}%
+ \def\pagename{Laperre}%
+ \def\seename{Çaw lêken}%
+ \def\alsoname{Herweha çaw lêken}%
+ \def\proofname{Selmandin}%
+ \def\glossaryname{Ferhengok}%
+}
+
+\def\captionskurdish@kurmanji@latin{%
+ \def\prefacename{Peşgotin}%
+ \def\refname{Pirtuken bijartî}%
+ \def\abstractname{Kurtebîr}%
+ \def\bibname{Çavkanîya Pirtukan}%
+ \def\chaptername{Serê}%
+ \def\appendixname{Tebînîya}%
+ \def\contentsname{Navêrok}%
+ \def\listfigurename{Hejmara Dimena}%
+ \def\listtablename{Hejmara Kevalen}%
+ \def\indexname{Endeks}%
+ \def\figurename{Dimenê}%
+ \def\tablename{Kevala}%
+ \def\partname{Bêşa}%
+ \def\enclname{Dumahik}%
+ \def\ccname{Belavker}%
+ \def\headtoname{Ji bo}%
+ \def\pagename{Rûpelê}%
+ \def\seename{binêra}%
+ \def\alsoname{le vêya ji binêra}%
+ \def\proofname{Delîl}%
+ \def\glossaryname{Çavkanîya lêkolînê}%
+}
+
+\def\captionskurdish@kurmanji@arabic{%
+ \def\prefacename{\@ensure@RTL{پێشگۆتن}}%
+ \def\refname{\@ensure@RTL{پرتووکێن بژارتی}}%
+ \def\abstractname{\@ensure@RTL{کورتەبیر}}%
+ \def\bibname{\@ensure@RTL{چاڤکانییا پرتووکان}}%
+ \def\chaptername{\@ensure@RTL{سەرێ}}%
+ \def\appendixname{\@ensure@RTL{پاشکۆ}}%
+ \def\contentsname{\@ensure@RTL{ناڤێرۆک}}%
+ \def\listfigurename{\@ensure@RTL{هەژمارا دیمەنا}}%
+ \def\listtablename{\@ensure@RTL{هەژمارا کەڤالێن}}%
+ \def\indexname{\@ensure@RTL{پێرست}}%
+ \def\figurename{\@ensure@RTL{دیمەنێ}}%
+ \def\tablename{\@ensure@RTL{کەڤالا}}%
+ \def\partname{\@ensure@RTL{بەشا}}%
+ \def\enclname{\@ensure@RTL{دوماهک}}%
+ \def\ccname{\@ensure@RTL{بەلاڤکەر}}%
+ \def\headtoname{\@ensure@RTL{ژ بۆ}}%
+ \def\pagename{\@ensure@RTL{رووپەلێ}}%
+ \def\seename{\@ensure@RTL{بنێرا}}%
+ \def\alsoname{\@ensure@RTL{لە ڤێیا ژ بنێرا}}%
+ \def\proofname{\@ensure@RTL{دەلیل}}%
+ \def\glossaryname{\@ensure@RTL{چاڤکانییا لێکۆلینێ}}%
+}
+
+\def\captionskurdish{%
+ \csname captionskurdish@\kurdish@variant @\kurdish@script\endcsname%
+}
+
+\def\datekurdish@sorani@arabic{%
+ \def\today{\@ensure@RTL{\kurdishnumber\day{ی}\space\kurdishmonth{\month}{ی}\space\kurdishnumber\year}}%
+}
+
+\def\datekurdish@sorani@latin{%
+ \def\today{%
+ \number\day.~\ifcase\month\or
+ \januaryname\or \februaryname\or \marchname\or \aprilname\or
+ \mayname\or \junename\or \julyname\or \augustname\or
+ \septembername\or \octobername\or \novembername\or
+ \decembername\or \@ctrerr\fi~\number\year}%
+ \def\ontoday{%
+ \number\day’ê~\ifcase\month\or
+ \januaryname\or \februaryname\or \marchname\or \aprilname\or
+ \mayname\or \junename\or \julyname\or \augustname\or
+ \septembername\or \octobername\or \novembername\or
+ \decembername\or \@ctrerr\fi ê~\number\year}%
+ \def\januaryname{Kanûnî Yekem}%
+ \def\februaryname{Şubat}%
+ \def\marchname{Azar}%
+ \def\aprilname{Nîsan}%
+ \def\mayname{Ayar}%
+ \def\junename{Huzeyran}%
+ \def\julyname{Temmûz}%
+ \def\augustname{Ab}%
+ \def\septembername{Eylûl}%
+ \def\octobername{Tişrînî Yekem}%
+ \def\novembername{Tişrînî Dûhem}%
+ \def\decembername{Kanûnî Dûhem}%
+}
+
+\def\datekurdish@kurmanji@latin{%
+ \def\today{%
+ \number\day.~\ifcase\month\or
+ \januaryname\or \februaryname\or \marchname\or \aprilname\or
+ \mayname\or \junename\or \julyname\or \augustname\or
+ \septembername\or \octobername\or \novembername\or
+ \decembername\or \@ctrerr\fi~\number\year}%
+ \def\ontoday{%
+ \number\day’ê~\ifcase\month\or
+ \januaryname\or \februaryname\or \marchname\or \aprilname\or
+ \mayname\or \junename\or \julyname\or \augustname\or
+ \septembername\or \octobername\or \novembername\or
+ \decembername\or \@ctrerr\fi ê~\number\year}%
+ \def\januaryname{Çileya Paşîn}%
+ \def\februaryname{Sibat}%
+ \def\marchname{Adar}%
+ \def\aprilname{Nîsan}%
+ \def\mayname{Gulan}%
+ \def\junename{Hezîran}%
+ \def\julyname{Tîrmeh}%
+ \def\augustname{Tebax}%
+ \def\septembername{Îlon}%
+ \def\octobername{Çiriya Pêşîn}%
+ \def\novembername{Çiriya Paşîn}%
+ \def\decembername{Çileya Pêşîn}%
+}
+
+\def\datekurdish@kurmanji@arabic{%
+ \datekurdish@sorani@arabic% FIXME: correct?
+}
+
+% TODO: babel-kurmanji has these "alternative" month names
+% How to integrate them ("montnames=alternative" is not really good)?
+% It seems the month name question is all but straightforward:
+% https://en.wikipedia.org/wiki/Kurdish_calendar#Names
+%\def\datekurdish@kurmanji@alternate{%
+% \datekurdish@kurmanji
+% \def\januaryname{Rêbendan}%
+% \def\februaryname{Reşemih}%
+% \def\aprilname{Cotan}% % Avrêl
+% \def\junename{Pûşper}%
+% \def\augustname{Gelavêj}%
+% \def\septembername{Gelarezan}% % Rezber
+% \def\octobername{Kewçêr}%
+% \def\novembername{Sermawez}%
+% \def\decembername{Berfandar}%
+%}
+
+\def\datekurdish{%
+ \csname datekurdish@\kurdish@variant @\kurdish@script\endcsname%
+}
+
+\newcommand{\kurdishnumerals}[2]{\kurdishnumber{#2}}
+
+\def\kurdishnumber#1{%
+ \if@western@numerals
+ \number#1%
+ \else
+ \ifxetex
+ \ifnum\XeTeXcharglyph"06F0 > 0\relax
+ \farsidigits{\number#1}%
+ \else%
+ \arabicdigits{\number#1}%
+ \fi
+ \else\ifluatex
+ \expandafter\ifnum\directlua{polyglossia.check_char(0x6F0)} > 0\relax
+ \farsidigits{\number#1}%
+ \else%
+ \arabicdigits{\number#1}%
+ \fi
+ \fi\fi
+ \fi
+}
+
+%\def\kurdishnum#1{\expandafter\kurdishnumber\csname c@#1\endcsname}
+%\def\kurdishbracenum#1{(\expandafter\kurdishnumber\csname c@#1\endcsname)}
+%\def\kurdishornatebracenum#1{\char"FD3E\expandafter\kurdishnumber\csname c@#1\endcsname\char"FD3F}
+%\def\kurdishalph#1{\expandafter\@farsialph\csname c@#1\endcsname}
+
+\def\kurdish@numbers{%
+ \if@western@numerals%
+ \else%
+ \let\@alph\abjad%
+ \let\@Alph\abjad%
+ \fi%
+}
+
+\def\nokurdish@numbers{%
+ \let\@alph\@latinalph%
+ \let\@Alph\@latinAlph%
+}
+
+\def\kurdish@globalnumbers{%
+ \let\@arabic\kurdishnumber%
+ \renewcommand\thefootnote{\localnumeral*{footnote}}%
+ \renewcommand\theequation{\localnumeral*{equation}}%
+}
+
+% Store original definition
+\let\xpg@save@arabic\@arabic
+
+\def\nokurdish@globalnumbers{
+ \let\@arabic\xpg@save@arabic%
+ \renewcommand\thefootnote{\protect\number{\c@footnote}}%
+}
+
+% Save original \MakeUppercase definition
+\let\xpg@save@MakeUppercase\MakeUppercase
+
+\def\blockextras@kurdish{%
+ \def\MakeUppercase##1{##1}%
+}
+
+\def\noextras@kurdish{%
+ \let\MakeUppercase\xpg@save@MakeUppercase%
+}
+
+\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-lao.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-lao.ldf
index 9f8cc83df3e..96b5c436cf7 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-lao.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-lao.ldf
@@ -8,9 +8,11 @@ and may look very wrong.}
\PolyglossiaSetup{lao}{
script=Lao,
scripttag=lao,
+ langtag=LAO,
hyphennames={lao},
hyphenmins={1,1},
fontsetup=true,
+ localnumeral=laonumerals
%TODO localalph={xxx@alph,xxx@Alph}
%TODO localdigits=laonumber
}
@@ -76,6 +78,8 @@ and may look very wrong.}
\fi
}
+\newcommand{\laonumerals}[2]{\laonumber{#2}}
+
\def\laonumber#1{%
\if@lao@numerals
\laodigits{\number#1}%
@@ -86,11 +90,10 @@ and may look very wrong.}
\def\lao@globalnumbers{%
\let\orig@arabic\@arabic%
\let\@arabic\laonumber%
- \renewcommand{\thefootnote}{\protect\laonumber{\c@footnote}}%
+ \renewcommand{\thefootnote}{\localnumeral*{footnote}}%
}
\def\nolao@globalnumbers{%
\let\@arabic\orig@arabic%
- \renewcommand\thefootnote{\protect\number{\c@footnote}}%
}
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-latex.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-latex.ldf
new file mode 100644
index 00000000000..2f9e869dd6b
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-latex.ldf
@@ -0,0 +1,33 @@
+\ProvidesFile{gloss-latex.ldf}[polyglossia: module for default language]
+
+\PolyglossiaSetup{latex}{
+ hyphennames={english},
+ hyphenmins={2,3},
+ langtag=ENG,
+ fontsetup=true,
+}
+
+\def\captionslatex{%
+ \def\prefacename{Preface}%
+ \def\refname{References}%
+ \def\abstractname{Abstract}%
+ \def\bibname{Bibliography}%
+ \def\chaptername{Chapter}%
+ \def\appendixname{Appendix}%
+ \def\contentsname{Contents}%
+ \def\listfigurename{List of Figures}%
+ \def\listtablename{List of Tables}%
+ \def\indexname{Index}%
+ \def\figurename{Figure}%
+ \def\tablename{Table}%
+ \def\partname{Part}%
+ \def\enclname{encl}%
+ \def\ccname{cc}%
+ \def\headtoname{To}%
+ \def\pagename{Page}%
+ \def\seename{see}%
+ \def\alsoname{see also}%
+ \def\proofname{Proof}%
+}
+
+\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-latin.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-latin.ldf
index 435c43d3f77..3fc7d20ceca 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-latin.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-latin.ldf
@@ -21,6 +21,7 @@
\PolyglossiaSetup{latin}{%
hyphennames={latin},
hyphenmins={2,2},
+ langtag=LAT,
frenchspacing=true,
fontsetup=true,
}
@@ -51,7 +52,6 @@
\let\latin@variant\l@latin
\xpg@set@language@luatex@ii{latin}
\medievaltrue \classictrue
- \classicuclccodes
\xpg@info{Option: Medieval Latin}%
\else
\ifx\@tempa\tmp@classic
@@ -64,7 +64,7 @@
\let\latin@variant\l@classiclatin
\fi
\fi
- \medievalfalse\classictrue\classicuclccodes
+ \medievalfalse\classictrue
\xpg@info{Option: Classic Latin}%
\else
\ifx\@tempa\tmp@liturgical\unless\ifluatex
@@ -274,6 +274,7 @@
\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
@@ -282,6 +283,7 @@
\def\inlineextras@latin{%
\lccode\string"2019=\string"2019
+ \ifclassic\classicuclccodes\fi
\iflatin@babelshorthands\latin@shorthands\fi
\iflatin@ecclesiastic
\unless\ifluatex\ecclesiasticlatin@punctuation
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-latvian.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-latvian.ldf
index 9993cadf4a0..067ee3a921b 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-latvian.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-latvian.ldf
@@ -2,6 +2,7 @@
\PolyglossiaSetup{latvian}{
hyphennames={latvian},
hyphenmins={2,2},
+ langtag=LVI,
fontsetup=true,
}
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-lithuanian.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-lithuanian.ldf
index db4c564ce6f..3d8ead44857 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-lithuanian.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-lithuanian.ldf
@@ -4,31 +4,33 @@
\PolyglossiaSetup{lithuanian}{
hyphennames={lithuanian},
hyphenmins={2,2},
+ langtag=LTH,
+ indentfirst=true, % TODO Dokumentų rengimo taisyklių, patvirtintų Lietuvos vyriausiojo archyvaro 2011 m. liepos 4 d. įsakymu Nr. V-117, 29.1 punktą
fontsetup=true
}
\def\captionslithuanian{%
+ \def\prefacename{Pratarmė}%
\def\refname{Literatūra}%
\def\abstractname{Santrauka}%
\def\bibname{Literatūra}%
- \def\prefacename{Pratarmė}%
- \def\chaptername{Skyrius}%
+ \def\chaptername{Skyrius}% TODO letter case
\def\appendixname{Priedas}%
\def\contentsname{Turinys}%
\def\listfigurename{Iliustracijų sąrašas}%
\def\listtablename{Lentelių sąrašas}%
\def\indexname{Rodyklė}%
\def\figurename{pav.}%
- \def\tablename{lentelė}%
+ \def\tablename{lentelė}% TODO any special reason for \protect in babel?
\def\partname{Dalis}%
- \def\pagename{puslapis}%
- \def\seename{žiūrėk}%
- \def\alsoname{taip pat}%
\def\enclname{Įdėta}%
\def\ccname{Kopijos}%
- \def\headtoname{Kam}%
+ \def\headtoname{Kam}% TODO empty in babel?
+ \def\pagename{puslapis}%
+ \def\seename{žiūrėk}%
+ \def\alsoname{taip pat}% TODO some other variants are considered in babel?
\def\proofname{Įrodymas}%
- \def\glossaryname{Terminų žodynas}%
+ \def\glossaryname{Terminų žodynas}% TODO some other variants are considered in babel?
}
\def\datelithuanian{%
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-liturgicallatin.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-liturgicallatin.ldf
deleted file mode 100644
index b38f23635dc..00000000000
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-liturgicallatin.ldf
+++ /dev/null
@@ -1,185 +0,0 @@
-%%
-%% This is file `gloss-liturgicallatin.ldf',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% gloss-latin.dtx (with options: `laliturgic')
-%% ------------------------------------------------------------------
-%% 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-liturgiclatin.ldf}
- [2016/09/10 v.1.03 Latin support from polyglossia]
-%%
-
-
-\PolyglossiaSetup{liturgicallatin}{%
- hyphennames={liturgicallatin},
- hyphenmins={2,2},
- frenchspacing=true,
- fontsetup=true,
-}
-\def\liturgicallatincaptions{%
- \def\prefacename{Præfatio}%
- \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\liturgicallatindate{%
- \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 Novembris\or%
- Decembris\fi%
- \space \uppercase\expandafter{\romannumeral\year}}}
-
-\define@boolkey{liturgicallatin}[liturgicallatin@]{babelshorthands}[true]{}
-
-\ifsystem@babelshorthands
- \setkeys{liturgicallatin}{babelshorthands=true}
-\else
- \setkeys{liturgicallatin}{babelshorthands=false}
-\fi
-
-\ifcsundef{initiate@active@char}{%
- \input{babelsh.def}%
- \initiate@active@char{"}%
- \initiate@active@char{'}%
-}{}
-
-\def\liturgicallatin@shorthands{%
- \def\language@group{liturgicallatin}%
- \bbl@activate{"}%
- \declare@shorthand{liturgicallatin}{"}{\relax
- \ifmmode
- \def\xpglla@next{''}%
- \else
- \def\xpglla@nextdq{\futurelet\xpglla@temp\xpglla@cwm}%
- \fi
- \xpglla@nextdq}%
- \bbl@activate{'}%
- \declare@shorthand{liturgicallatin}{'}{\relax
- \ifmmode
- \def\xpglla@nextsq{'}%
- \else
- \def\xpglla@nextsq{\futurelet\temp@A\xpglla@putacute}%
- \fi
- \xpgla@nextsq}%
-}
-
-\def\xpglla@allowhyphens{\bbl@allowhyphens
- \discretionary{-}{}{}\bbl@allowhyphens}
-
-\newcommand*{\xpglla@cwm}{\let\xpglla@@nextdq\relax
- \ifcat\noexpand\xpglla@temp a%
- \let\xpglla@@nextdq\xpglla@allowhyphens
- \else
- \ifx\xpglla@temp\ae
- \let\xpglla@@nextdq\xpglla@allowhyphens
- \else
- \ifx\xpglla@temp\oe
- \let\xpglla@@nextdq\xpglla@allowhyphens
- \else
- \if\noexpand\xpglla@temp\string|%
- \def\xpglla@@nextdq{\xpglla@allowhyphens\@gobble}%
- \fi
- \fi
- \fi
- \fi
- \xpglla@@nextdq}%
-
-\def\xpglla@putacute#1{\let\xpglla@nextsq\relax%
-\if a\xpglla@temp@A
- æ\kern-0.175em^^^^0301\kern0.175em\xpglla@allowhyphens
-\else
-\if o\xpglla@temp@A
- œ\kern-0.175em^^^^0301\kern0.175em\xpglla@allowhyphens
-\else
- \if æ\xpglla@temp@A
- æ^^^^0301%
- \else
- \if œ\xpglla@temp@A
- œ^^^^0301%
- \else
- \string'%
- \fi
- \fi
-\fi
-\fi}%
-\def\noliturgicallatin@shorthands{%
- \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
- \@ifundefined{initiate@active@char}{}{\bbl@deactivate{'}}%
-}
-
-\let\xpglla@savedvalues\empty
-\AtEndPreamble{%
- \edef\xpglla@savedvalues{%
- \clubpenalty=\the\clubpenalty\space
- \@clubpenalty=\the\@clubpenalty\space
- \widowpenalty=\the\widowpenalty\space
- \finalhyphendemerits=\the\finalhyphendemerits}%
-}
-
-\def\noextras@liturgicallatin{%
- \lccode\string"2019=\z@
- \noliturgicallatin@shorthands
- \xpglla@savedvalues
-}
-
-\def\blockextras@liturgicallatin{%
- \lccode\string"2019=\string"2019
- \clubpenalty=3000 \@clubpenalty=3000 \widowpenalty=3000
- \finalhyphendemerits=50000000
- \ifliturgicallatin@babelshorthands\liturgicallatin@shorthands\fi
-}
-
-\def\inlineextras@liturgicallatin{%
- \lccode\string"2019=\string"2019
- \ifliturgicallatin@babelshorthands\liturgicallatin@shorthands\fi
-}
-%% Copyright (C) Claudio Beccari 2013-2016
-%% Copyright (C) Élie Roux 2016
-%%
-%% 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
-%% without limitation the rights to use, copy, modify, merge, publish,
-%% 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
-%% THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-%% IN THE SOFTWARE.
-%%
-%% End of file `gloss-liturgicallatin.ldf'.
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-lsorbian.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-lsorbian.ldf
index 55b58e3b9f0..c57304b8936 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-lsorbian.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-lsorbian.ldf
@@ -1,45 +1,20 @@
\ProvidesFile{gloss-lsorbian.ldf}[polyglossia: module for lower sorbian]
+
+% 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,
}
-\def\captionslsorbian{%
- \def\refname{Referency}%
- \def\abstractname{Abstrakt}%
- \def\bibname{Literatura}%
- \def\prefacename{Zawod}%
- \def\chaptername{Kapitl}%
- \def\appendixname{Dodawki}%
- \def\contentsname{Wopśimjeśe}%
- \def\listfigurename{Zapis wobrazow}%
- \def\listtablename{Zapis tabulkow}%
- \def\indexname{Indeks}%
- \def\figurename{Wobraz}%
- \def\tablename{Tabulka}%
- %\def\thepart{}%
- \def\partname{Źěl}%
- \def\pagename{Strona}%
- \def\seename{gl.}%
- \def\alsoname{gl.~teke}%
- \def\enclname{Pśiłoga}%
- \def\ccname{CC}%
- \def\headtoname{Komu}%
- \def\proofname{Proof}%
- \def\glossaryname{Glossary}%
- }
-\def\datelsorbian{%
- \def\today{\number\day.~\ifcase\month\or
- januara\or februara\or měrca\or apryla\or maja\or
- junija\or julija\or awgusta\or septembra\or oktobra\or
- nowembra\or decembra\fi
- \space \number\year}%
- \def\oldtoday{\textlsorbian{\number\day.~\ifcase\month\or
- wjelikego rožka\or małego rožka\or nalětnika\or
- jatšownika\or rožownika\or smažnika\or pražnika\or
- žnjeńca\or požnjeńca\or winowca\or nazymnika\or
- godownika\fi\space \number\year}}%
- }
+\let\captionslsorbian\captionssorbian@lsorbian
+\let\datelsorbian\datesorbian@lsorbian
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-macedonian.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-macedonian.ldf
index a784666abf7..95924c51c5b 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-macedonian.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-macedonian.ldf
@@ -28,8 +28,6 @@
\xpg@ill@value{#1}{macedonian@alph}\fi}%
\def\macedonian@numbers{%
- \let\latin@Alph\@Alph%
- \let\latin@alph\@alph%
\let\@Alph\macedonian@Alph%
\let\@alph\macedonian@alph%
}
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-magyar.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-magyar.ldf
index ea5f534e7a8..b4b05b6288f 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-magyar.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-magyar.ldf
@@ -1,70 +1,20 @@
\ProvidesFile{gloss-magyar.ldf}[polyglossia: module for magyar]
+
+% We only provide this gloss for babel compatibility.
+
+\input{gloss-hungarian.ldf}
+
\PolyglossiaSetup{magyar}{
hyphennames={magyar,hungarian},
+ langtag=HUN,
hyphenmins={2,2},
fontsetup=true,
}
-\frenchspacing
-
-% change 'táblázat x.x' to 'x.x. táblázat'
-\newcommand{\@magyar@fnum@table}{\thetable.~\tablename}
-\let\fnum@table\@magyar@fnum@table
-
-% change 'ábra x.x' to 'x.x. ábra'
-\newcommand{\@magyar@fnum@figure}{\thefigure.~\figurename}
-\let\fnum@figure\@magyar@fnum@figure
-
-\def\captionsmagyar{%
- \def\refname{Hivatkozások}%
- \def\abstractname{Kivonat}%
- \def\bibname{Irodalomjegyzék}%
- \def\prefacename{Előszó}%
- \def\chaptername{fejezet}%
- \def\appendixname{Függelék}%
- \def\contentsname{Tartalomjegyzék}%
- \def\listfigurename{Ábrák jegyzéke}%
- \def\listtablename{Táblázatok jegyzéke}%
- \def\indexname{Tárgymutató}%
- \def\figurename{ábra}%
- \def\tablename{táblázat}%
- %\def\thepart{}%
- \def\partname{rész}%
- \def\pagename{oldal}%
- \def\seename{lásd}%
- \def\alsoname{lásd még}%
- \def\enclname{Melléklet}%
- \def\ccname{Körlevél–címzettek}%
- \def\headtoname{Címzett}%
- \def\proofname{Bizonyítás}%
- \def\glossaryname{Szójegyzék}%
- }
-\def\datemagyar{%
- \def\today{%
- \number\year.\nobreakspace\ifcase\month\or
- január\or február\or március\or
- április\or május\or június\or
- július\or augusztus\or szeptember\or
- október\or november\or december\fi
- \space\number\day.}%
- \def\ondatemagyar{%
- \number\year.\nobreakspace\ifcase\month\or
- január\or február\or március\or
- április\or május\or június\or
- július\or augusztus\or szeptember\or
- október\or november\or december\fi
- \space\ifcase\day\or
- 1-jén\or 2-án\or 3-án\or 4-én\or 5-én\or
- 6-án\or 7-én\or 8-án\or 9-én\or 10-én\or
- 11-én\or 12-én\or 13-án\or 14-én\or 15-én\or
- 16-án\or 17-én\or 18-án\or 19-én\or 20-án\or
- 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\ondatemagyar}
-
-\def\noextras@magyar{%
- \let\ontoday\@undefined
-}
+\let\captionsmagyar\captionshungarian
+\let\datemagyar\datehungarian
+\let\ondatemagyar\ondatehungarian
+\let\blockextras@magyar\blockextras@hungarian
+\let\noextras@magyar\noextras@hungarian
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-malay.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-malay.ldf
new file mode 100644
index 00000000000..ce617ab0b91
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-malay.ldf
@@ -0,0 +1,171 @@
+\ProvidesFile{gloss-malay.ldf}[polyglossia: module for malay]
+
+\RequirePackage{hijrical}
+
+\PolyglossiaSetup{malay}{%
+ language=Malay,
+ langtag=MLY,
+ hyphennames={malay,melayu,bahasam,bahasai,indonesian,indon,bahasa},
+ hyphenmins={2,2},
+ fontsetup=true}
+
+\providebool{malay@melayu}
+\malay@melayufalse
+\def\malay@variant{malay}
+\define@choicekey*+{malay}{variant}[\val\nr]{indonesian,malaysian}[malaysian]{%
+ \ifcase\nr\relax
+ % indonesian:
+ \def\malay@variant{indonesian}%
+ \malay@melayufalse
+ \or
+ % malaysian:
+ \def\malay@variant{malay}%
+ \malay@melayutrue
+ \fi
+ \ifmalay@melayu
+ \SetLanguageKeys{malay}{language=Malay,langtag=MLY,babelname=bahasam}%
+ \xpg@fontsetup@latin{malay}%
+ % Check if \l@malay is defined. If not, try to set it to some variety
+ % (specific order as in the csv list below), or null language if everything fails
+ \xpg@ifdefined{malay}{}{%
+ \def\do##1{%
+ \xpg@ifdefined{##1}%
+ {\csletcs{l@malay}{l@##1}\listbreak}%
+ {}%
+ }%
+ \docsvlist{melayu,bahasam,bahasai,indonesian,indon,bahasa}
+ \xpg@ifdefined{malay}{}{%
+ \xpg@warning{No hyphenation patterns for Malay (Malaysian) found\MessageBreak
+ I will use the 'null' language instead}%
+ \adddialect\l@malay0%
+ }%
+ }%
+ \else
+ \SetLanguageKeys{malay}{language=Indonesian,langtag=IND,babelname=bahasa}%
+ \xpg@fontsetup@latin{malay}%
+ % Check if \l@indonesian is defined. If not, try to set it to some variety
+ % (specific order as in the csv list below), or null language if everything fails
+ \xpg@ifdefined{indonesian}{}{%
+ \def\do##1{%
+ \xpg@ifdefined{##1}%
+ {\csletcs{l@indonesian}{l@##1}\listbreak}%
+ {}%
+ }%
+ \docsvlist{indon,bahasai,bahasam,malay,melayu,bahasa}
+ \xpg@ifdefined{indonesian}{}{%
+ \xpg@warning{No hyphenation patterns for Malay (Indonesian) found\MessageBreak
+ I will use the 'null' language instead}%
+ \adddialect\l@indonesian0
+ }%
+ }%
+ \fi
+ \xpg@info{Option: malay, variant=\val}%
+}{\xpg@warning{Unknown malay variant `#1'}}
+
+
+\def\malay@language{%
+ \polyglossia@setup@language@patterns{\malay@variant}%
+}%
+
+
+\def\captionsmalay@indonesian{%
+ \def\refname{Pustaka}%
+ \def\abstractname{Ringkasan}%
+ \def\bibname{Bibliografi}%
+ \def\prefacename{Pendahuluan}%
+ \def\chaptername{Bab}%
+ \def\appendixname{Lampiran}%
+ \def\contentsname{Daftar Isi}%
+ \def\listfigurename{Daftar Gambar}%
+ \def\listtablename{Daftar Tabel}%
+ \def\indexname{Indeks}%
+ \def\figurename{Gambar}%
+ \def\tablename{Tabel}%
+ %\def\thepart{}%
+ \def\partname{Bagian}%
+ \def\pagename{Halaman}%
+ \def\seename{lihat}%
+ \def\alsoname{lihat juga}%
+ \def\enclname{Lampiran}%
+ \def\ccname{cc}%
+ \def\headtoname{Kepada}%
+ \def\proofname{Bukti}%
+ \def\glossaryname{Daftar Istilah}%
+}
+
+\def\captionsmalay@malay{%
+ \def\refname{Rujukan}%
+ \def\abstractname{Abstrak}%
+ \def\bibname{Bibliografi}%
+ \def\prefacename{Pendahuluan}%
+ \def\chaptername{Bab}%
+ \def\appendixname{Lampiran}%
+ \def\contentsname{Kandungan}%
+ \def\listfigurename{Senarai Rajah}%
+ \def\listtablename{Senarai Jadual}%
+ \def\indexname{Indeks}%
+ \def\figurename{Rajah}%
+ \def\tablename{Jadual}%
+ \def\thepart{}%
+ \def\partname{Bahagian}%
+ \def\pagename{Halaman}%
+ \def\seename{lihat}%
+ \def\alsoname{lihat juga}%
+ \def\enclname{Lampiran}%
+ \def\ccname{salinan kpd}%
+ \def\headtoname{Kepada}%
+ \def\proofname{Bukti}%
+ \def\glossaryname{Senarai Istilah}%
+}
+
+\def\captionsmalay{%
+ \csname captionsmalay@\malay@variant\endcsname%
+}
+
+\def\datemalay@indonesian{%
+ \def\today{\number\day~\ifcase\month\or
+ Januari\or Pebruari\or Maret\or April\or Mei\or Juni\or
+ Juli\or Agustus\or September\or Oktober\or Nopember\or Desember\fi
+ \space \number\year}}
+
+\def\datemalay@malay{%
+ \def\bahasam@day{%
+ \ifcase\day\or%
+ 1hb\or 2hb\or 3hb\or 4hb\or 5hb\or%
+ 6hb\or 7hb\or 8hb\or 9hb\or 10hb\or%
+ 11hb\or 12hb\or 13hb\or 14hb\or 15hb\or%
+ 16hb\or 17hb\or 18hb\or 19hb\or 20hb\or%
+ 21hb\or 22hb\or 23hb\or 24hb\or 25hb\or%
+ 26hb\or 27hb\or 28hb\or 29hb\or 30hb\or%
+ 31hb\fi}%
+ \def\today{\bahasam@day~\ifcase\month\or
+ Januari\or Februari\or Mac\or April\or Mei\or Jun\or
+ Julai\or Ogos\or September\or Oktober\or November\or Disember\fi
+ \space \number\year}}
+
+\def\datemalay{%
+ \csname datemalay@\malay@variant\endcsname%
+}
+
+% Hijri calendar localizations
+\def\hijrimonthmalay@indonesian#1{%
+ \ifcase#1%
+ \or Muharram\or Safar\or Rabiul awal\or Rabiul akhir\or Jumadil awal\or Jumadil akhir\or Rajab%
+ \or Sya'ban\or Ramadhan\or Syawal\or Dzulkaidah\or Dzulhijjah\fi%
+}
+
+\def\hijrimonthmalay@malay#1{%
+ \ifcase#1%
+ \or Muharram\or Safar\or Rabiulawal\or Rabiulakhir\or Jamadilawal\or Jamadilakhir\or Rejab%
+ \or Syaaban\or Ramadan\or Syawal\or Zulkaedah\or Zulhijah\fi%
+}
+
+\def\hijrimonthmalay{%
+ \csname hijrimonthmalay@\malay@variant\endcsname%
+}
+
+%\Hijritoday is now locale-aware and will format the date with this macro:
+\DefineFormatHijriDate{malay}{%
+ \number\value{Hijriday}\space\hijrimonthmalay{\value{Hijrimonth}}\space\number\value{Hijriyear}}
+
+\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-marathi.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-marathi.ldf
index dc1a429be09..645e7275a58 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-marathi.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-marathi.ldf
@@ -17,8 +17,8 @@ and may look very wrong.}
hyphennames={marathi},
hyphenmins={2,2},%CHECK
fontsetup=true,
+ localnumeral=marathinumerals
%TODO nouppercase=true,
- %TODO localnumber=marathinumber
}
\def\tmp@western{Western}
@@ -31,6 +31,8 @@ and may look very wrong.}
\marathi@devanagari@numeralsfalse
\fi}
+\newcommand{\marathinumerals}[2]{\marathinumber{#2}}
+
\def\marathinumber#1{%
\ifmarathi@devanagari@numerals
\devanagaridigits{\number#1}%
@@ -47,9 +49,9 @@ and may look very wrong.}
\def\appendixname{परिशिष्ट}%
\def\contentsname{अनुक्रमणिका}%
\def\listfigurename{आकृत्यांची यादी}%
- \def\listtablename{कॊष्टकांची यादी}%
+ \def\listtablename{कोष्टकांची यादी}%
\def\indexname{सूची}%
- \def\figurename{आक्रुती}%
+ \def\figurename{आकृती}%
\def\tablename{कोष्टक}%
%\def\thepart{}% TODO
\def\partname{भाग}%
@@ -61,6 +63,7 @@ and may look very wrong.}
\def\headtoname{प्रति}%
\def\proofname{सिद्धता}%
\def\glossaryname{स्पष्टीकरणांची यादी}%
+ \def\authorsand{आणि}%
}
\def\datemarathi{%
\def\marathimonth{%
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-mongolian.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-mongolian.ldf
new file mode 100644
index 00000000000..9f761c3a566
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-mongolian.ldf
@@ -0,0 +1,194 @@
+\ProvidesFile{gloss-mongolian.ldf}[polyglossia: module for mongolian]
+
+\RequirePackage{cyrillicnumbers}
+
+\PolyglossiaSetup{mongolian}{
+ script=Cyrillic,
+ scripttag=cyrl,
+ langtag=MNG,
+ hyphennames={mongolian},
+ hyphenmins={2,2},
+ frenchspacing=true,
+ fontsetup,
+ localnumeral=mongoliannumerals,
+ Localnumeral=Mongoliannumerals
+}
+
+% This file is derived from mongolian-babel. which
+% provides support for Mongolian (Khalkha variety)
+% with Cyrillic script
+% TODO: Implement script=mongolian and maybe other
+% variants of Mongolian
+
+\newif\ifcyrillic@numerals
+\define@key{mongolian}{numerals}[arabic]{%
+ \ifstrequal{#1}{cyrillic}%
+ {\cyrillic@numeralstrue}%
+ {\cyrillic@numeralsfalse}%
+}
+
+\define@boolkey{mongolian}[mongolian@]{babelshorthands}[false]{}
+
+\setkeys{mongolian}{numerals}
+
+\ifsystem@babelshorthands
+ \setkeys{mongolian}{babelshorthands=true}
+\else
+ \setkeys{mongolian}{babelshorthands=false}
+\fi
+
+\ifcsundef{initiate@active@char}{%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
+}{}
+
+\def\mongolian@shorthands{%
+ \bbl@activate{"}%
+ \def\language@group{mongolian}%
+ \declare@shorthand{mongolian}{"`}{„}%
+ \declare@shorthand{mongolian}{"'}{“}%
+ \declare@shorthand{mongolian}{"<}{«}%
+ \declare@shorthand{mongolian}{">}{»}%
+ \declare@shorthand{mongolian}{""}{\hskip\z@skip}%
+ \declare@shorthand{mongolian}{"~}{\textormath{\leavevmode\hbox{-}}{-}}%
+ \declare@shorthand{mongolian}{"=}{\nobreak-\hskip\z@skip}%
+ \declare@shorthand{mongolian}{"|}{\textormath{\nobreak\discretionary{-}{}{\kern.03em}\allowhyphens}{}}%
+ \declare@shorthand{mongolian}{"-}{%
+ \def\mongolian@sh@tmp{%
+ \if\mongolian@sh@next-\expandafter\mongolian@sh@emdash%
+ \else\expandafter\mongolian@sh@hyphen\fi%
+ }%
+ \futurelet\mongolian@sh@next\mongolian@sh@tmp%
+ }%
+ \def\mongolian@sh@hyphen{%
+ \nobreak\-\bbl@allowhyphens}%
+ \def\mongolian@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{mongolian}{",}{\nobreak\hskip.2em\ignorespaces}%
+}
+
+\def\nomongolian@shorthands{%
+ \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
+}
+
+% Taken from babel-mongolian
+\def\captionsmongolian{%
+ \def\prefacename{Өмнөх үг}%
+ \def\refname{Ашигласан ном}%
+ \def\abstractname{Удиртгал}%
+ \def\bibname{Номзүй}%
+ \def\chaptername{Бүлэг}%
+ \def\appendixname{Хавсралт}%
+ \ifcsundef{thechapter}%
+ {\def\contentsname{Агуулга}}%
+ {\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\datemongolian{%
+ \def\today{\number\year~оны \ifcase\month\or
+ 1-р\or 2-р\or 3-р\or 4-р\or 5-р\or 6-р\or
+ 7-р\or 8-р\or 9-р\or 10-р\or 11-р\or 12-р\fi
+ ~сарын \number\day}}
+
+\newcommand{\mongoliannumerals}[2]{\mongoliannumber{#2}}
+\newcommand{\Mongoliannumerals}[2]{\Mongoliannumber{#2}}
+
+\def\mongoliannumber#1{%
+ \ifcyrillic@numerals
+ \cyr@alph{#1}%
+ \else
+ \number#1%
+ \fi%
+}
+
+\def\Mongoliannumber#1{%
+ \ifcyrillic@numerals
+ \cyr@Alph{#1}%
+ \else
+ \number#1%
+ \fi%
+}
+
+\let\mongoliannumeral=\mongoliannumber
+\let\Mongoliannumeral=\Mongoliannumber
+
+\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\mongolian@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}{mongolian@Alph}\fi}
+
+%\def\mongolian@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}{mongolian@alph}\fi}
+
+\def\mongolian@numbers{%
+ \let\latin@alph\@alph
+ \let\latin@Alph\@Alph
+ \ifcyrillic@numerals%
+ \def\mongolian@alph##1{\expandafter\mongoliannumeral\expandafter{\the##1}}%
+ \def\mongolian@Alph##1{\expandafter\Mongoliannumeral\expandafter{\the##1}}%
+ \let\@alph\mongolian@alph%
+ \let\@Alph\mongolian@Alph%
+ \fi
+}
+
+\def\nomongolian@numbers{%
+ \let\@alph\latin@alph%
+ \let\@Alph\latin@Alph%
+}
+
+\def\noextras@mongolian{%
+ \ifcyrillic@numerals\nomongolian@numbers\fi%
+ \nomongolian@shorthands%
+}
+
+\def\blockextras@mongolian{%
+ \ifcyrillic@numerals\mongolian@numbers\fi%
+ \ifmongolian@babelshorthands\mongolian@shorthands\fi%
+}
+
+\def\inlineextras@mongolian{%
+ \ifmongolian@babelshorthands\mongolian@shorthands\fi%
+}
+
+\endinput
+
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-nko.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-nko.ldf
index 63a3c0f02d7..f69b4e138d3 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-nko.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-nko.ldf
@@ -2,12 +2,16 @@
\PolyglossiaSetup{nko}{%
script=N'ko,
scripttag=nko~,
+ langtag=NKO,
fontsetup=true,
hyphennames={nohyphenation},
- direction=RL
+ direction=RL,
+ localnumeral=nkonumerals
}
\RequirePackage{nkonumbers}%
+\newcommand{\nkonumerals}[2]{\nkonumber{#2}}
+
\def\captionsnko{%
\def\prefacename{ߢߍߛߓߍ}%
\def\refname{ߞߐߡߊߛߙߋ}%
@@ -36,27 +40,27 @@
% ߂߀߁߃ ߞߏ߲ߞߏߜߍ ߕߟߋ߬ ߁߈ (RTL)
% ( 18 February 2013 )
% The word "ߕߟߋ߬" is mandatory between month name and day number.
+% Replace "ߕߟߋ߬" by "ߕߋ߬ߟߋ߫" if and only if day = 2 or day = 3 or day = 9
+% or (day >= 20 and day <= 29).
-\def\datenko{%
- \def\today{%
- \nkonumber{\year}\space
- \ifcase\month
- \orߓߌ߲ߠߊߥߎߟߋ߲%
- \orߞߏ߲ߞߏߜߍ%
- \orߕߙߊߓߊ
- \orߞߏ߲ߞߏߘߌ߬ߓߌ%
- \orߘߓߊ߬ߕߊ%
- \orߥߊ߬ߛߌߥߊ߬ߙߊ%
- \orߞߊ߬ߙߌߝߐ߭%
- \orߘߓߊ߬ߓߌߟߊ%
- \orߕߎߟߊߝߌ߲%
- \orߞߏ߲ߓߌߕߌ߮%
- \orߣߍߣߍߓߊ%
- \orߞߏ߬ߟߌ߲߬ߞߏߟߌ߲\fi
- \spaceߕߟߋ߬
- \space\nkonumber{\day}
- }%
+\newcommand*\nkodayprefix[1]{%
+ \ifnum\numexpr#1=2 ߕߋ߬ߟߋ߫\else%
+ \ifnum\numexpr#1=3 ߕߋ߬ߟߋ߫\else%
+ \ifnum\numexpr#1=9 ߕߋ߬ߟߋ߫\else%
+ \ifnum\numexpr#1>19\ifnum\numexpr#1<30 ߕߋ߬ߟߋ߫\else ߕߟߋ߬\fi\else ߕߟߋ߬\fi%
+ \fi%
+ \fi%
+ \fi%
+}
+\newcommand*\nkoday[1]{%
+ % If day = 1, put above "߁", NKO_COMBINING_SHORT_RISING_TONE
+ \ifnum\numexpr#1=1 ߁߭\else%
+ \nkonumber{#1}
+ \fi
+}
+
+\def\datenko{%
\def\today{%
\nkonumber{\year}\space
\ifcase\month
@@ -72,8 +76,8 @@
\or ߞߏ߲ߓߌߕߌ߮%
\or ߣߍߣߍߓߊ%
\or ߞߏ߬ߟߌ߲߬ߞߏߟߌ߲\fi
- \space ߕߟߋ߬
- \space\nkonumber{\day}
+ \space\nkodayprefix{\number\day}
+ \space\nkoday{\day}
}%
}%
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-norsk.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-norsk.ldf
index 975cd109c7c..7e08546c149 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-norsk.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-norsk.ldf
@@ -1,42 +1,20 @@
-\ProvidesFile{gloss-norsk.ldf}[polyglossia: module for norwegian]
+\ProvidesFile{gloss-norsk.ldf}[polyglossia: module for norwegian (bokmal)]
+
+% 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,
}
-\def\captionsnorsk{%
- \def\refname{Referanser}%
- \def\abstractname{Sammendrag}%
- \def\bibname{Bibliografi}%
- \def\prefacename{Forord}%
- \def\chaptername{Kapittel}%
- \def\appendixname{Tillegg}%
- \def\contentsname{Innhold}%
- \def\listfigurename{Figurer}%
- \def\listtablename{Tabeller}%
- \def\indexname{Register}%
- \def\figurename{Figur}%
- \def\tablename{Tabell}%
- %\def\thepart{}% <<<
- \def\partname{Del}%
- \def\pagename{Side}%
- \def\seename{Se}%
- \def\alsoname{Se også}%
- \def\enclname{Vedlegg}%
- \def\ccname{Kopi sendt}%
- \def\headtoname{Til}%
- \def\proofname{Bevis}%
- \def\glossaryname{Ordliste}%
- }
-
-\def\datenorsk{%
- \def\today{\number\day.~\ifcase\month\or
- januar\or februar\or mars\or april\or mai\or juni\or
- juli\or august\or september\or oktober\or november\or desember
- \fi\space\number\year}%
- }
+\let\captionsnorsk\captionsnorwegian@norsk
+\let\datenorsk\datenorwegian@norsk
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-norwegian.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-norwegian.ldf
new file mode 100644
index 00000000000..47d5affa74a
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-norwegian.ldf
@@ -0,0 +1,104 @@
+\ProvidesFile{gloss-norwegian.ldf}[polyglossia: module for norwegian]
+\PolyglossiaSetup{norwegian}{
+ hyphennames={nynorsk},
+ langtag=NYN,
+ hyphenmins={2,2},
+ frenchspacing=true,
+ fontsetup=false,
+}
+
+\def\norwegian@variant{nynorsk}
+\define@choicekey*+{norwegian}{variant}[\val\nr]{nynorsk,bokmal}[nynorsk]{%
+ \ifcase\nr\relax
+ % nynorsk:
+ \def\norwegian@variant{nynorsk}%
+ \SetLanguageKeys{norwegian}{langtag=NYN,babelname=nynorsk}%
+ \xpg@fontsetup@latin{norwegian}%
+ \or
+ % bokmal:
+ \def\norwegian@variant{norsk}%
+ \SetLanguageKeys{norwegian}{langtag=NOR,babelname=norsk}%
+ \xpg@fontsetup@latin{norwegian}%
+ \fi
+ \xpg@info{Option: norwegian, variant=\val}%
+}{\xpg@warning{Unknown norwegian variant `#1'}}
+
+
+\def\norwegian@language{%
+ \polyglossia@setup@language@patterns{\norwegian@variant}
+}%
+
+\def\captionsnorwegian@nynorsk{%
+ \def\refname{Referansar}%
+ \def\abstractname{Sammendrag}%
+ \def\bibname{Litteratur}%
+ \def\prefacename{Forord}%
+ \def\chaptername{Kapittel}%
+ \def\appendixname{Tillegg}%
+ \def\contentsname{Innhald}%
+ \def\listfigurename{Figurar}%
+ \def\listtablename{Tabellar}%
+ \def\indexname{Register}%
+ \def\figurename{Figur}%
+ \def\tablename{Tabell}%
+ %\def\thepart{}% <<<
+ \def\partname{Del}%
+ \def\pagename{Side}%
+ \def\seename{Sjå}%
+ \def\alsoname{Sjå òg}%
+ \def\enclname{Vedlegg}%
+ \def\ccname{Kopi til}%
+ \def\headtoname{Til}%
+ \def\proofname{Bevis}%
+ \def\glossaryname{Ordliste}%
+}
+
+\def\captionsnorwegian@norsk{%
+ \def\refname{Referanser}%
+ \def\abstractname{Sammendrag}%
+ \def\bibname{Bibliografi}%
+ \def\prefacename{Forord}%
+ \def\chaptername{Kapittel}%
+ \def\appendixname{Tillegg}%
+ \def\contentsname{Innhold}%
+ \def\listfigurename{Figurer}%
+ \def\listtablename{Tabeller}%
+ \def\indexname{Register}%
+ \def\figurename{Figur}%
+ \def\tablename{Tabell}%
+ %\def\thepart{}% <<<
+ \def\partname{Del}%
+ \def\pagename{Side}%
+ \def\seename{Se}%
+ \def\alsoname{Se også}%
+ \def\enclname{Vedlegg}%
+ \def\ccname{Kopi sendt}%
+ \def\headtoname{Til}%
+ \def\proofname{Bevis}%
+ \def\glossaryname{Ordliste}%
+}
+
+\def\captionsnorwegian{%
+ \csname captionsnorwegian@\norwegian@variant\endcsname%
+}
+
+\def\datenorwegian@nynorsk{%
+ \def\today{\number\day.~\ifcase\month\or
+ januar\or februar\or mars\or april\or mai\or juni\or
+ juli\or august\or september\or oktober\or november\or desember
+ \fi\space\number\year}%
+}
+
+\def\datenorwegian@norsk{%
+ \def\today{\number\day.~\ifcase\month\or
+ januar\or februar\or mars\or april\or mai\or juni\or
+ juli\or august\or september\or oktober\or november\or
+ desember\fi\space\number\year}%
+}
+
+\def\datenorwegian{%
+ \csname datenorwegian@\norwegian@variant\endcsname%
+}
+
+\endinput
+
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-nynorsk.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-nynorsk.ldf
index 8051d902e16..4b63ab64eae 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-nynorsk.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-nynorsk.ldf
@@ -1,42 +1,20 @@
\ProvidesFile{gloss-nynorsk.ldf}[polyglossia: module for norwegian (Nynorsk)]
+
+% 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,
}
-\def\captionsnynorsk{%
- \def\refname{Referansar}%
- \def\abstractname{Sammendrag}%
- \def\bibname{Litteratur}%
- \def\prefacename{Forord}%
- \def\chaptername{Kapittel}%
- \def\appendixname{Tillegg}%
- \def\contentsname{Innhald}%
- \def\listfigurename{Figurar}%
- \def\listtablename{Tabellar}%
- \def\indexname{Register}%
- \def\figurename{Figur}%
- \def\tablename{Tabell}%
- %\def\thepart{}% <<<
- \def\partname{Del}%
- \def\pagename{Side}%
- \def\seename{Sjå}%
- \def\alsoname{Sjå òg}%
- \def\enclname{Vedlegg}%
- \def\ccname{Kopi til}%
- \def\headtoname{Til}%
- \def\proofname{Bevis}%
- \def\glossaryname{Ordliste}%
- }
-
-\def\datenynorsk{%
- \def\today{\number\day.~\ifcase\month\or
- januar\or februar\or mars\or april\or mai\or juni\or
- juli\or august\or september\or oktober\or november\or desember
- \fi\space\number\year}%
- }
+\let\captionsnorsk\captionsnorwegian@nynorsk
+\let\datenorsk\datenorwegian@nynorsk
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-occitan.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-occitan.ldf
index 8a14b6efe06..9b505b7010b 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-occitan.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-occitan.ldf
@@ -19,6 +19,7 @@
module for Occitan]
\PolyglossiaSetup{occitan}{
hyphennames={occitan},
+ langtag=OCI,
hyphenmins={2,2},
frenchspacing=true,
indentfirst=true,
@@ -31,10 +32,13 @@
\else
\setkeys{occitan}{babelshorthands=false}
\fi
+
\ifcsundef{initiate@active@char}{%
-\input{babelsh.def}%
-\initiate@active@char{"}%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
}{}
+
\def\occitan@shorthands{%
\bbl@activate{"}%
\def\language@group{occitan}%
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-persian.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-persian.ldf
new file mode 100644
index 00000000000..a874e3943ec
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-persian.ldf
@@ -0,0 +1,151 @@
+\ProvidesFile{gloss-persian.ldf}[polyglossia: module for persian]
+\ifluatex
+ \xpg@warning{Persian is not supported with LuaTeX.\MessageBreak
+I will proceed with the compilation, but\MessageBreak
+the output is not guaranteed to be correct\MessageBreak
+and may look very wrong.}
+\fi
+\RequireBidi
+\RequirePackage{arabicnumbers}
+\RequirePackage{farsical}
+\RequirePackage{hijrical}
+\PolyglossiaSetup{persian}{
+ babelname=farsi,
+ script=Arabic,
+ direction=RL,
+ scripttag=arab,
+ langtag=FAR,
+ hyphennames={nohyphenation},
+ fontsetup=true,
+ localnumeral=farsinumerals
+}
+
+\newif\if@western@numerals
+\def\tmp@western{western}
+\define@key{persian}{numerals}[eastern]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@western\@western@numeralstrue\else%
+ \@western@numeralsfalse%
+ \fi}
+
+%this is needed for \abjad in arabicnumbers.sty
+\def\tmp@true{true}
+\define@key{persian}{abjadjimnotail}[true]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@true\abjad@jim@notailtrue%
+ \else
+ \abjad@jim@notailfalse
+ \fi}
+
+% NOT YET USED
+\define@key{persian}{locale}[default]{%
+ \def\@persian@locale{#1}}
+
+%TODO add option for CALENDAR
+
+\setkeys{persian}{locale,numerals}
+
+\def\farsigregmonth#1{\ifcase#1%
+ \or ژانویه\or فوریه\or مارس\or آوریل\or مه\or ژوئن\or ژوئیه\or اوت\or سپتامبر\or اکتبر\or نوامبر\or دسامبر\fi}
+\def\farsimonth#1{\ifcase#1%
+ \or کانون ثانی\or شباط\or اذار%%or ادار
+ \or نیسان\or ایار\or حزیران\or تموز\or آب\or ایلول\or تشرین اول\or تشرین ثانی\or کانون اول\fi}
+
+%\Hijritoday is now locale-aware and will format the date with this macro:
+\DefineFormatHijriDate{persian}{\@ensure@RTL{%
+\farsinumber{\value{Hijriday}}\space\HijriMonthArabic{\value{Hijrimonth}}\space\farsinumber{\value{Hijriyear}}}}
+
+\def\captionspersian{%
+\def\prefacename{\@ensure@RTL{پیشگفتار}}%
+\def\refname{\@ensure@RTL{مراجع}}%
+\def\abstractname{\@ensure@RTL{چکیده}}%
+\def\bibname{\@ensure@RTL{کتاب‌نامه}}%
+\def\chaptername{\@ensure@RTL{فصل}}%
+\def\appendixname{\@ensure@RTL{پیوست}}%
+\def\contentsname{\@ensure@RTL{فهرست مطالب}}%
+\def\listfigurename{\@ensure@RTL{لیست تصاویر}}%
+\def\listtablename{\@ensure@RTL{لیست جداول}}%
+\def\indexname{\@ensure@RTL{نمایه}}%
+\def\figurename{\@ensure@RTL{شكل}}%
+\def\tablename{\@ensure@RTL{جدول}}%
+\def\partname{\@ensure@RTL{بخش}}%
+\def\enclname{\@ensure@RTL{پیوست}}%
+\def\ccname{\@ensure@RTL{رونوشت}}%
+\def\headtoname{\@ensure@RTL{به}}%
+\def\pagename{\@ensure@RTL{صفحة}}%
+\def\seename{\@ensure@RTL{ببینید}}%
+\def\alsoname{\@ensure@RTL{نیز ببینید}}%
+\def\proofname{\@ensure@RTL{برهان}}%
+\def\glossaryname{\@ensure@RTL{دانش‌نامه}}%
+}
+\def\datepersian{%
+ \def\today{\@ensure@RTL{\farsinumber\day\space\farsigregmonth{\month}\space\farsinumber\year}}%
+}
+
+\newcommand{\farsinumerals}[2]{\farsinumber{#2}}
+
+\newif\ifpersiandigits
+
+\def\farsinumber#1{%
+ \if@western@numerals
+ \number#1%
+ \else
+ \ifxetex
+ \ifnum\XeTeXcharglyph"06F0 > 0\relax
+ \persiandigitstrue
+ \fi
+ \else\ifluatex
+ \expandafter\ifnum\directlua{polyglossia.check_char(0x6F0)} > 0\relax
+ \persiandigitstrue
+ \fi
+ \fi\fi
+ \ifpersiandigits
+ \farsidigits{\number#1}%
+ %%{\protect\addfontfeature{Mapping=farsidigits}\number#1}%
+ \else%
+ \arabicdigits{\number#1}%
+ %%{\protect\addfontfeature{Mapping=arabicdigits}\number#1}%
+ \fi
+ \fi
+}
+
+%\def\farsinum#1{\expandafter\farsinumber\csname c@#1\endcsname}
+%\def\farsibracenum#1{(\expandafter\farsinumber\csname c@#1\endcsname)}
+%\def\farsiornatebracenum#1{\char"FD3E\expandafter\farsinumber\csname c@#1\endcsname\char"FD3F}
+%\def\farsialph#1{\expandafter\@farsialph\csname c@#1\endcsname}
+
+\def\persian@numbers{%
+ \let\@alph\abjad%
+ \let\@Alph\abjad%
+}
+
+\def\nopersian@numbers{%
+ \let\@alph\@latinalph%
+ \let\@Alph\@latinAlph%
+}
+
+\def\persian@globalnumbers{%
+ \let\@arabic\farsinumber%
+ \renewcommand\thefootnote{\localnumeral*{footnote}}%
+ \renewcommand\theequation{\localnumeral*{equation}}%
+}
+
+% Store original definition
+\let\xpg@save@arabic\@arabic
+
+\def\nopersian@globalnumbers{
+ \let\@arabic\xpg@save@arabic%
+}
+
+% Save original \MakeUppercase definition
+\let\xpg@save@MakeUppercase\MakeUppercase
+
+\def\blockextras@persian{%
+ \def\MakeUppercase##1{##1}%
+}
+
+\def\noextras@persian{%
+ % restore original \MakeUppercase definition
+ \let\MakeUppercase\xpg@save@MakeUppercase
+}
+\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-piedmontese.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-piedmontese.ldf
index 797e72a5209..4474c8a99e2 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-piedmontese.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-piedmontese.ldf
@@ -4,6 +4,7 @@
\PolyglossiaSetup{piedmontese}{
hyphennames={piedmontese},
hyphenmins={2,2},
+ langtag=PMS,
frenchspacing=true,
fontsetup=true,
}
@@ -18,8 +19,9 @@
\fi
\ifcsundef{initiate@active@char}{%
-\input{babelsh.def}%
-\initiate@active@char{"}%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
}{}
\def\piedmontese@shorthands{%
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-polish.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-polish.ldf
index 05b1a9141b6..ef773026692 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-polish.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-polish.ldf
@@ -2,6 +2,7 @@
\PolyglossiaSetup{polish}{
hyphennames={polish},
hyphenmins={2,2},
+ langtag=PLK,
frenchspacing=true,
fontsetup=true,
}
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-portuges.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-portuges.ldf
index 310f958f160..906f3d546c5 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-portuges.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-portuges.ldf
@@ -1,40 +1,25 @@
-\ProvidesFile{gloss-portuges.ldf}[polyglossia: module for portuguese]
+\ProvidesFile{gloss-portuges.ldf}[polyglossia: module for portuguese (DEPRECATED!)]
+
+% 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,
}
-\def\captionsportuges{%
- \def\refname{Referências}%
- \def\abstractname{Resumo}%
- \def\bibname{Bibliografia}%
- \def\prefacename{Prefácio}%
- \def\chaptername{Capítulo}%
- \def\appendixname{Apêndice}%
- \def\contentsname{Conteúdo}%
- \def\listfigurename{Lista de Figuras}%
- \def\listtablename{Lista de Tabelas}%
- \def\indexname{Índice}%
- \def\figurename{Figura}%
- \def\tablename{Tabela}%
- %\def\thepart{}%
- \def\partname{Parte}%
- \def\pagename{Página}%
- \def\seename{ver}%
- \def\alsoname{ver também}%
- \def\enclname{Anexo}%
- \def\ccname{Com cópia a}%
- \def\headtoname{Para}%
- \def\proofname{Demonstração}%
- \def\glossaryname{Glossário}%
- }
-
-\def\dateportuges{%
- \def\today{\number\day\space de\space\ifcase\month\or
- Janeiro\or Fevereiro\or Março\or Abril\or Maio\or Junho\or
- Julho\or Agosto\or Setembro\or Outubro\or Novembro\or Dezembro\fi
- \space de\space\number\year}%
- }
+\let\captionsportuges\captionsportuguese@portuges
+\let\dateportuges\dateportuguese@portuges
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-portuguese.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-portuguese.ldf
new file mode 100644
index 00000000000..35e7bfae907
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-portuguese.ldf
@@ -0,0 +1,103 @@
+\ProvidesFile{gloss-portuguese.ldf}[polyglossia: module for portuguese]
+\PolyglossiaSetup{portuguese}{
+ babelname=portuges,
+ hyphennames={portuges,portuguese},
+ hyphenmins={2,3},
+ langtag=PTG,
+ fontsetup=true,
+}
+
+\def\portuguese@variant{portuges}
+\define@choicekey*+{portuguese}{variant}[\val\nr]{portuguese,brazilian}[portuguese]{%
+ \ifcase\nr\relax
+ % portuguese:
+ \def\portuguese@variant{portuges}%
+ \or
+ % brazilian:
+ \def\portuguese@variant{brazil}%
+ \SetLanguageKeys{portuguese}{babelname=brazil}%
+ \xpg@ifdefined{brazil}{}%
+ {\xpg@warning{No hyphenation patterns were loaded for "Portuguese (Brazil)"\MessageBreak
+ I will use the standard patterns for Portuguese instead}%
+ \adddialect\l@brazil\l@portuges\relax}%
+ \fi
+ \xpg@info{Option: portuguese, variant=\val}%
+}{\xpg@warning{Unknown portuguese variant `#1'}}
+
+
+\def\portuguese@language{%
+ \polyglossia@setup@language@patterns{\portuguese@variant}
+}%
+
+\def\captionsportuguese@portuges{%
+ \def\refname{Referências}%
+ \def\abstractname{Resumo}%
+ \def\bibname{Bibliografia}%
+ \def\prefacename{Prefácio}%
+ \def\chaptername{Capítulo}%
+ \def\appendixname{Apêndice}%
+ \def\contentsname{Conteúdo}%
+ \def\listfigurename{Lista de Figuras}%
+ \def\listtablename{Lista de Tabelas}%
+ \def\indexname{Índice}%
+ \def\figurename{Figura}%
+ \def\tablename{Tabela}%
+ \def\partname{Parte}%
+ \def\pagename{Página}%
+ \def\seename{ver}%
+ \def\alsoname{ver também}%
+ \def\enclname{Anexo}%
+ \def\ccname{Com cópia a}%
+ \def\headtoname{Para}%
+ \def\proofname{Demonstração}%
+ \def\glossaryname{Glossário}%
+}
+
+\def\captionsportuguese@brazil{%
+ \def\refname{Referências}%
+ \def\abstractname{Resumo}%
+ \def\bibname{Referências Bibliográficas}%
+ \def\prefacename{Prefácio}%
+ \def\chaptername{Capítulo}%
+ \def\appendixname{Apêndice}%
+ \def\contentsname{Sumário}%
+ \def\listfigurename{Lista de Figuras}%
+ \def\listtablename{Lista de Tabelas}%
+ \def\indexname{Índice Remissivo}%
+ \def\figurename{Figura}%
+ \def\tablename{Tabela}%
+ \def\partname{Parte}%
+ \def\pagename{Página}%
+ \def\seename{veja}%
+ \def\alsoname{veja também}%
+ \def\enclname{Anexo}%
+ \def\ccname{Cópia para}%
+ \def\headtoname{Para}%
+ \def\proofname{Demonstração}%
+ \def\glossaryname{Glossário}%
+}
+
+\def\captionsportuguese{%
+ \csname captionsportuguese@\portuguese@variant\endcsname%
+}
+
+\def\dateportuguese@portuges{%
+ \def\today{\number\day\space de\space\ifcase\month\or
+ Janeiro\or Fevereiro\or Março\or Abril\or Maio\or Junho\or
+ Julho\or Agosto\or Setembro\or Outubro\or Novembro\or Dezembro\fi
+ \space de\space\number\year}%
+}
+
+
+\def\dateportuguese@brazil{%
+ \def\today{\number\day\space de\space\ifcase\month\or
+ janeiro\or fevereiro\or março\or abril\or maio\or junho\or
+ julho\or agosto\or setembro\or outubro\or novembro\or dezembro%
+ \fi\space de\space\number\year}%
+}
+
+\def\dateportuguese{%
+ \csname dateportuguese@\portuguese@variant\endcsname%
+}
+
+\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-romanian.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-romanian.ldf
index 43a3d173f35..32077a02e11 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-romanian.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-romanian.ldf
@@ -3,6 +3,7 @@
\PolyglossiaSetup{romanian}{
hyphennames={romanian},
hyphenmins={2,2},
+ langtag=ROM,
fontsetup=true,
}
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-romansh.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-romansh.ldf
index 40d75f47e7b..8557016adef 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-romansh.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-romansh.ldf
@@ -3,6 +3,7 @@
\PolyglossiaSetup{romansh}{%
hyphennames={romansh},
hyphenmins={2,2},
+ langtag=RMS,
indentfirst=true,
fontsetup=true,
}
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-russian.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-russian.ldf
index 5d207ff056e..f969aa258d3 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-russian.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-russian.ldf
@@ -1,4 +1,7 @@
\ProvidesFile{gloss-russian.ldf}[polyglossia: module for russian]
+
+\RequirePackage{cyrillicnumbers}
+
\PolyglossiaSetup{russian}{
script=Cyrillic,
scripttag=cyrl,
@@ -6,22 +9,30 @@
hyphennames={russian},
hyphenmins={2,2},
frenchspacing=true,
- fontsetup
- %TODO localalph={russian@alph,russian@Alph}
+ fontsetup,
+ localnumeral=russiannumerals,
+ Localnumeral=Russiannumerals
}
+\newif\if@russian@modern
\define@key{russian}{spelling}[modern]{%
\ifstrequal{#1}{old}%
- {\def\captionsrussian{\captionsrussian@old}%
- \def\daterussian{\daterussian@old}}%
- {\def\captionsrussian{\captionsrussian@modern}%
- \def\daterussian{\daterussian@modern}}%
+ {\@russian@modernfalse}%
+ {\@russian@moderntrue}%
}
+\def\captionsrussian{%
+ \if@russian@modern\captionsrussian@modern\else\captionsrussian@old\fi%
+}%
+
+\def\daterussian{%
+ \if@russian@modern\daterussian@modern\else\daterussian@old\fi%
+}%
+
\newif\ifcyrillic@numerals
-\define@key{russian}{numerals}[latin]{%
+\define@key{russian}{numerals}[arabic]{%
\ifstrequal{#1}{cyrillic}%
- {\cyrillic@numeralstrue}
+ {\cyrillic@numeralstrue}%
{\cyrillic@numeralsfalse}%
}
@@ -38,6 +49,7 @@
\ifcsundef{initiate@active@char}{%
\input{babelsh.def}%
\initiate@active@char{"}%
+ \shorthandoff{"}%
}{}
\def\russian@shorthands{%
@@ -53,8 +65,8 @@
\declare@shorthand{russian}{"|}{\textormath{\nobreak\discretionary{-}{}{\kern.03em}\allowhyphens}{}}%
\declare@shorthand{russian}{"-}{%
\def\russian@sh@tmp{%
- \if\russian@sh@next-\expandafter\russian@sh@emdash
- \else\expandafter\russian@sh@hyphen\fi
+ \if\russian@sh@next-\expandafter\russian@sh@emdash%
+ \else\expandafter\russian@sh@hyphen\fi%
}%
\futurelet\russian@sh@next\russian@sh@tmp}%
\def\russian@sh@hyphen{%
@@ -73,7 +85,7 @@
\def\@Ccdash{\leavevmode
\nobreak\cyrdash\nobreak\hskip.35em\ignorespaces}%
\ifx\cyrdash\undefined
- \def\cyrdash{\hbox to.8em{--\hss--}}
+ \def\cyrdash{\hbox to.8em{--\hss--}}%
\fi
\declare@shorthand{russian}{",}{\nobreak\hskip.2em\ignorespaces}%
}
@@ -123,7 +135,8 @@
октября\or
ноября\or
декабря\fi%
- \space \number\year\space г.}}
+ \space \number\year\space г.}%
+}
\def\captionsrussian@old{%
\def\prefacename{Предисловіе}%
@@ -149,7 +162,8 @@
\def\seename{см.}%
\def\alsoname{см.~также}%
\def\proofname{Доказательство}%
-}
+}
+
\def\daterussian@old{%
\def\today{\number\day%
\space\ifcase\month\or%
@@ -165,18 +179,24 @@
октября\or
ноября\or
декабря\fi%
- \space \number\year\space г.}}
+ \space \number\year\space г.}%
+}
% The following is based on some ideas from ruscor.sty
\def\russian@capsformat{%
\ifdef{\KOMAScript}{%
\ifdef{\chapterformat}{%
\renewcommand{\chapterformat}{\prechapter\thechapter\postchapter}}{}%
- \renewcommand{\sectionformat}{\presection\thesection\postsection}%
- \renewcommand{\subsectionformat}{\presubsection\thesubsection\postsubsection}%
- \renewcommand{\subsubsectionformat}{\presubsubsection\thesubsubsection\postsubsubsection}%
- \renewcommand{\paragraphformat}{\preparagraph\theparagraph\postparagraph}%
- \renewcommand{\subparagraphformat}{\presubparagraph\thesubparagraph\postsubparagraph}%
+ \ifdef{\sectionformat}{%
+ \renewcommand{\sectionformat}{\presection\thesection\postsection}}{}%
+ \ifdef{\subsectionformat}{%
+ \renewcommand{\subsectionformat}{\presubsection\thesubsection\postsubsection}}{}%
+ \ifdef{\subsubsectionformat}{%
+ \renewcommand{\subsubsectionformat}{\presubsubsection\thesubsubsection\postsubsubsection}}{}%
+ \ifdef{\paragraphformat}{%
+ \renewcommand{\paragraphformat}{\preparagraph\theparagraph\postparagraph}}{}%
+ \ifdef{\subparagraphformat}{%
+ \renewcommand{\subparagraphformat}{\presubparagraph\thesubparagraph\postsubparagraph}}{}%
}{%
\def\@seccntformat##1{\csname pre##1\endcsname%
\csname the##1\endcsname%
@@ -194,27 +214,58 @@
\def\presubsection{}%
\def\presubsubsection{}%
\def\preparagraph{}%
- \def\presubparagraph{}}
-
-\def\Asbuk#1{\expandafter\russian@Alph\csname c@#1\endcsname}
-\def\russian@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}{russian@Alph}\fi}
-\def\asbuk#1{\expandafter\russian@alph\csname c@#1\endcsname}
-\def\russian@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}{russian@alph}\fi}
+ \def\presubparagraph{}%
+}
+
+\newcommand{\russiannumerals}[2]{\russiannumber{#2}}
+\newcommand{\Russiannumerals}[2]{\Russiannumber{#2}}
+
+\def\russiannumber#1{%
+ \ifcyrillic@numerals
+ \cyr@alph{#1}%
+ \else
+ \number#1%
+ \fi%
+}
+
+\def\Russiannumber#1{%
+ \ifcyrillic@numerals
+ \cyr@Alph{#1}%
+ \else
+ \number#1%
+ \fi%
+}
+
+\let\russiannumeral=\russiannumber
+\let\Russiannumeral=\Russiannumber
+
+\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\russian@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}{russian@Alph}\fi}
+
+%\def\russian@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}{russian@alph}\fi}
\def\russian@numbers{%
- \let\latin@alph\@alph%
- \let\latin@Alph\@Alph%
- \ifcyrillic@numerals
- \let\@alph\russian@alph%
- \let\@Alph\russian@Alph%
+ \let\latin@alph\@alph
+ \let\latin@Alph\@Alph
+ \ifcyrillic@numerals%
+ \def\russian@alph##1{\expandafter\russiannumeral\expandafter{\the##1}}%
+ \def\russian@Alph##1{\expandafter\Russiannumeral\expandafter{\the##1}}%
+ \let\@alph\russian@alph%
+ \let\@Alph\russian@Alph%
\fi
}
@@ -227,22 +278,27 @@
\ifdef{\KOMAScript}{%
\ifdef{\chapterformat}{%
\renewcommand{\chapterformat}{\thechapter\autodot\enskip}}{}%
- \renewcommand{\sectionformat}{\thesection\autodot\enskip}%
- \renewcommand{\subsectionformat}{\thesubsection\autodot\enskip}%
- \renewcommand{\subsubsectionformat}{\thesubsubsection\autodot\enskip}%
- \renewcommand{\paragraphformat}{\theparagraph\autodot\enskip}%
- \renewcommand{\subparagraphformat}{\thesubparagraph\autodot\enskip}%
+ \ifdef{\sectionformat}{%
+ \renewcommand{\sectionformat}{\thesection\autodot\enskip}}{}%
+ \ifdef{\subsectionformat}{%
+ \renewcommand{\subsectionformat}{\thesubsection\autodot\enskip}}{}%
+ \ifdef{\subsubsectionformat}{%
+ \renewcommand{\subsubsectionformat}{\thesubsubsection\autodot\enskip}}{}%
+ \ifdef{\paragraphformat}{%
+ \renewcommand{\paragraphformat}{\theparagraph\autodot\enskip}}{}%
+ \ifdef{\subparagraphformat}{%
+ \renewcommand{\subparagraphformat}{\thesubparagraph\autodot\enskip}}{}%
}{%
\def\@seccntformat##1{\csname the##1\endcsname\quad}% = LaTeX kernel
}%
- \ifcyrillic@numerals\norussian@numbers\fi
+ \ifcyrillic@numerals\norussian@numbers\fi%
\norussian@shorthands%
}
\def\blockextras@russian{%
\russian@capsformat%
- \ifcyrillic@numerals\russian@numbers\fi
- \ifrussian@babelshorthands\russian@shorthands\fi
+ \ifcyrillic@numerals\russian@numbers\fi%
+ \ifrussian@babelshorthands\russian@shorthands\fi%
}
\def\inlineextras@russian{%
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-sami.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-sami.ldf
new file mode 100644
index 00000000000..e249a2f675d
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-sami.ldf
@@ -0,0 +1,84 @@
+\ProvidesFile{gloss-sami.ldf}[polyglossia: module for sami]
+
+\PolyglossiaSetup{sami}{
+ babelname=samin,
+ hyphennames={samin},
+ hyphenmins={2,2},
+ language={Northern Sami},
+ langtag=NSM,
+ fontsetup=true,
+}
+
+% TODO: Add other Sami varieties
+\def\sami@variant{northern}
+%\define@choicekey*+{sami}{variant}[\val\nr]{northern}[nothern]{%
+% \ifcase\nr\relax
+% % northern:
+% \def\sami@variant{samin}%
+% \SetLanguageKeys{sami}{language=Northern Sami,langtag=NSM}%
+% \xpg@fontsetup@latin{sami}%
+% \or
+% % other:
+% \def\sami@variant{}%
+% \SetLanguageKeys{sami}{language= Sami,langtag=}%
+% \xpg@fontsetup@latin{sami}%
+% \fi
+% \xpg@info{Option: sami, variant=\val}%
+%}{\xpg@warning{Unknown sami variant `#1'}}
+
+
+%\def\sami@language{%
+% \polyglossia@setup@language@patterns{\sami@variant}
+%}%
+
+\def\captionssami@northern{%
+ \def\refname{Čujuhusat}%
+ \def\abstractname{Čoahkkáigeassu}%
+ \def\bibname{Girjjálašvuohta}%
+ \def\prefacename{Ovdasátni}%
+ \def\chaptername{Kapihttal}%
+ \def\appendixname{Čuovus}%
+ \def\contentsname{Sisdoallu}%
+ \def\listfigurename{Govvosat}%
+ \def\listtablename{Tabeallat}%
+ \def\indexname{Registtar}%
+ \def\figurename{Govus}%
+ \def\tablename{Tabealla}%
+ \def\thepart{}%
+ \def\partname{Oassi}%
+ \def\pagename{Siidu}%
+ \def\seename{geahča}%
+ \def\alsoname{geahča maiddái}%
+ \def\enclname{Mielddus}%
+ \def\ccname{Kopia sáddejuvvon}%
+ \def\headtoname{Vuostáiváldi}%
+ \def\proofname{Duođaštus}%
+ \def\glossaryname{Sátnelistu}%
+}
+
+\def\captionssami{%
+ \csname captionssami@\sami@variant\endcsname%
+}
+
+\def\datesami@northern{%
+ \def\today{\ifcase\month\or
+ ođđajagemánu\or
+ guovvamánu\or
+ njukčamánu\or
+ cuoŋománu\or
+ miessemánu\or
+ geassemánu\or
+ suoidnemánu\or
+ borgemánu\or
+ čakčamánu\or
+ golggotmánu\or
+ skábmamánu\or
+ juovlamánu\fi
+ \space\number\day.~b.\space\number\year}%
+}
+
+\def\datesami{%
+ \csname datesami@\sami@variant\endcsname%
+}
+
+\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-samin.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-samin.ldf
index e9d834a6489..e91698f4335 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-samin.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-samin.ldf
@@ -1,50 +1,19 @@
\ProvidesFile{gloss-samin.ldf}[polyglossia: module for samin]
+% 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,
}
-\def\captionssamin{%
- \def\refname{Čujuhusat}%
- \def\abstractname{Čoahkkáigeassu}%
- \def\bibname{Girjjálašvuohta}%
- \def\prefacename{Ovdasátni}%
- \def\chaptername{Kapihttal}%
- \def\appendixname{Čuovus}%
- \def\contentsname{Sisdoallu}%
- \def\listfigurename{Govvosat}%
- \def\listtablename{Tabeallat}%
- \def\indexname{Registtar}%
- \def\figurename{Govus}%
- \def\tablename{Tabealla}%
- \def\thepart{}%
- \def\partname{Oassi}%
- \def\pagename{Siidu}%
- \def\seename{geahča}%
- \def\alsoname{geahča maiddái}%
- \def\enclname{Mielddus}%
- \def\ccname{Kopia sáddejuvvon}%
- \def\headtoname{Vuostáiváldi}%
- \def\proofname{Duođaštus}%
- \def\glossaryname{Sátnelistu}%
- }
-\def\datesamin{%
- \def\today{\ifcase\month\or
- ođđajagemánu\or
- guovvamánu\or
- njukčamánu\or
- cuoŋománu\or
- miessemánu\or
- geassemánu\or
- suoidnemánu\or
- borgemánu\or
- čakčamánu\or
- golggotmánu\or
- skábmamánu\or
- juovlamánu\fi
- \space\number\day.~b.\space\number\year}%
- }
+\let\captionssamin\captionssami@nothern
+\let\datesamin\datesami@nothern
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-sanskrit.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-sanskrit.ldf
index 3b102d09854..0f988f69fa9 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-sanskrit.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-sanskrit.ldf
@@ -1,4 +1,11 @@
\ProvidesFile{gloss-sanskrit.ldf}[polyglossia: module for sanskrit]
+\ifluatex
+ \xpg@warning{Sanskrit is not supported with LuaTeX.\MessageBreak
+I will proceed with the compilation, but\MessageBreak
+the output is not guaranteed to be correct\MessageBreak
+and may look very wrong.}
+\fi
+
\RequirePackage{devanagaridigits}
\PolyglossiaSetup{sanskrit}{
@@ -7,11 +14,10 @@
hyphenmins={1,3},
frenchspacing=true,
fontsetup=false, % will be done below
- %TODO localnumber=sanskritnumber
+ localnumeral=sanskritnumerals
}
\define@key{sanskrit}{Script}[Devanagari]{%
- \setkeys[xpg@setup]{sanskrit}{script=#1}%
\ifcsdef{fontsetup@sanskrit@#1}%
{\csname fontsetup@sanskrit@#1\endcsname}%
{\xpg@error{`#1' is not a valid script for Sanskrit}%
@@ -19,65 +25,82 @@
}
\def\fontsetup@sanskrit@Devanagari{%
- \def\xpg@scripttag@sanskrit{deva}%
+ \SetLanguageKeys{sanskrit}{scripttag=deva,script=Devanagari}
\xpg@fontsetup@nonlatin{sanskrit}}
\def\fontsetup@sanskrit@Gujarati{%
- \def\xpg@scripttag@sanskrit{gujr}%
+ \SetLanguageKeys{sanskrit}{scripttag=gujr,script=Gujarati}
\xpg@fontsetup@nonlatin{sanskrit}}
\def\fontsetup@sanskrit@Malayalam{%
- \def\xpg@scripttag@sanskrit{mlym}%
+ \SetLanguageKeys{sanskrit}{scripttag=mlym,script=Malayalam}
\xpg@fontsetup@nonlatin{sanskrit}}
\def\fontsetup@sanskrit@Bengali{%
- \def\xpg@scripttag@sanskrit{beng}%
+ \SetLanguageKeys{sanskrit}{scripttag=beng,script=Bengali}
\xpg@fontsetup@nonlatin{sanskrit}}
\def\fontsetup@sanskrit@Kannada{%
- \def\xpg@scripttag@sanskrit{knda}%
+ \SetLanguageKeys{sanskrit}{scripttag=knda,script=Kannada}
\xpg@fontsetup@nonlatin{sanskrit}}
\def\fontsetup@sanskrit@Telugu{%
- \def\xpg@scripttag@sanskrit{telu}%
+ \SetLanguageKeys{sanskrit}{scripttag=telu,script=Telugu}
\xpg@fontsetup@nonlatin{sanskrit}}
-%% DW
\def\fontsetup@sanskrit@Latin{%
- \def\xpg@scripttag@sanskrit{latn}%
- \xpg@fontsetup@latin{sanskrit}}
-%% DW
+ \SetLanguageKeys{sanskrit}{scripttag=latn,script=Latin}
+ \xpg@fontsetup@latin{sanskrit}}
\setkeys{sanskrit}{Script} %sets the default for Devanagari
-%% TODO option for numerals (Devanagari or Western)
-%\def\tmp@western{Western}
-%\newif\ifsanskrit@devanagari@numerals
-%\sanskrit@devanagari@numeralstrue
-%
-%\define@key{sanskrit}{numerals}[Devanagari]{%
-% \def\@tmpa{#1}%
-% \ifx\@tmpa\tmp@western
-% \sanskrit@devanagari@numeralsfalse
-% \fi}
+\def\tmp@western{Western}
+\newif\ifsanskrit@devanagari@numerals
+\sanskrit@devanagari@numeralstrue
+
+\define@key{sanskrit}{numerals}[Devanagari]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@western
+ \sanskrit@devanagari@numeralsfalse
+ \fi%
+}
+
+\newcommand{\sanskritnumerals}[2]{\sanskritnumber{#2}}
+
+\def\sanskritnumber#1{%
+ \ifsanskrit@devanagari@numerals
+ \devanagaridigits{\number#1}%
+ \else
+ \number#1%
+ \fi%
+}
-\newXeTeXintercharclass\sanskrit@punctthin % ! ? ; : danda double_danda
+% FIXME: Support LuaTeX
+\ifxetex
+ \newXeTeXintercharclass\sanskrit@punctthin % ! ? ; : danda double_danda
+\fi
\def\sanskrit@punctthinspace{{\unskip\thinspace}}
\def\sanskrit@punctuation{%
- \XeTeXinterchartokenstate=1%
- \XeTeXcharclass `\! \sanskrit@punctthin
- \XeTeXcharclass `\? \sanskrit@punctthin
- \XeTeXcharclass `\; \sanskrit@punctthin
- \XeTeXcharclass `\: \sanskrit@punctthin
- \XeTeXcharclass `\। \sanskrit@punctthin
- \XeTeXcharclass `\॥ \sanskrit@punctthin
- \XeTeXinterchartoks \z@ \sanskrit@punctthin = \sanskrit@punctthinspace
+ % FIXME: Support LuaTeX
+ \ifxetex
+ \XeTeXinterchartokenstate=1%
+ \XeTeXcharclass `\! \sanskrit@punctthin
+ \XeTeXcharclass `\? \sanskrit@punctthin
+ \XeTeXcharclass `\; \sanskrit@punctthin
+ \XeTeXcharclass `\: \sanskrit@punctthin
+ \XeTeXcharclass `\। \sanskrit@punctthin
+ \XeTeXcharclass `\॥ \sanskrit@punctthin
+ \XeTeXinterchartoks \z@ \sanskrit@punctthin = \sanskrit@punctthinspace
+ \fi
}
\def\nosanskrit@punctuation{%
- \XeTeXcharclass `\! \z@
- \XeTeXcharclass `\? \z@
- \XeTeXcharclass `\; \z@
- \XeTeXcharclass `\: \z@
- \XeTeXcharclass `\। \z@
- \XeTeXcharclass `\॥ \z@
- \XeTeXinterchartokenstate=0%
+ % FIXME: Support LuaTeX
+ \ifxetex
+ \XeTeXcharclass `\! \z@
+ \XeTeXcharclass `\? \z@
+ \XeTeXcharclass `\; \z@
+ \XeTeXcharclass `\: \z@
+ \XeTeXcharclass `\। \z@
+ \XeTeXcharclass `\॥ \z@
+ \XeTeXinterchartokenstate=0%
+ \fi
}
\def\noextras@sanskrit{%
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-scottish.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-scottish.ldf
index 6c76b71076c..14a2388441f 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-scottish.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-scottish.ldf
@@ -1,44 +1,18 @@
\ProvidesFile{gloss-scottish.ldf}[polyglossia: module for scottish]
+% 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,
}
-\def\captionsscottish{%
- \def\refname{Iomraidh}%
- \def\abstractname{Brìgh}%
- \def\bibname{Leabhraichean}%
- \def\prefacename{Preface}% <-- needs translation
- \def\chaptername{Caibideil}%
- \def\appendixname{Ath-sgr`ıobhadh}%
- \def\contentsname{Clàr-obrach}%
- \def\listfigurename{Liosta Dhealbh}%
- \def\listtablename{Liosta Chlàr}%
- \def\indexname{Clàr-innse}%
- \def\figurename{Dealbh}%
- \def\tablename{Clàr}%
- %\def\thepart{}%
- \def\partname{Cuid}%
- \def\pagename{t.d.}%
- \def\seename{see}% <-- needs translation
- \def\alsoname{see also}% <-- needs translation
- \def\enclname{a-staigh}%
- \def\ccname{lethbhreac gu}%
- \def\headtoname{gu}%
- \def\proofname{Proof}% <-- needs translation
- \def\glossaryname{Glossary}% <-- needs translation
- }
-
-\def\datescottish{%
- \def\today{%
- \number\day\space \ifcase\month\or
- am Faoilteach\or an Gearran\or am Màrt\or an Giblean\or
- an Cèitean\or an t-Òg mhios\or an t-Iuchar\or
- Lùnasdal\or an Sultuine\or an Dàmhar\or
- an t-Samhainn\or an Dubhlachd\fi
- \space \number\year}%
- }
+\let\captionsscottish\captionsgaelic@scottish
+\let\datescottish\dategaelic@scottish
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-serbian.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-serbian.ldf
index 436ac751366..1f03368db65 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-serbian.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-serbian.ldf
@@ -4,29 +4,33 @@
%% same thing for all languages that have a "script" key !
%% BETTER APPROACH: see gloss-sanskrit!
+\RequirePackage{cyrillicnumbers}
+
\PolyglossiaSetup{serbian}{
langtag=SRB,
hyphennames={serbian},
hyphenmins={2,2},
indentfirst=true,
- fontsetup=false
+ fontsetup=false,
+ localnumeral=serbiannumerals,
+ Localnumeral=Serbiannumerals
%TODO localalph
}
\newif\if@serbian@cyr
-\define@key{serbian}{Script}[Cyrillic]{% TODO FIXDOC: keyname is CHANGED: script -> Script !!!
+\define@key{serbian}{Script}[Cyrillic]{%
\ifstrequal{#1}{Cyrillic}%
{\@serbian@cyrtrue
- \setkeys[xpg@setup]{serbian}{script=Cyrillic}%
- \def\xpg@scripttag@serbian{cyrl}%
+ \SetLanguageKeys{serbian}{scripttag=cyrl,script=Cyrillic,babelname=serbianc}
\xpg@fontsetup@nonlatin{serbian}%
}%
{\ifstrequal{#1}{Latin}%
{\@serbian@cyrfalse
- \xpg@fontsetup@latin{serbian}%
- %TODO \def\serbian@language{\language=\l@serbianlat}%
- % or should we use Croatian patterns as a fallback for the time being???
+ \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"}}%
@@ -34,15 +38,24 @@
}
\define@key{serbian}{script}[Cyrillic]{\setkeys{serbian}{Script=#1}}
-\setkeys{serbian}{Script}
+\newif\ifserbian@numerals
+\define@key{serbian}{numerals}[arabic]{%
+ \ifstrequal{#1}{latin}{\serbian@numeralsfalse}{%
+ \ifstrequal{#1}{cyrillic}%
+ {\serbian@numeralstrue}
+ {\serbian@numeralsfalse}%
+ }%
+}
+
+\setkeys{serbian}{Script,numerals}
\def\captionsserbian{%
\if@serbian@cyr\captionsserbian@cyr\else\captionsserbian@lat\fi
- }
+}
\def\dateserbian{%
\if@serbian@cyr\dateserbian@cyr\else\dateserbian@lat\fi
- }
+}
\def\captionsserbian@lat{%
\def\refname{Bibliografija}%
@@ -71,13 +84,14 @@
\def\headtoname{Prima}%
\def\proofname{Dokaz}%
\def\glossaryname{Rečnik nepoznatih reči}%
- }
+}
+
\def\dateserbian@lat{%
\def\today{\number\day .~\ifcase\month\or
januar\or februar\or mart\or april\or maj\or
jun\or jul\or avgust\or septembar\or oktobar\or novembar\or
decembar\fi \space \number\year.}%
- }
+}
\def\captionsserbian@cyr{%
\def\refname{Библиографија}%
@@ -105,15 +119,84 @@
\def\headtoname{Прима}%
\def\proofname{Доказ}%
\def\glossaryname{Речник непознатих речи}%
- }
+}
+
\def\dateserbian@cyr{%
\def\today{\number\day .~\ifcase\month\or
јануар\or фебруар\or март\or април\or мај\or
јун\or јул\or август\or септембар\or октобар\or новембар\or
децембар\fi \space \number\year.}%
- }
+}
+
+
+\newcommand{\serbiannumerals}[2]{\serbiannumber{#2}}
+\newcommand{\Serbiannumerals}[2]{\Serbiannumber{#2}}
+
+\def\serbiannumber#1{%
+ \ifserbian@numerals
+ \cyr@alph{#1}%
+ \else
+ \number#1%
+ \fi
+}
+
+\def\Serbiannumber#1{%
+ \ifserbian@numerals
+ \cyr@Alph{#1}%
+ \else
+ \number#1%
+ \fi
+}
+
+\let\serbiannumeral=\serbiannumber
+\let\Serbiannumeral=\Serbiannumber
+
+\def\serbian@numbers{%
+ \let\latin@alph\@alph
+ \let\latin@Alph\@Alph
+ \ifserbian@numerals
+ \def\serbian@alph##1{\expandafter\serbiannumeral\expandafter{\the##1}}%
+ \def\serbian@Alph##1{\expandafter\Serbiannumeral\expandafter{\the##1}}%
+ \let\@alph\serbian@alph%
+ \let\@Alph\serbian@Alph%
+ \fi
+}
+
+\def\noserbian@numbers{%
+ \let\@alph\latin@alph
+ \let\@Alph\latin@Alph
+}
+
+\def\blockextras@serbian{%
+ \ifserbian@numerals\serbian@numbers\fi
+}
+
+\def\noextras@serbian{%
+ \ifserbian@numerals\noserbian@numbers\fi
+}
+
+\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\cyr@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 Ч\or Џ\or Ш\else\xpg@ill@value{#1}{cyr@Alph}\fi}
+
+%\def\cyr@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 ч\or џ\or ш\else\xpg@ill@value{#1}{cyr@alph}\fi}
+
+
\endinput
+
% TODO ? stuff from babel
\def\sh{\mathop{\operator@font sh}\nolimits} % same as \sinh
@@ -132,4 +215,3 @@
\def\Expect{\mathop{\mathsf E\hskip0pt}\nolimits}
\def\Variance{\mathop{\mathsf D\hskip0pt}\nolimits}
-
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-slovak.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-slovak.ldf
index 21a62d65bdf..b6fc910e350 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-slovak.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-slovak.ldf
@@ -3,6 +3,7 @@
\PolyglossiaSetup{slovak}{
hyphennames={slovak},
hyphenmins={2,2},
+ langtag=SKY,
fontsetup=true,
}
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-slovenian.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-slovenian.ldf
index 9c32311bd9e..6ddba4cc2f0 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-slovenian.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-slovenian.ldf
@@ -2,7 +2,9 @@
\PolyglossiaSetup{slovenian}{
hyphennames={slovenian,slovene},
+ babelname=slovene,
hyphenmins={2,2},
+ langtag=SLV,
fontsetup=true,
}
@@ -60,10 +62,10 @@
\def\Abeceda#1{\expandafter\slovenian@Alph\csname c@#1\endcsname}
\def\setlocalalph{%
- \def\extras@slovenian{\let\savealph\alph\let\saveAlph\Alph\let\alph\abeceda\let\Alph\Abeceda}
+ \def\extras@slovenian{\let\alph\abeceda\let\Alph\Abeceda}
\def\blockextras@slovenian{\extras@slovenian}
\def\inlineextras@slovenian{\extras@slovenian}
- \def\noextras@slovenian{\let\alph\savealph\let\Alph\saveAlph}
+ \def\noextras@slovenian{\let\alph\latinalph\let\Alph\latinAlph}
}
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-sorbian.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-sorbian.ldf
new file mode 100644
index 00000000000..ea137ea9dd3
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-sorbian.ldf
@@ -0,0 +1,166 @@
+\ProvidesFile{gloss-sorbian.ldf}[polyglossia: module for sorbian]
+
+\PolyglossiaSetup{sorbian}{
+ language=Upper Sorbian,
+ babelname=uppersorbian,
+ hyphennames={usorbian,uppersorbian},
+ langtag=USB,
+ hyphenmins={2,2},
+ fontsetup=true,
+}
+
+\def\sorbian@variant{usorbian}
+\define@choicekey*+{sorbian}{variant}[\val\nr]{upper,lower}[upper]{%
+ \ifcase\nr\relax
+ % upper:
+ \def\sorbian@variant{usorbian}%
+ \SetLanguageKeys{sorbian}{language=Upper Sorbian,langtag=USB,babelname=uppersorbian}%
+ \xpg@fontsetup@latin{sorbian}%
+ % Check if \l@usorbian is defined. If not, try to set it to some variety
+ % (specific order as in the csv list below), or null language if everything fails
+ \xpg@ifdefined{usorbian}{}{%
+ \def\do##1{%
+ \xpg@ifdefined{##1}%
+ {\csletcs{l@usorbian}{l@##1}\listbreak}%
+ {}%
+ }%
+ \docsvlist{uppersorbian}
+ \xpg@ifdefined{usorbian}{}{%
+ \xpg@warning{No hyphenation patterns for Upper Sorbian found\MessageBreak
+ I will use the 'null' language instead}%
+ \adddialect\l@usorbian0%
+ }
+ }%
+ \or
+ % lower:
+ \def\sorbian@variant{lsorbian}%
+ \SetLanguageKeys{sorbian}{language=Lower Sorbian,langtag=LSB,babelname=lowersorbian}%
+ \xpg@fontsetup@latin{sorbian}%
+ % Check if \l@lsorbian is defined. If not, try to set it to some variety
+ % (specific order as in the csv list below), or null language if everything fails
+ \xpg@ifdefined{lsorbian}{}{%
+ \def\do##1{%
+ \xpg@ifdefined{##1}%
+ {\csletcs{l@lsorbian}{l@##1}\listbreak}%
+ {}%
+ }%
+ \docsvlist{lowersorbian,Lsorbian,usorbian,uppersorbian}
+ \xpg@ifdefined{lsorbian}{}{%
+ \xpg@warning{No hyphenation patterns for Lower Sorbian found\MessageBreak
+ I will use the 'null' language instead}%
+ \adddialect\l@lsorbian0%
+ }
+ }%
+ \fi
+ \xpg@info{Option: sorbian, variant=\val}%
+}{\xpg@warning{Unknown sorbian variant `#1'}}
+
+
+\define@boolkey{sorbian}[sorbian@]{olddate}[true]{}
+
+\setkeys{sorbian}{variant}
+
+
+\def\sorbian@language{%
+ \polyglossia@setup@language@patterns{\sorbian@variant}%
+}%
+
+
+\def\captionssorbian@lsorbian{%
+ \def\refname{Referency}%
+ \def\abstractname{Abstrakt}%
+ \def\bibname{Literatura}%
+ \def\prefacename{Zawod}%
+ \def\chaptername{Kapitl}%
+ \def\appendixname{Dodawki}%
+ \def\contentsname{Wopśimjeśe}%
+ \def\listfigurename{Zapis wobrazow}%
+ \def\listtablename{Zapis tabulkow}%
+ \def\indexname{Indeks}%
+ \def\figurename{Wobraz}%
+ \def\tablename{Tabulka}%
+ %\def\thepart{}%
+ \def\partname{Źěl}%
+ \def\pagename{Strona}%
+ \def\seename{gl.}%
+ \def\alsoname{gl.~teke}%
+ \def\enclname{Pśiłoga}%
+ \def\ccname{CC}%
+ \def\headtoname{Komu}%
+ \def\proofname{Proof}%
+ \def\glossaryname{Glossary}%
+}
+
+\def\captionssorbian@usorbian{%
+ \def\refname{Referency}%
+ \def\abstractname{Abstrakt}%
+ \def\bibname{Literatura}%
+ \def\prefacename{Zawod}%
+ \def\chaptername{Kapitl}%
+ \def\appendixname{Dodawki}%
+ \def\contentsname{Wobsah}%
+ \def\listfigurename{Zapis wobrazow}%
+ \def\listtablename{Zapis tabulkow}%
+ \def\indexname{Indeks}%
+ \def\figurename{Wobraz}%
+ \def\tablename{Tabulka}%
+ %\def\thepart{}%
+ \def\partname{Dźěl}%
+ \def\pagename{Strona}%
+ \def\seename{hl.}%
+ \def\alsoname{hl.~tež}%
+ \def\enclname{Přłoha}%
+ \def\ccname{CC}%
+ \def\headtoname{Komu}%
+ \def\proofname{Proof}% <-- needs translation
+ \def\glossaryname{Glossary}% <-- needs translation
+}%
+
+\def\captionssorbian{%
+ \csname captionssorbian@\sorbian@variant\endcsname%
+}
+
+\def\datesorbian@lsorbian{%
+ \def\oldtoday{%
+ \number\day.~\ifcase\month\or
+ wjelikego rožka\or małego rožka\or nalětnika\or
+ jatšownika\or rožownika\or smažnika\or pražnika\or
+ žnjeńca\or požnjeńca\or winowca\or nazymnika\or
+ godownika\fi\space \number\year}%
+ \def\today{%
+ \ifsorbian@olddate
+ \oldtoday%
+ \else
+ \number\day.~\ifcase\month\or
+ januara\or februara\or měrca\or apryla\or maja\or
+ junija\or julija\or awgusta\or septembra\or oktobra\or
+ nowembra\or decembra\fi
+ \space \number\year%
+ \fi
+ }%
+}
+
+\def\datesorbian@usorbian{%
+ \def\oldtoday{\number\day.~\ifcase\month\or
+ wulkeho róžka\or małeho róžka\or nalětnika\or
+ jutrownika\or róžownika\or smažnika\or pražnika\or
+ žnjenca\or požnjenca\or winowca\or nazymnika\or
+ hodownika\fi \space \number\year}%
+ \def\today{%
+ \ifsorbian@olddate
+ \oldtoday%
+ \else
+ \number\day.~\ifcase\month\or
+ januara\or februara\or měrca\or apryla\or meje\or junija\or
+ julija\or awgusta\or septembra\or oktobra\or
+ nowembra\or decembra\fi
+ \space \number\year%
+ \fi
+ }%
+}
+
+\def\datesorbian{%
+ \csname datesorbian@\sorbian@variant\endcsname%
+}
+
+\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-spanish.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-spanish.ldf
index 30d4f7817c5..717202bdfed 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-spanish.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-spanish.ldf
@@ -2,6 +2,7 @@
\PolyglossiaSetup{spanish}{
hyphennames={spanish},
hyphenmins={2,2},
+ langtag=ESP,
frenchspacing=true,
indentfirst=true,
fontsetup=true,
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-swedish.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-swedish.ldf
index ac1d7160694..f39e65fba81 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-swedish.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-swedish.ldf
@@ -3,6 +3,7 @@
\PolyglossiaSetup{swedish}{
hyphennames={swedish},
hyphenmins={2,2},
+ langtag=SVE,
frenchspacing=true,
fontsetup=true,
}
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-syriac.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-syriac.ldf
index 817a6f29bc9..a977c75f7c5 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-syriac.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-syriac.ldf
@@ -11,9 +11,11 @@ and may look very wrong.}
\PolyglossiaSetup{syriac}{
script=Syriac,
scripttag=syrc,
+ langtag=SYR,
direction=RL,
hyphennames={syriac,nohyphenation},
fontsetup=true,
+ localnumeral=syriacnumerals
%TODO localalph
}
@@ -115,18 +117,31 @@ and may look very wrong.}
\def\@syriacnumber#1{%
\if@eastern@numerals
- \ifnum\XeTeXcharglyph"0661 > 0%
- %%% we test for the presence of one of ١٢٣٤٥٦٧٨٩٠ in the Syriac font,
- %%% else we try \arabicfont if defined (and give a warning),
- %%% else we fall back to the Western numerals.
- %%\protect\addfontfeature{Mapping=arabicdigits}\number#1}%
- \protect\arabicdigits{\number#1}%
- \else%
- \ifcsdef{arabicfont}%
- {\protect\arabicdigits{\number#1}%
- \xpg@warning{You have specified the option numerals=eastern for Syriac, but the Syriac font does not contain the appropriate glyphs: I am using \string\arabicfont instead}}%
- {\number#1%%% <---changed from \RL{\protect\reset@font\protect\number#1}%
- \xpg@warning{You have specified the option numerals=eastern for Syriac, but the Syriac font does not contain the appropriate glyphs: since \string\arabicfont is not defined, we'll use Western numerals instead}}%
+ %%% we test for the presence of one of ١٢٣٤٥٦٧٨٩٠ in the Syriac font,
+ %%% else we try \arabicfont if defined (and give a warning),
+ %%% else we fall back to the Western numerals.
+ \ifxetex
+ \ifnum\XeTeXcharglyph"0661 > 0%
+ %%\protect\addfontfeature{Mapping=arabicdigits}\number#1}%
+ \protect\arabicdigits{\number#1}%
+ \else%
+ \ifcsdef{arabicfont}%
+ {\protect\arabicdigits{\number#1}%
+ \xpg@warning{You have specified the option numerals=eastern for Syriac, but the Syriac font does not contain the appropriate glyphs: I am using \string\arabicfont instead}}%
+ {\number#1%%% <---changed from \RL{\protect\reset@font\protect\number#1}%
+ \xpg@warning{You have specified the option numerals=eastern for Syriac, but the Syriac font does not contain the appropriate glyphs: since \string\arabicfont is not defined, we'll use Western numerals instead}}%
+ \fi
+ \else% LuaTeX
+ \expandafter\ifnum\directlua{polyglossia.check_char(0x661)} > 0\relax
+ %%\protect\addfontfeature{Mapping=arabicdigits}\number#1}%
+ \protect\arabicdigits{\number#1}%
+ \else%
+ \ifcsdef{arabicfont}%
+ {\protect\arabicdigits{\number#1}%
+ \xpg@warning{You have specified the option numerals=eastern for Syriac, but the Syriac font does not contain the appropriate glyphs: I am using \string\arabicfont instead}}%
+ {\number#1%%% <---changed from \RL{\protect\reset@font\protect\number#1}%
+ \xpg@warning{You have specified the option numerals=eastern for Syriac, but the Syriac font does not contain the appropriate glyphs: since \string\arabicfont is not defined, we'll use Western numerals instead}}%
+ \fi
\fi
\else
%%\RL{\protect\reset@font\number#1}%
@@ -134,31 +149,39 @@ and may look very wrong.}
\fi}
\def\syriac@numbers{%
- \let\@latinalph\@alph%
- \let\@latinAlph\@Alph%
\let\@alph\abjadsyriac%
\let\@Alph\abjadsyriac%
}
+
\def\nosyriac@numbers{%
- \let\@alph\@latinalph%
- \let\@Alph\@latinAlph%
- }
+ \let\@alph\latin@alph%
+ \let\@Alph\latin@Alph%
+}
+
+\newcommand{\syriacnumerals}[2]{\syriacnumber{#2}}
+
+% Store original definition
+\let\xpg@save@arabic\@arabic
+
\def\syriac@globalnumbers{%
- \let\orig@arabic\@arabic%
\let\@arabic\syriacnumber%
- \renewcommand\thefootnote{\protect\syriacnumber{\c@footnote}}%
+ \renewcommand\thefootnote{\localnumeral*{footnote}}%
}
+
\def\nosyriac@globalnumbers{%
- \let\@arabic\orig@arabic%
- \renewcommand\thefootnote{\protect\number{\c@footnote}}%
- }
+ \let\@arabic\xpg@save@arabic%
+}
+
+% Save original \MakeUppercase definition
+\let\xpg@save@MakeUppercase\MakeUppercase
\def\blockextras@syriac{%
- \let\@@MakeUppercase\MakeUppercase%
\def\MakeUppercase##1{##1}%
- }
+}
+
\def\noextras@syriac{%
- \let\MakeUppercase\@@MakeUppercase%
- }
+ % restore original \MakeUppercase definition
+ \let\MakeUppercase\xpg@save@MakeUppercase%
+}
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-thai.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-thai.ldf
index 21cea5c8b17..73cbfc47e5b 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-thai.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-thai.ldf
@@ -17,8 +17,10 @@ and may look very wrong.}
\PolyglossiaSetup{thai}{
script=Thai,
scripttag=thai,
+ langtag=THA,
hyphennames={nohyphenation},
- fontsetup=true
+ fontsetup=true,
+ localnumeral=thainumerals
%TODO localalph={xxx@alph,xxx@Alph}
%TODO localdigits=thainumber
}
@@ -84,6 +86,8 @@ and may look very wrong.}
\fi
}
+\newcommand{\thainumerals}[2]{\thainumber{#2}}
+
\def\thainumber#1{%
\if@thai@numerals
\thaidigits{\number#1}%
@@ -106,26 +110,23 @@ and may look very wrong.}
ศ\or ษ\or ส\or ห\or ฬ\or อ\or ฮ\else\xpg@ill@value{#1}{@thaialph}\fi}
\def\thai@numbers{%
- \let\@latinalph\@alph%
- \let\@latinAlph\@Alph%
\if@thai@numerals
\let\@alph\@thaialph%
\let\@Alph\@thaiAlph%
\fi
}
\def\nothai@numbers{%
- \let\@alph\@latinalph%
- \let\@Alph\@latinAlph%
+ \let\@alph\latin@alph%
+ \let\@Alph\latin@Alph%
}
\def\thai@globalnumbers{%
\let\orig@arabic\@arabic%
\let\@arabic\thainumber%
- \renewcommand{\thefootnote}{\protect\thainumber{\c@footnote}}%
+ \renewcommand{\thefootnote}{\localnumeral*{footnote}}%
}
\def\nothai@globalnumbers{%
\let\@arabic\orig@arabic%
- \renewcommand\thefootnote{\protect\number{\c@footnote}}%
}
\def\blockextras@thai{%
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-tibetan.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-tibetan.ldf
index e5702096b73..19d2bf486a1 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-tibetan.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-tibetan.ldf
@@ -8,10 +8,11 @@
\PolyglossiaSetup{tibetan}{
script=Tibetan,
scripttag=tibt,
+ langtag=TIB,
hyphennames={nohyphenation},
- fontsetup=true
+ fontsetup=true,
+ localnumeral=tibetannumerals
%TODO localalph={xxx@alph,xxx@Alph}
- %TODO localdigits=tibetannumber
}
\newif\if@tibetan@numerals
@@ -126,29 +127,28 @@
\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 ས\or ཧ\or ཨ
\else\xpg@ill@value{#1}{@tibetanalph}\fi}
-
+
+\newcommand{\tibetanumerals}[2]{\tibetannumber{#2}}
+
\def\tibetan@numbers{%
- \let\@latinalph\@alph%
- \let\@latinAlph\@Alph%
\if@tibetan@numerals
\let\@alph\@tibetanalph%
\let\@Alph\@tibetanAlph%
\fi
}
\def\notibetan@numbers{%
- \let\@alph\@latinalph%
- \let\@Alph\@latinAlph%
+ \let\@alph\latin@alph%
+ \let\@Alph\latin@Alph%
}
\def\tibetan@globalnumbers{%
\let\xpg@orig@arabic\@arabic%
\let\@arabic\tibetannumber%
- \renewcommand{\thefootnote}{\protect\tibetannumber{\c@footnote}}%
+ \renewcommand{\thefootnote}{\localnumeral*{footnote}}%
}
\def\notibetan@globalnumbers{%
\let\@arabic\xpg@orig@arabic%
- \renewcommand\thefootnote{\protect\number{\c@footnote}}%
}
\def\noextras@tibetan{%
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-ukrainian.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-ukrainian.ldf
index 726225cad5c..a0d1d3c3fc0 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-ukrainian.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-ukrainian.ldf
@@ -31,8 +31,9 @@
\fi
\ifcsundef{initiate@active@char}{%
-\input{babelsh.def}%
-\initiate@active@char{"}%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
}{}
\def\ukrainian@shorthands{%
@@ -151,8 +152,6 @@
ц\or ч\or ш\or щ\or ю\or я\else\xpg@ill@value{#1}{ukrainian@alph}\fi}
\def\ukrainian@numbers{%
- \let\latin@Alph\@Alph%
- \let\latin@alph\@alph%
\let\@Alph\ukrainian@Alph%
\let\@alph\ukrainian@alph%
}
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-urdu.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-urdu.ldf
index 31e998dede3..aa54226134a 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-urdu.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-urdu.ldf
@@ -16,9 +16,9 @@ and may look very wrong.}
scripttag=arab,
langtag=URD,
hyphennames={urdu,nohyphenation},
- fontsetup=true
+ fontsetup=true,
+ localnumeral=urdunumerals
%TODO localalph={abjad,abjad}
- %TODO localnumber=urdunumber
}
\newif\if@western@numerals
@@ -108,37 +108,41 @@ and may look very wrong.}
\fi}
\def\urdu@numbers{%
- \let\@latinalph\@alph%
- \let\@latinAlph\@Alph%
\let\@alph\abjad%
\let\@Alph\abjad%
- }
+}
\def\nourdu@numbers{%
- \let\@alph\@latinalph%
- \let\@Alph\@latinAlph%
- }
+ \let\@alph\latin@alph%
+ \let\@Alph\latin@Alph%
+}
+
+\newcommand{\urdunumerals}[2]{\urdunumber{#2}}
+
+% Store original definition
+\let\xpg@save@arabic\@arabic
\def\urdu@globalnumbers{%
- \let\orig@arabic\@arabic%
\let\@arabic\urdunumber%
% For some reason \thefootnote needs to be set separately:
- \renewcommand\thefootnote{\protect\urdunumber{\c@footnote}}%
- }
+ \renewcommand\thefootnote{\localnumeral*{footnote}}%
+}
\def\nourdu@globalnumbers{
- \let\@arabic\orig@arabic%
- \renewcommand\thefootnote{\protect\number{\c@footnote}}%
- }
+ \let\@arabic\xpg@save@arabic%
+}
+
+% Save original \MakeUppercase definition
+\let\xpg@save@MakeUppercase\MakeUppercase
\def\blockextras@urdu{%
- \let\@@MakeUppercase\MakeUppercase%
\def\MakeUppercase##1{##1}%
- }
+}
\def\noextras@urdu{%
- \let\MakeUppercase\@@MakeUppercase%
- }
+ % restore original \MakeUppercase definition
+ \let\MakeUppercase\xpg@save@MakeUppercase%
+}
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-usorbian.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-usorbian.ldf
index 810354ce1d4..7aa9dd32a80 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-usorbian.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-usorbian.ldf
@@ -1,48 +1,20 @@
\ProvidesFile{gloss-usorbian.ldf}[polyglossia: module for upper sorbian]
+% 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,
}
-\def\captionsusorbian{%
- \def\refname{Referency}%
- \def\abstractname{Abstrakt}%
- \def\bibname{Literatura}%
- \def\prefacename{Zawod}%
- \def\chaptername{Kapitl}%
- \def\appendixname{Dodawki}%
- \def\contentsname{Wobsah}%
- \def\listfigurename{Zapis wobrazow}%
- \def\listtablename{Zapis tabulkow}%
- \def\indexname{Indeks}%
- \def\figurename{Wobraz}%
- \def\tablename{Tabulka}%
- %\def\thepart{}%
- \def\partname{Dźěl}%
- \def\pagename{Strona}%
- \def\seename{hl.}%
- \def\alsoname{hl.~tež}%
- \def\enclname{Přłoha}%
- \def\ccname{CC}%
- \def\headtoname{Komu}%
- \def\proofname{Proof}% <-- needs translation
- \def\glossaryname{Glossary}% <-- needs translation
- }%
-
-\def\dateusorbian{%
- \def\today{\number\day.~\ifcase\month\or
- januara\or februara\or měrca\or apryla\or meje\or junija\or
- julija\or awgusta\or septembra\or oktobra\or
- nowembra\or decembra\fi
- \space \number\year}%
- %TODO implement option olddate:
- \def\oldtoday{\number\day.~\ifcase\month\or
- wulkeho róžka\or małeho róžka\or nalětnika\or
- jutrownika\or róžownika\or smažnika\or pražnika\or
- žnjenca\or požnjenca\or winowca\or nazymnika\or
- hodownika\fi \space \number\year}%
- }
+\let\captionsusorbian\captionssorbian@usorbian
+\let\dateusorbian\datesorbian@usorbian
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/gloss-welsh.ldf b/Master/texmf-dist/tex/latex/polyglossia/gloss-welsh.ldf
index 1908554cc2d..686ea18e7ac 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/gloss-welsh.ldf
+++ b/Master/texmf-dist/tex/latex/polyglossia/gloss-welsh.ldf
@@ -3,6 +3,7 @@
\PolyglossiaSetup{welsh}{
hyphennames={welsh},
hyphenmins={2,3},
+ langtag=WEL,
fontsetup=true,
}
@@ -66,10 +67,11 @@
Mai\or Mehefin\or Gorffennaf\or Awst\or
Medi\or Hydref\or Tachwedd\or Rhagfyr\fi%
\space\number\year}%
-
\def\formaltoday{%
- \expandafter\welsh@article\welsh@ordinal@long\day\space o\space\ifcase\month\or Ionawr\or Chwefror\or Fawrth\or Ebrill\or Fai\or Fehefin\or Orffenaf\or Awst\or Fedi\or Hydref\or Dachwedd\or Ragfyr\fi
+ \expandafter\welsh@article\welsh@ordinal@long\day\space o\space\ifcase\month\or
+ Ionawr\or Chwefror\or Fawrth\or Ebrill\or Fai\or Fehefin\or Orffenaf\or Awst\or
+ Fedi\or Hydref\or Dachwedd\or Ragfyr\fi%
\space\number\year}%
- }
+}
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/hebrewcal.sty b/Master/texmf-dist/tex/latex/polyglossia/hebrewcal.sty
index bf50422c19b..c56480b3727 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/hebrewcal.sty
+++ b/Master/texmf-dist/tex/latex/polyglossia/hebrewcal.sty
@@ -5,11 +5,15 @@
\ifluatex\RequirePackage{luabidi}\else\RequirePackage{bidi}\fi
\newif\if@xpg@hebrewcal@marcheshvan
+\@xpg@hebrewcal@marcheshvanfalse
+
\DeclareOption{marcheshvan}{\@xpg@hebrewcal@marcheshvantrue}
-\ifx\if@xpg@hebrew@marcheshvan\undefined
- \newif\if@xpg@hebrew@marcheshvan
- \@xpg@hebrew@marcheshvanfalse
-\fi
+
+\@ifundefined{if@xpg@hebrew@marcheshvan}{}{%
+ \if@xpg@hebrew@marcheshvan
+ \@xpg@hebrewcal@marcheshvantrue
+ \fi
+}
%% TODO rewrite this on the basis of Reingold & Dershowitz
%% on the model of hijrical (using calc)
@@ -66,7 +70,7 @@
\ifcase#1%
% nothing for 0
\or תשרי%
- \or\if@xpg@hebrewcal@marcheshvan מרחשון\else\if@xpg@hebrew@marcheshvan מרחשון\else חשון\fi\fi%
+ \or\if@xpg@hebrewcal@marcheshvan מרחשון\else חשון\fi%
\or כסלו%
\or טבת%
\or שבט%
@@ -91,8 +95,7 @@
\ifcase #1%
% nothing for 0
\or Tishrei%
- % \or\if@xpg@hebrewcal@marcheshvan Marcheshvan\else\if@xpg@hebrew@marcheshvan Marcheshvan\else Heshvan\fi\fi%
- \or\if@xpg@hebrewcal@marcheshvan Marcheshvan\else\if@xpg@hebrew@marcheshvan Marcheshvan\else Heshvan\fi\fi%
+ \or\if@xpg@hebrewcal@marcheshvan Marcheshvan\else Heshvan\fi%
\or Kislev%
\or Tebeth%
\or Shebat%
diff --git a/Master/texmf-dist/tex/latex/polyglossia/polyglossia-frpt.lua b/Master/texmf-dist/tex/latex/polyglossia/polyglossia-frpt.lua
index ac265fa06f6..9d0ae235f22 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/polyglossia-frpt.lua
+++ b/Master/texmf-dist/tex/latex/polyglossia/polyglossia-frpt.lua
@@ -14,15 +14,15 @@ local nodecodes = nodes.nodecodes
local insert_node_before = node.insert_before
local insert_node_after = node.insert_after
-local remove_node = nodes.remove
+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 math_code = nodecodes.math
local end_of_math = function (n)
for n in traverse_nodes(math_code, n.next) do
return n
@@ -160,10 +160,10 @@ local function process(head)
if somespace then
local somepenalty = somepenalty(prevprev,10000)
if somepenalty then
- head = remove_node(head,prev,true)
- head = remove_node(head,prevprev,true)
+ head = remove_node(head,prev)
+ head = remove_node(head,prevprev)
else
- head = remove_node(head,prev,true)
+ head = remove_node(head,prev)
end
end
insert_node_before(head,start,get_penalty_node())
@@ -177,13 +177,13 @@ local function process(head)
if somepenalty then
local somespace = somespace(nextnext,true)
if somespace then
- head = remove_node(head,next,true)
- head = remove_node(head,nextnext,true)
+ 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,true)
+ head = remove_node(head,next)
end
end
insert_node_after(head,start,get_kern_node(map[2]*quad))
diff --git a/Master/texmf-dist/tex/latex/polyglossia/polyglossia-korean.lua b/Master/texmf-dist/tex/latex/polyglossia/polyglossia-korean.lua
new file mode 100644
index 00000000000..c09ae6d5b74
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/polyglossia/polyglossia-korean.lua
@@ -0,0 +1,603 @@
+--
+-- polyglossia-korean.lua
+--
+
+local glyph_id = node.id"glyph"
+local hbox_id = node.id"hlist"
+local vbox_id = node.id"vlist"
+local glue_id = node.id"glue"
+local penalty_id = node.id"penalty"
+local disc_id = node.id"disc"
+
+--
+-- attr_korean: variant = plain (0), classic (1), modern (2)
+--
+local attr_korean = luatexbase.attributes["xpg@attr@korean"]
+local attr_josa = luatexbase.attributes["xpg@attr@autojosa"]
+
+--
+-- characters after which linebreak is not allowed
+--
+local nobr_after = {
+ [0x28] = 1, -- ( LEFT PARENTHESIS
+ [0x3C] = 1, -- < LESS-THAN SIGN
+ [0x5B] = 1, -- [ LEFT SQUARE BRACKET
+ [0x60] = 1, -- ` GRAVE ACCENT
+ [0x7B] = 1, -- { LEFT CURLY BRACKET
+ [0xAB] = 1, -- « LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ [0x2018] = 1, -- ‘ LEFT SINGLE QUOTATION MARK
+ [0x201C] = 1, -- “ LEFT DOUBLE QUOTATION MARK
+ [0x2329] = 1, -- 〈 LEFT-POINTING ANGLE BRACKET
+ [0x3008] = 1, -- 〈 LEFT ANGLE BRACKET
+ [0x300A] = 1, -- 《 LEFT DOUBLE ANGLE BRACKET
+ [0x300C] = 1, -- 「 LEFT CORNER BRACKET
+ [0x300E] = 1, -- 『 LEFT WHITE CORNER BRACKET
+ [0x3010] = 1, -- 【 LEFT BLACK LENTICULAR BRACKET
+ [0x3014] = 1, -- 〔 LEFT TORTOISE SHELL BRACKET
+ [0x3016] = 1, -- 〖 LEFT WHITE LENTICULAR BRACKET
+ [0x3018] = 1, -- 〘 LEFT WHITE TORTOISE SHELL BRACKET
+ [0x301A] = 1, -- 〚 LEFT WHITE SQUARE BRACKET
+ [0x301D] = 1, -- 〝 REVERSED DOUBLE PRIME QUOTATION MARK
+ [0xFE17] = 1, -- ︗ PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+ [0xFE35] = 1, -- ︵ PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+ [0xFE37] = 1, -- ︷ PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+ [0xFE39] = 1, -- ︹ PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+ [0xFE3B] = 1, -- ︻ PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+ [0xFE3D] = 1, -- ︽ PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+ [0xFE3F] = 1, -- ︿ PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+ [0xFE41] = 1, -- ﹁ PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+ [0xFE43] = 1, -- ﹃ PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+ [0xFE47] = 1, -- ﹇ PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+ [0xFE59] = 1, -- ﹙ SMALL LEFT PARENTHESIS
+ [0xFE5B] = 1, -- ﹛ SMALL LEFT CURLY BRACKET
+ [0xFE5D] = 1, -- ﹝ SMALL LEFT TORTOISE SHELL BRACKET
+ [0xFF08] = 1, -- ( FULLWIDTH LEFT PARENTHESIS
+ [0xFF3B] = 1, -- [ FULLWIDTH LEFT SQUARE BRACKET
+ [0xFF5B] = 1, -- { FULLWIDTH LEFT CURLY BRACKET
+ [0xFF5F] = 1, -- ⦅ FULLWIDTH LEFT WHITE PARENTHESIS
+ [0xFF62] = 1, -- 「 HALFWIDTH LEFT CORNER BRACKET
+}
+
+--
+-- characters before which linebreak is not allowed
+-- (currently, not much differences among the followings)
+-- 1: normal chars
+-- 2: hangul jamo vowels and trailing consonants
+-- 3: kana small letters
+-- 0: dashes (supress visible spacing)
+--
+local nobr_before = setmetatable({
+ [0x21] = 1, -- ! EXCLAMATION MARK
+ [0x22] = 1, -- " QUOTATION MARK
+ [0x27] = 1, -- ' APOSTROPHE
+ [0x29] = 1, -- ) RIGHT PARENTHESIS
+ [0x2C] = 1, -- , COMMA
+ [0x2D] = 0, -- - HYPHEN-MINUS
+ [0x2E] = 1, -- . FULL STOP
+ [0x2F] = 0, -- / SOLIDUS
+ [0x3A] = 0, -- : COLON
+ [0x3B] = 1, -- ; SEMICOLON
+ [0x3E] = 1, -- > GREATER-THAN SIGN
+ [0x3F] = 1, -- ? QUESTION MARK
+ [0x5C] = 0, -- \ REVERSE SOLIDUS
+ [0x5D] = 1, -- ] RIGHT SQUARE BRACKET
+ [0x7D] = 1, -- } RIGHT CURLY BRACKET
+ [0x7E] = 0, -- ~ TILDE
+ [0xB7] = 1, -- · MIDDLE DOT
+ [0xBB] = 1, -- » RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ [0x2013] = 0, -- – EN DASH
+ [0x2014] = 0, -- — EM DASH
+ [0x2015] = 1, -- ― HORIZONTAL BAR
+ [0x2019] = 1, -- ’ RIGHT SINGLE QUOTATION MARK
+ [0x201D] = 1, -- ” RIGHT DOUBLE QUOTATION MARK
+ [0x2025] = 1, -- ‥ TWO DOT LEADER
+ [0x2026] = 1, -- … HORIZONTAL ELLIPSIS
+ [0x232A] = 1, -- 〉 RIGHT-POINTING ANGLE BRACKET
+ [0x3001] = 1, -- 、 IDEOGRAPHIC COMMA
+ [0x3002] = 1, -- 。 IDEOGRAPHIC FULL STOP
+ [0x3005] = 1, -- 々 IDEOGRAPHIC ITERATION MARK
+ [0x3009] = 1, -- 〉 RIGHT ANGLE BRACKET
+ [0x300B] = 1, -- 》 RIGHT DOUBLE ANGLE BRACKET
+ [0x300D] = 1, -- 」 RIGHT CORNER BRACKET
+ [0x300F] = 1, -- 』 RIGHT WHITE CORNER BRACKET
+ [0x3011] = 1, -- 】 RIGHT BLACK LENTICULAR BRACKET
+ [0x3015] = 1, -- 〕 RIGHT TORTOISE SHELL BRACKET
+ [0x3017] = 1, -- 〗 RIGHT WHITE LENTICULAR BRACKET
+ [0x3019] = 1, -- 〙 RIGHT WHITE TORTOISE SHELL BRACKET
+ [0x301B] = 1, -- 〛 RIGHT WHITE SQUARE BRACKET
+ [0x301C] = 1, -- 〜 WAVE DASH
+ [0x301E] = 1, -- 〞 DOUBLE PRIME QUOTATION MARK
+ [0x301F] = 1, -- 〟 LOW DOUBLE PRIME QUOTATION MARK
+ [0x3035] = 1, -- 〵 VERTICAL KANA REPEAT MARK LOWER HALF
+ [0x303B] = 1, -- 〻 VERTICAL IDEOGRAPHIC ITERATION MARK
+ [0x303C] = 1, -- 〼 MASU MARK
+ [0x3041] = 3, -- ぁ HIRAGANA LETTER SMALL A
+ [0x3043] = 3, -- ぃ HIRAGANA LETTER SMALL I
+ [0x3045] = 3, -- ぅ HIRAGANA LETTER SMALL U
+ [0x3047] = 3, -- ぇ HIRAGANA LETTER SMALL E
+ [0x3049] = 3, -- ぉ HIRAGANA LETTER SMALL O
+ [0x3063] = 3, -- っ HIRAGANA LETTER SMALL TU
+ [0x3083] = 3, -- ゃ HIRAGANA LETTER SMALL YA
+ [0x3085] = 3, -- ゅ HIRAGANA LETTER SMALL YU
+ [0x3087] = 3, -- ょ HIRAGANA LETTER SMALL YO
+ [0x308E] = 3, -- ゎ HIRAGANA LETTER SMALL WA
+ [0x3095] = 3, -- ゕ HIRAGANA LETTER SMALL KA
+ [0x3096] = 3, -- ゖ HIRAGANA LETTER SMALL KE
+ [0x3099] = 1, -- COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+ [0x309A] = 1, -- COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+ [0x309B] = 1, -- ゛ KATAKANA-HIRAGANA VOICED SOUND MARK
+ [0x309C] = 1, -- ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+ [0x309D] = 1, -- ゝ HIRAGANA ITERATION MARK
+ [0x309E] = 1, -- ゞ HIRAGANA VOICED ITERATION MARK
+ [0x30A0] = 1, -- ゠ KATAKANA-HIRAGANA DOUBLE HYPHEN
+ [0x30A1] = 3, -- ァ KATAKANA LETTER SMALL A
+ [0x30A3] = 3, -- ィ KATAKANA LETTER SMALL I
+ [0x30A5] = 3, -- ゥ KATAKANA LETTER SMALL U
+ [0x30A7] = 3, -- ェ KATAKANA LETTER SMALL E
+ [0x30A9] = 3, -- ォ KATAKANA LETTER SMALL O
+ [0x30C3] = 3, -- ッ KATAKANA LETTER SMALL TU
+ [0x30E3] = 3, -- ャ KATAKANA LETTER SMALL YA
+ [0x30E5] = 3, -- ュ KATAKANA LETTER SMALL YU
+ [0x30E7] = 3, -- ョ KATAKANA LETTER SMALL YO
+ [0x30EE] = 3, -- ヮ KATAKANA LETTER SMALL WA
+ [0x30F5] = 3, -- ヵ KATAKANA LETTER SMALL KA
+ [0x30F6] = 3, -- ヶ KATAKANA LETTER SMALL KE
+ [0x30FB] = 1, -- ・ KATAKANA MIDDLE DOT
+ [0x30FC] = 1, -- ー KATAKANA-HIRAGANA PROLONGED SOUND MARK
+ [0x30FD] = 1, -- ヽ KATAKANA ITERATION MARK
+ [0x30FE] = 1, -- ヾ KATAKANA VOICED ITERATION MARK
+ [0xFE30] = 1, -- ︰ PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+ [0xFE31] = 1, -- ︱ PRESENTATION FORM FOR VERTICAL EM DASH
+ [0xFE32] = 1, -- ︲ PRESENTATION FORM FOR VERTICAL EN DASH
+ [0xFE36] = 1, -- ︶ PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+ [0xFE38] = 1, -- ︸ PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+ [0xFE3A] = 1, -- ︺ PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+ [0xFE3C] = 1, -- ︼ PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+ [0xFE3E] = 1, -- ︾ PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+ [0xFE40] = 1, -- ﹀ PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+ [0xFE42] = 1, -- ﹂ PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+ [0xFE44] = 1, -- ﹄ PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+ [0xFE48] = 1, -- ﹈ PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+ [0xFE5A] = 1, -- ﹚ SMALL RIGHT PARENTHESIS
+ [0xFE5C] = 1, -- ﹜ SMALL RIGHT CURLY BRACKET
+ [0xFE5E] = 1, -- ﹞ SMALL RIGHT TORTOISE SHELL BRACKET
+ [0xFF01] = 1, -- ! FULLWIDTH EXCLAMATION MARK
+ [0xFF09] = 1, -- ) FULLWIDTH RIGHT PARENTHESIS
+ [0xFF0C] = 1, -- , FULLWIDTH COMMA
+ [0xFF0E] = 1, -- . FULLWIDTH FULL STOP
+ [0xFF1A] = 1, -- : FULLWIDTH COLON
+ [0xFF1B] = 1, -- ; FULLWIDTH SEMICOLON
+ [0xFF1F] = 1, -- ? FULLWIDTH QUESTION MARK
+ [0xFF3D] = 1, -- ] FULLWIDTH RIGHT SQUARE BRACKET
+ [0xFF5D] = 1, -- } FULLWIDTH RIGHT CURLY BRACKET
+ [0xFF60] = 1, -- ⦆ FULLWIDTH RIGHT WHITE PARENTHESIS
+ [0xFF61] = 1, -- 。 HALFWIDTH IDEOGRAPHIC FULL STOP
+ [0xFF63] = 1, -- 」 HALFWIDTH RIGHT CORNER BRACKET
+ [0xFF64] = 1, -- 、 HALFWIDTH IDEOGRAPHIC COMMA
+ [0xFF65] = 1, -- ・ HALFWIDTH KATAKANA MIDDLE DOT
+ [0xFF9E] = 1, -- ゙ HALFWIDTH KATAKANA VOICED SOUND MARK
+ [0xFF9F] = 1, -- ゚ HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+}, { __index = function(_,c)
+ if c >= 0x1160 and c <= 0x11FF then return 2 end
+ if c >= 0xD7B0 and c <= 0xD7FF then return 2 end
+ if c >= 0x302A and c <= 0x302F then return 1 end
+ if c >= 0x31F0 and c <= 0x31FF then return 3 end
+ if c >= 0xFF67 and c <= 0xFF70 then return 3 end
+ if c >= 0xFE00 and c <= 0xFE0F then return 1 end
+ if c >= 0xFE10 and c <= 0xFE19 and not (c == 0xFE17) then return 1 end
+ if c >= 0xFE50 and c <= 0xFE58 then return 1 end
+ if c >= 0xE0100 and c <= 0xE01EF then return 1 end
+ end
+})
+
+--
+-- whether 'c' is a cjk character
+--
+local function is_cjk (c)
+ return c >= 0xAC00 and c <= 0xD7FF
+ or c >= 0x1100 and c <= 0x11FF
+ or c >= 0xA960 and c <= 0xA97F
+ or c >= 0x2E80 and c <= 0x9FFF
+ or c >= 0xF900 and c <= 0xFAFF
+ or c >= 0xFE10 and c <= 0xFE1F
+ or c >= 0xFE30 and c <= 0xFE6F
+ or c >= 0xFF00 and c <= 0xFFEF
+ or c >= 0x1F100 and c <= 0x1F2FF
+ or c >= 0x20000 and c <= 0x2FA1F
+ or nobr_after[c] and c > 0x2014
+ or nobr_before[c] and c > 0x2014
+end
+
+--
+-- classify cjk characters
+-- 1: openings
+-- 2: closings
+-- 3: centered chars
+-- 4: full stops
+-- 5: ellipses
+-- 6: exclamation and question marks
+-- 0: all others
+--
+local charclass = setmetatable({
+ [0x2018] = 1, [0x201C] = 1, [0x2329] = 1, [0x3008] = 1,
+ [0x300A] = 1, [0x300C] = 1, [0x300E] = 1, [0x3010] = 1,
+ [0x3014] = 1, [0x3016] = 1, [0x3018] = 1, [0x301A] = 1,
+ [0x301D] = 1, [0xFE17] = 1, [0xFE35] = 1, [0xFE37] = 1,
+ [0xFE39] = 1, [0xFE3B] = 1, [0xFE3D] = 1, [0xFE3F] = 1,
+ [0xFE41] = 1, [0xFE43] = 1, [0xFE47] = 1, [0xFF08] = 1,
+ [0xFF3B] = 1, [0xFF5B] = 1, [0xFF5F] = 1, [0xFF62] = 1,
+ [0x2019] = 2, [0x201D] = 2, [0x232A] = 2, [0x3001] = 2,
+ [0x3009] = 2, [0x300B] = 2, [0x300D] = 2, [0x300F] = 2,
+ [0x3011] = 2, [0x3015] = 2, [0x3017] = 2, [0x3019] = 2,
+ [0x301B] = 2, [0x301E] = 2, [0x301F] = 2, [0xFE10] = 2,
+ [0xFE11] = 2, [0xFE18] = 2, [0xFE36] = 2, [0xFE38] = 2,
+ [0xFE3A] = 2, [0xFE3C] = 2, [0xFE3E] = 2, [0xFE40] = 2,
+ [0xFE42] = 2, [0xFE44] = 2, [0xFE48] = 2, [0xFF09] = 2,
+ [0xFF0C] = 2, [0xFF3D] = 2, [0xFF5D] = 2, [0xFF60] = 2,
+ [0xFF63] = 2, [0xFF64] = 2, [0x00B7] = 3, [0x30FB] = 3,
+ [0xFF1A] = 3, [0xFF1B] = 3, [0xFF65] = 3, [0x3002] = 4,
+ [0xFE12] = 4, [0xFF0E] = 4, [0xFF61] = 4, [0x2015] = 5,
+ [0x2025] = 5, [0x2026] = 5, [0xFE19] = 5, [0xFE30] = 5,
+ [0xFE31] = 5, [0xFE15] = 6, [0xFE16] = 6, [0xFF01] = 6,
+ [0xFF1F] = 6,
+}, { __index = function() return 0 end })
+
+--
+-- table for spacing between char classes
+-- 1 stands for 0.5*fontsize when variant=classic
+--
+local intercharclass = { [0] =
+ { [0] = nil, {1,1}, nil, {.5,.5} },
+ { [0] = nil, nil, nil, {.5,.5} },
+ { [0] = {1,1}, {1,1}, nil, {.5,.5}, nil, {1,1}, {1,1} },
+ { [0] = {.5,.5},{.5,.5},{.5,.5},{1,.5}, {.5,.5},{.5,.5},{.5,.5} },
+ { [0] = {1,0}, {1,0}, nil, {1.5,.5},nil, {1,0}, {1,0} },
+ { [0] = nil, {1,1}, nil, {.5,.5} },
+ { [0] = {1,1}, {1,1}, nil, {.5,.5} },
+}
+
+--
+-- get a new penalty node
+--
+local function get_new_penalty (p)
+ local penalty = node.new("penalty")
+ penalty.penalty = p
+ return penalty
+end
+
+--
+-- get a new glue node
+--
+local function get_new_glue (...)
+ local glue = node.new("glue")
+ node.setglue(glue, ...)
+ return glue
+end
+
+--
+-- return 0.5*fontsize of given fontid
+-- space: true if variant=modern; then 0.5*interword_space
+--
+local function get_font_size (fid, space)
+ local size = font.getparameters(fid)
+ if space then
+ size = size and size.space or 196608
+ else
+ size = size and size.quad or 655360
+ end
+ return size/2
+end
+
+--
+-- charclass 1 thru 4 will be packed in \hbox to 0.5em{\hss? curr \hss?}
+-- when variant=classic/modern
+--
+local function glyph_to_box (head, curr, class)
+ local g, h = curr
+ local size = get_font_size(g.font)
+ head, curr = node.remove(head, curr)
+ g.next, g.prev = nil, nil
+ local hss = get_new_glue(0, 65536, 65536, 2, 2)
+ if class == 1 then
+ h, hss.next, g.prev = hss, g, hss
+ elseif class == 2 or class == 4 then
+ h, g.next, hss.prev = g, hss, g
+ else
+ local hss2 = node.copy(hss)
+ h, hss.next, g.prev, g.next, hss2.prev = hss, g, hss, hss2, g
+ end
+ h = nodes.simple_font_handler(h)
+ local box = node.hpack(h, size, "exactly")
+ if curr then
+ head, curr = node.insert_before(head, curr, box)
+ else
+ head, curr = node.insert_after(head, node.tail(head), box)
+ end
+ return head, curr
+end
+
+--
+-- insert spacing defined as charclass[a][b] between a and b
+-- f: fontid
+-- var: variant = plain, classic, modern
+-- cc: charclass of current char
+-- nc: charclass of next char
+-- nobr: linebreak is not allowed
+--
+local function insert_cjk_penalty_glue (head, curr, f, var, cc, nc, nobr)
+ if nobr or cc == 1 or nc > 1 then
+ local penalty = get_new_penalty(10000)
+ head, curr = node.insert_after(head, curr, penalty)
+ end
+ local factor = get_font_size(f, var == 2)
+ local t = intercharclass[cc][nc]
+ local glue = get_new_glue(t[1]*factor, nil, t[2]*factor)
+ head, curr = node.insert_after(head, curr, glue)
+ return head, curr
+end
+
+--
+-- insert inter-character spacing in other normal cases
+-- f: fontid
+-- var: variant = plain, classic, modern
+-- x: true between cjk and non-cjk (a little more spacing)
+--
+local function insert_penalty_glue (head, curr, f, var, x)
+ if var ~= 1 then
+ local penalty = get_new_penalty(50)
+ head, curr = node.insert_after(head, curr, penalty)
+ end
+ local size, glue = get_font_size(f, x and var == 2)
+ if x then
+ glue = get_new_glue(size/2, size/4, size/8)
+ else
+ glue = get_new_glue(0, size/10, size/50)
+ end
+ head, curr = node.insert_after(head, curr, glue)
+ return head, curr
+end
+
+--
+-- main process for linebreak and inter-character spacing
+-- lb: true if pre_linebreak_filter
+--
+local function korean_break (head, lb)
+ local curr = head
+ while curr do
+ if curr.id == glyph_id then
+ local var = node.has_attribute(curr, attr_korean)
+ if var then
+ local c, f = curr.char or 0, curr.font or 0
+ local cc, cjkc = charclass[c], is_cjk(c)
+
+ -- compress cjk punctuations when charclass is 1 thru 4
+ if var > 0 and cc > 0 and cc < 5 then
+ head, curr = glyph_to_box(head, curr, cc)
+ end
+
+ local next = curr.next
+ if next and next.id == glyph_id then
+ local n = next.char or 0
+ local nc = charclass[n]
+ local nobr = nobr_before[n] or nobr_after[c]
+
+ -- insert spacing as of intercharclass
+ if var > 0 and intercharclass[cc][nc] then
+ head, curr = insert_cjk_penalty_glue(head, curr, f, var, cc, nc, nobr)
+
+ -- or insert spacing when linebreak is allowed
+ elseif not nobr then
+ local cjkn = is_cjk(n)
+
+ -- if curr or next is cjk char
+ if cjkc or cjkn then
+
+ -- if between cjk and non-cjk
+ if var > 0 and not (cjkc and cjkn) and nobr_before[c] ~= 0 then
+ head, curr = insert_penalty_glue(head, curr, f, var, true)
+
+ -- or under pre_linebreak_filter
+ elseif lb then
+ head, curr = insert_penalty_glue(head, curr, f, var)
+ end
+ end
+ end
+ end
+ end
+ end
+ curr = curr.next
+ end
+ return head
+end
+
+--
+-- process for reordering hangul tone marks (U+302E, U+302F)
+-- some hangul fonts (eg. Noto CJK) are so designed that hangul tone marks
+-- should be moved to the first position of a syllable.
+-- Currently, this functionality is not provided by luaotfload.
+--
+local function reorder_tm (head)
+ local curr, tone = node.slide(head)
+ while curr do
+ if curr.id == glyph_id and node.has_attribute(curr, attr_korean) then
+ local c, wd = curr.char or 0, curr.width or 0
+ if (c == 0x302E or c == 0x302F) and wd > 0 then
+ tone = curr
+ elseif tone and not nobr_before[c] then
+ head = node.remove(head, tone)
+ tone.next, tone.prev = nil, nil
+ head, curr = node.insert_before(head, curr, tone)
+ tone = nil
+ end
+ end
+ curr = curr.prev
+ end
+ return head
+end
+
+--
+-- automatic josa selection
+--
+local josa_table = {
+ -- consonant ㄹ, vowel, other consonants
+ [0xAC00] = {0xC774, 0xAC00, 0xC774}, -- 가 => 이, 가, 이
+ [0xC740] = {0xC740, 0xB294, 0xC740}, -- 은 => 은, 는, 은
+ [0xC744] = {0xC744, 0xB97C, 0xC744}, -- 을 => 을, 를, 을
+ [0xC640] = {0xACFC, 0xC640, 0xACFC}, -- 와 => 과, 와, 과
+ [0xC73C] = {nil, nil, 0xC73C}, -- 으(로) => , , 으
+ [0xC774] = {0xC774, nil, 0xC774}, -- 이(라) => 이, , 이
+}
+
+--
+-- helper function for number-like characters
+--
+local function josa_char_num (t, c)
+ c = c % 10 + 0x30
+ return t[c] or 2
+end
+
+--
+-- decide josa selection
+--
+local josa_code = setmetatable({
+ [0x30] = 3, [0x31] = 1, [0x33] = 3, [0x36] = 3, [0x37] = 1,
+ [0x38] = 1, [0x4C] = 1, [0x4D] = 3, [0x4E] = 3, [0x6C] = 1,
+ [0x6D] = 3, [0x6E] = 3, [0xFB02] = 1, [0xFB04] = 1,
+},{ __index = function(t,c)
+ if c >= 0xAC00 and c <= 0xD7A3 then
+ c = (c - 0xAC00) % 28 + 0x11A7
+ end
+ if c >= 0x11A8 and c <= 0x11FF then
+ if c == 0x11AF then return 1 end
+ return 3
+ end
+ if c >= 0xD7CB and c <= 0xD7FB then return 3 end
+ if c >= 0x2170 and c <= 0x217F then c = c - 0x10 end
+ if c >= 0x2160 and c <= 0x216F then
+ if c >= 0x216C then return 3 end
+ return josa_char_num(t, c - 0x215F)
+ end
+ if c >= 0x2460 and c <= 0x2473 then return josa_char_num(t, c - 0x245F) end
+ if c >= 0x2474 and c <= 0x2487 then return josa_char_num(t, c - 0x2473) end
+ if c >= 0x2488 and c <= 0x249B then return josa_char_num(t, c - 0x2487) end
+ if c >= 0x249C and c <= 0x24B5 then return t[c - 0x249C + 0x61] or 2 end
+ if c >= 0x24B6 and c <= 0x24CF then return t[c - 0x24B6 + 0x61] or 2 end
+ if c >= 0x24D0 and c <= 0x24E9 then return t[c - 0x24D0 + 0x61] or 2 end
+ if c >= 0x3131 and c <= 0x318E then
+ if c == 0x3139 then return 1 end
+ if c >= 0x314F and c <= 0x3163 or c >= 0x3187 then return 2 end
+ return 3
+ end
+ if c >= 0x3260 and c <= 0x327E then c = c - 0x60 end
+ if c >= 0x3200 and c <= 0x321E then
+ if c == 0x3203 then return 1 end
+ if c >= 0x320E then return 2 end
+ return 3
+ end
+ if c >= 0xFF10 and c <= 0xFF19 then return josa_char_num(t, c - 0xFF10) end
+ if c >= 0xFF21 and c <= 0xFF3A then return t[c - 0xFF21 + 0x61] or 2 end
+ if c >= 0xFF41 and c <= 0xFF5A then return t[c - 0xFF41 + 0x61] or 2 end
+ return 2
+ end
+})
+
+--
+-- obtain char that comes just before the josa
+--
+local function get_prev_char (p)
+ while p do
+ if p.id == glyph_id then
+ local pc = p.char or 0
+ if not nobr_after[pc] then
+ if not nobr_before[pc] or nobr_before[pc] >= 2 then
+ return pc
+ end
+ end
+ elseif p.id == hbox_id or p.id == vbox_id then
+ local pc = get_prev_char(node.slide(p.head))
+ if pc then return pc end
+ end
+ p = p.prev
+ end
+end
+
+--
+-- main process of josa selection
+--
+local function auto_josa (head)
+ local curr, tofree = head, {}
+ while curr do
+ if curr.id == glyph_id then
+ local josa = node.has_attribute(curr, attr_josa)
+ if josa then
+ local cc = curr.char or 0
+ if josa == 0 then
+ josa = josa_code[get_prev_char(curr.prev) or 0x30]
+ end
+ if cc == 0xC774 then
+ local n = curr.next
+ if n and n.char and n.char >= 0xAC00 and n.char <= 0xD7A3 then
+ else
+ cc = 0xAC00
+ end
+ end
+ local new = josa_table[cc]
+ if new then
+ cc = new[josa]
+ if cc then
+ curr.char = cc
+ else
+ head = node.remove(head, curr)
+ table.insert(tofree, curr)
+ end
+ end
+ node.unset_attribute(curr, attr_josa)
+ end
+ end
+ curr = curr.next
+ end
+ for _,v in ipairs(tofree) do node.free(v) end
+ return head
+end
+
+--
+-- now register to luatex callbacks
+-- As char value of glyphs can be changed by opentype GSUB process,
+-- we have to occupy the first position among callback functions.
+--
+local prepend_to_callback
+if luatexbase.base_add_to_callback then
+ prepend_to_callback = function(name, func, desc)
+ luatexbase.add_to_callback(name, func, desc, 1)
+ end
+else
+ prepend_to_callback = function(name, func, desc)
+ local t = { {func, desc} }
+ for _,v in ipairs(luatexbase.callback_descriptions(name)) do
+ table.insert(t, {luatexbase.remove_from_callback(name, v)})
+ end
+ for _,v in ipairs(t) do
+ luatexbase.add_to_callback(name, v[1], v[2])
+ end
+ end
+end
+
+prepend_to_callback ("pre_linebreak_filter",
+ function(head)
+ head = auto_josa(head)
+ head = korean_break(head, true)
+ head = reorder_tm(head)
+ return head
+ end,
+ "polyglossia.lang_korean")
+
+prepend_to_callback ("hpack_filter",
+ function(head)
+ head = auto_josa(head)
+ head = korean_break(head)
+ head = reorder_tm(head)
+ return head
+ end,
+ "polyglossia.lang_korean")
+
+-- vim:ft=lua:tw=0:sw=4:ts=4:expandtab
diff --git a/Master/texmf-dist/tex/latex/polyglossia/polyglossia.lua b/Master/texmf-dist/tex/latex/polyglossia/polyglossia.lua
index 463b3d2fe3b..e26e7dc6ec8 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/polyglossia.lua
+++ b/Master/texmf-dist/tex/latex/polyglossia/polyglossia.lua
@@ -26,12 +26,11 @@ end
polyglossia = polyglossia or {}
local polyglossia = polyglossia
-local current_language
-local last_language
-local default_language
+-- 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 }
-polyglossia.newloader_loaded_languages = { }
-polyglossia.newloader_max_langid = 0
local newloader_available_languages = dofile(kpse.find_file('language.dat.lua'))
-- Suggestion by Dohyun Kim on #129
local t = { }
@@ -51,26 +50,13 @@ end
local function select_language(lang, id)
loadlang(lang, id)
- current_language = lang
- last_language = lang
+ polyglossia.current_language = lang
end
local function set_default_language(lang, id)
polyglossia.default_language = lang
end
-local function falsefun()
- return false
-end
-
-local function disable_hyphenation()
- luatexbase.add_to_callback("hyphenate", falsefun, "polyglossia.disable_hyphenation")
-end
-
-local function enable_hyphenation()
- luatexbase.remove_from_callback("hyphenate", "polyglossia.disable_hyphenation")
-end
-
local check_char
if luaotfload and luaotfload.aux and luaotfload.aux.font_has_glyph then
@@ -106,16 +92,19 @@ local function load_tibt_eol()
require('polyglossia-tibt')
end
+-- LaTeX's language register is \count19
+local lang_register = 19
+
-- New hyphenation pattern loader: use language.dat.lua directly and the language identifiers
local function newloader(langentry)
- loaded_language = polyglossia.newloader_loaded_languages[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)
else
- langdata = newloader_available_languages[langentry]
+ local langdata = newloader_available_languages[langentry]
if langdata and langdata['special'] == 'language0' then return 0 end
if langdata then
@@ -123,35 +112,59 @@ local function newloader(langentry)
for k, v in pairs(langdata) do
s = s .. "\n" .. k .. "\t" .. tostring(v)
end
- polyglossia.newloader_max_langid = polyglossia.newloader_max_langid + 1
- -- langobject = lang.new(newloader_max_langid)
- lang.new(); lang.new(); lang.new()
- langobject = lang.new()
+
+ --
+ -- LaTeX's \newlanguage increases language register (count19),
+ -- whereas LuaTeX's lang.new() increases its own language id.
+ -- So when a user has declared, say, \newlanguage\lang@xyz, then
+ -- these two numbers do not match each other. If we do not consider
+ -- this possible situation, our newloader() function will
+ -- unfortunately overwrite the language \lang@xyz.
+ --
+ -- Threfore here we will compare LaTeX's \newlanguage number with
+ -- LuaTeX's lang.new() id and select the bigger one for our new
+ -- language object. Also we will update LaTeX's language register
+ -- by this new id, so that another possible \newlanguage should not
+ -- overwrite our language object.
+ --
+ -- get next \newlanguage allocation number
+ local langcnt = tex.count[lang_register] + 1
+ -- get new lang object
+ 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)
+ -- set language register for possible \newlanguage
+ tex.setcount('global', lang_register, maxlangid)
+ -- 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
- pattfilepath = kpse.find_file(langdata.patterns)
+ local pattfilepath = kpse.find_file(langdata.patterns)
if pattfilepath then
- pattfile = io.open(pattfilepath)
+ local pattfile = io.open(pattfilepath)
lang.patterns(langobject, pattfile:read('*all'))
pattfile:close()
end
end
if langdata.hyphenation and langdata.hyphenation ~= '' then
- hyphfilepath = kpse.find_file(langdata.hyphenation)
+ local hyphfilepath = kpse.find_file(langdata.hyphenation)
if hyphfilepath then
- hyphfile = io.open(hyphfilepath)
+ local hyphfile = io.open(hyphfilepath)
lang.hyphenation(langobject, hyphfile:read('*all'))
hyphfile:close()
end
end
- polyglossia.newloader_loaded_languages[langentry] = langobject
+ newloader_loaded_languages[langentry] = langobject
log_info('Language ' .. langentry .. ' was not yet loaded; created with id ' .. lang.id(langobject))
return lang.id(langobject)
else
log_warning('Language ' .. langentry .. ' not found in language.dat.lua')
- return 255
+ return nohyphid
end
end
end
@@ -159,11 +172,11 @@ end
polyglossia.loadlang = loadlang
polyglossia.select_language = select_language
polyglossia.set_default_language = set_default_language
-polyglossia.current_language = current_language -- doesn't seem to be working well :-(
-polyglossia.default_language = default_language
polyglossia.check_char = check_char
polyglossia.load_frpt = load_frpt
polyglossia.load_tibt_eol = load_tibt_eol
-polyglossia.disable_hyphenation = disable_hyphenation
-polyglossia.enable_hyphenation = enable_hyphenation
polyglossia.newloader = newloader
+polyglossia.newloader_loaded_languages = newloader_loaded_languages
+-- global variables:
+-- polyglossia.default_language
+-- polyglossia.current_language
diff --git a/Master/texmf-dist/tex/latex/polyglossia/polyglossia.sty b/Master/texmf-dist/tex/latex/polyglossia/polyglossia.sty
index 1e77ed1e1f1..4f419e14ddd 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/polyglossia.sty
+++ b/Master/texmf-dist/tex/latex/polyglossia/polyglossia.sty
@@ -1,5 +1,5 @@
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{polyglossia}[2019/04/04 v1.44
+\ProvidesPackage{polyglossia}[2019/10/27 v1.45
Alternative to Babel for XeLaTeX and LuaLaTeX]
\RequirePackage{etoolbox}
\RequirePackage{makecmds}
@@ -12,13 +12,24 @@
\RequirePackage{ifluatex}
% For symmetry with ifluatex
\RequirePackage{ifxetex}
+\RequirePackage{expl3}
+\RequirePackage{l3keys2e}
+\RequirePackage{xparse}
+\RequirePackage{filehook}
+
+% correct a bug in tracklang
+\AtBeginOfPackageFile*{tracklang}{
+ \@ifpackagelater{tracklang}{2019/08/30}{}{\global\def\AddTrackedLangage{\AddTrackedLanguage}}
+}
+
+
% fontspec now uses LaTeX3 packages such as expl3, so we need this:
\ExplSyntaxOn
%% This is for compatibility with Babel-aware package:
\cslet{ver@babel.sty}{\@empty} % this "fakes" babel
\def\languageshorthands#1{\relax} %this is for scrlttr2 class
-\AtEndPreamble{\let\bbl@set@language\xpg@set@language} %for biblatex
+\AtEndPreamble{\let\bbl@set@language\xpg@set@language@aux} %for biblatex
\AtEndPreamble{\let\bbl@main@language\xpg@main@language} %for biblatex
\ifluatex
@@ -32,8 +43,39 @@
{\let\xpg@boundaryclass=\e@alloc@intercharclass@top}
% Useful for getting list of loaded languages and variants. Like babel's bbl@loaded
-\let\xpg@loaded\@empty
-\let\xpg@vloaded\@empty
+\let\xpg@loaded\@empty% list of loaded languages (polyglossia name)
+\let\xpg@vloaded\@empty% list of loaded variants
+\let\xpg@bloaded\@empty% list of loaded languages (babel name)
+
+% counter in latin
+\def\latinalph#1{\expandafter\latin@alph\csname c@#1\endcsname}
+\def\latinAlph#1{\expandafter\latin@Alph\csname c@#1\endcsname}
+
+% select language hook
+\cs_new_nopar:Nn \polyglossia@AtBeginDocument@selectlanguage: {}
+% \disablehyphenation hook
+\cs_new_nopar:Nn \polyglossia@AtBeginDocument@hyphenation: {}
+
+% hook to be executed at begin of document
+\cs_new_nopar:Nn \polyglossia@AtBeginDocument: {
+ % save various command
+ \let\latin@alph\@alph % TODO rename when we have the C locale
+ \let\latin@Alph\@Alph % TODO rename when we have the C locale
+ % push to C language gloss
+ \let\polyglossia@Clang@@arabic\@arabic
+ \let\polyglossia@Clang@arabic\arabic
+
+ \xpg@initial@setup
+ % apply \familydefault changes
+ \xpg@set@familydefault
+ % now we have the C locale definition: select the language
+ \polyglossia@AtBeginDocument@selectlanguage:
+ % If hyphenation disabling has been requested in preamble, do it now
+ \polyglossia@AtBeginDocument@hyphenation:
+}
+\AtBeginDocument{
+ \polyglossia@AtBeginDocument:
+}
%% custom message macros
\providecommand*{\xpg@error}[1]{%
@@ -64,6 +106,24 @@
\def\xpg@ill@value#1#2{%
\xpg@warning{Illegal~ value~ (#1)~ for~ #2}}
+% error out if lang is not loaded
+\cs_new_nopar:Nn \polyglossia@error@iflangnotloaded:n
+{
+ \cs_if_exist:cF{#1@loaded}
+ {
+ \xpg@error{language~ #1~ is~ not~ loaded.~ Please~ load~ it~ before~ using~ it.}
+ }
+}
+
+
+% error do not use directly the gloss file
+\msg_new:nnn { polyglossia } { directloadgloss }
+{
+ You~ should~ not~ load~ directly~ the~ gloss~ file~ using~ `\string\usepackage'.
+ You~ must~ use~ `\string\setotherlanguage\{#1\}' or `\string\setmainlanguage\{#1\}'.
+}
+\msg_redirect_name:nnn { polyglossia } { directloadgloss } { critical }
+
%% use macro if defined, else warn that it is not
\def\csuse@warn#1{%
\ifcsundef{#1}{\xpg@warning{ \expandafter\string\csname #1\endcsname\space is~ not~ defined}}%
@@ -75,93 +135,85 @@
%% Used by the language definitions files for right-to-left languages
\def\RequireBidi{%
- \AtBeginDocument{%
- \ifxetex
- \RequirePackage{bidi}
- \else\ifluatex
- \RequirePackage{luabidi}
- \else
- \xpg@warning{You’re running a TeX engine that is not LuaTeX or XeTeX.\MessageBreak
- That is almost guaranteed to cause problems.}
- \fi\fi}}
+ \str_case_e:nnF{\c_sys_engine_str}{
+ {luatex}{\ifx\@onlypreamble\@notprerr\else\RequirePackage{luabidi}\fi}
+ {xetex}{\ifx\@onlypreamble\@notprerr\else\RequirePackage{bidi}\fi}
+ }
+ {
+ \xpg@warning{You’re running a TeX engine that is not LuaTeX or XeTeX.\MessageBreak
+ That is almost guaranteed to cause problems.}
+ }
+}
+
+% (lua)bidi commands to change directionality for paragraphs
+% and inline text.
+% overwritten with correct package
+\cs_new_nopar:Nn{\polyglossia@setpardirection:n}{%
+ \str_case_e:nnTF{#1}{%
+ {LR}{\relax}%
+ {RL}{\xpg@error{right-to-left,~ but~ (lua)bidi~ package~ was~ not~ loaded!}}%
+ }%
+ {}%
+ {\xpg@error{Unknown~ language~ direction~ #1 ~(base~ wrapper)}}%
+}
+\cs_new_nopar:Nn{\polyglossia@settextdirection:n}{%
+ \str_case_e:nnTF{#1}{%
+ {LR}{\relax}%
+ {RL}{\xpg@error{right-to-left,~ but~ (lua)bidi~ package~ was~ not~ loaded!}}%
+ }%
+ {}%
+ {\xpg@error{Unknown~ language~ direction~ #1 ~(base~ wrapper)}}%
+}
+\AtEndOfPackageFile*{bidi}{%
+ \ExplSyntaxOn%
+ \cs_gset_nopar:Nn{\polyglossia@setpardirection:n}{%
+ \str_case_e:nnTF{#1}{%
+ {LR}{\setLR}%
+ {RL}{\setRL}%
+ }%
+ {}%
+ {\xpg@error{Unknown~ language~ direction~ #1 ~(bidi~ wrapper)}}%
+ }%
+ \cs_gset_nopar:Nn{\polyglossia@settextdirection:n}{%
+ \str_case_e:nnTF{#1}{%
+ {LR}{\LRE}%
+ {RL}{\RLE}%
+ }%
+ {}%
+ {\xpg@error{Unknown~ language~ direction~ #1 ~(bidi~ wrapper)}}%
+ }%
+ \ExplSyntaxOff%
+}
+\AtEndOfPackageFile*{luabidi}{%
+ \ExplSyntaxOn%
+ \cs_gset_nopar:Nn{\polyglossia@setpardirection:n}{%
+ \str_case_e:nnTF{#1}{%
+ {LR}{\setLR}%
+ {RL}{\setRL}%
+ }
+ {}%
+ {\xpg@error{Unknown~ language~ direction~ #1 ~(luabidi~ wrapper)}}%
+ }%
+ \cs_gset_nopar:Nn{\polyglossia@settextdirection:n}{%
+ \str_case_e:nnTF{#1}{%
+ {LR}{\LRE}%
+ {RL}{\RLE}%
+ }
+ {}%
+ {\xpg@error{Unknown~ language~ direction~ #1 ~(luabidi~ wrapper)}}%
+ }%
+ \ExplSyntaxOff%
+}
%% compatibility with babel
\let\addto\gappto% gappto is defined in etoolbox
-%% == Utility macros ==
-%% They are needed because \MakeUppercase and \MakeLowercase are protected,
-%% but we need to change case while defining csnames when setting up fonts for
-%% non-Latin scripts. For instance with "Script=Arabic" we need to lowercase
-%% "Arabic" to create \arabicfont.
-\def\xpg@uppercasefirst#1{\expandafter\xpg@@uppercasefirst #1}
-\def\xpg@@uppercasefirst#1{%
- \if a#1A\else
- \if b#1B\else
- \if c#1C\else
- \if d#1D\else
- \if e#1E\else
- \if f#1F\else
- \if g#1G\else
- \if h#1H\else
- \if i#1I\else
- \if j#1J\else
- \if k#1K\else
- \if l#1L\else
- \if m#1M\else
- \if n#1N\else
- \if o#1O\else
- \if p#1P\else
- \if q#1Q\else
- \if r#1R\else
- \if s#1S\else
- \if t#1T\else
- \if u#1U\else
- \if v#1V\else
- \if w#1W\else
- \if x#1X\else
- \if y#1Y\else
- \if z#1Z\else
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
-}
-
-\def\xpg@lowercasefirst#1{\expandafter\xpg@@lowercasefirst #1}
-\def\xpg@@lowercasefirst#1{%
- \if A#1a\else
- \if B#1b\else
- \if C#1c\else
- \if D#1d\else
- \if E#1e\else
- \if F#1f\else
- \if G#1g\else
- \if H#1h\else
- \if I#1i\else
- \if J#1j\else
- \if K#1k\else
- \if L#1l\else
- \if M#1m\else
- \if N#1n\else
- \if O#1o\else
- \if P#1p\else
- \if Q#1q\else
- \if R#1r\else
- \if S#1s\else
- \if T#1t\else
- \if U#1u\else
- \if V#1v\else
- \if W#1w\else
- \if X#1x\else
- \if Y#1y\else
- \if Z#1z\else
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
-}
-
%% NEW EXPERIMENTAL SETUP INTERFACE FOR GLOSS FILES
%% options currently available:
%% language : the name of the language (as understood by fontspec)
%% hyphennames : the different hyphenation patterns to try (comma separated list)
%%% TODO: if pattern is prefixed by !, then it should be loaded as a fallback, with \xpg@nopatterns@fallback - i.e. with a warning: e.g. sanskrit for hindi, or catalan for asturian. – Also for languages with variants! (English and German, etc.)
%% script : the name of the script (as understood by fontspec) – default is Latin
-%% direction : the direction of the script: LR or RL
%% scripttag : the OpenType tag for the script
%% langtag : the OpenType tag for the language
%% hyphenmins : the hyphenmins for this language (comma-sep list of two integers)
@@ -170,127 +222,529 @@
%% fontsetup : boolean
%% TODO: nouppercase : boolean (for scripts like Arabic, Devanagari, etc which have no concept of uppercase/lowercase)
%% TODO: localalph = {<alph_csname>,<Alph_csname>}
-%% TODO: localnumber = <csname>
+%% TODO: localnumeral = <csname>
%% or even better localdigits = {0123456789} for fully automatic setup
-
\newif\if@xpg@language@really@defined@
\newcommand*\PolyglossiaSetup[2]{%
+ \polyglossia@keys_define_lang:n{#1}%
+ \keys_set:nn { polyglossia / #1 } { #2 }%
+ \prop_log:N{\polyglossia@langsetup}
+ \polyglossia_setup_hyphen:n {#1}
%define booleans etoolbox style and set defaults
%% TODO ? \providetoggle{#1@setup@done}%
- \providetoggle{#1@RL}%
- \providetoggle{#1@latin}\toggletrue{#1@latin}%
- \providetoggle{#1@scriptlangequal}% whether lang and script names are same: e.g. Hebrew, Arabic
- \providebool{#1@fontsetup}%
- \providebool{#1@indentfirst}%
- \providebool{#1@frenchspacing}%
% we initialize these so that we can use \gappto below
\csgdef{init@extras@#1}{}%
\csgdef{init@noextras@#1}{}% we don't use this yet: remove?
- \csgdef{xpg@langname@#1}{\xpg@uppercasefirst{#1}}%
- %needed for docsvlist with hyphennames key:
- \def\do##1{%
- \xpg@check@ifdefined{#1}
- \if@xpg@language@really@defined@\else
- \ifstrequal{#1}{##1}{}%
- {\xpg@ifdefined{##1}%
- {\expandafter\ifx\csname l@##1\endcsname\l@nohyphenation\else\csletcs{l@#1}{l@##1}\xpg@set@language@luatex@iv{##1}\fi}%
- {\csdef{l@##1}{l@nohyphenation}}%
- }%
- \fi
- }%
- %define all keys:
- \xpg@define@keys{#1}%
- \setkeys[xpg@setup]{#1}{#2}%
% here we do the fontsetup:
- \ifbool{#1@fontsetup}%
- {\xpg@fontsetup@auto{#1}}%
- {\xpg@info{Skipping~ automatic~ font~ setup~ for~ language~ #1}}%
+ \polyglossia@lang@autosetupfont:n{#1}
%% TODO? \toggletrue{#1@setup@done}%
% reinit \do
\def\do##1{\setotherlanguage{##1}}%
}
-\def\xpg@first#1,#2{#1}
-\def\xpg@second#1,#2{#2}
-
-\def\xpg@define@keys#1{%
- \define@key[xpg@setup]{#1}{script}{%
- \ifstrequal{##1}{Latin}%
- {\toggletrue{#1@latin}}%
- {\togglefalse{#1@latin}}%
- \csgdef{xpg@scriptname@#1}{##1}%
- \csgdef{xpg@scriptname@#1@lc}{\xpg@lowercasefirst{##1}}}%
- \define@key[xpg@setup]{#1}{scripttag}{%
- \csgdef{xpg@scripttag@#1}{##1}}%
- \define@key[xpg@setup]{#1}{language}{%
- \csgdef{xpg@langname@#1}{##1}}%
- \define@key[xpg@setup]{#1}{langtag}{%
- \csgdef{xpg@langtag@#1}{##1}}%
- \define@key[xpg@setup]{#1}{hyphennames}[{#1}]{%
- \docsvlist{##1}%
- % if l@#1 does not yet exist,
- % we assign it to nohyphenation
- % we do this here in case the hyphennames key was omitted
+% Adjust language key setting after initial setup
+% This is needed, e.g., for languages with varying script
+\DeclareDocumentCommand \SetLanguageKeys { m m }
+{
+ \clist_map_inline:nn { #1 } { \keys_set:nn { polyglossia / ##1 } { #2 } }
+}
+
+
+% setup hyphennames from a str list of hyphen
+\cs_new:Nn \polyglossia_setup_hyphen:n {
+ \exp_args:Nne \clist_set:Nn{\l_tmpa_clist}{\prop_item:Nn \polyglossia@langsetup {#1 / hyphennames}}
+ \providebool{havehyphen}
+ \boolfalse{havehyphen}
+ % for each hyphen in the set until we find one that works
+ \clist_map_inline:Nn \l_tmpa_clist {
+ \ifbool{havehyphen}{}{%
+ % check if language hyphenname is defined
+ \polyglossia@check@ifdefined:NF{#1}{%
+ % if not, first consider nohyphenation
+ \str_if_eq:nnTF{##1}{nohyphenation}
+ {%
+ \cs_gset_eq:cc{l@#1}{l@##1}
+ \global\booltrue{havehyphen}
+ }{%
+ % then test if hyphenation is defined
+ \xpg@ifdefined{##1}{
+ % test if language hyphenation is nohyphenation
+ \cs_if_eq:cNF{l@#1}{\l@nohyphenation}{\global\booltrue{havehyphen}}{%
+ % if false define language to hyphenation if it is not equal...
+ \str_if_eq:nnF{#1}{##1}{\cs_gset_eq:cc{l@#1}{l@##1}}
+ % ...and load
+ \xpg@set@hyphenation@patterns{##1}
+ \global\booltrue{havehyphen}
+ }%
+ }{}%
+ }%
+ }%
+ }%
+ }%
+ % if l@#1 does not yet exist,
+ % we assign it to nohyphenation
+ % we do this here in case and if the hyphennames key was omitted
+ \ifbool{havehyphen}{}{%
\xpg@ifdefined{#1}{}%
- {\xpg@nopatterns{\csname xpg@langname@#1\endcsname}%
- \expandafter\adddialect\csname l@#1\endcsname\l@nohyphenation\relax}%
- \csdef{#1@language}{%
- \ifbool{xpg@hyphenation@disabled}{%
- \xdef\xpg@lastlanguage{\the\csname l@#1\endcsname}%
- }{%
- \ifluatex%
- \xpg@set@language@luatex@iv{#1}%
- \fi%
- \language=\csname l@#1\endcsname%
- }%
+ {
+ \xpg@nopatterns{#1}
+ \expandafter\adddialect\csname l@#1\endcsname\l@nohyphenation\relax
}%
}%
- \define@choicekey+[xpg@setup]{#1}{direction}[\val\nr]{LR,RL}[LR]%
- {\ifcase\nr\relax
- \togglefalse{#1@RL}%
- \or
- \toggletrue{#1@RL}%
- \ifcsundef{RTL}{\ifluatex\RequirePackage{luabidi}\else\RequirePackage{bidi}\fi}{}% FIXME Use \RequireBidi and remove calls in individual gloss files.
- \fi}%
- {\xpg@warning{#1: Invalid value \val\space for key "direction"}}%
- \define@key[xpg@setup]{#1}{hyphenmins}[{2,3}]%
- {\begingroup\edef\x{\endgroup
- \noexpand\setlocalhyphenmins{#1}{\xpg@first##1}{\xpg@second##1}}\x}
- \define@boolkey[xpg@setup]{#1}[#1@]{frenchspacing}[true]{%
- \ifbool{#1@frenchspacing}%
- {\csgappto{init@extras@#1}{\frenchspacing}}%
- {\csgappto{init@extras@#1}{\nonfrenchspacing}}}%
- \define@boolkey[xpg@setup]{#1}[#1@]{indentfirst}[true]{%
- \ifbool{#1@indentfirst}%
- {\csgappto{init@extras@#1}{\french@indent}}%
- {\csgappto{init@extras@#1}{\nofrench@indent}}}%
-% \define@choicekey*+[xpg@setup]{#1}{fontsetup}[\val\nr]{none,custom,auto}[none]%
-% %{\csgdef{#1@fontsetup}{\val}}%
-% {\xpg@fontsetup{\val}{#1}}%
-% {\xpg@warning{Invalid value \val\space for key "fontsetup" in module "#1"}}%
- \define@boolkey[xpg@setup]{#1}[#1@]{fontsetup}[true]{}%
- %TODO assign csnames corr. to localized alph and Alph
- % \define@key[xpg@setup]{#1}{localalph}[{#1@alph,#1@Alph}]{%
- % \cslet{xpg@localalph@#1}{\expandafter\csname\xpg@first##1\endcsname}%
- % \cslet{xpg@localAlph@#1}{\expandafter\csname\xpg@second##1\endcsname}%
- %}%
- %TODO same thing with localdigits
+ \csdef{#1@language}{%
+ \polyglossia@setup@language@patterns{#1}%
+ }%
+ % setup hypenmins
+ \exp_args:NNe \clist_set:Nn \l_tmpa_clist
+ { \prop_item:Nn \polyglossia@langsetup {#1 / hyphenmins} }
+ \cs_if_eq:cNF {l@#1} \l@nohyphenation
+ {
+ \use:x
+ {
+ \exp_not:N \setlocalhyphenmins {#1}
+ { \clist_item:Nn \l_tmpa_clist {1} }
+ { \clist_item:Nn \l_tmpa_clist {2} }
+ }
+ }
+}
+
+\newcommand*\polyglossia@setup@language@patterns[1]{%
+ \ifbool{xpg@hyphenation@disabled}{%
+ \xdef\xpg@lastlanguage{\the\csname l@#1\endcsname}%
+ }{%
+ % first, test if \l@#1 exists
+ % without that, \csname l@#1\endcsname will be defined as \relax
+ \cs_if_exist:cTF {l@#1}
+ {
+ \cs_if_eq:cNTF {l@#1} \l@nohyphenation
+ {
+ \language=\l@nohyphenation
+ }
+ {
+ \xpg@set@hyphenation@patterns{#1}
+ }
+ }
+ {
+ \xpg@set@hyphenation@patterns{#1}
+ }
+ }
+}
+
+\prop_new:N \polyglossia@langsetup
+
+\cs_new_protected:Npn \polyglossia@keys_define_lang:n #1 {
+ \keys_define:nn {polyglossia}{
+ % the script font
+ #1 / script
+ .code:n = {
+ \prop_gput:Nnn{\polyglossia@langsetup}{#1/script}{##1}
+ \prop_gput:Nnx{\polyglossia@langsetup}{#1/lcscript}
+ {\tl_if_empty:nF{##1}{\str_lower_case:n##1}}
+ },
+ #1 / script
+ .value_required:n = true,
+ #1 / script
+ .initial:n = latin,
+ % the opentype script tag
+ #1 / scripttag
+ .code:n = {\prop_gput:Nnn{\polyglossia@langsetup}{#1/scripttag}{##1}},
+ #1 / scripttag
+ .default:n = {},
+ #1 / scripttag
+ .initial:n = {},
+ % the language full name
+ #1 / language
+ .code:n = {\prop_gput:Nnn{\polyglossia@langsetup}{#1/language}{##1}},
+ #1 / language
+ .value_required:n = true,
+ #1 / language
+ .initial:x = {\str_upper_case:n#1},
+ % the language tag
+ #1 / langtag
+ .code:n = {\prop_gput:Nnn{\polyglossia@langsetup}{#1/langtag}{##1}},
+ #1 / langtag
+ .value_required:n = true,
+ #1 / langtag
+ .initial:n = {},
+ % hyphennames
+ #1 / hyphennames
+ .code:n = {
+ \clist_set:Nn{\l_tmpa_clist}{##1}
+ \prop_gput:Nnx{\polyglossia@langsetup}{#1/hyphennames}{\clist_use:Nn \l_tmpa_clist {,}}
+ },
+ #1 / hyphennames
+ .value_required:n = true,
+ #1 / hyphennames
+ .initial:x = {\c_empty_clist},
+ % direction
+ #1 / direction
+ . code:n = {
+ \str_case_e:nnTF{##1}{
+ {LR}{}
+ {RL}{\RequireBidi}
+ }
+ {\prop_gput:Nnn{\polyglossia@langsetup}{#1/direction}{##1}}
+ {\xpg@error{Unknown~ direction~ "##1"~ for~ language~ "#1"}}
+ },
+ #1 / direction
+ .value_required:n = true,
+ #1 / direction
+ .initial:n = {LR},
+ % minimal left and right hyphenation minima using
+ #1 / hyphenmins
+ .code:n = {
+ % check syntax
+ \int_compare:nNnF { \clist_count:n {##1} } = {2}
+ {\xpg@error{hypenmins~should~be~a~list~of~two~entries,~got~"##1"}}
+ % set prop
+ \prop_gput:Nnn \polyglossia@langsetup {#1/hyphenmins} {##1}
+ },
+ #1 / hyphenmins
+ .value_required:n = true,
+ #1 / hyphenmins
+ .initial:n = {2,3},
+ % frenchspacing
+ #1 / frenchspacing
+ .code:n = {
+ \str_case_e:nnTF{##1}{
+ {true}{}
+ {false}{}
+ }
+ {}
+ {\xpg@error{frenchspacing~should~be~true~or~false. Is~ "##1"~ for~ language~ "#1"}}
+ \prop_gput:Nnn{\polyglossia@langsetup}{#1/frenchspacing}{##1}
+ },
+ #1 / frenchspacing
+ .default:n = true,
+ #1 / frenchspacing
+ .initial:n = false,
+ % indent first line
+ #1 / indentfirst
+ .code:n = {
+ \str_case_e:nnTF{##1}{
+ {true}{}
+ {false}{}
+ }
+ {}
+ {\xpg@error{indentfirst~should~be~true~or~false. Is~ "##1"~ for~ language "#1"}}
+ \prop_gput:Nnn{\polyglossia@langsetup}{#1/indentfirst}{##1}
+ },
+ #1 / indentfirst
+ .default:n = true,
+ #1 / indentfirst
+ .initial:n = false,
+ % fontsetup
+ #1 / fontsetup
+ .code:n = {
+ \str_case_e:nnTF{##1}{
+ {true}{}
+ {false}{}
+ }
+ {}
+ {\xpg@error{fontsetup~should~be~true~or~false. Is "##1"~ for~ language~ "#1"}}
+ \prop_gput:Nnn{\polyglossia@langsetup}{#1/fontsetup}{##1}
+ },
+ #1 / fontsetup
+ .default:n = true,
+ #1 / fontsetup
+ .initial:n = false,
+ % environment name
+ #1 / envname
+ .code:n = {
+ \prop_gput:Nnn{\polyglossia@langsetup}{#1/envname}{##1}
+ },
+ #1/ envname.value_required:n = true,
+ #1/ envname.initial:n = {#1},
+ % babel name
+ #1 / babelname
+ .code:n = {
+ \prop_gput:Nnn{\polyglossia@langsetup}{#1/babelname}{##1}
+ },
+ #1/ babelname.value_required:n = true,
+ #1/ babelname.initial:n = {#1},
+ % default numerals
+ #1 / localnumeral
+ . code:n = {
+ \prop_gput:Nnn{\polyglossia@langsetup}{#1/localnumeral}{##1}
+ \prop_gput:Nnn{\polyglossia@langsetup}{#1/Localnumeral}{##1}
+ },
+ #1 / localnumeral.value_required:n = true,
+ #1 / localnumeral.initial:n = {polyglossia@C@localnumeral},
+ % uppercased
+ #1 / Localnumeral
+ . code:n = {
+ \prop_gput:Nnn{\polyglossia@langsetup}{#1/Localnumeral}{##1}
+ },
+ #1 / Localnumeral.value_required:n = true,
+ #1 / Localnumeral.initial:n = {polyglossia@C@localnumeral}
+ }
+}
+
+% TODO move to C module
+\newcommand*{\polyglossia@C@localnumeral}[2]{
+ \polyglossia@Clang@@arabic{#2}
+}
+
+% print using main language
+% #2 is the numeral to print
+% #3 is the mainlanguage (should be expanded)
+% #4 is the current language (should be expanded)
+% #1 is the option list (should be expanded)
+% #5 is the name of the field to use
+\cs_new:Nn \polyglossia_localnumeral_mainlang:nnnnn {
+ \foreignlanguage{#3}{\use:c {\prop_item:Nn \polyglossia@langsetup {#3/#5}} {#1} {#2}}
+}
+
+
+% print using local language
+% #2 is the numeral to print
+% #3 is the mainlanguage (should be expanded)
+% #4 is the current language (should be expanded)
+% #1 is the option list (should be expanded)
+% #5 is the name of the field to use
+\cs_new:Nn \polyglossia_localnumeral_locallang:nnnnn {
+ \use:c {\prop_item:Nn \polyglossia@langsetup {#4/#5}} {#1} {#2}
+}
+
+% this function try to resolve some simple parameter about lang
+% call #2 then branching if found
+% call parameter #3 if not found
+% (use curing)
+\cs_new:Npn \polyglossia_localnumeral_callshortcutorlong:nF #1#2 {
+ \str_case:nnF{#1}{
+ {lang=local}{\polyglossia_localnumeral_locallang:nnnnn}
+ }
+ {#2}
+}
+
+\cs_new:Npn \polyglossia_iii_map_csv_field_split_kv_iii_localnumeral:w #1 = #2 \q_stop {
+ \str_case:nnF{#2}{
+ {local} {\clist_map_break:n{\use_i:nn \polyglossia_localnumeral_locallang:nnnnn }}
+ {default}{\clist_map_break:n{\use_i:nn \polyglossia_localnumeral_locallang:nnnnn }}
+ {*} {\clist_map_break:n{\use_i:nn\polyglossia_localnumeral_mainlang:nnnnn }}
+ {main} {\clist_map_break:n{\use_i:nn\polyglossia_localnumeral_mainlang:nnnnn }}
+ }{
+ \clist_map_break:n{ \use_i_ii:nnn \polyglossia_localnumeral_langlang:nnnnnn {{#2}} }
+ }
+}
+
+
+% call the language
+% #3 is the numeral to print
+% #4 is the mainlanguage (should be expanded)
+% #5 is the current language (should be expanded)
+% #2 is the option list (should be expanded)
+% #6 is the name of the field to use
+% #1 is the language used
+\cs_new:Nn \polyglossia_localnumeral_langlang:nnnnnn {
+ \foreignlanguage{#1}{\use:c {\prop_item:Nn \polyglossia@langsetup {#1/#6}} {#2} {#3}}
+}
+
+
+% check if empty value
+\cs_new:Npn \polyglossia_iii_map_csv_field_split_kv_ii_localnumeral:w #1 #2 = #3 \q_stop {
+ \quark_if_no_value:NTF {#3}
+ {
+ \clist_map_break:n{\use_i:nn \polyglossia_localnumeral_locallang:nnnnn}
+ }
+ {
+ \polyglossia_iii_map_csv_field_split_kv_iii_localnumeral:w #1 \q_stop
+ }
+}
+
+\cs_new:Npn \polyglossia_iii_map_csv_field_split_kv_i_localnumeral:nw #1 #2 = #3 \q_stop {
+ % parse only lang tag
+ \tl_trim_spaces_apply:nN {#2} \str_if_eq:nnT {lang}
+ {
+ % if empty value
+ \quark_if_nil:nTF{#3}
+ {
+ \clist_map_break:n{\use_i:nn \polyglossia_localnumeral_locallang:nnnn}
+ }
+ {
+ % here we know what we have an equal sign
+ \polyglossia_iii_map_csv_field_split_kv_ii_localnumeral:w {#1} #1 \q_no_value \q_stop
+ }
+ }
+}
+
+% map function
+\cs_new:Nn \polyglossia_iii_map_csv_localnumeral:n {
+ % fast case is do nothing is empty
+ \tl_if_empty:nF{#1}
+ {
+ \polyglossia_iii_map_csv_field_split_kv_i_localnumeral:nw {#1} #1 = \q_nil \q_stop
+ }
+}
+
+
+% treat option is empty and option is lang=local
+% #2 number
+% #3 mainlanguage
+% #4 locallanguage
+% #5 field to call
+% #1 option
+% strip space to option
+\cs_new:Nn \polyglossia_iii_localnumeral:nnnnn {
+ \tl_if_blank:nTF{#1}
+ {
+ \polyglossia_localnumeral_mainlang:nnnnn
+ }
+ {
+ \str_if_eq:nnTF{#1}{lang=local}
+ {
+ \polyglossia_localnumeral_locallang:nnnnn
+ }
+ {
+ % use postscript like trick push to stack {#1} {#2} {#3} {#4}
+ \polyglossia_localnumeral_callshortcutorlong:nF {#1}
+ {
+ % same trick here if found we emit \use_i:nn
+ % thus discarding the default choice that is not lang specified thus local
+ \clist_map_function:nN {#1} {\polyglossia_iii_map_csv_localnumeral:n}
+ \polyglossia_localnumeral_locallang:nnnnn
+ }
+ }
+ {#1} {#2} {#3} {#4} {#5}
+ }
+}
+
+
+% internal helper useful for oeee and onnn
+% #1 number
+% #2 mainlanguage
+% #3 locallanguage
+% #4 option
+% #5 field to call
+% strip space to option
+\cs_new:Nn \polyglossia_ii_localnumeral:nnnnn {
+ \tl_trim_spaces_apply:nN {#4} \polyglossia_iii_localnumeral:nnnnn {#1}{#2}{#3}{#5}
+}
+\cs_generate_variant:Nn \polyglossia_ii_localnumeral:nnnnn {
+ eeenn, eeeon, eeeen
+}
+
+% convert the counter to value
+% #1 counter
+% #2 mainlanguage
+% #3 locallanguage
+% #4 option
+\cs_new:Nn \polyglossia_i_localnumeral:nnnnn
+{
+ \polyglossia_ii_localnumeral:eeeen {\int_value:w #1} {#2} {#3} {#4} {#5}
+}
+
+% print number usage \localnumeral[option]{numeral}
+% or \localnumeral*[option]{counter}
+% \Localnumeral[]{numeral} use main language
+% \localnumeral{numeral} use local language
+\NewExpandableDocumentCommand{\localnumeral}{som}
+{
+ \IfBooleanTF{#1}%
+ {% starred: take counter
+ \exp_args:Nc \polyglossia_i_localnumeral:nnnnn {c@#3}
+ {\mainlanguagename} {\languagename} {\IfNoValueTF {#2}{lang=local}{#2}} {localnumeral}
+ }{% unstarred: take number
+ \polyglossia_ii_localnumeral:eeeen {\int_eval:n{#3}}
+ {\mainlanguagename} {\languagename} {\IfNoValueTF {#2}{lang=local}{#2}} {localnumeral}
+ }
}
+% print number usage \Localnumeral[option]{numeral}
+% or \Localnumeral*[option]{counter}
+% \Localnumeral[]{numeral} use main language
+% \localnumeral{numeral} use local language
+\NewExpandableDocumentCommand{\Localnumeral}{som}
+{
+ \IfBooleanTF{#1}%
+ {% starred: take counter
+ \exp_args:Nc \polyglossia_i_localnumeral:nnnnn {c@#3}
+ {\mainlanguagename} {\languagename} {\IfNoValueTF {#2}{lang=local}{#2}} {Localnumeral}
+ }{% unstarred: take number
+ \polyglossia_ii_localnumeral:eeeon {\int_eval:n{#3}}
+ {\mainlanguagename} {\languagename} {\IfNoValueTF {#2}{lang=local}{#2}} {Localnumeral}
+ }
+}
+
+\cs_new_nopar:Nn{\polyglossia@lang@frenchspacing:n}{
+ \prop_get:NnNTF \polyglossia@langsetup {#1/frenchspacing} \l_tmpa_tl
+ {
+ \str_case_e:nnF{\l_tmpa_tl}{
+ {true}{\frenchspacing}
+ {false}{\nonfrenchspacing}
+ }
+ {\xpg@error{frenchspacing~should~be~true~or~false. Is~"\l_tmpa_ttl"~ for~ language~ "#1"}}
+ }
+ {
+ \xpg@error{Could~ not~ retrieve~ key~ frenchspacing~ for~ language~ "#1"}
+ \prop_show:N{\polyglossia@langsetup}
+ }
+}
+
+\cs_new_nopar:Nn{\polyglossia@lang@indentfirst:n}{
+ \prop_get:NnNTF \polyglossia@langsetup {#1/indentfirst} \l_tmpa_tl
+ {
+ \str_case_e:nnF{\l_tmpa_tl}{
+ {true}{\french@indent}
+ {false}{\nofrench@indent}
+ }
+ {\xpg@error{indentfirst~should~be~true~or~false. Is~"\l_tmpa_ttl"~ for~ language~ "#1"}}
+ }
+ {
+ \xpg@error{Could~ not~ retrieve~ key~ indentfirst~ for~ language~ "#1"}
+ \prop_show:N{\polyglossia@langsetup}
+ }
+}
+
+
+\cs_new:Nn{\polyglossia@lang@setpardirection:n}{
+ \prop_get:NnNTF \polyglossia@langsetup {#1/direction} \l_tmpa_tl
+ {
+ \polyglossia@setpardirection:n{\l_tmpa_tl}
+ }
+ {
+ \xpg@error{Could~ not~ retrieve~ key~ direction~ for~ language~ "#1"}
+ \prop_show:N{\polyglossia@langsetup}
+ }
+}
+
+
+\cs_new:Nn{\polyglossia@lang@settextdirection:nn}{
+ \prop_get:NnNTF \polyglossia@langsetup {#1/direction} \l_tmpa_tl
+ {
+ \polyglossia@settextdirection:n{\l_tmpa_tl}{#2}
+ }
+ {
+ \xpg@error{Could~ not~ retrieve~ key~ direction~ for~ language~ "#1"}
+ \prop_show:N{\polyglossia@langsetup}
+ }
+}
+
+\AtEndDocument{\prop_log:N{\polyglossia@langsetup}}
\def\xpg@lastlanguage{0}%
\providebool{xpg@hyphenation@disabled}%
\boolfalse{xpg@hyphenation@disabled}
\def\xpg@disablehyphenation{%
+ \ifx\@onlypreamble\@notprerr%
+ \xpg@@disablehyphenation%
+ \else%
+ % if this is used in the preamble, we have to postpone
+ % the execution until the main language has been set (#125).
+ \cs_gset_nopar:Nn \polyglossia@AtBeginDocument@hyphenation: {
+ \xpg@@disablehyphenation%
+ }%
+ \fi%
+}
+
+\def\xpg@@disablehyphenation{%
\ifbool{xpg@hyphenation@disabled}{}{%
\booltrue{xpg@hyphenation@disabled}%
\xdef\xpg@lastlanguage{\the\language}%
- \xpg@set@language@luatex@iv{nohyphenation}
+ % We do not call \xpg@set@hyphenation@patterns here to avoid a warning message.
+ % "nohyphenation" is not listed in language.dat.lua.
\language=\l@nohyphenation%
- \ifluatex %
- \directlua{polyglossia.disable_hyphenation()}%
- \fi %
}%
}
@@ -298,9 +752,6 @@
\ifbool{xpg@hyphenation@disabled}{%
\boolfalse{xpg@hyphenation@disabled}%
\language=\csname xpg@lastlanguage\endcsname%
- \ifluatex %
- \directlua{polyglossia.enable_hyphenation()}%
- \fi %
}{}%
}
@@ -311,151 +762,163 @@
%\def\xpg@fontsetup@none#1{\csgdef{#1@font}{\ifcsdef{#1font}{\csname #1font\endcsname}{}}} %<-- simplistic
%\def\xpg@fontsetup@custom#1{\csuse{#1@font}}
-\def\xpg@fontsetup@auto#1{\iftoggle{#1@latin}%
- {\xpg@fontsetup@latin{#1}}%
- {\xpg@fontsetup@nonlatin{#1}}%
-}
-
-\def\xpg@addfontfeature@lang#1#2{% #1 is langtag, #2 is langname
- % Turkish is a special case: tag can be TRK or TUR
- \edef\tmp@Turkish{Turkish}%
- \edef\tmp@@langname{#2}%
- % \ifstrequal{#2}{Turkish}%
- \ifx\tmp@@langname\tmp@Turkish
- \fontspec_if_language:nTF {TRK}%
- {\addfontfeature{Language=Turkish}}%
- {\fontspec_if_language:nTF {TUR}%
- {\addfontfeature{Language=Turkish}}%
- {}}%
- % else not Turkish
- \else
- \edef\tmp@@langparam{Language=#2}%
- \expandafter\expandafter\expandafter\fontspec_if_language:nTF \expandafter{#1}%
- {\expandafter\expandafter\expandafter\addfontfeature\expandafter{\tmp@@langparam}}%
- {}%
- \fi
+\cs_new:Nn \polyglossia@lang@autosetupfont:n {
+ \str_if_eq:eeTF{\prop_item:Nn{\polyglossia@langsetup}{#1/fontsetup}}{true}
+ {
+ \str_if_eq:eeTF{\prop_item:Nn{\polyglossia@langsetup}{#1/lcscript}}{latin}%
+ {\xpg@fontsetup@latin{#1}}
+ {\xpg@fontsetup@nonlatin{#1}}
+ }
+ {
+ \xpg@info{Skipping~ automatic~ font~ setup~ for~ language~ #1}
+ }
}
-\def\xpg@addfontfeature@script#1#2{% #1 is scripttag, #2 is scriptname
- \edef\tmp@@scriptparam{Script=#2}%
- \expandafter\expandafter\expandafter\fontspec_if_script:nTF \expandafter{#1}%
- {\expandafter\expandafter\expandafter\addfontfeature\expandafter{\tmp@@scriptparam}}%
- {\xpg@error{The~ current~ roman~ font~ does~ not~ contain~ the~ \expandafter\noexpand#2 ~ script!\MessageBreak
- Please~ define~ \expandafter\string\csname \xpg@lowercasefirst{#2}font\endcsname\space with~ \string\newfontfamily}}%
+
+% add fontfeature Language=#2 to langtag #1
+% do nothing if #1 or #2 is empty
+\cs_new:Nn \polyglossia@addfontfeature@language:nn {
+ \bool_if:nTF{\tl_if_empty_p:n{#1} || \tl_if_empty_p:n{#2}}
+ {
+ % maybe an error ?
+ \xpg@warning{Asking~ to~ add~ empty~ feature~to~ latin~ font~
+ (Language="#2"~ to~ langtag~ "#1")}
+ }
+ {
+ \str_if_eq:nnTF{#2}{Turkish}{
+ \fontspec_if_language:nTF {TRK}%
+ {
+ \addfontfeature{Language=Turkish}
+ }
+ {
+ \fontspec_if_language:nTF {TUR}%
+ {
+ \addfontfeature{Language=Turkish}
+ }{}
+ }
+ }{
+ \fontspec_if_language:nTF{#1}
+ {
+ \addfontfeature{Language=#2}
+ }
+ {}
+ }
+ }
+}
+\cs_generate_variant:Nn \polyglossia@addfontfeature@language:nn { on , no, oo , Vn, nV, VV , xn, nx, xx}
+
+% add fontfeature Script=#2 to scripttag #1
+% do nothing if #1 or #2 is empty
+\cs_new:Nn \polyglossia@addfontfeature@script:nn {
+ \bool_if:nTF{\tl_if_empty_p:n{#1} || \tl_if_empty_p:n{#2}}
+ {
+ % maybe an error ?
+ \xpg@warning{Asking~ to~ add~ empty~ feature~to~ latin~ font
+ (Script="#2"~ to~ scripttag~ "#1")}
+ }
+ {
+ \fontspec_if_script:nTF{#1}
+ {\addfontfeature{Script=#2}}
+ {\xpg@error{
+ The~ current~ latin ~ font~ \l_fontspec_family_tl\space does~ not~ contain~ the~"#2"~ script!\MessageBreak
+ Please~ define~\csname\tl_if_empty:nF{#2}{\str_lower_case:n#2}font\endcsname~
+ with~ \string\newfontfamily\space command
+ }
+ }
+ }
}
+\cs_generate_variant:Nn \polyglossia@addfontfeature@script:nn { on , no, oo , Vn, nV, VV , xn, nx, xx}
\def\xpg@fontsetup@latin#1{%
\begingroup
\csgdef{#1@font@rm}{%
- \ifcsdef{#1font}{\csname #1font\endcsname}%
- {\edef\tmp@langtag{\csuse{xpg@langtag@#1}}%
- \edef\tmp@langname{\csuse{xpg@langname@#1}}%
- \rmfamilylatin%
- \ifcsvoid{xpg@langtag@#1}{}{%
- \ifcsvoid{xpg@langname@#1}{}{%
- \xpg@addfontfeature@lang{\tmp@langtag}{\tmp@langname}}%
- }}}%
+ \cs_if_exist_use:cF{#1font}{
+ \rmfamilylatin
+ \polyglossia@addfontfeature@language:xx{\prop_item:Nn{\polyglossia@langsetup}{#1/langtag}}
+ {\prop_item:Nn{\polyglossia@langsetup}{#1/language}}
+ }
+ }
\csgdef{#1@font@sf}{%
- \ifcsdef{#1fontsf}{\csname #1fontsf\endcsname}%
- {\edef\tmp@langtag{\csuse{xpg@langtag@#1}}%
- \edef\tmp@langname{\csuse{xpg@langname@#1}}%
- \sffamilylatin%
- \ifcsvoid{xpg@langtag@#1}{}{%
- \ifcsvoid{xpg@langname@#1}{}{%
- \xpg@addfontfeature@lang{\tmp@langtag}{\tmp@langname}}%
- }}}%
+ \cs_if_exist_use:cF{#1fontsf}{
+ \sffamilylatin
+ \polyglossia@addfontfeature@language:xx{\prop_item:Nn{\polyglossia@langsetup}{#1/langtag}}
+ {\prop_item:Nn{\polyglossia@langsetup}{#1/language}}
+ }%
+ }%
\csgdef{#1@font@tt}{%
- \ifcsdef{#1fonttt}{\csname #1fonttt\endcsname}%
- {\edef\tmp@langtag{\csuse{xpg@langtag@#1}}%
- \edef\tmp@langname{\csuse{xpg@langname@#1}}%
- \ttfamilylatin%
- \ifcsvoid{xpg@langtag@#1}{}{%
- \ifcsvoid{xpg@langname@#1}{}{%
- \xpg@addfontfeature@lang{\tmp@langtag}{\tmp@langname}}%
- }}}%
+ \cs_if_exist_use:cF{#1fonttt}{
+ \ttfamilylatin
+ \polyglossia@addfontfeature@language:xx{\prop_item:Nn{\polyglossia@langsetup}{#1/langtag}}
+ {\prop_item:Nn{\polyglossia@langsetup}{#1/language}}
+ }%
+ }%
\endgroup
}
\def\xpg@fontsetup@nonlatin#1{%
\begingroup
- \edef\tmp@langname@lc{#1}% eg ukrainian
- \edef\tmp@scriptname@lc{\csuse{xpg@scriptname@#1@lc}}% eg cyrillic
- \ifx\tmp@scriptname@lc\tmp@langname@lc
- \toggletrue{#1@scriptlangequal}%
- \else
- \togglefalse{#1@scriptlangequal}%
- \fi
\csgdef{#1@font@rm}{%
- \ifcsdef{#1font}%
- {\@nameuse{#1font}}%
- {\edef\tmp@scripttag{\csuse{xpg@scripttag@#1}}% eg cyrl
- \edef\tmp@scriptname{\csuse{xpg@scriptname@#1}}% eg Cyrillic
- \edef\tmp@langtag{\csuse{xpg@langtag@#1}}% eg UKR
- \edef\tmp@langname{\csuse{xpg@langname@#1}}% eg Ukrainian
+ \cs_if_exist_use:cF{#1font}
+ {
\providetoggle{#1@use@script@font}%
- \iftoggle{#1@scriptlangequal}%
+ \str_if_eq:nnTF{\prop_item:Nn{\polyglossia@langsetup}{#1/script}}{\prop_item:Nn{\polyglossia@langsetup}{#1/language}}
{\rmfamilylatin}%
- {\expandafter\ifcsname\csuse{xpg@scriptname@#1@lc} font\endcsname% eg \cyrillicfont
- \toggletrue{#1@use@script@font}%
- \expandafter\csname\csuse{xpg@scriptname@#1@lc} font\endcsname
- \else
- \rmfamilylatin
- \fi}
+ {\cs_if_exist_use:cTF{\prop_item:Nn{\polyglossia@langsetup}{#1/lcscript} font}
+ {
+ \toggletrue{#1@use@script@font}%
+ }
+ {
+ \rmfamilylatin
+ }
+ }
\iftoggle{#1@use@script@font}{}{%
- \ifcsvoid{xpg@scripttag@#1}{}{%
- \ifcsvoid{xpg@scriptname@#1}{}{%
- \xpg@addfontfeature@script{\tmp@scripttag}{\tmp@scriptname}}}}%
- \ifcsvoid{xpg@langtag@#1}{}{%
- \ifcsvoid{xpg@langname@#1}{}{%
- \xpg@addfontfeature@lang{\tmp@langtag}{\tmp@langname}}}%
+ \polyglossia@addfontfeature@script:xx{\prop_item:Nn{\polyglossia@langsetup}{#1/scripttag}}
+ {\prop_item:Nn{\polyglossia@langsetup}{#1/script}}
+ }%
+ \polyglossia@addfontfeature@language:xx{\prop_item:Nn{\polyglossia@langsetup}{#1/langtag}}
+ {\prop_item:Nn{\polyglossia@langsetup}{#1/language}}
}}%
\csgdef{#1@font@sf}{%
- \ifcsdef{#1fontsf}%
- {\@nameuse{#1fontsf}}%
- {\edef\tmp@scripttag{\csuse{xpg@scripttag@#1}}% eg cyrl
- \edef\tmp@scriptname{\csuse{xpg@scriptname@#1}}% eg Cyrillic
- \edef\tmp@langtag{\csuse{xpg@langtag@#1}}% eg UKR
- \edef\tmp@langname{\csuse{xpg@langname@#1}}% eg Ukrainian
+ \cs_if_exist_use:cF{#1fontsf}%
+ {
\providetoggle{#1@use@script@fontsf}%
- \iftoggle{#1@scriptlangequal}%
+ \str_if_eq:nnTF{\prop_item:Nn{\polyglossia@langsetup}{#1/script}}{\prop_item:Nn{\polyglossia@langsetup}{#1/language}}
{\sffamilylatin}%
- {\expandafter\ifcsname\csuse{xpg@scriptname@#1@lc} fontsf\endcsname% eg \cyrillicfontsf
- \toggletrue{#1@use@script@fontsf}%
- \expandafter\csname\csuse{xpg@scriptname@#1@lc} fontsf\endcsname
- \else
- \sffamilylatin
- \fi}
+ {\cs_if_exist_use:cTF{\prop_item:Nn{\polyglossia@langsetup}{#1/lcscript} fontsf}
+ {
+ \toggletrue{#1@use@script@fontsf}%
+ }
+ {
+ \sffamilylatin
+ }
+ }
\iftoggle{#1@use@script@fontsf}{}{%
- \ifcsvoid{xpg@scripttag@#1}{}{%
- \ifcsvoid{xpg@scriptname@#1}{}{%
- \xpg@addfontfeature@script{\tmp@scripttag}{\tmp@scriptname}}}}%
- \ifcsvoid{xpg@langtag@#1}{}{%
- \ifcsvoid{xpg@langname@#1}{}{%
- \xpg@addfontfeature@lang{\tmp@langtag}{\tmp@langname}}}%
+ \polyglossia@addfontfeature@script:xx{\prop_item:Nn{\polyglossia@langsetup}{#1/scripttag}}
+ {\prop_item:Nn{\polyglossia@langsetup}{#1/script}}
+ }%
+ \polyglossia@addfontfeature@language:xx{\prop_item:Nn{\polyglossia@langsetup}{#1/langtag}}
+ {\prop_item:Nn{\polyglossia@langsetup}{#1/language}}
}}%
\csgdef{#1@font@tt}{%
- \ifcsdef{#1fonttt}%
- {\@nameuse{#1fonttt}}%
- {\edef\tmp@scripttag{\csuse{xpg@scripttag@#1}}% eg cyrl
- \edef\tmp@scriptname{\csuse{xpg@scriptname@#1}}% eg Cyrillic
- \edef\tmp@langtag{\csuse{xpg@langtag@#1}}% eg UKR
- \edef\tmp@langname{\csuse{xpg@langname@#1}}% eg Ukrainian
+ \cs_if_exist_use:cF{#1fonttt}%
+ {
\providetoggle{#1@use@script@fonttt}%
- \iftoggle{#1@scriptlangequal}%
- {\ttfamilylatin}%
- {\expandafter\ifcsname\csuse{xpg@scriptname@#1@lc} fonttt\endcsname% eg \cyrillicfonttt
- \toggletrue{#1@use@script@fonttt}%
- \expandafter\csname\csuse{xpg@scriptname@#1@lc} fonttt\endcsname
- \else
- \ttfamilylatin
- \fi}
+ \str_if_eq:nnTF{\prop_item:Nn{\polyglossia@langsetup}{#1/script}}{\prop_item:Nn{\polyglossia@langsetup}{#1/language}}
+ {\ttfamilylatin}%
+ {\cs_if_exist_use:cTF{\prop_item:Nn{\polyglossia@langsetup}{#1/lcscript} fonttt}
+ {
+ \toggletrue{#1@use@script@fonttt}%
+ }
+ {
+ \ttfamilylatin
+ }
+ }
\iftoggle{#1@use@script@fonttt}{}{%
- \ifcsvoid{xpg@scripttag@#1}{}{%
- \ifcsvoid{xpg@scriptname@#1}{}{%
- \xpg@addfontfeature@script{\tmp@scripttag}{\tmp@scriptname}}}}%
- \ifcsvoid{xpg@langtag@#1}{}{%
- \ifcsvoid{xpg@langname@#1}{}{%
- \xpg@addfontfeature@lang{\tmp@langtag}{\tmp@langname}}}%
+ \polyglossia@addfontfeature@script:xx{\prop_item:Nn{\polyglossia@langsetup}{#1/scripttag}}
+ {\prop_item:Nn{\polyglossia@langsetup}{#1/script}}
+ }%
+ \polyglossia@addfontfeature@language:xx{\prop_item:Nn{\polyglossia@langsetup}{#1/langtag}}
+ {\prop_item:Nn{\polyglossia@langsetup}{#1/language}}
}}%
\endgroup
}
@@ -464,8 +927,8 @@
%% ensure localization of \markright and \markboth commands
%%% THIS IS NOW DISABLED BY DEFAULT
-\define@boolkey{polyglossia}[xpg@]{localmarks}[false]{%
- \ifbool{xpg@localmarks}{%
+\newcommand{\local@marks}[1]{}
+\def\enable@local@marks{
\xpg@info{Option:~ localmarks}%
\def\local@marks##1{%
\def\markboth####1####2{%
@@ -492,11 +955,8 @@
\def\@markright####1####2####3{\@temptokena{\protect\@@ensure@maindir{####1}}%
\unrestored@protected@xdef\@themark{{\the\@temptokena}%
{\protect\@@ensure@maindir{####3}}}}}%
- }{% else
- \def\local@marks##1{}%
- }%
}
-\setkeys{polyglossia}{localmarks=false}
+
% Easy way out – Arthur, 2012-08-01
\ifcsdef{newXeTeXintercharclass}{%
@@ -504,9 +964,15 @@
\newXeTeXintercharclass\xpg@normalclass %TODO
}{}
+\ifxetex
%% when no patterns are available, we use \l@nohyphenation, assigned to 255
%% (suggestion by Enrico Gregorio)
-\@ifundefined{l@nohyphenation}{\chardef\l@nohyphenation=255 }{}
+ \@ifundefined{l@nohyphenation}{\chardef\l@nohyphenation=255 }{}
+\else\ifluatex
+ \@ifundefined{l@nohyphenation}{\chardef\l@nohyphenation=\directlua{
+ tex.sprint(polyglossia.newloader_loaded_languages.nohyphenation)}\relax
+ }{}
+\fi\fi
%we call this macro when a gloss file is not found for a given language
\def\xpg@nogloss#1{%
@@ -525,85 +991,169 @@
\makeatletter
\input{#1}\catcode`\@=\xpg@atcatcode}
+% try to load a language file
+\cs_new:Nn \polyglossia_load_lang_definition:nn {
+ \file_if_exist:nTF{gloss-#2.ldf}
+ {
+ \xpg@input{gloss-#2.ldf}
+ \setkeys{#2}{#1}
+ }
+ {
+ \xpg@nogloss{#2}
+ }
+}
+
+
+% define environment and command
+\cs_new:Nn \polyglossia@define@language@cmd:n {
+ \exp_args:Ne
+ \newenvironment {\prop_item:Nn{\polyglossia@langsetup}{#1/envname}} [1] []
+ {
+ \begin{otherlanguage}[##1]{#1}
+ }%
+ {
+ \end{otherlanguage}
+ }%
+ \exp_args:Nc \newcommand {text#1} [2][]
+ {%
+ \xpg@textlanguage[##1]{#1}{##2}%
+ }%
+}
+
\newcommand{\setdefaultlanguage}[2][]{%
- \edef\xpg@loaded{#2\ifx\xpg@loaded\@empty\else,\xpg@loaded\fi}%
- \IfFileExists{gloss-#2.ldf}%
- {\ifcsundef{#2@loaded}%
- {\xpg@input{gloss-#2.ldf}%
- \xpg@info{Default~ language~ is~ #2}%
- \def\languagename{#2}%
- \ifluatex %
- \directlua{polyglossia.set_default_language('\luatexluaescapestring{\string#2}')}%
- \fi %
- % This is needed because \arabic is a built-in LaTeX command:
- % so now we have \begin{Arabic}... instead of \begin{arabic}...
- \ifstrequal{#2}{arabic}%
- {\newenvironment{Arabic}[1][]{\begin{otherlanguage}[####1]{arabic}}%
- {\end{otherlanguage}}}%
- {\newenvironment{#2}[1][]{\begin{otherlanguage}[####1]{#2}}%
- {\end{otherlanguage}}}%
- \expandafter\newcommand\csname text#2\endcsname[2][]{%
- \ifcsdef{RTL}%
- {\iftoggle{#2@RL}%
- {\@ensure@RTL{\foreignlanguage[####1]{#2}{####2}}}%
- {\@ensure@LTR{\foreignlanguage[####1]{#2}{####2}}}%
- }% else bidi not loaded
- {\iftoggle{#2@RL}%
- {\xpg@error{Language~ #2~ is~ right-to-left,~ but~ bidi~ package~ was~ not~ loaded!}}%
- {\foreignlanguage[####1]{#2}{####2}}%
- }%
- }%
- \csletcs{local#2}{text#2}%
- \csgdef{#2@loaded}{}%
- \gdef\xpg@main@language{#2}%
- }%
- {\xpg@warning{gloss-#2.ldf~ is~ already~ loaded!}}%:
- %% The following settings are for the default language and script:
- \iftoggle{#2@RL}{\@RTLmaintrue}{}% this tells bidi.sty that the document is RTL
- \AtBeginDocument{%
- \selectlanguage[#1]{#2}%
- \selectbackgroundlanguage{#2}}%
- }%
- %ELSE
- {\xpg@nogloss{#2}}%
+ \ifcsundef{#2@loaded}%
+ {
+ % latex is an internal language, so do not record
+ \ifstrequal{#2}{latex}{}{%
+ \global\edef\xpg@loaded{#2\ifx\xpg@loaded\@empty\else,\xpg@loaded\fi}%
+ \global\edef\xpg@bloaded{\prop_item:Nn{\polyglossia@langsetup}{#2/babelname}%
+ \ifx\xpg@bloaded\@empty\else,\xpg@bloaded\fi}%
+ }%
+ \polyglossia_load_lang_definition:nn{#1}{#2}
+ % define environment and command (except for internal latex language)
+ \ifstrequal{#2}{latex}{}{%
+ \polyglossia@define@language@cmd:n{#2}
+ }%
+ \csgdef{#2@loaded}{}%
+ }
+ {
+ \relax
+ }
+ \gdef\xpg@main@language{#2}%
+ \tl_if_blank:nTF {#1}{\gdef\mainlanguagevariant{}}{%
+ % If the optional argument sets a value for the key “variant”,
+ % store it in \xpg@main@langvariant
+ \clist_map_inline:nn { #1 } {%
+ \xpg@parsevariantkeyvalue##1=@xpg@main@langvariant\relax
+ }%
+ }%
+ % Store babelname of main language (for external packages such as biblatex)
+ \xdef\mainbabelname{\prop_item:Nn{\polyglossia@langsetup}{#2/babelname}}%
+ %% The following settings are for the default language and script
+ % this tells bidi.sty or luabidi.sty that the document is RTL
+ \str_if_eq:eeTF{\prop_item:Nn{\polyglossia@langsetup}{#2/direction}}{RL}{%
+ \str_case_e:nnF{\c_sys_engine_str}{%
+ {luatex}{\setRTLmain}
+ {xetex}{\@RTLmaintrue\setnonlatin}
+ }{}%
+ }{}%
+ \cs_gset_nopar:Nn \polyglossia@AtBeginDocument@selectlanguage: {
+ \selectbackgroundlanguage{#2}
+ \selectlanguage[#1]{#2}%
+ }
+ \xpg@info{Default~ language~ is~ #2}%
+ \polyglossia@set@language@name[#1]{#2}%
+ \def\mainlanguagename{#2}
+ % Store babelname of current language (for external packages such as biblatex)
+ \xdef\babelname{\prop_item:Nn{\polyglossia@langsetup}{#2/babelname}}%
+ \ifluatex %
+ \directlua{polyglossia.set_default_language('\luatexluaescapestring{\string#2}')}%
+ \fi %
}
\let\setmainlanguage=\setdefaultlanguage
+\def\mainbabelname{}%
+\def\mainlanguagevariant{}%
+% Store main language variant for external packages
+\define@key{xpg@main@langvariant}{variant}{%
+ \gdef\mainlanguagevariant{#1}%
+}
+
+\def\babelname{}%
+\def\languagevariant{}%
+% Store current language variant for external packages
+\define@key{xpg@set@langvariant}{variant}{%
+ \def\languagevariant{#1}%
+}
+
+\newcommand*\polyglossia@set@language@name[2][]{
+ \def\languagename{#2}%
+ \tl_if_blank:nTF {#1}{%
+ \ifcsundef{#2@gvar}{\def\languagevariant{}}{\def\languagevariant{\csuse{#2@gvar}}}
+ }{%
+ % If the argument sets a value for the key “variant”,
+ % store it in \xpg@set@langvariant
+ \clist_map_inline:nn { #1 } {%
+ \xpg@parsevariantkeyvalue##1=@xpg@set@langvariant\relax
+ }%
+ }%
+}
+
+
\newcommand{\resetdefaultlanguage}[2][]{%
- \ifcsundef{#2@loaded}{%
- \xpg@error{gloss-#2.ldf~ is~ not~ loaded!}}%
- {\csuse{no\xpg@main@language @globalnumbers}% disable globalnumbers of previously defined default language
- \csuse{noextras@\xpg@main@language}%
- \csuse{init@noextras@\xpg@main@language}%
- \def\languagename{#2}%
- \iftoggle{#2@RL}{\@rlmaintrue\@rl@footnotetrue}{}%
- \selectlanguage[#1]{#2}%
- \selectbackgroundlanguage{#2}}}
-
-\expandafter\ifx\familydefault\sfdefault
- \def\familytype{sf}
-\else\expandafter\ifx\familydefault\ttdefault
- \def\familytype{tt}
-\else
- \def\familytype{rm}
-\fi\fi
-% This robustifies the redefinitions of \<xx>family (suggestion by Enrico Gregorio)
-% e.g. to prevent expansion of the \familytype redefinition in auxiliary files
-\csgappto{rmfamily~}{\def\familytype{rm}}
-\csgappto{sffamily~}{\def\familytype{sf}}
-\csgappto{ttfamily~}{\def\familytype{tt}}
+ \polyglossia@error@iflangnotloaded:n{#2}
+ % disable globalnumbers of previously defined default language
+ \csuse{no\xpg@main@language @globalnumbers}
+ \csuse{noextras@\xpg@main@language}%
+ % This is a hook for external packages which want to access variants
+ % via babelname (such as biblatex)
+ \cs_if_exist_use:c{noextras@bbl@\mainbabelname}%
+ \csuse{init@noextras@\xpg@main@language}%
+ \polyglossia@set@language@name[#1]{#2}%
+ \str_if_eq:eeTF{\prop_item:Nn{\polyglossia@langsetup}{#2/direction}}{RL}{\@rlmaintrue\@rl@footnotetrue}{}%
+ \selectlanguage[#1]{#2}%
+ \selectbackgroundlanguage{#2}%
+ % Store babelname of current language (for external packages such as biblatex)
+ \xdef\babelname{\prop_item:Nn{\polyglossia@langsetup}{#2/babelname}}%
+}
+
% This saves the normalfont for the latin script since we may change normalfont in other scripts
\let\normalfontlatin=\normalfont%
\let\rmfamilylatin=\rmfamily%
\let\sffamilylatin=\sffamily%
\let\ttfamilylatin=\ttfamily%
+\def\xpg@set@familydefault{%
+ % We need the \edef route here in order
+ % to detect both \renewcommand and \let
+ % changes.
+ \edef\tempa{\familydefault}%
+ \edef\tempb{\sfdefault}%
+ \ifcsequal{tempa}{tempb}%
+ {\def\familytype{sf}}
+ {\edef\tempb{\ttdefault}%
+ \ifcsequal{tempa}{tempb}%
+ {\def\familytype{tt}}
+ {\def\familytype{rm}}}
+ % This robustifies the redefinitions of \<xx>family (suggestion by Enrico Gregorio)
+ % e.g. to prevent expansion of the \familytype redefinition in auxiliary files
+ \csgappto{rmfamily~}{\def\familytype{rm}}
+ \csgappto{sffamily~}{\def\familytype{sf}}
+ \csgappto{ttfamily~}{\def\familytype{tt}}
+ % This (re-)saves the normalfont for the latin script since we may
+ % change normalfont in other scripts
+ \let\normalfontlatin=\normalfont%
+ \let\rmfamilylatin=\rmfamily%
+ \let\sffamilylatin=\sffamily%
+ \let\ttfamilylatin=\ttfamily%
+}
+
\def\resetfontlatin{%
\let\rmfamily=\rmfamilylatin%
\let\sffamily=\sffamilylatin%
\let\ttfamily=\ttfamilylatin%
- \let\normalfont=\normalfontlatin}
+ \global\let\normalfont=\normalfontlatin}
\def\selectfontfamilylatin{%
\def\tmp@tt{tt}\def\tmp@sf{sf}%
@@ -625,7 +1175,9 @@
\letcs{\rmfamily}{#1@font@rm}%
\letcs{\sffamily}{#1@font@sf}%
\letcs{\ttfamily}{#1@font@tt}%
- \gdef\normalfont{\protect\xpg@select@fontfamily{#1}}%
+ \gdef\normalfont{\protect\xpg@select@fontfamily{#1}%
+ \fontseries{\seriesdefault}\selectfont%
+ \fontshape{\shapedefault}\selectfont}%
\gdef\reset@font{\protect\normalfont}%
}
@@ -634,45 +1186,35 @@
\@afterindenttrue}
\def\nofrench@indent{\let\@afterindentfalse\@@fterindentfalse
\@afterindentfalse}
-
\newcommand{\selectbackgroundlanguage}[1]{%
- \iftoggle{#1@latin}{}{\xpg@set@normalfont{#1}}%
- \csuse{#1@globalnumbers}%
- }
+ \str_if_eq:eeTF{\prop_item:Nn{\polyglossia@langsetup}{#1/lcscript}}{latin}{}{\xpg@set@normalfont{#1}}%
+ \csuse{#1@globalnumbers}%
+}
\newcommand{\setotherlanguage}[2][]{%
- \edef\xpg@loaded{#2\ifx\xpg@loaded\@empty\else,\xpg@loaded\fi}%
- \IfFileExists{gloss-#2.ldf}%
- {\ifcsundef{#2@loaded}%
- {\xpg@input{gloss-#2.ldf}%
- \setkeys{#2}{#1}%
- \edef\@tmpa{arabic}%
- \edef\@tmpb{#2}%
- \ifx\@tmpb\@tmpa%
- \newenvironment{Arabic}[1][]{\begin{otherlanguage}[####1]{arabic}}%
- {\end{otherlanguage}}%
- \else
- \newenvironment{#2}[1][]{\begin{otherlanguage}[####1]{#2}}%
- {\end{otherlanguage}}%
- \fi
- \expandafter\newcommand\csname text#2\endcsname[2][]{%
- \ifcsdef{RTL}%
- {\iftoggle{#2@RL}%
- {\@ensure@RTL{\foreignlanguage[####1]{#2}{####2}}}%
- {\@ensure@LTR{\foreignlanguage[####1]{#2}{####2}}}%
- }% else bidi not loaded
- {\iftoggle{#2@RL}%
- {\xpg@error{Language~ #2~ is~ right-to-left,~ but~ bidi~ package~ was~ not~ loaded!}}%
- {\foreignlanguage[####1]{#2}{####2}}%
- }%
- }%
- \csletcs{local#2}{text#2}%
- \csgdef{#2@loaded}{}%
- }%
- {\xpg@warning{gloss-#2.ldf~ is~ already~ loaded!}}%
- }%
- %ELSE
- {\xpg@nogloss{#2}}%
+ \ifcsundef{#2@loaded}
+ {
+ \global\edef\xpg@loaded{#2\ifx\xpg@loaded\@empty\else,\xpg@loaded\fi}%
+ \polyglossia_load_lang_definition:nn{#1}{#2}
+ % define environment and command
+ \polyglossia@define@language@cmd:n{#2}
+ \csgdef{#2@loaded}{}%
+ % If a variant is set, store it.
+ \gdef\otherlanguagevariant{}
+ \tl_if_blank:nTF {#1}{}{%
+ % If the optional argument sets a value for the key “variant”,
+ % store it in \xpg@main@langvariant
+ \clist_map_inline:nn { #1 } {%
+ \xpg@parsevariantkeyvalue##1=@xpg@other@langvariant\relax
+ }%
+ }%
+ \csgdef{#2@gvar}{\otherlanguagevariant}%
+ }{}
+}
+
+% Store main language variant for external packages
+\define@key{xpg@other@langvariant}{variant}{%
+ \gdef\otherlanguagevariant{#1}%
}
\newcommand\setotherlanguages[1]{%
@@ -688,145 +1230,332 @@
\lefthyphenmin=\tw@
\righthyphenmin=\thr@@}
-\def\noextrascurrent#1{\csuse{noextras@#1}}
+\def\xpg@initial@setup{%
+ \common@language%
+}
-\def\xpg@initial@setup{\ifcsundef{languagename}{}%
- {\noextrascurrent{\languagename}}%
- \common@language}
+\providecommand{\foreignlanguage}{}
-\AtBeginDocument{\xpg@initial@setup}
+% wrapper for foreignlanguage and otherlanguage*
+\newcommand*\polyglossia@setforeignlanguage[2][]{
+ \select@@language[#1]{#2}
+ % Store babelname of current language (for external packages such as biblatex)
+ \xdef\babelname{\prop_item:Nn{\polyglossia@langsetup}{#2/babelname}}%
+}
-\providecommand{\foreignlanguage}{}
+% joint code of \foreignlanguage, otherlanguage*
+% and \text<lang>
+\newcommand{\xpg@otherlanguage}[2][]
+{%
+ \polyglossia@error@iflangnotloaded:n{#2}
+ \setkeys{#2}{#1}%
+ \polyglossia@setforeignlanguage[#1]{#2}
+ % buggy restoration heure
+ \csuse{inlineextras@#2}%
+ % This is a hook for external packages which want to access variants
+ % via babelname (such as biblatex)
+ \cs_if_exist_use:c{inlineextras@bbl@\babelname}%
+}
-\renewcommand{\foreignlanguage}[3][]{%
- \ifcsundef{#2@loaded}%
- {\xpg@nogloss{#2}}%
- {{\select@@language{#2}%
- \setkeys{#2}{#1}%
- \use@localhyphenmins{#2}%
- \ifbool{#2@frenchspacing}{\frenchspacing}{\nonfrenchspacing}%
- \csuse{inlineextras@#2}%
- #3}%
- }%
+\renewcommand{\foreignlanguage}[3][]
+{%
+ \polyglossia@error@iflangnotloaded:n{#2}
+ \bgroup
+ \xpg@otherlanguage[#1]{#2}%
+ \polyglossia@lang@settextdirection:nn{#2}{#3}%
+ \egroup
}
% otherlanguage* is the environment equivalent of \foreignlanguage
\expandafter\providecommand\csname otherlanguage*\endcsname{}
-\renewenvironment{otherlanguage*}[2][]{%
- \ifcsundef{#2@loaded}%
- {\xpg@nogloss{#2}}%
- {\select@@language{#2}%
- \setkeys{#2}{#1}%
- \use@localhyphenmins{#2}%
- \ifbool{#2@frenchspacing}{\frenchspacing}{\nonfrenchspacing}%
- \csuse{inlineextras@#2}\csuse{date#2}%
- }%
-}{}
+
+\renewenvironment{otherlanguage*}[2][]
+{%
+ \xpg@otherlanguage[#1]{#2}%
+ \polyglossia@lang@settextdirection:nn{#2}\bgroup%
+}
+{\egroup}
+
+% use by \text<lang>. Equivalent to \foreignlanguage,
+% except that dates are localized.
+\newcommand*\xpg@textlanguage[3][]{%
+ \polyglossia@error@iflangnotloaded:n{#2}
+ \bgroup
+ \xpg@otherlanguage[#1]{#2}%
+ \csuse{date#2}%
+ % This is a hook for external packages which want to access variants
+ % via babelname (such as biblatex)
+ \cs_if_exist_use:c{date@bbl@\babelname}%
+ \polyglossia@lang@settextdirection:nn{#2}{#3}%
+ \egroup
+ % Reset the language's/script's font families
+ \str_if_eq:eeTF{\prop_item:Nn{\polyglossia@langsetup}{#2/lcscript}}{latin}{}{\resetfontlatin}%
+}
+
+
+% Define language-specific hyphenation exceptions
+\newcommand\pghyphenation[3][]{
+ \bgroup
+ \polyglossia@error@iflangnotloaded:n{#2}
+ \setkeys{#2}{#1}%
+ \select@@language[#1]{#2}%
+ \hyphenation{#3}%
+ \egroup
+}
+
%Hook that other package authors can use
%(for instance biblatex):
\newcommand*{\xpg@hook@setlanguage}{}
-\providecommand{\selectlanguage}{}
-\renewcommand{\selectlanguage}[2][]{%
- \ifcsundef{#2@loaded}%
- {\xpg@nogloss{#2}}%
- {\def\xpg@pop@language{%
- \xpg@set@language{\languagename}%
- \xpg@hook@setlanguage%
- \let\emp@langname\@undefined}%
- \aftergroup\xpg@pop@language%
- % If the optional argument sets a value for the key “variant”, copy it to xpg@langvariant
- \def\do##1{%
- \def\xpg@parsekeyvalue####1=####2\relax{%
- \def\@tmpa{####1}
- \def\@tmpb{variant}
- \ifx\@tmpa\@tmpb\setkeys{xpg@langvariant}{##1}\fi
- }%
- \xpg@parsekeyvalue##1=\relax
- }%
- \docsvlist{#1}
- \setkeys{#2}{#1}%
- \xpg@set@language{#2}%
+\def\xpg@pop@language@i#1#2{%
+ \xpg@set@language@aux[#1]{#2}%
+ \xpg@hook@setlanguage
+ \let\emp@langname\@undefined}
+
+\DeclareDocumentCommand \selectlanguage {s O{} m}
+{%
+ \polyglossia@error@iflangnotloaded:n{#3}
+ \IfBooleanF {#1}
+ {
+ \tl_set:Nx \xpg@pop@language { \exp_not:N \xpg@pop@language@i {#2} {#3} }
+ \group_insert_after:N \xpg@pop@language
+ }
+ \tl_if_blank:nTF {#2}{}{%
+ % If the optional argument sets a value for the key “variant”, copy it to xpg@langvariant
+ \clist_map_inline:nn { #2 } {%
+ \xpg@parsevariantkeyvalue##1=@xpg@langvariant\relax
}%
+ \setkeys{#3}{#2}%
+ }%
+ % The starred variant does not write to the aux
+ \IfBooleanTF#1{%
+ \xpg@set@language@nonaux[#2]{#3}%
+ }{%
+ \xpg@set@language@aux[#2]{#3}%
+ }%
+ \ifluatex%
+ \directlua{polyglossia.select_language('\luatexluaescapestring{\string#3}',
+ \the\csname l@#3\endcsname)}%
+ \fi%
+ \def\xpg@tmp@babelname{\prop_item:Nn{\polyglossia@langsetup}{#3/babelname}}
+ % Store babelname in \xpg@bloaded csv list
+ \ifcsundef{\csname xpg@tmp@babelname\endcsname @bbl@loaded}
+ {
+ \global\edef\xpg@bloaded{\xpg@tmp@babelname%
+ \ifx\xpg@bloaded\@empty\else,\xpg@bloaded\fi}%
+ \csgdef{\csname xpg@tmp@babelname\endcsname @bbl@loaded}{}%
+ }{}
}
-% Save any variant in csv list of variants
+% Helper to get and register "variant" keyval
+\def\xpg@parsevariantkeyvalue#1=#2@#3\relax{%
+ \def\@tmpa{#1}
+ \def\@tmpb{variant}
+ \ifx\@tmpa\@tmpb\setkeys{#3}{#1=#2}\fi
+}%
+
+
+% Append any variant to csv list of variants
\define@key{xpg@langvariant}{variant}{%
- \edef\xpg@vloaded{#1\ifx\xpg@vloaded\@empty\else,\xpg@vloaded\fi}}
+ \edef\xpg@vloaded{#1\ifx\xpg@vloaded\@empty\else,\xpg@vloaded\fi}%
+}
-\newcommand{\xpg@set@language}[1]{%
- \select@language{#1}%
+\prg_set_conditional:Npnn \polyglossia@check@if@lang@loaded:N #1 { p , T , F , TF }{
+ \cs_if_exist:cTF{#1}{
+ \prg_return_true:
+ }{
+ \prg_return_false:
+ }
+}
+
+% Test if language is loaded
+\newcommand*\iflanguageloaded[3]{%
+ \polyglossia@check@if@lang@loaded:NTF{#1@loaded}{#2}{#3}%
+}
+
+% Same for babellanguage is loaded
+\newcommand*\ifbabellanguageloaded[3]{%
+ \polyglossia@check@if@lang@loaded:NTF{#1@bbl@loaded}{#2}{#3}%
+}
+
+\newcommand*{\xpg@set@language@nonaux}[2][]{%
+ \@select@language[#1]{#2}%
+}
+
+
+\newcommand*{\xpg@set@language@aux}[2][]{%
+ % Store babelname of current language (for external packages such as biblatex)
+ \xdef\babelname{\prop_item:Nn{\polyglossia@langsetup}{#2/babelname}}%
+ \@select@language[#1]{#2}%
+ % Write to the aux
\if@filesw%
- \protected@write\@auxout{}{\protect\select@language{#1}}%
- \addtocontents{toc}{\protect\select@language{#1}}%
- \addtocontents{lof}{\protect\select@language{#1}}%
- \addtocontents{lot}{\protect\select@language{#1}}%
+ \ifx#1\\\\%
+ \protected@write\@auxout{}{\protect\selectlanguage*{#2}}%
+ \addtocontents{toc}{\protect\selectlanguage*{#2}}%
+ \addtocontents{lof}{\protect\selectlanguage*{#2}}%
+ \addtocontents{lot}{\protect\selectlanguage*{#2}}%
+ \else
+ \protected@write\@auxout{}{\protect\selectlanguage*[#1]{#2}}%
+ \addtocontents{toc}{\protect\selectlanguage*[#1]{#2}}%
+ \addtocontents{lof}{\protect\selectlanguage*[#1]{#2}}%
+ \addtocontents{lot}{\protect\selectlanguage*[#1]{#2}}%
+ \fi
\fi
}
-\def\xpg@set@language@luatex@iii#1#2{%
- % here we use lu@texhyphen@loaded@\the\language, the same as in babel
- \ifcsdef{bbl@hyphendata@#2}{}{%
- \global\@namedef{bbl@hyphendata@\the\language}{}%
- \directlua{polyglossia.select_language('\luatexluaescapestring{\string#1}', \the\csname l@#1\endcsname)}%
- }
+% Open a group in the aux file. This is to keep
+% nested language options local (see #320)
+\newcommand*{\xpg@set@group@aux}{%
+ \if@filesw%
+ \protected@write\@auxout{}{\bgroup}%
+ \addtocontents{toc}{\bgroup}%
+ \addtocontents{lof}{\bgroup}%
+ \addtocontents{lot}{\bgroup}%
+ \fi
}
-\newcommand\xpg@check@ifdefined[1]{%
- \expandafter\ifx\csname l@#1\endcsname\relax\@xpg@language@really@defined@false\else
- \ifx\csname l@#1\endcsname\l@nohyphenation\@xpg@language@really@defined@false\else
- \@xpg@language@really@defined@true
- \fi
+% Close the group in the aux file
+\newcommand*{\xpg@unset@group@aux}{%
+ \if@filesw%
+ \protected@write\@auxout{}{\egroup}%
+ \addtocontents{toc}{\egroup}%
+ \addtocontents{lof}{\egroup}%
+ \addtocontents{lot}{\egroup}%
\fi
}
+\prg_set_conditional:Npnn \polyglossia@check@ifdefined:N #1 { p , T , F , TF }{
+ \cs_if_exist:cTF {l@#1}
+ {
+ \cs_if_eq:cNTF {l@#1} \l@nohyphenation
+ {
+ \prg_return_false:
+ }
+ {
+ % it's possible that sometimes \csname l@#1\endcsname becomes \relax
+ \cs_if_eq:cNTF {l@#1} \relax
+ { \prg_return_false: }
+ { \prg_return_true: }
+ }
+ }
+ {
+ \prg_return_false:
+ }
+}
+
+\def\polyglossia@luatex@load@lang#1{%
+ % if \l@#1 is not properly defined, call lua function newloader(#1),
+ % and assign the returned number to \l@#1
+ \polyglossia@check@ifdefined:NF {#1}
+ {
+ \expandafter\chardef\csname l@#1\endcsname=
+ \directlua{ tex.sprint(polyglossia.newloader'#1') }\relax
+ }
+}
+
+% This check is also used by biblatex, so don't
+% rename silently.
\newcommand\xpg@ifdefined[3]{%
+ % With luatex, we first need to define \l@#1.
\ifluatex
- \xpg@set@language@luatex@iv{#1}%
+ \polyglossia@luatex@load@lang{#1}%
\fi
- \xpg@check@ifdefined{#1}
- \if@xpg@language@really@defined@#2\else#3\fi
+ \polyglossia@check@ifdefined:NTF{#1}{#2}{#3}%
}%
-\newcommand\xpg@set@language@luatex@iv[1]{%
- \ifluatex
- \xpg@check@ifdefined{#1}%
- \if@xpg@language@really@defined@\else
- \expandafter\chardef\csname l@#1\endcsname=\directlua{tex.sprint(polyglossia.newloader('#1'))}%
- \fi
- \language\directlua{tex.sprint(polyglossia.newloader('#1'))}%
+% Set \bbl@hyphendata@\the\language, which is (lua)babel's
+% hyphenation pattern hook
+% FIXME Clarifiy why/when this is needed.
+\newcommand*\xpg@set@bbl@hyphendata[1]{%
+ \ifluatex%
+ \ifcsdef{bbl@hyphendata@#1}{}{%
+ \global\@namedef{bbl@hyphendata@\the\language}{}%
+ }%
+ \fi%
+}
+
+% Set hyphenation patterns for a given language. This does the right
+% thing both for XeTeX and LuaTeX
+\newcommand*\xpg@set@hyphenation@patterns[1]{%
+ \ifluatex
+ \polyglossia@luatex@load@lang{#1}%
+ \language=\csname l@#1\endcsname
+ \else
+ \ifxetex
+ \language=\csname l@#1\endcsname
+ \else
+ \xpg@warning{You’re~running~a~TeX~engine~that~is~not~LuaTeX~or~XeTeX.\MessageBreak
+ That~is~almost~guaranteed~to~cause~problems.}%
\fi
+ \fi
}
+% FIXME: Remove after gloss-latin (last user) has been rewritten)
\newcommand\xpg@set@language@luatex@ii[1]{%
- \ifluatex %
- \xpg@set@language@luatex@iii{#1}{\expandafter\the\csname l@#1\endcsname}
- \fi %
+ \xpg@set@bbl@hyphendata{\expandafter\the\csname l@#1\endcsname}
}
-\def\select@language#1{%
- \ifluatex %
- \xpg@set@language@luatex@iii{#1}{\the\language}
- \fi %
+
+\newcommand*\@select@language[2][]{
+ % hook for compatibility with biblatex
+ \select@language{#2}
+ \xpg@set@bbl@hyphendata{\the\language}
\xpg@initial@setup%
- \select@@language{#1}%
- \ifcsundef{setRL}{}%
- {\iftoggle{#1@RL}{\setRL}{\setLR}}%
- \csuse{captions#1}%
- \local@marks{#1}%
- \csuse{init@extras@#1}%
- \csuse{blockextras@#1}%
+ \select@@language[#1]{#2}%
+ \polyglossia@lang@setpardirection:n{#2}%
+ \csuse{captions#2}%
+ \csuse{date#2}%
+ % These are hooks for external packages which want to access variants
+ % via babelname (such as biblatex)
+ \cs_if_exist_use:c{captions@bbl@\babelname}%
+ \cs_if_exist_use:c{date@bbl@\babelname}%
+ \local@marks{#2}%
+ \csuse{init@extras@#2}%
+ \polyglossia@lang@indentfirst:n{#2}
+ \csuse{blockextras@#2}%
+ % This is a hook for external packages which want to access variants
+ % via babelname (such as biblatex)
+ \cs_if_exist_use:c{blockextras@bbl@\babelname}%
+ }
+
+% hook for compatibility with biblatex
+\def\select@language#1{}
+
+\def\noextrascurrent#1{%
+ \csuse{noextras@#1}%
+ % This is a hook for external packages which want to access variants
+ % via babelname (such as biblatex)
+ \cs_if_exist_use:c{noextras@bbl@\babelname}
}
% Common code for `\select@language' and `\foreignlanguage'.
-\newcommand{\select@@language}[1]{%
- \edef\languagename{#1}%
- \xpg@select@fontfamily{#1}%
- \csuse@warn{#1@language}%
- \csuse{date#1}%
- \csuse{#1@numbers}%
- \use@localhyphenmins{#1}%
+\newcommand{\select@@language}[2][]{%
+ % disable the extras and number settings of the previous language
+ \ifcsundef{languagename}{}{%
+ \noextrascurrent{\languagename}%
+ \csuse{no\languagename @numbers}%
+ \ifxetex
+ \str_if_eq:eeTF{\prop_item:Nn{\polyglossia@langsetup}{\languagename/direction}}{RL}%
+ {%
+ \str_if_eq:eeTF{\prop_item:Nn{\polyglossia@langsetup}{#2/direction}}{RL}%
+ {}% RTL -> RTL
+ {\setlatin}% RTL -> LTR
+ }{%
+ \str_if_eq:eeTF{\prop_item:Nn{\polyglossia@langsetup}{#2/direction}}{RL}%
+ {\setnonlatin}% LTR -> RTL
+ {}% LTR -> LTR
+ }%
+ \fi
+ }%
+ \polyglossia@set@language@name[#1]{#2}%
+ % Set the language's/script's font families
+ \str_if_eq:eeTF{\prop_item:Nn{\polyglossia@langsetup}{#2/lcscript}}{latin}{\resetfontlatin}{\xpg@set@normalfont{#2}}%
+ \xpg@select@fontfamily{#2}%
+ \csuse@warn{#2@language}%
+ \csuse{#2@numbers}%
+ \use@localhyphenmins{#2}%
+ \polyglossia@lang@frenchspacing:n{#2}
}
@@ -835,8 +1564,11 @@
\provideenvironment{otherlanguage}{}{}
\renewenvironment{otherlanguage}[2][]
- {\selectlanguage[#1]{#2}}
- {}
+{
+ \xpg@set@group@aux%
+ \selectlanguage[#1]{#2}
+}
+{\xpg@unset@group@aux}
\newcommand{\setlocalhyphenmins}[3]{%
\xpg@ifdefined{#1}{%
@@ -853,25 +1585,76 @@
\ifcsundef{#1hyphenmins}{}%
{\expandafter\expandafter\expandafter\set@hyphenmins\csname #1hyphenmins\endcsname\relax}}
-\define@boolkey{polyglossia}[system@]{babelshorthands}[false]{}
+\AtEndPreamble{%
+ \@ifpackageloaded{bidi}{%
+ \providecommand*{\aemph}[1]{$\overline{\hboxR{#1}}$}%
+ }{}%
+ \@ifpackageloaded{luabidi}{%
+ \providecommand*{\aemph}[1]{$\overline{\hbox{\RL{#1}}}$}%
+ }{}%
+}
+
+
+% keys for main package
+\keys_define:nn { polyglossia } {
+ verbose
+ .bool_set:N = \l_polyglossia_verbose_bool,
+ verbose
+ .default:n = true,
+ % compatibility
+ quiet
+ .meta:n = { verbose = false },
+
+ localmarks
+ .bool_set:N = \l_polyglossia_localmarks_bool,
+ localmarks
+ .default:n = false,
+ % compatibility
+ nolocalmarks
+ .meta:n = { localmarks = false },
+
+ babelshorthands
+ .bool_set:N = \l_polyglossia_babelshorthands_bool,
+ babelshorthands
+ .default:n = true,
+}
+
+\keys_set:nn { polyglossia } {
+ localmarks = false,
+ verbose = true,
+ babelshorthands = false,
+}
-\AtEndPreamble{\@ifpackageloaded{bidi}{\providecommand*{\aemph}[1]{$\overline{\hboxR{#1}}$}}{}}% TODO Make that work for luabidi too.
+% load by default latex
+\setmainlanguage{latex}
+% then process key in order to overwrite
+\ProcessKeysOptions{polyglossia}
-%% Package Options %%
-\DeclareOption{nolocalmarks}{\setkeys{polyglossia}{localmarks=false}}
-\DeclareOption{localmarks}{\setkeys{polyglossia}{localmarks=true}}
-\DeclareOption{babelshorthands}{\setkeys{polyglossia}{babelshorthands=true}}
-\DeclareOption{quiet}{%
+\bool_if:nTF \l_polyglossia_verbose_bool {} {
\gdef\@latex@info#1{\relax}% no latex info
\gdef\@font@info#1{\relax}% no latex font info
\gdef\@font@warning#1{\relax}% no latex font warnings
\gdef\zf@PackageInfo#1{\relax}% no fontspec info
- \gdef\xpg@info#1{\relax}}% no polyglossia info
+ \gdef\xpg@info#1{\relax}% no polyglossia info
+}
+
+\bool_if:nTF \l_polyglossia_localmarks_bool {} {
+ \enable@local@marks{}
+}{}
+
+% compatibility
+\newif\ifsystem@babelshorthands
+\bool_if:nTF \l_polyglossia_babelshorthands_bool {
+ \system@babelshorthandstrue
+}{
+ \system@babelshorthandsfalse
+}
+
%
% FIXME these should also be loaded \AtEndOfPackage !!!
\def\xpg@option#1#2{%
\ifcsundef{xpg@main@language}{\setdefaultlanguage}{\setotherlanguage}%
[#1]{#2}}
\ExplSyntaxOff
-\ProcessOptions*
+
\endinput
diff --git a/Master/texmf-dist/tex/latex/polyglossia/xgreek-fixes.def b/Master/texmf-dist/tex/latex/polyglossia/xgreek-fixes.def
index 853bd0831c1..0f1d51f0043 100644
--- a/Master/texmf-dist/tex/latex/polyglossia/xgreek-fixes.def
+++ b/Master/texmf-dist/tex/latex/polyglossia/xgreek-fixes.def
@@ -1,4 +1,17 @@
% the following fixes are taken verbatim from xgreek.sty:
+% \message{Package `xgreek' version 3.0.1 by Apostolos Syropoulos}
+\global\lccode"0370="0371 \global\uccode"0370="0370
+\global\lccode"0371="0371 \global\uccode"0371="0370
+\global\lccode"0372="0373 \global\uccode"0372="0372
+\global\lccode"0373="0373 \global\uccode"0373="0372
+\global\lccode"0376="0377 \global\uccode"0376="0376
+\global\lccode"0377="0377 \global\uccode"0377="0376
+\global\lccode"03FD="037B \global\uccode"03FD="03FD
+\global\lccode"037B="037B \global\uccode"037B="03FD
+\global\lccode"03FE="037C \global\uccode"03FE="03FE
+\global\lccode"037C="037C \global\uccode"037C="03FE
+\global\lccode"03FF="037D \global\uccode"03FF="03FF
+\global\lccode"037D="037D \global\uccode"037D="03FF
\global\lccode"0386="03AC \global\uccode"0386="0391
\global\lccode"0388="03AD \global\uccode"0388="0395
\global\lccode"0389="03AC \global\uccode"0389="0397
@@ -81,8 +94,8 @@
\global\lccode"03DD="03DD \global\uccode"03DD="03DC
\global\lccode"03DE="03DF \global\uccode"03DE="03DE
\global\lccode"03DF="03DF \global\uccode"03DF="03DE
-\global\lccode"03E0="03E1 \global\uccode"03E0="039A
-\global\lccode"03E0="03E1 \global\uccode"03E1="03A1
+\global\lccode"03E0="03E1 \global\uccode"03E0="03E0
+\global\lccode"03E1="03E1 \global\uccode"03E1="03E0
\global\lccode"03F0="03BA \global\uccode"03F0="039A
\global\lccode"03F1="03C1 \global\uccode"03F1="03A1
\global\lccode"03F2="03F2 \global\uccode"03F2="03F9
@@ -287,7 +300,7 @@
\global\lccode"1FE2="1FE2 \global\uccode"1FE2="03AB
\global\lccode"1FE3="1FE3 \global\uccode"1FE3="03AB
\global\lccode"1FE4="1FE4 \global\uccode"1FE4="03A1
-\global\lccode"1FE5="1FE5 \global\uccode"1FE5="1FEC
+\global\lccode"1FE5="1FE5 \global\uccode"1FE5="03A1
\global\lccode"1FE6="1FE6 \global\uccode"1FE6="03A5
\global\lccode"1FE7="1FE7 \global\uccode"1FE7="03AB
\global\lccode"1FE8="1FE0 \global\uccode"1FE8="1FE8