From 753ccf29ee3c32686dbe1cb4ada792d0f26ec429 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Fri, 3 Nov 2017 21:38:44 +0000
Subject: babel (3nov17)

git-svn-id: svn://tug.org/texlive/trunk@45683 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/tex/generic/babel/xebabel.def | 126 ++++++++++++++++++++----
 1 file changed, 106 insertions(+), 20 deletions(-)

(limited to 'Master/texmf-dist/tex/generic/babel/xebabel.def')

diff --git a/Master/texmf-dist/tex/generic/babel/xebabel.def b/Master/texmf-dist/tex/generic/babel/xebabel.def
index c3df40d1887..b3a75c9fd2b 100644
--- a/Master/texmf-dist/tex/generic/babel/xebabel.def
+++ b/Master/texmf-dist/tex/generic/babel/xebabel.def
@@ -73,30 +73,116 @@
     \L 00FF 0178 00FF
   \endgroup
   \input #1\relax}
+\ifx\DisableBabelHook\@undefined\endinput\fi
+\AddBabelHook{babel-fontspec}{afterextras}{\bbl@switchfont}
+\DisableBabelHook{babel-fontspec}
+\@onlypreamble\babelfont
+\newcommand\babelfont[2][]{%  1=langs/scripts 2=fam
+  \edef\bbl@tempa{#1}%
+  \def\bbl@tempb{#2}%
+  \ifx\fontspec\@undefined
+    \usepackage{fontspec}%
+  \fi
+  \EnableBabelHook{babel-fontspec}%
+  \bbl@bblfont}
+\newcommand\bbl@bblfont[2][]{% 1=features 2=fontname
+  \bbl@ifunset{\bbl@tempb family}{\bbl@providefam{\bbl@tempb}}{}%
+  \bbl@ifunset{bbl@lsys@\languagename}{\bbl@provide@lsys{\languagename}}{}%
+  \expandafter\bbl@ifblank\expandafter{\bbl@tempa}%
+    {\bbl@csarg\edef{\bbl@tempb dflt@}{<>{#1}{#2}}% save bbl@rmdflt@
+     \bbl@exp{%
+       \let\<bbl@\bbl@tempb dflt@\languagename>\<bbl@\bbl@tempb dflt@>%
+       \\\bbl@font@set\<bbl@\bbl@tempb dflt@\languagename>%
+                      \<\bbl@tempb default>\<\bbl@tempb family>}}%
+    {\bbl@foreach\bbl@tempa{% ie bbl@rmdflt@lang / *scrt
+       \bbl@csarg\def{\bbl@tempb dflt@##1}{<>{#1}{#2}}}}}%
+\def\bbl@providefam#1{%
+  \bbl@exp{%
+    \\\newcommand\<#1default>{}% Just define it
+    \\\bbl@add@list\\\bbl@font@fams{#1}%
+    \\\DeclareRobustCommand\<#1family>{%
+      \\\not@math@alphabet\<#1family>\relax
+      \\\fontfamily\<#1default>\\\selectfont}%
+    \\\DeclareTextFontCommand{\<text#1>}{\<#1family>}}}
+\def\bbl@switchfont{%
+  \bbl@ifunset{bbl@lsys@\languagename}{\bbl@provide@lsys{\languagename}}{}%
+  \bbl@exp{%  eg Arabic -> arabic
+    \lowercase{\edef\\\bbl@tempa{\bbl@cs{sname@\languagename}}}}%
+  \bbl@foreach\bbl@font@fams{%
+    \bbl@ifunset{bbl@##1dflt@\languagename}%    (1) language?
+      {\bbl@ifunset{bbl@##1dflt@*\bbl@tempa}%   (2) from script?
+         {\bbl@ifunset{bbl@##1dflt@}%           2=F - (3) from generic?
+           {}%                                  123=F - nothing!
+           {\bbl@exp{%                          3=T - from generic
+              \global\let\<bbl@##1dflt@\languagename>%
+                         \<bbl@##1dflt@>}}}%
+         {\bbl@exp{%                            2=T - from script
+            \global\let\<bbl@##1dflt@\languagename>%
+                       \<bbl@##1dflt@*\bbl@tempa>}}}%
+      {}}%                               1=T - language, already defined
+  \def\bbl@tempa{%
+    \bbl@warning{The current font is not a standard family.\\%
+      Script and Language are not applied. Consider defining\\%
+      a new family with \string\babelfont,}}%
+  \bbl@foreach\bbl@font@fams{%     don't gather with prev for
+    \bbl@ifunset{bbl@##1dflt@\languagename}%
+      {\bbl@cs{famrst@##1}%
+       \global\bbl@csarg\let{famrst@##1}\relax}%
+      {\bbl@exp{% order is relevant
+         \\\bbl@add\\\originalTeX{%
+           \\\bbl@font@rst{\bbl@cs{##1dflt@\languagename}}%
+                          \<##1default>\<##1family>{##1}}%
+         \\\bbl@font@set\<bbl@##1dflt@\languagename>% the main part!
+                        \<##1default>\<##1family>}}}%
+  \bbl@ifrestoring{}{\bbl@tempa}}%
+\def\bbl@font@set#1#2#3{%
+  \bbl@xin@{<>}{#1}%
+  \ifin@
+    \bbl@exp{\\\bbl@fontspec@set\\#1\expandafter\@gobbletwo#1}%
+  \fi
+  \bbl@exp{%
+    \def\\#2{#1}%        eg, \rmdefault{\bbl@rm1dflt@lang}
+    \\\bbl@ifsamestring{#2}{\f@family}{\\#3\let\\\bbl@tempa\relax}{}}}
+\def\bbl@fontspec@set#1#2#3{%
+  \bbl@exp{\<fontspec_set_family:Nnn>\\#1%
+    {\bbl@cs{lsys@\languagename},#2}}{#3}%
+  \bbl@toglobal#1}%
+\def\bbl@provide@lsys#1{%
+  \bbl@ifunset{bbl@lname@#1}%
+    {\bbl@ini@ids{#1}}%
+    {}%
+  \bbl@csarg\let{lsys@#1}\@empty
+  \bbl@ifunset{bbl@sname@#1}{\bbl@csarg\gdef{sname@#1}{Default}}{}%
+  \bbl@ifunset{bbl@sotf#1}{\bbl@csarg\gdef{sotf@#1}{DFLT}}{}%
+  \bbl@csarg\bbl@add@list{lsys@#1}{Script=\bbl@cs{sname@#1}}%
+  \bbl@ifunset{bbl@lname@#1}{}%
+    {\bbl@csarg\bbl@add@list{lsys@#1}{Language=\bbl@cs{lname@#1}}}%
+  \bbl@csarg\bbl@toglobal{lsys@#1}}%
+ %  \bbl@exp{% TODO - should be global
+ %    \<keys_if_exist:nnF>{fontspec-opentype/Script}{\bbl@cs{sname@#1}}%
+ %      {\\\newfontscript{\bbl@cs{sname@#1}}{\bbl@cs{sotf@#1}}}%
+ %    \<keys_if_exist:nnF>{fontspec-opentype/Language}{\bbl@cs{lname@#1}}%
+ %      {\\\newfontlanguage{\bbl@cs{lname@#1}}{\bbl@cs{lotf@#1}}}}}
+\def\bbl@ini@ids#1{%
+  \def\BabelBeforeIni##1##2{%
+    \begingroup
+      \bbl@add\bbl@secpost@identification{%
+        \def\bbl@iniline########1\bbl@iniline{}}%
+      \catcode`\[=12 \catcode`\]=12 \catcode`\==12
+      \bbl@read@ini{##1}%
+    \endgroup}
+  \InputIfFileExists{babel-#1.tex}{}{}}
+\def\bbl@font@rst#1#2#3#4{%
+  \bbl@csarg\def{famrst@#4}{\bbl@font@set{#1}#2#3}}
+\def\bbl@font@fams{rm,sf,tt}
 \newcommand\babelFSstore[2][]{%
   \bbl@ifblank{#1}%
-    {\bbl@csarg\def{script@#2}{Latin}}%
-    {\bbl@csarg\def{script@#2}{#1}}%
-  \@expandtwoargs % TODO should go to the ini loaders
-  \in@{\csname bbl@script@#2\endcsname}{\bbl@alscripts\bbl@rscripts}%
-  \ifin@
+    {\bbl@csarg\def{sname@#2}{Latin}}%
+    {\bbl@csarg\def{sname@#2}{#1}}%
+  \bbl@provide@dirs{#2}%
+  \bbl@csarg\ifnum{wdir@#2}>\z@
     \let\bbl@beforeforeign\leavevmode
     \EnableBabelHook{babel-bidi}%
-    \ifcase\bbl@engine\or
-      \@expandtwoargs % TODO should go to the ini loaders
-      \in@{\csname bbl@script@#2\endcsname}{\bbl@alscripts}%
-      \directlua{
-        Babel.langdirs = Babel.langdirs or {}
-        Babel.langdirs[\the\@nameuse{l@#2}] = \ifin@ 'al' \else 'r' \fi}%
-    \or
-      \bbl@xebidipar
-    \fi
-  \else
-    \ifcase\bbl@engine\or
-      \directlua{
-        Babel.langdirs = Babel.langdirs or {}
-        Babel.langdirs[\the\@nameuse{l@#2}] = 'l'}%
-    \fi
   \fi
   \bbl@foreach{#2}{%
     \bbl@FSstore{##1}{rm}\rmdefault\bbl@save@rmdefault
-- 
cgit v1.2.3

