From 122d129e46fd990f791aeb4ff07eaa1b35b9af0d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 9 Apr 2020 03:02:41 +0000 Subject: CTAN sync 202004090302 --- macros/generic/expkv/README.md | 2 +- macros/generic/expkv/expkv.dtx | 514 +++++++++++++---------- macros/generic/expkv/expkv.pdf | Bin 360009 -> 388809 bytes macros/latex/contrib/polyglossia/README | 49 --- macros/latex/contrib/polyglossia/README.md | 42 ++ macros/latex/contrib/polyglossia/polyglossia.dtx | 282 +++++++------ macros/latex/contrib/polyglossia/polyglossia.ins | 279 ------------ macros/latex/contrib/polyglossia/polyglossia.pdf | Bin 268164 -> 269164 bytes 8 files changed, 494 insertions(+), 674 deletions(-) delete mode 100644 macros/latex/contrib/polyglossia/README create mode 100644 macros/latex/contrib/polyglossia/README.md delete mode 100644 macros/latex/contrib/polyglossia/polyglossia.ins (limited to 'macros') diff --git a/macros/generic/expkv/README.md b/macros/generic/expkv/README.md index 35bcaebf0f..552d95d2b1 100644 --- a/macros/generic/expkv/README.md +++ b/macros/generic/expkv/README.md @@ -1,7 +1,7 @@ ------------------------------------------------------------------------------- # expkv -- an expandable key=val implementation -Version 2020-04-04 v0.5b +Version 2020-04-07 v1.0 Released under the LaTeX Project Public License v1.3c or later See http://www.latex-project.org/lppl.txt diff --git a/macros/generic/expkv/expkv.dtx b/macros/generic/expkv/expkv.dtx index 366db70123..97e7e2a21b 100644 --- a/macros/generic/expkv/expkv.dtx +++ b/macros/generic/expkv/expkv.dtx @@ -199,8 +199,8 @@ and the derived files expkv.pdf % \expkv\ provides a small interface for \kv\ parsing. The parsing macro is % fully expandable, the \meta{code} of your keys might be not. \expkv\ is pretty % fast, but not the fastest available \kv\ solution (\pkg{keyval} for instance -% is thrice as fast, but not expandable and it might strip braces it shouldn't -% have stripped). +% is three times as fast, but not expandable and it might strip braces it +% shouldn't have stripped). % \end{abstract} % % \tableofcontents @@ -232,7 +232,7 @@ and the derived files expkv.pdf % \item[def] % a key-defining frontend for \expkv\ using a \kv\ syntax % \item[cs] -% define expandable \kv\ macros utilizing \expkv +% define expandable \kv\ macros using \expkv % \end{description} % Note that while the package names are stylised with a vertical rule, their % names are all lower case with a hyphen (\emph{e.g.}, \file{expkv-def}). @@ -479,7 +479,7 @@ and the derived files expkv.pdf % that it does less. The same is true for |\keyval_parse:NNn| compared to % |\keys_set:nn| of \pkg{expl3} (where the difference is much bigger). % -% \paragraph{\pkg{keyval}} is about two times faster and has a comparable +% \paragraph{\pkg{keyval}} is about $1.6$ times faster and has a comparable % feature set just a slightly different way how it handles keys without values. % That might be considered a drawback, as it limits the versatility, but also as % an advantage, as it might reduce doubled code. Keep in mind that as soon as @@ -499,53 +499,53 @@ and the derived files expkv.pdf % \setkeys{foo}{bar={{baz}}} % \end{lstlisting} % -% \paragraph{\pkg{xkeyval}} is roughly fourteen times slower, but it provides +% \paragraph{\pkg{xkeyval}} is roughly seventeen times slower, but it provides % more functionality, e.g., it has choice keys, boolean keys, and so on. It % contains the same bug as \pkg{keyval} as it has to be compatible with it by % design (it replaces \pkg{keyval}'s frontend), but also adds even more cases in % which braces are stripped that shouldn't be stripped, worsening the situation. % -% \paragraph{\pkg{ltxkeys}} is over 300 times slower -- which is funny, because +% \paragraph{\pkg{ltxkeys}} is over 370 times slower -- which is funny, because % it aims to be ``[\ldots] faster [\ldots] than these earlier packages -% [referring to \pkg{keyval} and \pkg{xkeyval}].'' Since it aims to have a -% bigger feature set than \pkg{xkeyval}, it most definitely also has a bigger -% feature set than \expkv. Also, it can't parse |\long| input, so as soon as -% your values contain a |\par|, it'll throw errors. Furthermore, \pkg{ltxkeys} -% doesn't strip outer braces at all by design, which, imho, is a weird design -% choice. In addition \pkg{ltxkeys} loads \pkg{catoptions} which is known to -% introduce bugs (e.g., see +% [referring to \pkg{keyval} and \pkg{xkeyval}].'' It needs more time to parse +% zero keys than four of the packages in this comparison need to parse 100 keys. +% Since it aims to have a bigger feature set than \pkg{xkeyval}, it most +% definitely also has a bigger feature set than \expkv. Also, it can't parse +% |\long| input, so as soon as your values contain a |\par|, it'll throw errors. +% Furthermore, \pkg{ltxkeys} doesn't strip outer braces at all by design, which, +% imho, is a weird design choice. In addition \pkg{ltxkeys} loads +% \pkg{catoptions} which is known to introduce bugs (e.g., see % \url{https://tex.stackexchange.com/questions/461783}). % -% \paragraph{\pkg{l3keys}} is almost five times slower, but has an, imho, great +% \paragraph{\pkg{l3keys}} is around six times slower, but has an, imho, great % interface to define keys. It strips \emph{all} outer spaces, even if somehow % multiple spaces ended up on either end. It offers more features, but is pretty -% much bound to \pkg{expl3} code. Whether that's a drawback is up to you. +% much bound to \pkg{expl3} code. Whether that's a drawback is up to you. Note +% that this comparison uses the version contained in \TeX Live 2019 (frozen) +% which is a bit slower than versions starting with \TeX Live 2020. % -% \paragraph{\pkg{pgfkeys}} is a bit more than two times slower for one key, -% but has an \emph{enormous} feature set. However, since adding additional keys -% doesn't add as much needed time for \pkg{pgfkeys} compared to \expkv, it gets -% faster than \expkv\ at around eight \kv\ pairs. +% \paragraph{\pkg{pgfkeys}} is around $2.7$ times slower for one key, +% but has an \emph{enormous} feature set. % It has the same or a very similar bug \pkg{keyval} has. The brace bug (and % also the category fragility) can be fixed by \pkg{pgfkeyx}, but this package % was last updated in 2012 and it slows down |\pgfkeys| by factor~$8$. Also I % don't know whether this might introduce new bugs. % -% \paragraph{\pkg{kvsetkeys} with \pkg{kvdefinekeys}} is about three times +% \paragraph{\pkg{kvsetkeys} with \pkg{kvdefinekeys}} is about $3.7$ times % slower, but it works even if commas and equals have category codes different % from 12 (just as some other packages in this list). Else the features of the % keys are equal to those of \pkg{keyval}, the parser has more features, though. % -% \paragraph{\pkg{options}} is a bit slower for only a single value, but gets a -% tad faster than \expkv\ at around 10 \kv\ pairs. It has a much bigger feature -% set. Unfortunately it also suffers from the premature unbracing bug -% \pkg{keyval} has. +% \paragraph{\pkg{options}} is a $1.5$ times slower for only a single value. It +% has a much bigger feature set. Unfortunately it also suffers from the +% premature unbracing bug \pkg{keyval} has. % % \paragraph{\pkg{simplekv}} is hard to compare because I don't speak French (so % I don't understand the documentation) and from what I can see, there is no % direct way to define the equivalent test key. Nevertheless, I tested the % closest possible equivalent of my test key while siding for \pkg{simplekv}'s % design not forcing something into it it doesn't seem to be designed for. It is -% more than five times slower and has hard to predict behaviour regarding brace +% almost seven times slower and has hard to predict behaviour regarding brace % and space stripping, similar to \pkg{keyval}. The tested definition was: % \begin{lstlisting}[belowskip=0pt] % \usepackage{simplekv} @@ -553,7 +553,7 @@ and the derived files expkv.pdf % \setKV[simplekv]{ height = 6 } % benchmarked % \end{lstlisting} % -% \paragraph{\pkg{yax}} is over eighteen times slower. It has a pretty strange +% \paragraph{\pkg{yax}} is over twenty times slower. It has a pretty strange % syntax, imho, and again a direct equivalent is hard to define. It has the % premature unbracing bug, too. Also somehow loading \pkg{yax} broke % \pkg{options} for me. The tested definition was: @@ -591,16 +591,16 @@ and the derived files expkv.pdf % \toprule % \rmfamily Package & {$p_1$} & {$p_0$} & {$T_0$}& BB & CF & Date \\ % \midrule -% keyval & 13.539 & 1.844 & 6.969 & \yes & \yes & 2014-10-28 \\ -% \expkv & 26.411 & 2.391 & 12.610 & \no & \no & 2020-02-22 \\ -% options & 25.532 & 10.518 & 21.393 & \yes & \yes & 2015-03-01 \\ -% pgfkeys & 26.444 & 40.939 & 55.790 & \yes & \yes & 2020-01-08 \\ -% kvsetkeys & {\fnsym} & {\fnsym} & 41.620 & \no & \no & 2019-12-15 \\ -% l3keys & 114.456 & 35.357 & 52.667 & \no & \no & 2020-02-14 \\ -% simplekv & 160.523 & 10.809 & 8.698 & \yes & \yes & 2017-08-08 \\ -% xkeyval & 260.872 & 180.435 & 164.167 & \yes & \yes & 2014-12-03 \\ -% yax & 507.643 & 62.863 & 123.533 & \yes & \yes & 2010-01-22 \\ -% ltxkeys & 3932.759 & 4737.818 & 5883.000 & \no & \no & 2012-11-17 \\ +% keyval & 13.423 & 2.594 & 6.928 & \yes & \yes & 2014-10-28 \\ +% \expkv & 19.718 & 7.256 & 9.611 & \no & \no & 2020-04-07 \\ +% options & 23.436 & 15.618 & 19.920 & \yes & \yes & 2015-03-01 \\ +% pgfkeys & 24.577 & 46.244 & 52.770 & \yes & \yes & 2020-01-08 \\ +% kvsetkeys & {\fnsym} & {\fnsym} & 39.760 & \no & \no & 2019-12-15 \\ +% l3keys & 108.001 & 56.299 & 50.710 & \no & \no & 2020-02-25 \\ +% simplekv & 149.181 & 25.712 & 8.070 & \yes & \yes & 2017-08-08 \\ +% xkeyval & 248.777 & 234.420 & 161.900 & \yes & \yes & 2014-12-03 \\ +% yax & 443.584 & 170.471 & 115.700 & \yes & \yes & 2010-01-22 \\ +% ltxkeys & 3516.032 & 5254.811 & 5487.000 & \no & \no & 2012-11-17 \\ % \bottomrule % \end{tabular} % \par @@ -609,13 +609,13 @@ and the derived files expkv.pdf % \fnsym For \pkg{kvsetkeys} the linear model used for the other % packages is a poor fit, \pkg{kvsetkeys} seems to have approximately % quadratic run-time, the coefficients of the second degree polynomial fit are -% $p_2=\num{9.911}$, $p_1=\num{40.523}$, and $p_0=\num{61.500}$. Of course the +% $p_2=\num{7.473}$, $p_1=\num{51.276}$, and $p_0=\num{49.568}$. Of course the % other packages might not really have linear run-time, but at least from 1~to % 20~keys the fits don't seem too bad (the maximum ratio $p_2/p_1$ -% for the other packages is \num{9.697e-3}). If one extrapolates the fits +% for the other packages is \num{3.478e-3}). If one extrapolates the fits % for 100 \kv\ pairs one finds that most of them match pretty well, the % exception being \pkg{ltxkeys}, which behaves quadratic as well with -% $p_2=\num{31.685}$, $p_1=\num{3267.368}$, and $p_0=\num{7177.582}$. +% $p_2=\num{11.396}$, $p_1=\num{3276.713}$, and $p_0=\num{6132.315}$. % \end{table} % % \subsection{Examples} @@ -942,27 +942,28 @@ and the derived files expkv.pdf % \gobbledocstriptag %<*tex> % -% Check whether \eTeX\ is available -- \expkv\ requires \eTeX. +% We make sure that it's only input once: % \begin{macrocode} -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname numexpr\endcsname\relax - \errmessage{expkv requires e-TeX} +\expandafter\ifx\csname ekvVersion\endcsname\relax +\else \expandafter\endinput \fi % \end{macrocode} % -% We make sure that it's only input once: +% Check whether \eTeX\ is available -- \expkv\ requires \eTeX. % \begin{macrocode} -\expandafter\ifx\csname ekvVersion\endcsname\relax -\else +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname numexpr\endcsname\relax + \errmessage{expkv requires e-TeX} \expandafter\endinput \fi % \end{macrocode} +% % \begin{macro}{\ekvVersion,\ekvDate} % We're on our first input, so lets store the version and date in a macro. % \begin{macrocode} -\def\ekvVersion{0.5b} -\def\ekvDate{2020-04-04} +\def\ekvVersion{1.0} +\def\ekvDate{2020-04-07} % \end{macrocode} % \end{macro} % @@ -988,7 +989,8 @@ and the derived files expkv.pdf % \begin{macro}[internal] % { % \@gobble,\@firstofone,\@firstoftwo,\@secondoftwo, -% \ekv@gobbleto@stop,\ekv@fi@secondoftwo,\ekv@gobble@mark +% \ekv@gobbleto@stop,\ekv@fi@secondoftwo,\ekv@gobble@mark, +% \ekv@gobble@from@mark@to@stop % } % Since branching tests are often more versatile than |\if...\else...\fi| % constructs, we define helpers that are branching pretty fast. Also here are @@ -1002,6 +1004,7 @@ and the derived files expkv.pdf \long\def\ekv@fi@secondoftwo\fi\@firstoftwo#1#2{\fi#2} \long\def\ekv@gobbleto@stop#1\ekv@stop{} \def\ekv@gobble@mark\ekv@mark{} +\long\def\ekv@gobble@from@mark@to@stop\ekv@mark#1\ekv@stop{} % \end{macrocode} % \end{macro} % As you can see |\ekv@gobbleto@stop| uses a special marker |\ekv@stop|. The @@ -1014,7 +1017,8 @@ and the derived files expkv.pdf % \begin{macro}[internal] % { % \ekv@ifempty,\ekv@ifempty@,\ekv@ifempty@true,\ekv@ifempty@false, -% \ekv@ifempty@true@F +% \ekv@ifempty@true@F,\ekv@ifempty@true@F@gobble, +% \ekv@ifempty@true@F@gobbletwo % } % We can test for a lot of things building on an if-empty test, so lets define a % really fast one. Since some tests might have reversed logic (true if something @@ -1029,6 +1033,11 @@ and the derived files expkv.pdf \long\def\ekv@ifempty@true\ekv@ifempty@A\ekv@ifempty@B\@secondoftwo#1#2{#1} \long\def\ekv@ifempty@false\ekv@ifempty@A\ekv@ifempty@B\@firstoftwo#1#2{#2} \long\def\ekv@ifempty@true@F\ekv@ifempty@A\ekv@ifempty@B\@firstofone#1{} +\long\def\ekv@ifempty@true@F@gobble\ekv@ifempty@A\ekv@ifempty@B\@firstofone#1#2% + {} +\long\def\ekv@ifempty@true@F@gobbletwo + \ekv@ifempty@A\ekv@ifempty@B\@firstofone#1#2#3% + {} % \end{macrocode} % \end{macro} % @@ -1058,54 +1067,6 @@ and the derived files expkv.pdf \@firstoftwo } % \end{macrocode} -% \end{macro} - % \begin{macro}[internal] -% { -% \ekv@ifdefined@pair,\ekv@ifdefined@pair@,\ekv@ifdefined@key, -% \ekv@ifdefined@key@ -% } -% Since we can save some time if we only have to create the control sequence -% once when we know beforehand how we want to use it, we build some other macros -% for those cases (which we'll have quite often, once per key usage). -% \begin{macrocode} -\def\ekv@ifdefined@pair#1#2% - {% - \expandafter\ekv@ifdefined@pair@ - \csname - \ifcsname #1{#2}\endcsname - #1{#2}% - \else - relax% - \fi - \endcsname - } -\def\ekv@ifdefined@pair@#1% - {% - \ifx#1\relax - \ekv@fi@secondoftwo - \fi - \@firstoftwo - {\ekv@set@pair@#1\ekv@mark}% - } -\def\ekv@ifdefined@key#1#2% - {% - \expandafter\ekv@ifdefined@key@ - \csname - \ifcsname #1{#2}N\endcsname - #1{#2}N% - \else - relax% - \fi - \endcsname - } -\def\ekv@ifdefined@key@#1% - {% - \ifx#1\relax - \ekv@fi@secondoftwo - \fi - \@firstoftwo#1% - } -% \end{macrocode} % \end{macro} % % \begin{macro}{\ekv@name,\ekv@name@set,\ekv@name@key} @@ -1116,6 +1077,7 @@ and the derived files expkv.pdf \def\ekv@name@key#1{#1)} % \end{macrocode} % \end{macro} +% % \begin{macro}[internal]{\ekv@undefined@set} % We can misuse the macro name we use to expandably store the set-name in a % single token -- since this increases performance drastically, especially for @@ -1128,10 +1090,12 @@ and the derived files expkv.pdf \def\ekv@undefined@set#1{! expkv Error: Set `#1' undefined.} % \end{macrocode} % \end{macro} +% % \begin{macro}[internal]{\ekv@checkvalid} % We place some restrictions on the allowed names, though, namely sets and % keys are not allowed to be empty -- blanks are fine (meaning \mbox{set- -% or} key-names consisting of spaces). +% or} key-names consisting of spaces). The |\def\ekv@tmp| gobbles any \TeX\ +% prefixes which would otherwise throw errors. % \begin{macrocode} \protected\def\ekv@checkvalid#1#2% {% @@ -1152,6 +1116,7 @@ and the derived files expkv.pdf } % \end{macrocode} % \end{macro} +% % \begin{macro}{\ekvifdefined,\ekvifdefinedNoVal} % And provide user-level macros to test whether a key is defined. % \begin{macrocode} @@ -1216,6 +1181,7 @@ and the derived files expkv.pdf } % \end{macrocode} % \end{macro} +% % \begin{macro}[internal]{\ekv@defset} % In order to enhance the speed the set name given to |\ekvset| will be turned % into a control sequence pretty early, so we have to define that control @@ -1246,6 +1212,7 @@ and the derived files expkv.pdf } % \end{macrocode} % \end{macro} +% % \begin{macro}[internal]{\ekv@set} % |\ekv@set| will split the \kv\ list at active commas. Then it has to check % whether there were unprotected other commas and resplit there. @@ -1255,7 +1222,7 @@ and the derived files expkv.pdf % \end{macrocode} % Test whether we're at the end, if so invoke |\ekv@endset|, % \begin{macrocode} - \ekv@gobbleto@markstop##2\ekv@endset\ekv@mark\ekv@stop + \ekv@gobble@from@mark@to@stop##2\ekv@endset\ekv@stop % \end{macrocode} % else go on with other commas, % \begin{macrocode} @@ -1267,83 +1234,161 @@ and the derived files expkv.pdf } % \end{macrocode} % \end{macro} +% % \begin{macro}[internal]{\ekv@endset} % |\ekv@endset| is a hungry little macro. It will eat everything that remains % of |\ekv@set| and unbrace the sneaked stuff. % \begin{macrocode} \long\def\ekv@endset - \ekv@mark\ekv@stop\ekv@set@other##1,\ekv@stop,\ekv@set##2\ekv@mark + \ekv@stop\ekv@set@other##1,\ekv@stop,\ekv@set##2\ekv@mark ##3% {##3} % \end{macrocode} % \end{macro} +% +% \begin{macro}[internal]{\ekv@eq@other,\ekv@eq@active} +% Splitting at equal signs will be done in a way that checks whether there is +% an equal sign and splits at the same time. This gets quite messy and the +% code might look complicated, but this is pretty fast (faster than first +% checking for an equal sign and splitting if one is found). The splitting +% code will be adapted for |\ekvset| and |\ekvparse| to get the most speed, +% but some of these macros don't require such adaptions. |\ekv@eq@other| and +% |\ekv@eq@active| will split the argument at the first equal sign and insert +% the macro which comes after the first following |\ekv@mark|. This allows for +% fast branching based on \TeX's argument grabbing rules and we don't have to +% split after the branching if the equal sign was there. +% \begin{macrocode} +\long\def\ekv@eq@other##1=##2\ekv@mark##3##4\ekv@stop + {% + ##3##1\ekv@stop\ekv@mark##2% + } +\long\def\ekv@eq@active##1#2##2\ekv@mark##3##4\ekv@stop + {% + ##3##1\ekv@stop\ekv@mark##2% + } +% \end{macrocode} +% \end{macro} +% % \begin{macro}[internal]{\ekv@set@other} -% The macro |\ekv@set@other| is guaranteed to get only single \kv\ pairs. -% First we test whether we're done, if not split at equal signs. It is faster to -% first split at category 12 equal signs and only after that on actives. -% If there is no equal sign, we need to test whether we got a blank argument and -% if not this is a |NoVal| key. +% The macro |\ekv@set@other| is guaranteed to get only single \kv\ pairs. % \begin{macrocode} \long\def\ekv@set@other##1##2,% {% - \ekv@gobbleto@markstop##2\ekv@endset@other\ekv@mark\ekv@stop - \ekv@ifhas@eq@other##2=\ekv@ifempty@B\ekv@ifempty@false - \ekv@ifempty@A\ekv@ifempty@B\@firstoftwo - {\ekv@set@eq@other##1##2\ekv@stop}% - {% - \ekv@ifhas@eq@active##2#2\ekv@ifempty@B\ekv@ifempty@false - \ekv@ifempty@A\ekv@ifempty@B\@firstoftwo - {\ekv@set@eq@active##1##2\ekv@stop}% - {% - \ekv@ifblank@##2\ekv@nil\ekv@ifempty@B\ekv@ifempty@true@F - \ekv@ifempty@A\ekv@ifempty@B\@firstofone - {\ekv@strip{##2}\ekv@set@key##1}% - }% - }% - \ekv@set@other##1\ekv@mark% +% \end{macrocode} +% First we test whether we're done. +% \begin{macrocode} + \ekv@gobble@from@mark@to@stop##2\ekv@endset@other\ekv@stop +% \end{macrocode} +% If not we split at the equal sign of category other. +% \begin{macrocode} + \ekv@eq@other##2\ekv@nil\ekv@mark\ekv@set@eq@other@a + =\ekv@mark\ekv@set@eq@active\ekv@stop +% \end{macrocode} +% And insert the set name and the next recursion step of |\ekv@set@other|. +% \begin{macrocode} + ##1% + \ekv@set@other##1\ekv@mark } % \end{macrocode} % \end{macro} -% \begin{macro}[internal]{\ekv@set@eq@other} -% |\ekv@set@eq@other| might not be the correct break point, there might be an -% active equal sign in the currently parsed key-name. If so, we have to resplit. -% If the split is correct strip the key-name of outer spaces and braces and feed -% it to |\ekv@set@pair|. +% +% \begin{macro}[internal]{\ekv@set@eq@other@a, \ekv@set@eq@other@b} +% The first of these two macros runs the split-test for equal signs of +% category active. It will only be inserted if the \kv\ pair contained at +% least one equal sign of category other and |##1| will contain everything up +% to that equal sign. +% \begin{macrocode} +\long\def\ekv@set@eq@other@a##1\ekv@stop + {% + \ekv@eq@active##1\ekv@nil\ekv@mark\ekv@set@eq@other@active@a + #2\ekv@mark\ekv@set@eq@other@b\ekv@stop + } +% \end{macrocode} +% The second macro will have been called by |\ekv@eq@active| if no active +% equal sign was found. All it does is remove the excess tokens of that +% test and forward the \kv\ pair to |\ekv@set@pair|. % \begin{macrocode} -\long\def\ekv@set@eq@other##1##2=% +\long\def\ekv@set@eq@other@b + ##1\ekv@nil\ekv@mark\ekv@set@eq@other@active@a\ekv@stop\ekv@mark + ##2\ekv@nil {% - \ekv@ifhas@eq@active##2#2\ekv@ifempty@B\ekv@ifempty@false - \ekv@ifempty@A\ekv@ifempty@B\@firstoftwo - {\ekv@set@eq@active##1##2=}% - {\ekv@strip{##2}\ekv@set@pair##1}% + \ekv@strip{##1}\ekv@set@pair{##2}% } % \end{macrocode} % \end{macro} -% \begin{macro}[internal]{\ekv@set@eq@active} -% We need to handle the active equal signs. +% +% \begin{macro}[internal]{\ekv@set@eq@other@active@a,\ekv@set@eq@other@active@b} +% |\ekv@set@eq@other@active@a| will be called if the \kv\ pair was wrongly +% split on an equal sign of category other but has an earlier equal sign of +% category active. |##1| will be the contents up to the active equal sign and +% |##2| everything that remains until the first found other equal sign. It has +% to reinsert the equal sign and passes things on to +% |\ekv@set@eq@other@active@b| which calls |\ekv@set@pair| on the then +% correctly split \kv\ pair. % \begin{macrocode} -\long\def\ekv@set@eq@active##1##2#2% +\long\def\ekv@set@eq@other@active@a##1\ekv@stop##2\ekv@nil\ekv@mark {% - \ekv@strip{##2}\ekv@set@pair##1% + \ekv@set@eq@other@active@b{##1}##2=% + } +\long\def\ekv@set@eq@other@active@b##1##2\ekv@nil + {% + \ekv@strip{##1}\ekv@set@pair{##2}% } % \end{macrocode} % \end{macro} -% \begin{macro}[internal] -% {\ekv@ifhas@eq@other,\ekv@ifhas@eq@active,\ekv@endset@other} -% And we have to set up the testing macros for our equal signs and -% |\ekv@endset@other|. +% +% \begin{macro}[internal]{\ekv@set@eq@active, \ekv@set@eq@active@} +% |\ekv@set@eq@active| will be called when there was no equal sign of category +% other in the \kv\ pair. It removes the excess tokens of the prior test and +% split-checks for an active equal sign. +% \begin{macrocode} +\long\def\ekv@set@eq@active + ##1\ekv@nil\ekv@mark\ekv@set@eq@other@a\ekv@stop\ekv@mark + {% + \ekv@eq@active##1\ekv@nil\ekv@mark\ekv@set@eq@active@ + #2\ekv@mark\ekv@set@noeq\ekv@stop + } +% \end{macrocode} +% If an active equal sign was found in |\ekv@set@eq@active| we'll have to pass +% the now split \kv\ pair on to |\ekv@set@pair|. +% \begin{macrocode} +\long\def\ekv@set@eq@active@##1##2\ekv@nil + {% + \ekv@strip{##1}\ekv@set@pair{##2}% + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}[internal]{\ekv@set@noeq} +% If no active equal sign was found by |\ekv@set@eq@active| there is no equal +% sign contained in the parsed list entry. In that case we have to check +% whether the entry is blank in order to ignore it (in which case we'll have +% to gobble the set-name which was put after these tests by |\ekv@set@other|). +% Else this is a |NoVal| key and the entry is passed on to |\ekv@set@key|. +% \begin{macrocode} +\long\def\ekv@set@noeq##1\ekv@nil\ekv@mark\ekv@set@eq@active@\ekv@stop\ekv@mark + {% + \ekv@ifblank@##1\ekv@nil\ekv@ifempty@B\ekv@ifempty@true@F@gobble + \ekv@ifempty@A\ekv@ifempty@B\@firstofone + {\ekv@strip{##1}\ekv@set@key}% + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}[internal]{\ekv@endset@other} +% All that's left for |\ekv@set@other| is the macro which breaks the recursion +% loop at the end. This is done by gobbling all the remaining tokens. % \begin{macrocode} -\long\def\ekv@ifhas@eq@other\ekv@mark##1={\ekv@ifempty@\ekv@ifempty@A} -\long\def\ekv@ifhas@eq@active\ekv@mark##1#2{\ekv@ifempty@\ekv@ifempty@A} \long\def\ekv@endset@other - \ekv@mark\ekv@stop - \ekv@ifhas@eq@other##1=\ekv@ifempty@B\ekv@ifempty@false - \ekv@ifempty@A\ekv@ifempty@B\@firstoftwo + \ekv@stop + \ekv@eq@other##1\ekv@nil\ekv@mark\ekv@set@eq@other@a + =\ekv@mark\ekv@set@eq@active\ekv@stop ##2% \ekv@set@other##3\ekv@mark {} % \end{macrocode} % \end{macro} +% % \begin{macro}{\ekvbreak,\ekvbreakPreSneak,\ekvbreakPostSneak} % Provide macros that can completely stop the parsing of |\ekvset|, who knows % what it'll be useful for. @@ -1353,6 +1398,7 @@ and the derived files expkv.pdf \long\def\ekvbreakPostSneak##1##2\ekv@stop#1##3{##3##1} % \end{macrocode} % \end{macro} +% % \begin{macro}{\ekvsneak,\ekvsneakPre} % One last thing we want to do for |\ekvset| is to provide macros that just % smuggle stuff after |\ekvset|'s effects. @@ -1381,90 +1427,124 @@ and the derived files expkv.pdf } % \end{macrocode} % \end{macro} +% % \begin{macro}[internal]{\ekv@parse} % \begin{macrocode} \long\def\ekv@parse##1##2##3#1% {% - \ekv@gobbleto@markstop##3\ekv@endparse\ekv@mark\ekv@stop + \ekv@gobble@from@mark@to@stop##3\ekv@endparse\ekv@stop \ekv@parse@other##1##2##3,\ekv@stop,% \ekv@parse##1##2\ekv@mark } % \end{macrocode} % \end{macro} +% % \begin{macro}[internal]{\ekv@endparse} % \begin{macrocode} \long\def\ekv@endparse - \ekv@mark\ekv@stop\ekv@parse@other##1,\ekv@stop,\ekv@parse##2\ekv@mark + \ekv@stop\ekv@parse@other##1,\ekv@stop,\ekv@parse##2\ekv@mark {} % \end{macrocode} % \end{macro} +% % \begin{macro}[internal]{\ekv@parse@other} % \begin{macrocode} \long\def\ekv@parse@other##1##2##3,% {% - \ekv@gobbleto@markstop##3\ekv@endparse@other\ekv@mark\ekv@stop - \ekv@ifhas@eq@other##3=\ekv@ifempty@B\ekv@ifempty@false - \ekv@ifempty@A\ekv@ifempty@B\@firstoftwo - {\ekv@parse@eq@other##3\ekv@stop##2}% - {% - \ekv@ifhas@eq@active##3#2\ekv@ifempty@B\ekv@ifempty@false - \ekv@ifempty@A\ekv@ifempty@B\@firstoftwo - {\ekv@parse@eq@active##3\ekv@stop##2}% - {% - \ekv@ifblank@##3\ekv@nil\ekv@ifempty@B\ekv@ifempty@true@F - \ekv@ifempty@A\ekv@ifempty@B\@firstofone - {\ekv@strip{##3}\ekv@parse@key##1}% - }% - }% + \ekv@gobble@from@mark@to@stop##3\ekv@endparse@other\ekv@stop + \ekv@eq@other##3\ekv@nil\ekv@mark\ekv@parse@eq@other@a + =\ekv@mark\ekv@parse@eq@active\ekv@stop + ##1##2% \ekv@parse@other##1##2\ekv@mark } % \end{macrocode} % \end{macro} -% \begin{macro}[internal]{\ekv@parse@eq@other} +% +% \begin{macro}[internal]{\ekv@parse@eq@other@a,\ekv@parse@eq@other@b} +% \begin{macrocode} +\long\def\ekv@parse@eq@other@a##1\ekv@stop + {% + \ekv@eq@active##1\ekv@nil\ekv@mark\ekv@parse@eq@other@active@a + #2\ekv@mark\ekv@parse@eq@other@b\ekv@stop + } +\long\def\ekv@parse@eq@other@b + ##1\ekv@nil\ekv@mark\ekv@parse@eq@other@active@a\ekv@stop\ekv@mark + ##2\ekv@nil + {% + \ekv@strip{##1}\ekv@parse@pair{##2}% + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}[internal] +% {\ekv@parse@eq@other@active@a,\ekv@parse@eq@other@active@b} +% \begin{macrocode} +\long\def\ekv@parse@eq@other@active@a##1\ekv@stop##2\ekv@nil\ekv@mark + {% + \ekv@parse@eq@other@active@b{##1}##2=% + } +\long\def\ekv@parse@eq@other@active@b##1##2\ekv@nil + {% + \ekv@strip{##1}\ekv@parse@pair{##2}% + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}[internal]{\ekv@parse@eq@active,\ekv@parse@eq@active@} % \begin{macrocode} -\long\def\ekv@parse@eq@other##1=% +\long\def\ekv@parse@eq@active + ##1\ekv@nil\ekv@mark\ekv@parse@eq@other@a\ekv@stop\ekv@mark {% - \ekv@ifhas@eq@active##1#2\ekv@ifempty@B\ekv@ifempty@false - \ekv@ifempty@A\ekv@ifempty@B\@firstoftwo - {\ekv@parse@eq@active##1=}% - {\ekv@strip{##1}\ekv@parse@pair\ekv@mark}% + \ekv@eq@active##1\ekv@nil\ekv@mark\ekv@parse@eq@active@ + #2\ekv@mark\ekv@parse@noeq\ekv@stop + } +\long\def\ekv@parse@eq@active@##1##2\ekv@nil + {% + \ekv@strip{##1}\ekv@parse@pair{##2}% } % \end{macrocode} % \end{macro} -% \begin{macro}[internal]{\ekv@parse@eq@active} +% +% \begin{macro}[internal]{\ekv@parse@noeq} % \begin{macrocode} -\long\def\ekv@parse@eq@active##1#2% +\long\def\ekv@parse@noeq + ##1\ekv@nil\ekv@mark\ekv@parse@eq@active@\ekv@stop\ekv@mark {% - \ekv@strip{##1}\ekv@parse@pair\ekv@mark + \ekv@ifblank@##1\ekv@nil\ekv@ifempty@B\ekv@ifempty@true@F@gobbletwo + \ekv@ifempty@A\ekv@ifempty@B\@firstofone + {\ekv@strip{##1}\ekv@parse@key}% } % \end{macrocode} % \end{macro} +% % \begin{macro}[internal]{\ekv@endparse@other} % \begin{macrocode} \long\def\ekv@endparse@other - \ekv@mark\ekv@stop - \ekv@ifhas@eq@other##1=\ekv@ifempty@B\ekv@ifempty@false - \ekv@ifempty@A\ekv@ifempty@B\@firstoftwo + \ekv@stop + \ekv@eq@other##1\ekv@nil\ekv@mark\ekv@parse@eq@other@a + =\ekv@mark\ekv@parse@eq@active\ekv@stop ##2% \ekv@parse@other##3\ekv@mark {} % \end{macrocode} % \end{macro} +% % \begin{macro}[internal]{\ekv@parse@pair,\ekv@parse@pair@} % \begin{macrocode} -\long\def\ekv@parse@pair##1##2\ekv@stop +\long\def\ekv@parse@pair##1##2% {% \ekv@strip{##2}\ekv@parse@pair@{##1}% } -\long\def\ekv@parse@pair@##1##2##3% +\long\def\ekv@parse@pair@##1##2##3##4% {% - \unexpanded{##3{##2}{##1}}% + \unexpanded{##4{##2}{##1}}% } % \end{macrocode} % \end{macro} +% % \begin{macro}[internal]{\ekv@parse@key} % \begin{macrocode} -\long\def\ekv@parse@key##1##2% +\long\def\ekv@parse@key##1##2##3% {% \unexpanded{##2{##1}}% } @@ -1495,6 +1575,7 @@ and the derived files expkv.pdf } % \end{macrocode} % \end{macro} +% % \begin{macro}[internal]{\ekv@changeset} % This macro does the real change-out of |\ekvchangeset|. We introduced an % |\ekv@mark| to not accidentally remove some braces which we have to remove @@ -1508,58 +1589,59 @@ and the derived files expkv.pdf % \end{macro} % % -% \begin{macro}[internal]{\ekv@gobbleto@markstop} -% The |\ekv@gobbleto@markstop| can be used to test for |\ekv@stop| similar to -% our if-empty test, but instead of using tokens which are used nowhere else -% (|\ekv@ifempty@A| and |\ekv@ifempty@B|) it uses |\ekv@mark| and |\ekv@stop|. +% \begin{macro}[internal]{\ekv@set@pair} +% |\ekv@set@pair| gets invoked with the space and brace stripped key-name as +% its first argument, the value as the second argument, and the set name as +% the third argument. It builds the key-macro name and provides everything to +% be able to throw meaningful error messages if it isn't defined. +% |\ekv@set@pair@| will space and brace strip the value if the macro is +% defined and call the key-macro. Else it'll branch into the error messages +% provided by |\ekv@set@pair|. % \begin{macrocode} -\long\def\ekv@gobbleto@markstop#1\ekv@mark\ekv@stop{} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}[internal]{\ekv@set@pair,\ekv@set@pair@} -% |\ekv@set@pair| gets invoked with the space and brace stripped key-name as its -% first argument, the set-macro as the second argument, and following that is -% the key-value right delimited by an |\ekv@stop|. -% \begin{macrocode} -\long\def\ekv@set@pair#1#2% +\long\def\ekv@set@pair#1#2#3% {% - \ekv@ifdefined@pair#2{#1}% + \expandafter\ekv@set@pair@ + \csname + \ifcsname #3{#1}\endcsname + #3{#1}% + \else + relax% + \fi + \endcsname + {#2}% {% -% \end{macrocode} -% This branch will be executed if the key is not defined as an argument grabbing -% one. If so test whether there is a |NoVal| key of the same name or whether the -% key is unknown. Throw a meaningful error message and gobble the value. -% \begin{macrocode} - \ekv@ifdefined{#2{#1}N}% + \ekv@ifdefined{#3{#1}N}% \ekv@err@noarg \ekv@err@unknown - #2{#1}% - \ekv@gobbleto@stop + #3{#1}% }% } -% \end{macrocode} -% |\ekv@ifdefined@pair| will call |\ekv@set@pair@| if the key is correctly -% defined. This will then grab the value, strip outer spaces and braces from it -% and feed it to the key-macro. Afterwards |\ekv@set@other| will take control -% again. -% \begin{macrocode} -\long\def\ekv@set@pair@#1#2\ekv@stop +\long\def\ekv@set@pair@#1#2% {% - \ekv@strip{#2}#1% + \ifx#1\relax + \ekv@fi@secondoftwo + \fi + \@firstoftwo + {\ekv@strip{#2}#1}% } % \end{macrocode} % \end{macro} % % \begin{macro}[internal]{\ekv@set@key} -% Analogous to |\ekv@set@pair|, |\ekv@set@key| lets |\ekv@ifdefined@key| test -% whether a |NoVal| key is defined, else it'll throw a meaningful error message. -% Since we don't have to grab any value |\ekv@ifdefined@key| will invoke the -% key-macro and we're done here, |\ekv@set@other| will take over again. +% Analogous to |\ekv@set@pair|, |\ekv@set@key| builds the |NoVal| key-macro and +% provides an error-branch. |\ekv@set@key@| will test whether the key-macro is +% defined and if so call it, else the errors are thrown. % \begin{macrocode} \long\def\ekv@set@key#1#2% {% - \ekv@ifdefined@key#2{#1}% + \expandafter\ekv@set@key@ + \csname + \ifcsname #2{#1}N\endcsname + #2{#1}N% + \else + relax% + \fi + \endcsname {% \ekv@ifdefined{#2{#1}}% \ekv@err@reqval @@ -1567,6 +1649,13 @@ and the derived files expkv.pdf #2{#1}% }% } +\def\ekv@set@key@#1% + {% + \ifx#1\relax + \ekv@fi@secondoftwo + \fi + \@firstoftwo#1% + } % \end{macrocode} % \end{macro} % @@ -1590,6 +1679,7 @@ and the derived files expkv.pdf \def\ekv@err@{\expandafter\ekv@gobbleto@stop} % \end{macrocode} % \end{macro} +% % \begin{macro}[internal] % { % \ekv@err@common,\ekv@err@common@, diff --git a/macros/generic/expkv/expkv.pdf b/macros/generic/expkv/expkv.pdf index 5c40e805bd..c6512d943b 100644 Binary files a/macros/generic/expkv/expkv.pdf and b/macros/generic/expkv/expkv.pdf differ diff --git a/macros/latex/contrib/polyglossia/README b/macros/latex/contrib/polyglossia/README deleted file mode 100644 index acac78e598..0000000000 --- a/macros/latex/contrib/polyglossia/README +++ /dev/null @@ -1,49 +0,0 @@ - - ¦----------------------------------------------¦ - ¦ ¦ - ¦ THE POLYGLOSSIA PACKAGE v1.48 ¦ - ¦ ¦ - ¦ Modern multilingual typesetting ¦ - ¦ with XeLaTeX and LuaLaTeX ¦ - ¦ ¦ - ¦----------------------------------------------¦ - -This package provides an alternative to Babel for users of XeLaTeX and LuaLaTeX -(with a few languages incompletely supported for the latter). This version -includes support for over 70 different languages, some of which in different -regional or national varieties, or using a different writing system. - -Polyglossia makes it possible to automate the following tasks: - -* Loading the appropriate hyphenation patterns. -* Setting the script and language tags of the current font (if possible and - available), using the package fontspec. -* Switching to a font assigned by the user to a particular script or language. -* Adjusting some typographical conventions in function of the current language - (such as afterindent, frenchindent, spaces before or after punctuation marks, - etc.). -* Redefining the document strings (like “chapter”, “figure”, “bibliography”). -* Adapting the formatting of dates (for non-gregorian calendars via external - packages bundled with polyglossia: currently the Hebrew, Islamic and Farsi - calendars are supported). -* For languages that have their own numeration system, modifying the formatting - of numbers appropriately. -* Ensuring the proper directionality if the document contains languages - written from right to left (via the packages bidi and luabidi, available - separately). - -LICENSE - -Copyright (c) 2008-2010 François Charette, 2013 Élie Roux, 2011-2020 Arthur Reutenauer, -Copyright (c) 2019-2020 Bastien Roucariès, 2019-2020 Jürgen Spitzmüller - -Except where otherwise noted, Polyglossia is placed under the terms of the MIT licence -(https://opensource.org/licenses/MIT). - -BUGS - -If you run into a bug, or suspect you do, or you have a request or comment, please -use the GitHub issue tracker: http://github.com/reutenauer/polyglossia/issues - -This is more efficient than contacting the maintainer by email as it allows me -to track the issues and follow progress. diff --git a/macros/latex/contrib/polyglossia/README.md b/macros/latex/contrib/polyglossia/README.md new file mode 100644 index 0000000000..79b922ef93 --- /dev/null +++ b/macros/latex/contrib/polyglossia/README.md @@ -0,0 +1,42 @@ +# THE POLYGLOSSIA PACKAGE v1.49 +## Multilingual typesetting with XeLaTeX and LuaLaTeX + +This package provides an alternative to Babel for users of XeLaTeX and LuaLaTeX +(with a few languages incompletely supported for the latter). This version +includes support for over 70 different languages, some of which in different +regional or national varieties, or using a different writing system. + +Polyglossia makes it possible to automate the following tasks: + +* Loading the appropriate hyphenation patterns. +* Setting the script and language tags of the current font (if possible and + available), using the package fontspec. +* Switching to a font assigned by the user to a particular script or language. +* Adjusting some typographical conventions in function of the current language + (such as afterindent, frenchindent, spaces before or after punctuation marks, + etc.). +* Redefining the document strings (like “chapter”, “figure”, “bibliography”). +* Adapting the formatting of dates (for non-gregorian calendars via external + packages bundled with polyglossia: currently the Hebrew, Islamic and Farsi + calendars are supported). +* For languages that have their own numeration system, modifying the formatting + of numbers appropriately. +* Ensuring the proper directionality if the document contains languages + written from right to left (via the packages bidi and luabidi, available + separately). + +# LICENCE + +Copyright (c) 2008-2010 François Charette, 2013 Élie Roux, 2011-2020 Arthur Reutenauer, +Copyright (c) 2019-2020 Bastien Roucariès, 2019-2020 Jürgen Spitzmüller + +Except where otherwise noted, Polyglossia is placed under the terms of the MIT licence +(https://opensource.org/licenses/MIT). + +# BUGS + +If you run into a bug, or suspect you do, or you have a request or comment, please +use the GitHub issue tracker: http://github.com/reutenauer/polyglossia/issues + +This is more efficient than contacting the maintainer by email as it allows me +to track the issues and follow progress. diff --git a/macros/latex/contrib/polyglossia/polyglossia.dtx b/macros/latex/contrib/polyglossia/polyglossia.dtx index e70cec7999..246c37edb0 100644 --- a/macros/latex/contrib/polyglossia/polyglossia.dtx +++ b/macros/latex/contrib/polyglossia/polyglossia.dtx @@ -1,6 +1,6 @@ %\iffalse % polyglossia.dtx generated using mkpolyglossiadtx.pl -% (derived from makedtx.pl version 0.94b (c) Nicola Talbot) +% (derived from makedtx.pl version 1.49 (c) Nicola Talbot) % % To extract the files, use xetex polyglossia.dtx or luatex polyglossia.dtx % @@ -8,15 +8,8 @@ \iffalse % %<*README> - - ¦----------------------------------------------¦ - ¦ ¦ - ¦ THE POLYGLOSSIA PACKAGE v1.48 ¦ - ¦ ¦ - ¦ Modern multilingual typesetting ¦ - ¦ with XeLaTeX and LuaLaTeX ¦ - ¦ ¦ - ¦----------------------------------------------¦ +# THE POLYGLOSSIA PACKAGE v1.49 +## Multilingual typesetting with XeLaTeX and LuaLaTeX This package provides an alternative to Babel for users of XeLaTeX and LuaLaTeX (with a few languages incompletely supported for the latter). This version @@ -42,7 +35,7 @@ Polyglossia makes it possible to automate the following tasks: written from right to left (via the packages bidi and luabidi, available separately). -LICENSE +# LICENCE Copyright (c) 2008-2010 François Charette, 2013 Élie Roux, 2011-2020 Arthur Reutenauer, Copyright (c) 2019-2020 Bastien Roucariès, 2019-2020 Jürgen Spitzmüller @@ -50,7 +43,7 @@ Copyright (c) 2019-2020 Bastien Roucariès, 2019-2020 Jürgen Spitzmüller Except where otherwise noted, Polyglossia is placed under the terms of the MIT licence (https://opensource.org/licenses/MIT). -BUGS +# BUGS If you run into a bug, or suspect you do, or you have a request or comment, please use the GitHub issue tracker: http://github.com/reutenauer/polyglossia/issues @@ -74,8 +67,10 @@ to track the issues and follow progress. The polyglossia package (C) 2008–2010 François Charette - (C) 2011-2020 Arthur Reutenauer + (C) 2011–2020 Arthur Reutenauer (C) 2013 Elie Roux + (C) 2019 Bastien Roucariès + (C) 2019–2020 Jürgen Spitzmüller License information appended @@ -351,7 +346,7 @@ to track the issues and follow progress. %<*internal> \generate{\file{polyglossia.ins}{\from{polyglossia.dtx}{batchfile}}} \nopreamble\nopostamble -\generate{\file{../README}{\from{polyglossia.dtx}{../README}}} +\generate{\file{../README.md}{\from{polyglossia.dtx}{../README.md}}} \generate{\file{Changelog}{\from{polyglossia.dtx}{Changelog}}} \generate{\file{examples.tex}{\from{polyglossia.dtx}{examples.tex}}} \generate{\file{example-arabic.tex}{\from{polyglossia.dtx}{example-arabic.tex}}} @@ -2194,6 +2189,17 @@ to track the issues and follow progress. % If you do this in a document preamble rather than in a package, you need to embrace the redefinition % by \cmd\makeatletter\ and \cmd\makeatother\ due to the ¦@¦ in the macro names. % +% Finally, as soon as the language has been switched (either inline or as a block), \pkg{polyglossia} +% executes the (by default empty) hook +% \begin{itemize} +% \item \Cmd{\polyglossia@language@switched} +% \end{itemize} +% to which you can append arbitrary code (via \cmd\gappto) that should be executed if (a particular) +% language is being activated. This is done before any of the above +% macros are issued (so you can still alter them), but at a point where \cmd\languagename, \cmd\babelname\ +% and \cmd\languageid\ are already set, so you can condition on specific languages in your code. +% This hook is particularly provided for package authors. +% % \section{Script-specific numbering} % % Languages and scripts have specific numbering conventions. Some use decimal digits @@ -6690,7 +6696,7 @@ and may look very wrong.} \def\prefacename{Esipuhe}% \def\chaptername{Luku}% \def\appendixname{Liite}% - \def\contentsname{Sisältö}% + \def\contentsname{Sisällys}% \def\listfigurename{Kuvat}% \def\listtablename{Taulukot}% \def\indexname{Hakemisto}% @@ -8187,7 +8193,7 @@ and may look very wrong.} \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% @@ -9151,9 +9157,9 @@ and may look very wrong.} \renewcommand*\chaptermark[1]{% \markboth{\memUChead{% \ifnum \c@secnumdepth >\m@ne - \if@mainmatter + \ifbool{@mainmatter}{% \thechapter.\ \@chapapp\ % - \fi + }{}% \fi ##1}}{}}% }{% (not \ifdefined\@memptsize) @@ -9982,75 +9988,75 @@ and may look very wrong.} \ProvidesFile{gloss-khmer.ldf}[polyglossia: module for Khmer] \PolyglossiaSetup{khmer}{ bcp47=km, - script=Khmer,% - scripttag=khmr,% - langtag=KHM,% - hyphennames={nohyphenation},% - fontsetup=true,% - localnumeral=khmernumerals% + script=Khmer,% + scripttag=khmr,% + langtag=KHM,% + hyphennames={nohyphenation},% + fontsetup=true,% + localnumeral=khmernumerals% } \newif\if@khmer@numerals \def\tmp@khmer{khmer} \define@key{khmer}{numerals}[arabic]{% - \def\@tmpa{#1}% - \ifx\@tmpa\tmp@khmer\@khmer@numeralstrue% - \else\@khmer@numeralsfalse\fi% + \def\@tmpa{#1}% + \ifx\@tmpa\tmp@khmer\@khmer@numeralstrue% + \else\@khmer@numeralsfalse\fi% } \setkeys{khmer}{numerals} \def\captionskhmer{% - \def\prefacename{អារម្ភកថា}% - \def\refname{ឯកសារយោង}% - \def\abstractname{សង្ខេប}% - \def\bibname{គន្ថនិទ្ទេស}% - \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{ចម្លងជួន}% - \def\headtoname{ផ្ញើរទៅ}% - \def\proofname{សម្រាយ}% - \def\glossaryname{សទានុក្រម}% + \def\prefacename{អារម្ភកថា}% + \def\refname{ឯកសារយោង}% + \def\abstractname{សង្ខេប}% + \def\bibname{គន្ថនិទ្ទេស}% + \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{ចម្លងជួន}% + \def\headtoname{ផ្ញើរទៅ}% + \def\proofname{សម្រាយ}% + \def\glossaryname{សទានុក្រម}% } \def\datekhmer{% - \def\khmer@month{% - \ifcase\month\or% - មករា\or% - កុម្ភៈ\or% - មិនា\or% - មេសា\or% - ឧសភា\or% - មិថុនា\or% - កក្កដា\or% - សីហា\or% - កញ្ញា\or% - តុលា\or% - វិច្ឆិកា\or% - ធ្នូ\fi}% - \def\today{\khmernumber\day\space\khmer@month\space\khmernumber\year}% + \def\khmer@month{% + \ifcase\month\or% + មករា\or% + កុម្ភៈ\or% + មិនា\or% + មេសា\or% + ឧសភា\or% + មិថុនា\or% + កក្កដា\or% + សីហា\or% + កញ្ញា\or% + តុលា\or% + វិច្ឆិកា\or% + ធ្នូ\fi}% + \def\today{\khmernumber\day\space\khmer@month\space\khmernumber\year}% } \def\khmerdigits#1{\expandafter\@khmer@digits #1@} \def\@khmer@digits#1{% - \ifx @#1% then terminate - \else\ifx0#1០% - \else\ifx1#1១% - \else\ifx2#1២% - \else\ifx3#1៣% - \else\ifx4#1៤% - \else\ifx5#1៥% - \else\ifx6#1៦% - \else\ifx7#1៧% - \else\ifx8#1៨% - \else\ifx9#1៩% - \else#1\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \ifx @#1% then terminate + \else\ifx0#1០% + \else\ifx1#1១% + \else\ifx2#1២% + \else\ifx3#1៣% + \else\ifx4#1៤% + \else\ifx5#1៥% + \else\ifx6#1៦% + \else\ifx7#1៧% + \else\ifx8#1៨% + \else\ifx9#1៩% + \else#1\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \expandafter\@khmer@digits% \fi } @@ -10058,18 +10064,18 @@ and may look very wrong.} \newcommand{\khmernumerals}[2]{\khmernumber{#2}} \def\khmernumber#1{% - \if@khmer@numerals% - \khmerdigits{\number#1}% - \else% - \number#1% - \fi} + \if@khmer@numerals% + \khmerdigits{\number#1}% + \else% + \number#1% + \fi} \def\khmer@globalnumbers{% - \let\orig@arabic\@arabic% - \let\@arabic\khmernumber% - \renewcommand{\thefootnote}{\localnumeral*{footnote}}% + \let\orig@arabic\@arabic% + \let\@arabic\khmernumber% + \renewcommand{\thefootnote}{\localnumeral*{footnote}}% } \def\nokhmer@globalnumbers{% - \let\@arabic\orig@arabic% + \let\@arabic\orig@arabic% } \def\thepart{\arabic{part}} \def\@khmeralph#1{% @@ -10092,50 +10098,50 @@ and may look very wrong.} \or យ\or រ\or ល\or វ\or ស\or ហ\or ឡ\or អ% \else\xpg@ill@value{#1}{@khmeralph}\fi} \def\khmer@numbers{% - \if@khmer@numerals - \let\@alph\@khmeralph% - \let\@Alph\@khmerAlph% - \fi% + \if@khmer@numerals + \let\@alph\@khmeralph% + \let\@Alph\@khmerAlph% + \fi% } \def\nokhmer@numbers{% - \let\@alph\latin@alph% - \let\@Alph\latin@Alph% + \let\@alph\latin@alph% + \let\@Alph\latin@Alph% } \def\blockextras@khmer{% - \XeTeXlinebreaklocale "kh" % - \XeTeXlinebreakskip = 0pt plus 1pt minus 1pt -% \let\orig@baselinestretch\baselinestretch% -% \renewcommand{\baselinestretch}{1.2}% not work + \XeTeXlinebreaklocale "kh" % + \XeTeXlinebreakskip = 0pt plus 1pt minus 1pt +% \let\orig@baselinestretch\baselinestretch% +% \renewcommand{\baselinestretch}{1.2}% not work } \def\noblockextras@khmer{% - \XeTeXlinebreaklocale "en"% -% \let\baselinestretch\orig@baselinestretch% + \XeTeXlinebreaklocale "en"% +% \let\baselinestretch\orig@baselinestretch% } \@ifclassloaded{beamer}{% - \usefonttheme{professionalfonts}% - \def\factname{ស្វ័យសត្យ}% - \def\lemmaname{បទគន្លិះ}% - \def\theoremname{ទ្រឹស្ដីបទ}% - \def\corollaryname{អនុសាធ្យ}% - \def\problemname{ចំណោទ}% - \def\solutionname{ដំណោះស្រាយ}% - \def\definitionname{និយមន័យ}% - \def\examplename{ឧទាហរណ៏}% - \uselanguage{khmer}% - \languagepath{khmer}% - \deftranslation[to=khmer]{Fact}{\factname}% - \deftranslation[to=khmer]{Lemma}{\lemmaname}% - \deftranslation[to=khmer]{Theorem}{\theoremname}% - \deftranslation[to=khmer]{Corollary}{\corollaryname}% - \deftranslation[to=khmer]{Problem}{\problemname}% - \deftranslation[to=khmer]{Solution}{\solutionname}% - \deftranslation[to=khmer]{Definition}{\definitionname}% - \deftranslation[to=khmer]{Definitions}{\definitionname}% - \deftranslation[to=khmer]{Example}{\examplename}% - \deftranslation[to=khmer]{Examples}{\examplename}% - \AtEndDocument{\immediate\write\@auxout{\string\@writefile{nav}% - {\noexpand\headcommand{\noexpand\def\noexpand% - \inserttotalframenumber{\localnumeral*{framenumber}}}}}}% + \usefonttheme{professionalfonts}% + \def\factname{ស្វ័យសត្យ}% + \def\lemmaname{បទគន្លិះ}% + \def\theoremname{ទ្រឹស្ដីបទ}% + \def\corollaryname{អនុសាធ្យ}% + \def\problemname{ចំណោទ}% + \def\solutionname{ដំណោះស្រាយ}% + \def\definitionname{និយមន័យ}% + \def\examplename{ឧទាហរណ៏}% + \uselanguage{khmer}% + \languagepath{khmer}% + \deftranslation[to=khmer]{Fact}{\factname}% + \deftranslation[to=khmer]{Lemma}{\lemmaname}% + \deftranslation[to=khmer]{Theorem}{\theoremname}% + \deftranslation[to=khmer]{Corollary}{\corollaryname}% + \deftranslation[to=khmer]{Problem}{\problemname}% + \deftranslation[to=khmer]{Solution}{\solutionname}% + \deftranslation[to=khmer]{Definition}{\definitionname}% + \deftranslation[to=khmer]{Definitions}{\definitionname}% + \deftranslation[to=khmer]{Example}{\examplename}% + \deftranslation[to=khmer]{Examples}{\examplename}% + \AtEndDocument{\immediate\write\@auxout{\string\@writefile{nav}% + {\noexpand\headcommand{\noexpand\def\noexpand% + \inserttotalframenumber{\localnumeral*{framenumber}}}}}}% }{} % \end{macrocode} % \iffalse @@ -19362,16 +19368,9 @@ polyglossia.newloader_loaded_languages = newloader_loaded_languages % \Finale % % \iffalse -%<*../README> - - ¦----------------------------------------------¦ - ¦ ¦ - ¦ THE POLYGLOSSIA PACKAGE v1.48 ¦ - ¦ ¦ - ¦ Modern multilingual typesetting ¦ - ¦ with XeLaTeX and LuaLaTeX ¦ - ¦ ¦ - ¦----------------------------------------------¦ +%<*../README.md> +# THE POLYGLOSSIA PACKAGE v1.49 +## Multilingual typesetting with XeLaTeX and LuaLaTeX This package provides an alternative to Babel for users of XeLaTeX and LuaLaTeX (with a few languages incompletely supported for the latter). This version @@ -19397,7 +19396,7 @@ Polyglossia makes it possible to automate the following tasks: written from right to left (via the packages bidi and luabidi, available separately). -LICENSE +# LICENCE Copyright (c) 2008-2010 François Charette, 2013 Élie Roux, 2011-2020 Arthur Reutenauer, Copyright (c) 2019-2020 Bastien Roucariès, 2019-2020 Jürgen Spitzmüller @@ -19405,15 +19404,32 @@ Copyright (c) 2019-2020 Bastien Roucariès, 2019-2020 Jürgen Spitzmüller Except where otherwise noted, Polyglossia is placed under the terms of the MIT licence (https://opensource.org/licenses/MIT). -BUGS +# BUGS If you run into a bug, or suspect you do, or you have a request or comment, please use the GitHub issue tracker: http://github.com/reutenauer/polyglossia/issues This is more efficient than contacting the maintainer by email as it allows me to track the issues and follow progress. -% +% %<*Changelog> +1.49 (???) + +New features: + + * Add hook \polyglossia@language@switched to the external package interface (#398). + * Real fix for #400, that wasn’t properly taken care of in 1.48. + +Bug fixes: + + * Fix compilation error with some swapstring options in Hungarian (#373). + * Fix whitespace problem in Greek language. + +Interface and defaults changes: + + * Changed Finnish caption for "Table of Contents" to "Sisällys" (#403). + + 1.48 (25-03-2020) No new features diff --git a/macros/latex/contrib/polyglossia/polyglossia.ins b/macros/latex/contrib/polyglossia/polyglossia.ins deleted file mode 100644 index 9a7041dec4..0000000000 --- a/macros/latex/contrib/polyglossia/polyglossia.ins +++ /dev/null @@ -1,279 +0,0 @@ -\input docstrip.tex -\keepsilent -\let\MetaPrefix\relax -\preamble - ____________________________ - - The polyglossia package - (C) 2008–2010 François Charette - (C) 2011-2020 Arthur Reutenauer - (C) 2013 Elie Roux - License information appended - -\endpreamble -\postamble - - Copyright (C) 2020 by Arthur Reutenauer - - This work may be distributed and/or modified under the - conditions of the LaTeX Project Public License, either version 1.3 - of this license of (at your option) any later version. - The latest version of this license is in - http://www.latex-project.org/lppl.txt - and version 1.3 or later is part of all distributions of LaTeX - version 2005/12/01 or later. - - This work has the LPPL maintenance status `maintained'. - - The Current Maintainer of this work is Arthur Reutenauer. - -\endpostamble -\let\MetaPrefix\DoubleperCent -\askforoverwritefalse -\generate{\file{gloss-acadien.ldf}{\from{polyglossia.dtx}{gloss-acadien.ldf}}} -\generate{\file{gloss-aeb.ldf}{\from{polyglossia.dtx}{gloss-aeb.ldf}}} -\generate{\file{gloss-af.ldf}{\from{polyglossia.dtx}{gloss-af.ldf}}} -\generate{\file{gloss-afb.ldf}{\from{polyglossia.dtx}{gloss-afb.ldf}}} -\generate{\file{gloss-afrikaans.ldf}{\from{polyglossia.dtx}{gloss-afrikaans.ldf}}} -\generate{\file{gloss-albanian.ldf}{\from{polyglossia.dtx}{gloss-albanian.ldf}}} -\generate{\file{gloss-am.ldf}{\from{polyglossia.dtx}{gloss-am.ldf}}} -\generate{\file{gloss-american.ldf}{\from{polyglossia.dtx}{gloss-american.ldf}}} -\generate{\file{gloss-amharic.ldf}{\from{polyglossia.dtx}{gloss-amharic.ldf}}} -\generate{\file{gloss-apd.ldf}{\from{polyglossia.dtx}{gloss-apd.ldf}}} -\generate{\file{gloss-ar-IQ.ldf}{\from{polyglossia.dtx}{gloss-ar-IQ.ldf}}} -\generate{\file{gloss-ar-JO.ldf}{\from{polyglossia.dtx}{gloss-ar-JO.ldf}}} -\generate{\file{gloss-ar-LB.ldf}{\from{polyglossia.dtx}{gloss-ar-LB.ldf}}} -\generate{\file{gloss-ar-MR.ldf}{\from{polyglossia.dtx}{gloss-ar-MR.ldf}}} -\generate{\file{gloss-ar-PS.ldf}{\from{polyglossia.dtx}{gloss-ar-PS.ldf}}} -\generate{\file{gloss-ar-SY.ldf}{\from{polyglossia.dtx}{gloss-ar-SY.ldf}}} -\generate{\file{gloss-ar-YE.ldf}{\from{polyglossia.dtx}{gloss-ar-YE.ldf}}} -\generate{\file{gloss-ar.ldf}{\from{polyglossia.dtx}{gloss-ar.ldf}}} -\generate{\file{gloss-arabic.ldf}{\from{polyglossia.dtx}{gloss-arabic.ldf}}} -\generate{\file{gloss-armenian.ldf}{\from{polyglossia.dtx}{gloss-armenian.ldf}}} -\generate{\file{gloss-arq.ldf}{\from{polyglossia.dtx}{gloss-arq.ldf}}} -\generate{\file{gloss-ary.ldf}{\from{polyglossia.dtx}{gloss-ary.ldf}}} -\generate{\file{gloss-arz.ldf}{\from{polyglossia.dtx}{gloss-arz.ldf}}} -\generate{\file{gloss-ast.ldf}{\from{polyglossia.dtx}{gloss-ast.ldf}}} -\generate{\file{gloss-asturian.ldf}{\from{polyglossia.dtx}{gloss-asturian.ldf}}} -\generate{\file{gloss-australian.ldf}{\from{polyglossia.dtx}{gloss-australian.ldf}}} -\generate{\file{gloss-austrian.ldf}{\from{polyglossia.dtx}{gloss-austrian.ldf}}} -\generate{\file{gloss-ayl.ldf}{\from{polyglossia.dtx}{gloss-ayl.ldf}}} -\generate{\file{gloss-bahasa.ldf}{\from{polyglossia.dtx}{gloss-bahasa.ldf}}} -\generate{\file{gloss-bahasai.ldf}{\from{polyglossia.dtx}{gloss-bahasai.ldf}}} -\generate{\file{gloss-bahasam.ldf}{\from{polyglossia.dtx}{gloss-bahasam.ldf}}} -\generate{\file{gloss-basque.ldf}{\from{polyglossia.dtx}{gloss-basque.ldf}}} -\generate{\file{gloss-be-tarask.ldf}{\from{polyglossia.dtx}{gloss-be-tarask.ldf}}} -\generate{\file{gloss-be.ldf}{\from{polyglossia.dtx}{gloss-be.ldf}}} -\generate{\file{gloss-belarusian.ldf}{\from{polyglossia.dtx}{gloss-belarusian.ldf}}} -\generate{\file{gloss-bengali.ldf}{\from{polyglossia.dtx}{gloss-bengali.ldf}}} -\generate{\file{gloss-bg.ldf}{\from{polyglossia.dtx}{gloss-bg.ldf}}} -\generate{\file{gloss-bn.ldf}{\from{polyglossia.dtx}{gloss-bn.ldf}}} -\generate{\file{gloss-bo.ldf}{\from{polyglossia.dtx}{gloss-bo.ldf}}} -\generate{\file{gloss-bosnian.ldf}{\from{polyglossia.dtx}{gloss-bosnian.ldf}}} -\generate{\file{gloss-br.ldf}{\from{polyglossia.dtx}{gloss-br.ldf}}} -\generate{\file{gloss-brazil.ldf}{\from{polyglossia.dtx}{gloss-brazil.ldf}}} -\generate{\file{gloss-breton.ldf}{\from{polyglossia.dtx}{gloss-breton.ldf}}} -\generate{\file{gloss-british.ldf}{\from{polyglossia.dtx}{gloss-british.ldf}}} -\generate{\file{gloss-bs.ldf}{\from{polyglossia.dtx}{gloss-bs.ldf}}} -\generate{\file{gloss-bulgarian.ldf}{\from{polyglossia.dtx}{gloss-bulgarian.ldf}}} -\generate{\file{gloss-ca.ldf}{\from{polyglossia.dtx}{gloss-ca.ldf}}} -\generate{\file{gloss-canadian.ldf}{\from{polyglossia.dtx}{gloss-canadian.ldf}}} -\generate{\file{gloss-canadien.ldf}{\from{polyglossia.dtx}{gloss-canadien.ldf}}} -\generate{\file{gloss-catalan.ldf}{\from{polyglossia.dtx}{gloss-catalan.ldf}}} -\generate{\file{gloss-ckb-Arab.ldf}{\from{polyglossia.dtx}{gloss-ckb-Arab.ldf}}} -\generate{\file{gloss-ckb-Latn.ldf}{\from{polyglossia.dtx}{gloss-ckb-Latn.ldf}}} -\generate{\file{gloss-ckb.ldf}{\from{polyglossia.dtx}{gloss-ckb.ldf}}} -\generate{\file{gloss-cop.ldf}{\from{polyglossia.dtx}{gloss-cop.ldf}}} -\generate{\file{gloss-coptic.ldf}{\from{polyglossia.dtx}{gloss-coptic.ldf}}} -\generate{\file{gloss-croatian.ldf}{\from{polyglossia.dtx}{gloss-croatian.ldf}}} -\generate{\file{gloss-cy.ldf}{\from{polyglossia.dtx}{gloss-cy.ldf}}} -\generate{\file{gloss-cz.ldf}{\from{polyglossia.dtx}{gloss-cz.ldf}}} -\generate{\file{gloss-czech.ldf}{\from{polyglossia.dtx}{gloss-czech.ldf}}} -\generate{\file{gloss-da.ldf}{\from{polyglossia.dtx}{gloss-da.ldf}}} -\generate{\file{gloss-danish.ldf}{\from{polyglossia.dtx}{gloss-danish.ldf}}} -\generate{\file{gloss-de-AT-1901.ldf}{\from{polyglossia.dtx}{gloss-de-AT-1901.ldf}}} -\generate{\file{gloss-de-AT-1996.ldf}{\from{polyglossia.dtx}{gloss-de-AT-1996.ldf}}} -\generate{\file{gloss-de-AT.ldf}{\from{polyglossia.dtx}{gloss-de-AT.ldf}}} -\generate{\file{gloss-de-CH-1901.ldf}{\from{polyglossia.dtx}{gloss-de-CH-1901.ldf}}} -\generate{\file{gloss-de-CH-1996.ldf}{\from{polyglossia.dtx}{gloss-de-CH-1996.ldf}}} -\generate{\file{gloss-de-CH.ldf}{\from{polyglossia.dtx}{gloss-de-CH.ldf}}} -\generate{\file{gloss-de-DE-1901.ldf}{\from{polyglossia.dtx}{gloss-de-DE-1901.ldf}}} -\generate{\file{gloss-de-DE-1996.ldf}{\from{polyglossia.dtx}{gloss-de-DE-1996.ldf}}} -\generate{\file{gloss-de-DE.ldf}{\from{polyglossia.dtx}{gloss-de-DE.ldf}}} -\generate{\file{gloss-de-Latf-AT-1901.ldf}{\from{polyglossia.dtx}{gloss-de-Latf-AT-1901.ldf}}} -\generate{\file{gloss-de-Latf-AT-1996.ldf}{\from{polyglossia.dtx}{gloss-de-Latf-AT-1996.ldf}}} -\generate{\file{gloss-de-Latf-AT.ldf}{\from{polyglossia.dtx}{gloss-de-Latf-AT.ldf}}} -\generate{\file{gloss-de-Latf-CH-1901.ldf}{\from{polyglossia.dtx}{gloss-de-Latf-CH-1901.ldf}}} -\generate{\file{gloss-de-Latf-CH-1996.ldf}{\from{polyglossia.dtx}{gloss-de-Latf-CH-1996.ldf}}} -\generate{\file{gloss-de-Latf-CH.ldf}{\from{polyglossia.dtx}{gloss-de-Latf-CH.ldf}}} -\generate{\file{gloss-de-Latf-DE-1901.ldf}{\from{polyglossia.dtx}{gloss-de-Latf-DE-1901.ldf}}} -\generate{\file{gloss-de-Latf-DE-1996.ldf}{\from{polyglossia.dtx}{gloss-de-Latf-DE-1996.ldf}}} -\generate{\file{gloss-de-Latf-DE.ldf}{\from{polyglossia.dtx}{gloss-de-Latf-DE.ldf}}} -\generate{\file{gloss-de-Latf.ldf}{\from{polyglossia.dtx}{gloss-de-Latf.ldf}}} -\generate{\file{gloss-de.ldf}{\from{polyglossia.dtx}{gloss-de.ldf}}} -\generate{\file{gloss-divehi.ldf}{\from{polyglossia.dtx}{gloss-divehi.ldf}}} -\generate{\file{gloss-dsb.ldf}{\from{polyglossia.dtx}{gloss-dsb.ldf}}} -\generate{\file{gloss-dutch.ldf}{\from{polyglossia.dtx}{gloss-dutch.ldf}}} -\generate{\file{gloss-dv.ldf}{\from{polyglossia.dtx}{gloss-dv.ldf}}} -\generate{\file{gloss-el-monoton.ldf}{\from{polyglossia.dtx}{gloss-el-monoton.ldf}}} -\generate{\file{gloss-el-polyton.ldf}{\from{polyglossia.dtx}{gloss-el-polyton.ldf}}} -\generate{\file{gloss-el.ldf}{\from{polyglossia.dtx}{gloss-el.ldf}}} -\generate{\file{gloss-en-AU.ldf}{\from{polyglossia.dtx}{gloss-en-AU.ldf}}} -\generate{\file{gloss-en-CA.ldf}{\from{polyglossia.dtx}{gloss-en-CA.ldf}}} -\generate{\file{gloss-en-GB.ldf}{\from{polyglossia.dtx}{gloss-en-GB.ldf}}} -\generate{\file{gloss-en-NZ.ldf}{\from{polyglossia.dtx}{gloss-en-NZ.ldf}}} -\generate{\file{gloss-en-US.ldf}{\from{polyglossia.dtx}{gloss-en-US.ldf}}} -\generate{\file{gloss-en.ldf}{\from{polyglossia.dtx}{gloss-en.ldf}}} -\generate{\file{gloss-english.ldf}{\from{polyglossia.dtx}{gloss-english.ldf}}} -\generate{\file{gloss-eo.ldf}{\from{polyglossia.dtx}{gloss-eo.ldf}}} -\generate{\file{gloss-es-ES.ldf}{\from{polyglossia.dtx}{gloss-es-ES.ldf}}} -\generate{\file{gloss-es-MX.ldf}{\from{polyglossia.dtx}{gloss-es-MX.ldf}}} -\generate{\file{gloss-es.ldf}{\from{polyglossia.dtx}{gloss-es.ldf}}} -\generate{\file{gloss-esperanto.ldf}{\from{polyglossia.dtx}{gloss-esperanto.ldf}}} -\generate{\file{gloss-estonian.ldf}{\from{polyglossia.dtx}{gloss-estonian.ldf}}} -\generate{\file{gloss-et.ldf}{\from{polyglossia.dtx}{gloss-et.ldf}}} -\generate{\file{gloss-eu.ldf}{\from{polyglossia.dtx}{gloss-eu.ldf}}} -\generate{\file{gloss-fa.ldf}{\from{polyglossia.dtx}{gloss-fa.ldf}}} -\generate{\file{gloss-farsi.ldf}{\from{polyglossia.dtx}{gloss-farsi.ldf}}} -\generate{\file{gloss-fi.ldf}{\from{polyglossia.dtx}{gloss-fi.ldf}}} -\generate{\file{gloss-finnish.ldf}{\from{polyglossia.dtx}{gloss-finnish.ldf}}} -\generate{\file{gloss-fr-CA.ldf}{\from{polyglossia.dtx}{gloss-fr-CA.ldf}}} -\generate{\file{gloss-fr-CH.ldf}{\from{polyglossia.dtx}{gloss-fr-CH.ldf}}} -\generate{\file{gloss-fr-FR.ldf}{\from{polyglossia.dtx}{gloss-fr-FR.ldf}}} -\generate{\file{gloss-fr.ldf}{\from{polyglossia.dtx}{gloss-fr.ldf}}} -\generate{\file{gloss-french.ldf}{\from{polyglossia.dtx}{gloss-french.ldf}}} -\generate{\file{gloss-friulan.ldf}{\from{polyglossia.dtx}{gloss-friulan.ldf}}} -\generate{\file{gloss-friulian.ldf}{\from{polyglossia.dtx}{gloss-friulian.ldf}}} -\generate{\file{gloss-fur.ldf}{\from{polyglossia.dtx}{gloss-fur.ldf}}} -\generate{\file{gloss-ga.ldf}{\from{polyglossia.dtx}{gloss-ga.ldf}}} -\generate{\file{gloss-gaelic.ldf}{\from{polyglossia.dtx}{gloss-gaelic.ldf}}} -\generate{\file{gloss-galician.ldf}{\from{polyglossia.dtx}{gloss-galician.ldf}}} -\generate{\file{gloss-gd.ldf}{\from{polyglossia.dtx}{gloss-gd.ldf}}} -\generate{\file{gloss-georgian.ldf}{\from{polyglossia.dtx}{gloss-georgian.ldf}}} -\generate{\file{gloss-german.ldf}{\from{polyglossia.dtx}{gloss-german.ldf}}} -\generate{\file{gloss-germanb.ldf}{\from{polyglossia.dtx}{gloss-germanb.ldf}}} -\generate{\file{gloss-gl.ldf}{\from{polyglossia.dtx}{gloss-gl.ldf}}} -\generate{\file{gloss-grc.ldf}{\from{polyglossia.dtx}{gloss-grc.ldf}}} -\generate{\file{gloss-greek.ldf}{\from{polyglossia.dtx}{gloss-greek.ldf}}} -\generate{\file{gloss-he.ldf}{\from{polyglossia.dtx}{gloss-he.ldf}}} -\generate{\file{gloss-hebrew.ldf}{\from{polyglossia.dtx}{gloss-hebrew.ldf}}} -\generate{\file{gloss-hi.ldf}{\from{polyglossia.dtx}{gloss-hi.ldf}}} -\generate{\file{gloss-hindi.ldf}{\from{polyglossia.dtx}{gloss-hindi.ldf}}} -\generate{\file{gloss-hr.ldf}{\from{polyglossia.dtx}{gloss-hr.ldf}}} -\generate{\file{gloss-hsb.ldf}{\from{polyglossia.dtx}{gloss-hsb.ldf}}} -\generate{\file{gloss-hu.ldf}{\from{polyglossia.dtx}{gloss-hu.ldf}}} -\generate{\file{gloss-hungarian.ldf}{\from{polyglossia.dtx}{gloss-hungarian.ldf}}} -\generate{\file{gloss-hy.ldf}{\from{polyglossia.dtx}{gloss-hy.ldf}}} -\generate{\file{gloss-ia.ldf}{\from{polyglossia.dtx}{gloss-ia.ldf}}} -\generate{\file{gloss-icelandic.ldf}{\from{polyglossia.dtx}{gloss-icelandic.ldf}}} -\generate{\file{gloss-id.ldf}{\from{polyglossia.dtx}{gloss-id.ldf}}} -\generate{\file{gloss-interlingua.ldf}{\from{polyglossia.dtx}{gloss-interlingua.ldf}}} -\generate{\file{gloss-irish.ldf}{\from{polyglossia.dtx}{gloss-irish.ldf}}} -\generate{\file{gloss-is.ldf}{\from{polyglossia.dtx}{gloss-is.ldf}}} -\generate{\file{gloss-it.ldf}{\from{polyglossia.dtx}{gloss-it.ldf}}} -\generate{\file{gloss-italian.ldf}{\from{polyglossia.dtx}{gloss-italian.ldf}}} -\generate{\file{gloss-ja.ldf}{\from{polyglossia.dtx}{gloss-ja.ldf}}} -\generate{\file{gloss-japanese.ldf}{\from{polyglossia.dtx}{gloss-japanese.ldf}}} -\generate{\file{gloss-ka.ldf}{\from{polyglossia.dtx}{gloss-ka.ldf}}} -\generate{\file{gloss-kannada.ldf}{\from{polyglossia.dtx}{gloss-kannada.ldf}}} -\generate{\file{gloss-khmer.ldf}{\from{polyglossia.dtx}{gloss-khmer.ldf}}} -\generate{\file{gloss-km.ldf}{\from{polyglossia.dtx}{gloss-km.ldf}}} -\generate{\file{gloss-kmr-Arab.ldf}{\from{polyglossia.dtx}{gloss-kmr-Arab.ldf}}} -\generate{\file{gloss-kmr-Latn.ldf}{\from{polyglossia.dtx}{gloss-kmr-Latn.ldf}}} -\generate{\file{gloss-kmr.ldf}{\from{polyglossia.dtx}{gloss-kmr.ldf}}} -\generate{\file{gloss-kn.ldf}{\from{polyglossia.dtx}{gloss-kn.ldf}}} -\generate{\file{gloss-ko.ldf}{\from{polyglossia.dtx}{gloss-ko.ldf}}} -\generate{\file{gloss-korean.ldf}{\from{polyglossia.dtx}{gloss-korean.ldf}}} -\generate{\file{gloss-ku-Arab.ldf}{\from{polyglossia.dtx}{gloss-ku-Arab.ldf}}} -\generate{\file{gloss-ku-Latn.ldf}{\from{polyglossia.dtx}{gloss-ku-Latn.ldf}}} -\generate{\file{gloss-ku.ldf}{\from{polyglossia.dtx}{gloss-ku.ldf}}} -\generate{\file{gloss-kurdish.ldf}{\from{polyglossia.dtx}{gloss-kurdish.ldf}}} -\generate{\file{gloss-kurmanji.ldf}{\from{polyglossia.dtx}{gloss-kurmanji.ldf}}} -\generate{\file{gloss-la-x-classic.ldf}{\from{polyglossia.dtx}{gloss-la-x-classic.ldf}}} -\generate{\file{gloss-la-x-ecclesia.ldf}{\from{polyglossia.dtx}{gloss-la-x-ecclesia.ldf}}} -\generate{\file{gloss-la-x-medieval.ldf}{\from{polyglossia.dtx}{gloss-la-x-medieval.ldf}}} -\generate{\file{gloss-la.ldf}{\from{polyglossia.dtx}{gloss-la.ldf}}} -\generate{\file{gloss-lao.ldf}{\from{polyglossia.dtx}{gloss-lao.ldf}}} -\generate{\file{gloss-latex.ldf}{\from{polyglossia.dtx}{gloss-latex.ldf}}} -\generate{\file{gloss-latin.ldf}{\from{polyglossia.dtx}{gloss-latin.ldf}}} -\generate{\file{gloss-latinclassic.ldf}{\from{polyglossia.dtx}{gloss-latinclassic.ldf}}} -\generate{\file{gloss-latinecclesiastic.ldf}{\from{polyglossia.dtx}{gloss-latinecclesiastic.ldf}}} -\generate{\file{gloss-latinmedieval.ldf}{\from{polyglossia.dtx}{gloss-latinmedieval.ldf}}} -\generate{\file{gloss-latvian.ldf}{\from{polyglossia.dtx}{gloss-latvian.ldf}}} -\generate{\file{gloss-lithuanian.ldf}{\from{polyglossia.dtx}{gloss-lithuanian.ldf}}} -\generate{\file{gloss-lo.ldf}{\from{polyglossia.dtx}{gloss-lo.ldf}}} -\generate{\file{gloss-lowersorbian.ldf}{\from{polyglossia.dtx}{gloss-lowersorbian.ldf}}} -\generate{\file{gloss-lsorbian.ldf}{\from{polyglossia.dtx}{gloss-lsorbian.ldf}}} -\generate{\file{gloss-lt.ldf}{\from{polyglossia.dtx}{gloss-lt.ldf}}} -\generate{\file{gloss-lv.ldf}{\from{polyglossia.dtx}{gloss-lv.ldf}}} -\generate{\file{gloss-macedonian.ldf}{\from{polyglossia.dtx}{gloss-macedonian.ldf}}} -\generate{\file{gloss-magyar.ldf}{\from{polyglossia.dtx}{gloss-magyar.ldf}}} -\generate{\file{gloss-malay.ldf}{\from{polyglossia.dtx}{gloss-malay.ldf}}} -\generate{\file{gloss-malayalam.ldf}{\from{polyglossia.dtx}{gloss-malayalam.ldf}}} -\generate{\file{gloss-marathi.ldf}{\from{polyglossia.dtx}{gloss-marathi.ldf}}} -\generate{\file{gloss-mk.ldf}{\from{polyglossia.dtx}{gloss-mk.ldf}}} -\generate{\file{gloss-ml.ldf}{\from{polyglossia.dtx}{gloss-ml.ldf}}} -\generate{\file{gloss-mn.ldf}{\from{polyglossia.dtx}{gloss-mn.ldf}}} -\generate{\file{gloss-mongolian.ldf}{\from{polyglossia.dtx}{gloss-mongolian.ldf}}} -\generate{\file{gloss-mr.ldf}{\from{polyglossia.dtx}{gloss-mr.ldf}}} -\generate{\file{gloss-naustrian.ldf}{\from{polyglossia.dtx}{gloss-naustrian.ldf}}} -\generate{\file{gloss-nb.ldf}{\from{polyglossia.dtx}{gloss-nb.ldf}}} -\generate{\file{gloss-newzealand.ldf}{\from{polyglossia.dtx}{gloss-newzealand.ldf}}} -\generate{\file{gloss-ngerman.ldf}{\from{polyglossia.dtx}{gloss-ngerman.ldf}}} -\generate{\file{gloss-nko.ldf}{\from{polyglossia.dtx}{gloss-nko.ldf}}} -\generate{\file{gloss-norsk.ldf}{\from{polyglossia.dtx}{gloss-norsk.ldf}}} -\generate{\file{gloss-norwegian.ldf}{\from{polyglossia.dtx}{gloss-norwegian.ldf}}} -\generate{\file{gloss-nswissgerman.ldf}{\from{polyglossia.dtx}{gloss-nswissgerman.ldf}}} -\generate{\file{gloss-nynorsk.ldf}{\from{polyglossia.dtx}{gloss-nynorsk.ldf}}} -\generate{\file{gloss-occitan.ldf}{\from{polyglossia.dtx}{gloss-occitan.ldf}}} -\generate{\file{gloss-persian.ldf}{\from{polyglossia.dtx}{gloss-persian.ldf}}} -\generate{\file{gloss-piedmontese.ldf}{\from{polyglossia.dtx}{gloss-piedmontese.ldf}}} -\generate{\file{gloss-polish.ldf}{\from{polyglossia.dtx}{gloss-polish.ldf}}} -\generate{\file{gloss-polutonikogreek.ldf}{\from{polyglossia.dtx}{gloss-polutonikogreek.ldf}}} -\generate{\file{gloss-portuges.ldf}{\from{polyglossia.dtx}{gloss-portuges.ldf}}} -\generate{\file{gloss-portuguese.ldf}{\from{polyglossia.dtx}{gloss-portuguese.ldf}}} -\generate{\file{gloss-romanian.ldf}{\from{polyglossia.dtx}{gloss-romanian.ldf}}} -\generate{\file{gloss-romansh.ldf}{\from{polyglossia.dtx}{gloss-romansh.ldf}}} -\generate{\file{gloss-russian.ldf}{\from{polyglossia.dtx}{gloss-russian.ldf}}} -\generate{\file{gloss-sami.ldf}{\from{polyglossia.dtx}{gloss-sami.ldf}}} -\generate{\file{gloss-samin.ldf}{\from{polyglossia.dtx}{gloss-samin.ldf}}} -\generate{\file{gloss-sanskrit.ldf}{\from{polyglossia.dtx}{gloss-sanskrit.ldf}}} -\generate{\file{gloss-scottish.ldf}{\from{polyglossia.dtx}{gloss-scottish.ldf}}} -\generate{\file{gloss-serbian.ldf}{\from{polyglossia.dtx}{gloss-serbian.ldf}}} -\generate{\file{gloss-serbianc.ldf}{\from{polyglossia.dtx}{gloss-serbianc.ldf}}} -\generate{\file{gloss-slovak.ldf}{\from{polyglossia.dtx}{gloss-slovak.ldf}}} -\generate{\file{gloss-slovene.ldf}{\from{polyglossia.dtx}{gloss-slovene.ldf}}} -\generate{\file{gloss-slovenian.ldf}{\from{polyglossia.dtx}{gloss-slovenian.ldf}}} -\generate{\file{gloss-sorbian.ldf}{\from{polyglossia.dtx}{gloss-sorbian.ldf}}} -\generate{\file{gloss-spanish.ldf}{\from{polyglossia.dtx}{gloss-spanish.ldf}}} -\generate{\file{gloss-spanishmx.ldf}{\from{polyglossia.dtx}{gloss-spanishmx.ldf}}} -\generate{\file{gloss-swedish.ldf}{\from{polyglossia.dtx}{gloss-swedish.ldf}}} -\generate{\file{gloss-swissgerman.ldf}{\from{polyglossia.dtx}{gloss-swissgerman.ldf}}} -\generate{\file{gloss-syriac.ldf}{\from{polyglossia.dtx}{gloss-syriac.ldf}}} -\generate{\file{gloss-tamil.ldf}{\from{polyglossia.dtx}{gloss-tamil.ldf}}} -\generate{\file{gloss-telugu.ldf}{\from{polyglossia.dtx}{gloss-telugu.ldf}}} -\generate{\file{gloss-thai.ldf}{\from{polyglossia.dtx}{gloss-thai.ldf}}} -\generate{\file{gloss-tibetan.ldf}{\from{polyglossia.dtx}{gloss-tibetan.ldf}}} -\generate{\file{gloss-turkish.ldf}{\from{polyglossia.dtx}{gloss-turkish.ldf}}} -\generate{\file{gloss-turkmen.ldf}{\from{polyglossia.dtx}{gloss-turkmen.ldf}}} -\generate{\file{gloss-ukrainian.ldf}{\from{polyglossia.dtx}{gloss-ukrainian.ldf}}} -\generate{\file{gloss-uppersorbian.ldf}{\from{polyglossia.dtx}{gloss-uppersorbian.ldf}}} -\generate{\file{gloss-urdu.ldf}{\from{polyglossia.dtx}{gloss-urdu.ldf}}} -\generate{\file{gloss-usorbian.ldf}{\from{polyglossia.dtx}{gloss-usorbian.ldf}}} -\generate{\file{gloss-vietnamese.ldf}{\from{polyglossia.dtx}{gloss-vietnamese.ldf}}} -\generate{\file{gloss-welsh.ldf}{\from{polyglossia.dtx}{gloss-welsh.ldf}}} -\generate{\file{arabicdigits.map}{\from{polyglossia.dtx}{arabicdigits.map}}} -\generate{\file{bengalidigits.map}{\from{polyglossia.dtx}{bengalidigits.map}}} -\generate{\file{devanagaridigits.map}{\from{polyglossia.dtx}{devanagaridigits.map}}} -\generate{\file{farsidigits.map}{\from{polyglossia.dtx}{farsidigits.map}}} -\generate{\file{thaidigits.map}{\from{polyglossia.dtx}{thaidigits.map}}} -\def\MetaPrefix{-- } -\generate{\file{polyglossia-french.lua}{\from{polyglossia.dtx}{polyglossia-french.lua}}} -\generate{\file{polyglossia-korean.lua}{\from{polyglossia.dtx}{polyglossia-korean.lua}}} -\generate{\file{polyglossia-latin.lua}{\from{polyglossia.dtx}{polyglossia-latin.lua}}} -\generate{\file{polyglossia-punct.lua}{\from{polyglossia.dtx}{polyglossia-punct.lua}}} -\generate{\file{polyglossia-sanskrit.lua}{\from{polyglossia.dtx}{polyglossia-sanskrit.lua}}} -\generate{\file{polyglossia-tibt.lua}{\from{polyglossia.dtx}{polyglossia-tibt.lua}}} -\generate{\file{polyglossia.lua}{\from{polyglossia.dtx}{polyglossia.lua}}} -\let\MetaPrefix\DoubleperCent -\endbatchfile diff --git a/macros/latex/contrib/polyglossia/polyglossia.pdf b/macros/latex/contrib/polyglossia/polyglossia.pdf index 6ac006692b..6c1979411b 100644 Binary files a/macros/latex/contrib/polyglossia/polyglossia.pdf and b/macros/latex/contrib/polyglossia/polyglossia.pdf differ -- cgit v1.2.3