From 753ccf29ee3c32686dbe1cb4ada792d0f26ec429 Mon Sep 17 00:00:00 2001 From: Karl Berry 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 --- .../tex/generic/babel/babel-bidi-basic-r.lua | 29 +++-- Master/texmf-dist/tex/generic/babel/babel.def | 79 ++++++++----- Master/texmf-dist/tex/generic/babel/babel.sty | 27 ++++- Master/texmf-dist/tex/generic/babel/hyphen.cfg | 4 +- Master/texmf-dist/tex/generic/babel/luababel.def | 128 +++++++++++++++++---- Master/texmf-dist/tex/generic/babel/nil.ldf | 2 +- Master/texmf-dist/tex/generic/babel/switch.def | 41 ++++--- Master/texmf-dist/tex/generic/babel/xebabel.def | 126 ++++++++++++++++---- 8 files changed, 329 insertions(+), 107 deletions(-) (limited to 'Master/texmf-dist/tex') diff --git a/Master/texmf-dist/tex/generic/babel/babel-bidi-basic-r.lua b/Master/texmf-dist/tex/generic/babel/babel-bidi-basic-r.lua index 2f80775609e..fab6721456a 100644 --- a/Master/texmf-dist/tex/generic/babel/babel-bidi-basic-r.lua +++ b/Master/texmf-dist/tex/generic/babel/babel-bidi-basic-r.lua @@ -33,8 +33,6 @@ -- Babel = Babel or {} -Babel.langdirs = {} - require('babel-bidi.lua') local characters = Babel.characters @@ -53,11 +51,10 @@ local function dir_mark(head, from, to, outer) end function Babel.pre_otfload(head) - local first_n, last_n = nil, nil -- first and last char with nums - local last_es = nil -- an auxiliary 'last' used with nums - local first_d, last_d = nil, nil -- first and last char in L/R block - local dir = nil - local dir_real = nil + local first_n, last_n -- first and last char with nums + local last_es -- an auxiliary 'last' used with nums + local first_d, last_d -- first and last char in L/R block + local dir, dir_real local strong = ('TRT' == tex.pardir) and 'r' or 'l' local strong_lr = (strong == 'l') and 'l' or 'r' local outer = strong @@ -65,7 +62,7 @@ function Babel.pre_otfload(head) local new_dir = false local first_dir = false - local last_lr = nil + local last_lr local type_n = '' @@ -88,7 +85,20 @@ function Babel.pre_otfload(head) end dir = dir or 'l' if new_dir then - strong = Babel.langdirs[item.lang] or 'l' + attr_dir = 0 + for at in node.traverse(item.attr) do + if at.number == luatexbase.registernumber'bbl@attr@dir' then + attr_dir = at.value + end + end + texio.write_nl(attr_dir) + if attr_dir == 1 then + strong = 'r' + elseif attr_dir == 2 then + strong = 'al' + else + strong = 'l' + end strong_lr = (strong == 'l') and 'l' or 'r' outer = strong_lr new_dir = false @@ -151,7 +161,6 @@ function Babel.pre_otfload(head) ch.char = characters[ch.char].m or ch.char end end - --last_lr = nil end end if dir == 'l' or dir == 'r' then diff --git a/Master/texmf-dist/tex/generic/babel/babel.def b/Master/texmf-dist/tex/generic/babel/babel.def index 6db9b31282e..cd6e92b3584 100644 --- a/Master/texmf-dist/tex/generic/babel/babel.def +++ b/Master/texmf-dist/tex/generic/babel/babel.def @@ -40,7 +40,7 @@ \wlog{File: #1 #4 #3 <#2>}% \let\ProvidesFile\@undefined} \fi -\ProvidesFile{babel.def}[2017/10/04 3.14 Babel common definitions] +\ProvidesFile{babel.def}[2017/11/03 3.15 Babel common definitions] \ifx\AtBeginDocument\@undefined \input plain.def\relax \fi @@ -83,7 +83,9 @@ \bbl@ifunset{\bbl@stripslash#1}% {\def#1{#2}}% {\expandafter\def\expandafter#1\expandafter{#1#2}}} +\def\bbl@xin@{\@expandtwoargs\in@} \def\bbl@csarg#1#2{\expandafter#1\csname bbl@#2\endcsname}% +\def\bbl@cs#1{\csname bbl@#1\endcsname} \def\bbl@loop#1#2#3{\bbl@@loop#1{#3}#2,\@nnil,} \def\bbl@loopx#1#2{\expandafter\bbl@loop\expandafter#1\expandafter{#2}} \def\bbl@@loop#1#2#3,{% @@ -688,7 +690,7 @@ \ifx\bbl@known@attribs\@undefined \in@false \else - \@expandtwoargs\in@{,\bbl@tempc-##1,}{,\bbl@known@attribs,}% + \bbl@xin@{,\bbl@tempc-##1,}{,\bbl@known@attribs,}% \fi \ifin@ \bbl@warning{% @@ -708,7 +710,7 @@ {The attribute #2 is unknown for language #1.}% {Your command will be ignored, type to proceed}} \def\bbl@declare@ttribute#1#2#3{% - \@expandtwoargs\in@{,#2,}{,\BabelModifiers,}% + \bbl@xin@{,#2,}{,\BabelModifiers,}% \ifin@ \AfterBabelLanguage{#1}{\languageattribute{#1}{#2}}% \fi @@ -718,7 +720,7 @@ \ifx\bbl@known@attribs\@undefined \in@false \else - \@expandtwoargs\in@{,#1-#2,}{,\bbl@known@attribs,}% + \bbl@xin@{,#1-#2,}{,\bbl@known@attribs,}% \fi \ifin@ \bbl@afterelse#3% @@ -952,8 +954,7 @@ \expandafter \bbl@toglobal\csname####1\string##1\endcsname}}}% \def\bbl@sctest{% - \@expandtwoargs - \in@{,\bbl@opt@strings,}{,\bbl@sc@label,\bbl@sc@fontenc,}}% + \bbl@xin@{,\bbl@opt@strings,}{,\bbl@sc@label,\bbl@sc@fontenc,}}% \fi \ifx\bbl@opt@strings\@nnil % ie, no strings key -> defaults \else\ifx\bbl@opt@strings\relax % ie, strings=encoded @@ -982,14 +983,14 @@ \fi} \def\bbl@forlang#1#2{% \bbl@for#1\bbl@L{% - \@expandtwoargs\in@{,#1,}{,\BabelLanguages,}% + \bbl@xin@{,#1,}{,\BabelLanguages,}% \ifin@#2\relax\fi}} \def\bbl@scswitch{% \bbl@forlang\bbl@tempa{% \ifx\bbl@G\@empty\else \ifx\SetString\@gobbletwo\else \edef\bbl@GL{\bbl@G\bbl@tempa}% - \@expandtwoargs\in@{,\bbl@GL,}{,\bbl@screset,}% + \bbl@xin@{,\bbl@GL,}{,\bbl@screset,}% \ifin@\else \global\expandafter\let\csname\bbl@GL\endcsname\@undefined \xdef\bbl@screset{\bbl@screset,\bbl@GL}% @@ -1065,7 +1066,7 @@ \bbl@tempa} \AtEndOfPackage{% \ifx\bbl@opt@hyphenmap\@undefined - \@expandtwoargs\in@{,}{\bbl@language@opts}% + \bbl@xin@{,}{\bbl@language@opts}% \chardef\bbl@opt@hyphenmap\ifin@4\else\@ne\fi \fi} \def\set@low@box#1{\setbox\tw@\hbox{,}\setbox\z@\hbox{#1}% @@ -1259,6 +1260,9 @@ \let\bbl@KVP@captions\@nil \let\bbl@KVP@import\@nil \let\bbl@KVP@main\@nil + \let\bbl@KVP@script\@nil + \let\bbl@KVP@language\@nil + \let\bbl@KVP@dir\@nil \let\bbl@KVP@hyphenrules\@nil \bbl@forkv{#1}{\bbl@csarg\def{KVP@##1}{##2}}% TODO - error handling \ifx\bbl@KVP@captions\@nil @@ -1275,6 +1279,12 @@ {Use this macro as documented}}% {\bbl@provide@renew{#2}}}% \bbl@exp{\\\babelensure[exclude=\\\today]{#2}}% + \ifx\bbl@KVP@script\@nil\else + \bbl@csarg\edef{sname@#2}{\bbl@KVP@script}% + \fi + \ifx\bbl@KVP@language\@nil\else + \bbl@csarg\edef{lname@#2}{\bbl@KVP@language}% + \fi \let\languagename\bbl@savelangname} \def\bbl@provide@new#1{% \@namedef{date#1}{}% marks lang exists - required by \StartBabelCommands @@ -1346,14 +1356,14 @@ \bbl@exp{% and hyphenrules is not empty \\\bbl@ifblank{\@nameuse{bbl@hyphr@#1}}% {}% - {\\\adddialect\\}}% + {\let\\\bbl@tempa\}}% \fi - \bbl@ifunset{l@#1}% no hyphenrules found - fallback - {\bbl@exp{\\\adddialect\\language}}% - {}% - \else - \bbl@exp{\\\adddialect\\bbl@tempa}% found in opt list - \fi} + \fi + \bbl@ifunset{bbl@tempa}% ie, relax or undefined + {\bbl@ifunset{l@#1}% no hyphenrules found - fallback + {\bbl@exp{\\\adddialect\\language}}% + {}}% so, l@ is ok - nothing to do + {\bbl@exp{\\\adddialect\\bbl@tempa}}}% found in opt list or ini \def\bbl@read@ini#1{% \openin1=babel-#1.ini \ifeof1 @@ -1532,7 +1542,7 @@ \@tempswatrue \fi} \fi -\@expandtwoargs\in@{R}\bbl@opt@safe +\bbl@xin@{R}\bbl@opt@safe \ifin@ \bbl@redefinerobust\ref#1{% \@safe@activestrue\org@ref{#1}\@safe@activesfalse} @@ -1542,7 +1552,7 @@ \let\org@ref\ref \let\org@pageref\pageref \fi -\@expandtwoargs\in@{B}\bbl@opt@safe +\bbl@xin@{B}\bbl@opt@safe \ifin@ \bbl@redefine\@citex[#1]#2{% \@safe@activestrue\edef\@tempa{#2}\@safe@activesfalse @@ -1602,7 +1612,7 @@ {\@temptokena\expandafter{\bbl@tempb{#2}}}% \bbl@exp{\\\org@markboth{\the\toks@}{\the\@temptokena}}} \bbl@tempc -\@expandtwoargs\in@{R}\bbl@opt@safe +\bbl@xin@{R}\bbl@opt@safe \ifin@ \AtBeginDocument{% \@ifpackageloaded{ifthen}{% @@ -1681,7 +1691,7 @@ \in@false \bbl@foreach\BabelNonASCII{% is there a non-ascii enc? \ifin@\else - \lowercase{\@expandtwoargs\in@{,#1enc.def,}{,\@filelist,}}% + \lowercase{\bbl@xin@{,#1enc.def,}{,\@filelist,}}% \fi}% \ifin@ % if a non-ascii has been loaded \def\ensureascii#1{{\fontencoding{OT1}\selectfont#1}}% @@ -1692,7 +1702,7 @@ \ifx\@empty#2\else \bbl@ifunset{T@#1}% {}% - {\@expandtwoargs\in@{,#1,}{,\BabelNonASCII,}% + {\bbl@xin@{,#1,}{,\BabelNonASCII,}% \ifin@ \DeclareTextCommand{\TeX}{#1}{\ensureascii{\org@TeX}}% \DeclareTextCommand{\LaTeX}{#1}{\ensureascii{\org@LaTeX}}% @@ -1701,7 +1711,7 @@ \fi}% \fi}% \bbl@foreach\@filelist{\bbl@tempb#1\@@}% TODO - \@@ de mas?? - \@expandtwoargs\in@{,\cf@encoding,}{,\BabelNonASCII,}% + \bbl@xin@{,\cf@encoding,}{,\BabelNonASCII,}% \ifin@\else \edef\ensureascii#1{{% \noexpand\fontencoding{\cf@encoding}\noexpand\selectfont#1}}% @@ -1738,15 +1748,20 @@ Nabataean,N'Ko,Orkhon,Palmyrene,Inscriptional Pahlavi,% Psalter Pahlavi,Phoenician,Inscriptional Parthian,Samaritan,% Old South Arabian,}% -\def\bbl@ensuredir{% - \@expandtwoargs - \in@{\csname bbl@script@\languagename\endcsname}% - {\bbl@alscripts\bbl@rscripts}% +\def\bbl@provide@dirs#1{% + \bbl@xin@{\csname bbl@sname@#1\endcsname}{\bbl@alscripts\bbl@rscripts}% \ifin@ - \bbl@setdirs\@ne + \global\bbl@csarg\chardef{wdir@#1}\@ne + \bbl@xin@{\csname bbl@sname@#1\endcsname}{\bbl@alscripts}% + \ifin@ + \global\bbl@csarg\chardef{wdir@#1}\tw@ % useless in xetex + \fi \else - \bbl@setdirs\z@ + \global\bbl@csarg\chardef{wdir@#1}\z@ \fi} +\def\bbl@switchdir{% + \bbl@ifunset{bbl@wdir@\languagename}{\bbl@provide@dirs{\languagename}}{}% + \bbl@exp{\\\bbl@setdirs\bbl@cs{wdir@\languagename}}} \def\bbl@setdirs#1{% TODO - math \ifcase\bbl@select@type % TODO - strictly, not the right test \bbl@pagedir{#1}% @@ -1756,7 +1771,7 @@ \bbl@textdir{#1}} \ifcase\bbl@engine \or - \AddBabelHook{babel-bidi}{afterextras}{\bbl@ensuredir} + \AddBabelHook{babel-bidi}{afterextras}{\bbl@switchdir} \DisableBabelHook{babel-bidi} \def\bbl@getluadir#1{% \directlua{ @@ -1775,13 +1790,15 @@ #2 TRT\relax \fi \fi} - \def\bbl@textdir{\bbl@setdir{text}\textdir}% TODO - ?\linedir + \def\bbl@textdir#1{% + \bbl@setdir{text}\textdir{#1}% TODO - ?\linedir + \setattribute\bbl@attr@dir{#1}} \def\bbl@pardir{\bbl@setdir{par}\pardir} \def\bbl@bodydir{\bbl@setdir{body}\bodydir} \def\bbl@pagedir{\bbl@setdir{page}\pagedir} \def\bbl@dirparastext{\pardir\the\textdir\relax}% %%%% \or - \AddBabelHook{babel-bidi}{afterextras}{\bbl@ensuredir} + \AddBabelHook{babel-bidi}{afterextras}{\bbl@switchdir} \DisableBabelHook{babel-bidi} \newcount\bbl@dirlevel \chardef\bbl@thetextdir\z@ diff --git a/Master/texmf-dist/tex/generic/babel/babel.sty b/Master/texmf-dist/tex/generic/babel/babel.sty index d1d3e3c9752..c5ce24b584f 100644 --- a/Master/texmf-dist/tex/generic/babel/babel.sty +++ b/Master/texmf-dist/tex/generic/babel/babel.sty @@ -32,7 +32,7 @@ %% extension |.ins|) which are part of the distribution. %% \NeedsTeXFormat{LaTeX2e}[2005/12/01] -\ProvidesPackage{babel}[2017/10/04 3.14 The Babel package] +\ProvidesPackage{babel}[2017/11/03 3.15 The Babel package] \@ifpackagewith{babel}{debug} {\let\bbl@debug\@firstofone} {\let\bbl@debug\@gobble} @@ -47,7 +47,9 @@ \bbl@ifunset{\bbl@stripslash#1}% {\def#1{#2}}% {\expandafter\def\expandafter#1\expandafter{#1#2}}} +\def\bbl@xin@{\@expandtwoargs\in@} \def\bbl@csarg#1#2{\expandafter#1\csname bbl@#2\endcsname}% +\def\bbl@cs#1{\csname bbl@#1\endcsname} \def\bbl@loop#1#2#3{\bbl@@loop#1{#3}#2,\@nnil,} \def\bbl@loopx#1#2{\expandafter\bbl@loop\expandafter#1\expandafter{#2}} \def\bbl@@loop#1#2#3,{% @@ -178,6 +180,8 @@ \bbl@languages \fi \@ifpackagewith{babel}{bidi=basic-r}{% must go before any \DeclareOption + \let\bbl@beforeforeign\leavevmode + \AtEndOfPackage{\EnableBabelHook{babel-bidi}}% \RequirePackage{luatexbase}% \directlua{ require('babel-bidi.lua') @@ -246,7 +250,20 @@ \DeclareOption{safe=none}{\let\bbl@opt@safe\@empty} \DeclareOption{safe=bib}{\def\bbl@opt@safe{B}} \DeclareOption{safe=ref}{\def\bbl@opt@safe{R}} -\DeclareOption{bidi=basic-r}{} +\DeclareOption{bidi=basic-r}% + {\newattribute\bbl@attr@dir + \let\bbl@beforeforeign\leavevmode + \AtEndOfPackage{\EnableBabelHook{babel-bidi}}} +\DeclareOption{bidi=default}% + {\let\bbl@beforeforeign\leavevmode + \ifcase\bbl@engine\or + \newattribute\bbl@attr@dir + \fi + \AtEndOfPackage{% + \EnableBabelHook{babel-bidi}% + \ifcase\bbl@engine\or\or + \bbl@xebidipar + \fi}} \let\bbl@opt@shorthands\@nnil \let\bbl@opt@config\@nnil \let\bbl@opt@main\@nnil @@ -263,7 +280,7 @@ \fi} \let\bbl@language@opts\@empty \DeclareOption*{% - \@expandtwoargs\in@{\string=}{\CurrentOption}% + \bbl@xin@{\string=}{\CurrentOption}% \ifin@ \expandafter\bbl@tempa\CurrentOption\bbl@tempa \else @@ -284,7 +301,7 @@ \def\bbl@ifshorthand#1#2#3{#3}% \else \def\bbl@ifshorthand#1{% - \@expandtwoargs\in@{\string#1}{\bbl@opt@shorthands}% + \bbl@xin@{\string#1}{\bbl@opt@shorthands}% \ifin@ \expandafter\@firstoftwo \else @@ -390,7 +407,7 @@ \edef\bbl@tempa{\@classoptionslist,\bbl@language@opts} \let\bbl@tempc\@empty \bbl@for\bbl@tempb\bbl@tempa{% - \@expandtwoargs\in@{,\bbl@tempb,}{,\bbl@loaded,}% + \bbl@xin@{,\bbl@tempb,}{,\bbl@loaded,}% \ifin@\edef\bbl@tempc{\bbl@tempb}\fi} \def\bbl@tempa#1,#2\@nnil{\def\bbl@tempb{#1}} \expandafter\bbl@tempa\bbl@loaded,\@nnil diff --git a/Master/texmf-dist/tex/generic/babel/hyphen.cfg b/Master/texmf-dist/tex/generic/babel/hyphen.cfg index 1dc995bb4a1..2a78efdda22 100644 --- a/Master/texmf-dist/tex/generic/babel/hyphen.cfg +++ b/Master/texmf-dist/tex/generic/babel/hyphen.cfg @@ -36,7 +36,7 @@ \wlog{File: #1 #4 #3 <#2>}% \let\ProvidesFile\@undefined} \fi -\ProvidesFile{hyphen.cfg}[2017/10/04 3.14 Babel hyphens] +\ProvidesFile{hyphen.cfg}[2017/11/03 3.15 Babel hyphens] \xdef\bbl@format{\jobname} \ifx\AtBeginDocument\@undefined \def\@empty{} @@ -67,7 +67,7 @@ \countdef\last@language=19 \def\addlanguage{\alloc@9\language\chardef\@cclvi} \fi -\toks8{Babel <3.14> and hyphenation patterns for }% +\toks8{Babel <3.15> and hyphenation patterns for }% \def\process@line#1#2 #3 #4 {% \ifx=#1% \process@synonym{#2}% diff --git a/Master/texmf-dist/tex/generic/babel/luababel.def b/Master/texmf-dist/tex/generic/babel/luababel.def index 7cbba864d1a..0ffb8d44cad 100644 --- a/Master/texmf-dist/tex/generic/babel/luababel.def +++ b/Master/texmf-dist/tex/generic/babel/luababel.def @@ -251,7 +251,7 @@ \csname bbl@hyphendata@\the\language\endcsname}}{}% \@ifundefined{bbl@patterns@}{}{% \begingroup - \@expandtwoargs\in@{,\number\language,}{,\bbl@pttnlist}% + \bbl@xin@{,\number\language,}{,\bbl@pttnlist}% \ifin@\else \ifx\bbl@patterns@\@empty\else \directlua{ Babel.addpatterns( @@ -332,30 +332,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@font@set\% + \<\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{\}{\<#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@exp{% 2=T - from script + \global\let\% + \}}}% + {}}% 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\% 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{\\\#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 + % \{fontspec-opentype/Script}{\bbl@cs{sname@#1}}% + % {\\\newfontscript{\bbl@cs{sname@#1}}{\bbl@cs{sotf@#1}}}% + % \{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 diff --git a/Master/texmf-dist/tex/generic/babel/nil.ldf b/Master/texmf-dist/tex/generic/babel/nil.ldf index a6c6ed76d76..a9fe897dc8f 100644 --- a/Master/texmf-dist/tex/generic/babel/nil.ldf +++ b/Master/texmf-dist/tex/generic/babel/nil.ldf @@ -31,7 +31,7 @@ %% and covered by LPPL is defined by the unpacking scripts (with %% extension |.ins|) which are part of the distribution. %% -\ProvidesLanguage{nil}[2017/10/04 3.14 Nil language] +\ProvidesLanguage{nil}[2017/11/03 3.15 Nil language] \LdfInit{nil}{datenil} \ifx\l@nohyphenation\@undefined \@nopatterns{nil} diff --git a/Master/texmf-dist/tex/generic/babel/switch.def b/Master/texmf-dist/tex/generic/babel/switch.def index 35901eab59e..3a0426fa3d9 100644 --- a/Master/texmf-dist/tex/generic/babel/switch.def +++ b/Master/texmf-dist/tex/generic/babel/switch.def @@ -36,7 +36,7 @@ \wlog{File: #1 #4 #3 <#2>}% \let\ProvidesFile\@undefined} \fi -\ProvidesFile{switch.def}[2017/10/04 3.14 Babel switching mechanism] +\ProvidesFile{switch.def}[2017/11/03 3.15 Babel switching mechanism] \ifx\AtBeginDocument\@undefined \input plain.def\relax \fi @@ -57,8 +57,8 @@ \countdef\last@language=19 \def\addlanguage{\alloc@9\language\chardef\@cclvi} \fi -\def\bbl@version{3.14} -\def\bbl@date{2017/10/04} +\def\bbl@version{3.15} +\def\bbl@date{2017/11/03} \def\adddialect#1#2{% \global\chardef#1#2\relax \bbl@usehooks{adddialect}{{#1}{#2}}% @@ -102,9 +102,12 @@ \xdef\bbl@language@stack{\languagename+\bbl@language@stack}} \def\bbl@pop@lang#1+#2-#3{% \edef\languagename{#1}\xdef#3{#2}} +\let\bbl@ifrestoring\@secondoftwo \def\bbl@pop@language{% \expandafter\bbl@pop@lang\bbl@language@stack-\bbl@language@stack - \expandafter\bbl@set@language\expandafter{\languagename}} + \let\bbl@ifrestoring\@firstoftwo + \expandafter\bbl@set@language\expandafter{\languagename}% + \let\bbl@ifrestoring\@secondoftwo} \expandafter\def\csname selectlanguage \endcsname#1{% \ifnum\bbl@hymapsel=\@cclv\let\bbl@hymapsel\tw@\fi \bbl@push@language @@ -150,8 +153,15 @@ \bbl@usehooks{afterreset}{}% \languageshorthands{none}% \ifcase\bbl@select@type - \csname captions#1\endcsname\relax - \csname date#1\endcsname\relax + \ifhmode + \hskip\z@skip % trick to ignore spaces + \csname captions#1\endcsname\relax + \csname date#1\endcsname\relax + \loop\ifdim\lastskip>\z@\unskip\repeat\unskip + \else + \csname captions#1\endcsname\relax + \csname date#1\endcsname\relax + \fi \fi \bbl@usehooks{beforeextras}{}% \csname extras#1\endcsname\relax @@ -242,7 +252,7 @@ \@expandtwoargs\bbl@usehooks{patterns}{{#1}{\bbl@tempa}}% \@ifundefined{bbl@hyphenation@}{}{% Can be \relax! \begingroup - \@expandtwoargs\in@{,\number\language,}{,\bbl@hyphlist}% + \bbl@xin@{,\number\language,}{,\bbl@hyphlist}% \ifin@\else \@expandtwoargs\bbl@usehooks{hyphenation}{{#1}{\bbl@tempa}}% \hyphenation{% @@ -254,17 +264,14 @@ \fi \endgroup}} \def\hyphenrules#1{% - \edef\languagename{#1}% - \bbl@fixname\languagename - \bbl@iflanguage\languagename{% - \expandafter\bbl@patterns\expandafter{\languagename}% + \edef\bbl@tempf{#1}% + \bbl@fixname\bbl@tempf + \bbl@iflanguage\bbl@tempf{% + \expandafter\bbl@patterns\expandafter{\bbl@tempf}% \languageshorthands{none}% - \expandafter\ifx\csname\languagename hyphenmins\endcsname\relax - \set@hyphenmins\tw@\thr@@\relax - \else - \expandafter\expandafter\expandafter\set@hyphenmins - \csname\languagename hyphenmins\endcsname\relax - \fi}} + \bbl@ifunset{\bbl@tempf hyphenmins}% + {\set@hyphenmins\tw@\thr@@\relax}% + {\bbl@exp{\\\set@hyphenmins\@nameuse{\bbl@tempf hyphenmins}}}}} \let\endhyphenrules\@empty \def\providehyphenmins#1#2{% \expandafter\ifx\csname #1hyphenmins\endcsname\relax 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@font@set\% + \<\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{\}{\<#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@exp{% 2=T - from script + \global\let\% + \}}}% + {}}% 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\% 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{\\\#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 + % \{fontspec-opentype/Script}{\bbl@cs{sname@#1}}% + % {\\\newfontscript{\bbl@cs{sname@#1}}{\bbl@cs{sotf@#1}}}% + % \{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