texlive[43202] Master/texmf-dist: fontspec (12feb17)

commits+karl at tug.org commits+karl at tug.org
Mon Feb 13 00:33:13 CET 2017


Revision: 43202
          http://tug.org/svn/texlive?view=revision&revision=43202
Author:   karl
Date:     2017-02-13 00:33:12 +0100 (Mon, 13 Feb 2017)
Log Message:
-----------
fontspec (12feb17)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/fontspec/README.md
    trunk/Master/texmf-dist/doc/latex/fontspec/fontspec.pdf
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-featset.tex
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-fontsel.tex
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-intro.tex
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-luatex.tex
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-opentype.tex
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-xetex.tex
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc.tex
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-feat-aat.dtx
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-feat-opentype.dtx
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-fontload.dtx
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-internal.dtx
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-keyval.dtx
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-lua.dtx
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-opentype.dtx
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-patches.dtx
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-user.dtx
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-vars.dtx
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec.dtx
    trunk/Master/texmf-dist/tex/latex/fontspec/fontspec-luatex.sty
    trunk/Master/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty
    trunk/Master/texmf-dist/tex/latex/fontspec/fontspec.lua
    trunk/Master/texmf-dist/tex/latex/fontspec/fontspec.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-style.sty
    trunk/Master/texmf-dist/source/latex/fontspec/fontspec-xfss.dtx

Modified: trunk/Master/texmf-dist/doc/latex/fontspec/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/fontspec/README.md	2017-02-12 23:32:25 UTC (rev 43201)
+++ trunk/Master/texmf-dist/doc/latex/fontspec/README.md	2017-02-12 23:33:12 UTC (rev 43202)
@@ -1,5 +1,5 @@
-THE FONTSPEC PACKAGE v2.5d
-==========================
+The FONTSPEC package
+====================
 
 The fontspec package provides an automatic and unified interface for loading
 fonts in LaTeX. XeTeX and LuaTeX (the latter through the `luaotfload` package)
@@ -69,6 +69,20 @@
 Change history
 --------------
 
+- v2.6 (2017/02/12)
+
+    * Change the new behaviour of `\emph` (and `\emfontdeclare`) to act only on the NFSS font shape; using the series as well was too fragile.
+    * Add `\strong` as the "weight" analogy to `\emph`. This will need some extra syntactic sugar from `fontspec` before it becomes truly useful.
+    * Add `Numbers=Tabular` alias for `Numbers=Monospaced`.
+    * Fix occasional bug with "chained" keyval choices such as `Numbers={Lining,Proportional}` in which only the first choice would be recognised.
+    * Fix interaction with `RawFeature` and "proper" `fontspec` features.
+    * Fix regression in which `C:\...` file paths in Windows couldn't be used.
+    * Fix regression in XeTeX in which `Ligatures=TeX` overrode `Mapping=..` regardless of where the former was declared in the feature list.
+    * Fix bug (sorry!) in `\newopentypefeature`.
+    * Improve monospace font in documentation.
+
+    * N.B. There is currently a known issue with TTC fonts and LuaTeX; currently they cannot be loaded through the `fontspec` interface, but this issue should soon be addressed by the `luaotfload` package.
+
 - v2.5d (2017/01/24) "oops"
 
     * Add `\fontspec_if_small_caps:TF`

Modified: trunk/Master/texmf-dist/doc/latex/fontspec/fontspec.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-featset.tex
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-featset.tex	2017-02-12 23:32:25 UTC (rev 43201)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-featset.tex	2017-02-12 23:33:12 UTC (rev 43202)
@@ -514,9 +514,9 @@
    EXAMPLE HYPHENATION%
  }}\qquad\qquad\null\par\bigskip}
 
- \fontspec{Linux Libertine O}[HyphenChar=None]
+ \fontspec{LinLibertine_R.otf}[HyphenChar=None]
  \text
- \fontspec{Linux Libertine O}[HyphenChar={+}]
+ \fontspec{LinLibertine_R.otf}[HyphenChar={+}]
  \text
 \end{Xexample}
 

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-fontsel.tex
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-fontsel.tex	2017-02-12 23:32:25 UTC (rev 43201)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-fontsel.tex	2017-02-12 23:33:12 UTC (rev 43202)
@@ -14,17 +14,19 @@
 }
 
 These are the main font-selecting commands of this package.
-The \cs{fontspec} command selects a font for one-time use; all
+The \cs{fontspec} command selects a font for one-time use only; all
 others should be used to define the standard fonts used in a document, as shown in \exref{fontload}.
 Here, the scales of the fonts have been chosen to equalise their
 lowercase letter heights. The \feat{Scale} font feature will be discussed
 further in \vref{sec:font-ind-features}, including methods for automatic
 scaling.
+Note that further options may need to be added to select appropriate bold/italic fonts,
+but this shows the main idea.
 
 \begin{Lexample}{fontload}{Loading the default, sans serif, and monospaced fonts.}
   \setmainfont{texgyrebonum-regular.otf}
   \setsansfont{lmsans10-regular.otf}[Scale=MatchLowercase]
-  \setmonofont{Inconsolata.otf}[Scale=MatchLowercase]
+  \setmonofont{Inconsolatazi4-Regular.otf}[Scale=MatchLowercase]
 
   \rmfamily Pack my box with five dozen liquor jugs\par
   \sffamily Pack my box with five dozen liquor jugs\par
@@ -390,6 +392,24 @@
 \end{Verbatim}
 Note that if the first \feat{Font} feature is omitted then each size needs its own inner \feat{Font} declaration.
 
+\subsubsection{An example for \cs{strong}}
+\label{sec:strong-example}
+
+If you wanted to set up a font family to allow nesting of the \cs{strong}
+to easily access increasing font weights, you might use a declaration along the following lines:
+\begin{Verbatim}
+\setmonofont{SourceCodePro}[
+  Extension = .otf ,
+  UprightFont = *-Light ,
+  BoldFont = *-Regular ,
+  FontFace = {k}{n}{*-Black} ,
+]
+\strongfontdeclare{\bfseries,\fontseries{k}\selectfont}
+\end{Verbatim}
+
+Further `syntactic sugar' is planned to make this process somewhat easier.
+
+
 \subsection{Math(s) fonts}
 
 When \cmd\setmainfont, \cmd\setsansfont\ and \cmd\setmonofont\ are used in the

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-intro.tex
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-intro.tex	2017-02-12 23:32:25 UTC (rev 43201)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-intro.tex	2017-02-12 23:33:12 UTC (rev 43202)
@@ -180,16 +180,15 @@
 will produce small caps within |\emph{\emph{...}}|.
 
 \DescribeMacro{\emfontdeclare}
-The \pkg{fontspec} package takes this idea one step further to allow arbitrary font changes (e.g., boldness) and arbitrary levels of nesting within emphasis.
+The \pkg{fontspec} package takes this idea one step further to allow arbitrary font shape changes and arbitrary levels of nesting within emphasis.
 This is performed using the |\emfontdeclare| command, which takes a comma-separated list of font switches corresponding to increasing levels of emphasis.
-Two examples:
+An example:
 \begin{enumerate}
 \item |\emfontdeclare{\itshape,\upshape\scshape,\itshape}| will lead to `italics', `small caps', then `italic small caps' as the level of emphasis increases, as long as italic small caps are defined for the font.
   Note that |\upshape| is required because the font changes are cascading.
-\item |\emfontdeclare{\bfseries,\fontseries{h}\selectfont,\fontseries{x}\selectfont}| could lead to (if fonts are set up correctly) `bold', `heavy', and `extra bold'.
 \end{enumerate}
-The implementation of these feature tries to be `smart' and guess what level of emphasis to use in the case of manual font changing.
-This is reliable only if you use series- and/or shape- changing commands in \cs{emfontdeclare}.
+The implementation of this feature tries to be `smart' and guess what level of emphasis to use in the case of manual font changing.
+This is reliable only if you use shape-changing commands in \cs{emfontdeclare}.
 For example:
 \begin{Verbatim}
     \emfontdeclare{\itshape,\upshape\scshape,\itshape}
@@ -200,3 +199,31 @@
 
 \DescribeMacro{\emreset}
 Finally, if you have so much nested emphasis that |\emfontdeclare| runs out of options, it will insert |\emreset| (by default just |\upshape|) and start again from the beginning.
+
+
+\subsection{Strong emphasis}
+
+\DescribeMacro{\strong}
+\DescribeMacro{\strongenv}
+The \cs{strong} macro is used analogously to \cs{emph} but produces variations in weight.
+If you need it in environment form, use |\begin{strongenv}...\end{strongenv}|.
+
+As with emphasis, this font-switching command is intended to move through a range
+of font weights. For example, if the fonts are set up correctly it allows usage such as
+|\strong{...\strong{...}}| in which each nested \cs{strong} macro increases the
+weight of the font.
+
+\DescribeMacro{\strongfontdeclare}
+Currently this feature set is somewhat experimental and there is no syntactic sugar
+to easily define a range of font weights using \pkg{fontspec} commands.
+Use, say, the following to define first bold and then black (|k|) font faces for \cs{strong}:
+\begin{Verbatim}
+  \strongfontdeclare{\bfseries,\fontseries{k}\selectfont}
+\end{Verbatim}
+
+\DescribeMacro{\strongreset}
+If too many levels of \cs{strong} are reached, \cs{strongreset} is inserted.
+By default this is a no-op and the font will simply remain the same.
+Use \cs{renewcommand}\cs{strongreset}|{\mdseries}| to start again from the beginning if desired.
+
+An example for setting up a font family for use with \cs{strong} is discussed in \vref{sec:strong-example}.

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-luatex.tex
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-luatex.tex	2017-02-12 23:32:25 UTC (rev 43201)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-luatex.tex	2017-02-12 23:33:12 UTC (rev 43202)
@@ -21,13 +21,10 @@
 \directlua{
     fonts.handlers.otf.addfeature {
         name = "oneb",
-        {
-            type = "substitution",
-            data = {
+        type = "substitution",
+        data = {
                 ["1"] = "one.ss01",
-            },
-        },
-        "feature oneb for vollkorn font",
+        }
     }
 }
 \setmainfont{Vollkorn-Regular.otf}[RawFeature=+oneb]

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-opentype.tex
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-opentype.tex	2017-02-12 23:32:25 UTC (rev 43201)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-opentype.tex	2017-02-12 23:33:12 UTC (rev 43202)
@@ -280,7 +280,7 @@
    \Huge\centering
    \def\test#1#2{%
      #2 $\to$ {\addfontfeature{#1} #2}\\}
-   \fontspec{Linux Libertine O}
+   \fontspec{LinLibertine_R.otf}
    \test{Ligatures=Historic}{strict}
    \test{Ligatures=Rare}{wurtzite}
    \test{Ligatures=NoCommon}{firefly}
@@ -324,7 +324,7 @@
 to better match the surrounding letters.
 
 \begin{Lexample}{letters-uppercase}{An example of the \opt{Uppercase} option of the \feat{Letters} feature.}
-  \fontspec{Linux Libertine O}
+  \fontspec{LinLibertine_R.otf}
    UPPER-CASE example \\
   \addfontfeature{Letters=Uppercase}
    UPPER-CASE example
@@ -775,7 +775,7 @@
 
 \begin{Xexample}[firstline=2]{salt}{The \feat{Alternate} feature.}
   \huge
-  \fontspec{Linux Libertine O}
+  \fontspec{LinLibertine_R.otf}
   \textsc{a} \& h \\
   \addfontfeature{Alternate=0}
   \textsc{a} \& h

Added: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-style.sty
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-style.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-style.sty	2017-02-12 23:33:12 UTC (rev 43202)
@@ -0,0 +1,288 @@
+\ProvidesPackage{fontspec-doc-style}
+
+\usepackage{fontspec,booktabs,calc,caption,color,enumitem,flafter,fancyvrb,hologo,graphicx,
+  ifthen,url,varioref,varwidth,microtype,tocloft,framed,xparse,docmute}
+
+%% Various labelling commands:
+\newcommand*\name[1]{{#1}}
+\newcommand*\pkg[1]{\textsf{#1}}
+\newcommand*\opt[1]{\texttt{#1}}
+\newcommand*\feat[1]{\texttt{#1}}
+
+\let\latin\textit
+\def\eg{\latin{e.g.}}
+\def\ie{\latin{i.e.}}
+\def\Eg{\latin{E.g.}}
+\def\Ie{\latin{I.e.}}
+\def\etc{\@ifnextchar.{\latin{etc}}{\latin{etc.}\@}}
+
+\newcommand\note[1]{\unskip\footnote{#1}}
+
+\def\MacOSX{Mac~OS~X}
+\def\AAT{\textsc{aat}}
+\def\ATSUI{\textsc{atsui}}
+
+\newcommand\NFSS{\textsc{nfss}}
+\newcommand\XeTeX{\hologo{XeTeX}}
+\newcommand\XeLaTeX{\hologo{XeLaTeX}}
+\newcommand\LuaTeX{\hologo{LuaTeX}}
+\newcommand\LuaLaTeX{\hologo{LuaLaTeX}}
+
+% ToC formatting:
+\setlength\cftsubsecnumwidth{1.4\cftsubsecnumwidth}
+%\def\@cfttocstart{\small\begin{multicols}{2}}
+%\def\@cfttocfinish{\end{multicols}}
+
+\fvset{gobble=0}
+
+\captionsetup[table]{position=above}
+\captionsetup[figure]{position=above}
+
+
+%% Fonts
+
+\defaultfontfeatures{Numbers=OldStyle}
+\IfFontExistsTF{AldusNovaPro-Book.otf}
+  {
+    \setmainfont{aldus-nova}
+    \setsansfont{palatino-sans-light}
+  }
+  {
+\setmainfont{texgyrepagella}[
+  Extension = .otf,
+  UprightFont = *-regular ,
+  ItalicFont  = *-italic  ,
+  BoldFont    = *-bold    ,
+  BoldItalicFont = *-bolditalic ,
+]
+\setsansfont{texgyreheros}[
+  Extension = .otf,
+  UprightFont = *-regular ,
+  ItalicFont  = *-italic  ,
+  BoldFont    = *-bold    ,
+  BoldItalicFont = *-bolditalic ,
+]
+  }
+\setmonofont{lmmono10-regular.otf}[
+  Numbers={Lining,SlashedZero},
+  ItalicFont=lmmonoslant10-regular.otf,
+  BoldFont=lmmonolt10-bold.otf,
+  BoldItalicFont=lmmonolt10-boldoblique.otf,
+]
+\newfontfamily\ttcondensed{lmmonoltcond10-regular.otf}
+
+%% (La)TeX font-related declarations:
+\linespread{1.05}      % Pagella needs more space between lines
+\frenchspacing         % Remove ugly extra space after punctuation
+
+\usepackage[
+  bookmarks=true,
+  colorlinks=true,
+  linkcolor=niceblue,
+  urlcolor=niceblue,
+  citecolor=niceblue,
+  pdftitle={The fontspec package},
+  pdfsubject={Advanced font selection for XeLaTeX/LuaLaTeX},
+  pdfauthor={Will Robertson},
+  pdfkeywords={xetex, xelatex, luatex, lualatex, unicode, opentype, aat}
+  ]{hyperref}
+
+
+
+%% ToC
+\def\@dotsep{1000}
+\setcounter{tocdepth}{2}
+\setlength\columnseprule{0.4pt}
+\renewcommand\tableofcontents{\relax
+  \begin{multicols}{2}[\section*{\contentsname}]\relax
+    \@starttoc{toc}\relax
+  \end{multicols}}
+
+
+%% Index
+\setcounter{IndexColumns}{2}
+\renewenvironment{theglossary}
+  {\small\list{}{}
+     \item\relax
+     \glossary at prologue\GlossaryParms
+     \let\item\@idxitem \ignorespaces
+     \def\pfill{\hspace*{\fill}}}
+  {\endlist}
+
+
+
+%% varioref definitions:
+\labelformat{table}{Table~#1}
+\labelformat{section}{Section~#1}
+\labelformat{subsection}{Section~#1}
+
+\definecolor{niceblue}{rgb}{0.1,0.2,0.8}
+
+
+
+
+%% EXAMPLES
+
+\newsavebox\X
+\newsavebox\Y
+
+\newcounter{example}
+
+\newcommand\exref[1]{Example~\ref{ex:#1}}
+\newcommand\Exref[1]{Example~\ref{ex:#1}}
+
+\newenvironment{Xexample}[3][]
+  {\VerbatimEnvironment\begin{Fexample}[#1]{#2}{#3}{X}}
+  {\end{Fexample}}
+
+\newenvironment{Lexample}[3][]
+  {\VerbatimEnvironment\begin{Fexample}[#1]{#2}{#3}{L}}
+  {\end{Fexample}}
+
+\newenvironment{Fexample}[4][]
+  {%
+    \def\options{#1}%
+    \def\filename{#2}%
+    \def\captiontext{#3}%
+    \def\prefix{#4}
+    \refstepcounter{example}%
+    \label{ex:\filename}%
+    \IfFileExists{zzz-\theexample-\prefix-\filename.tex}{}{%
+      \immediate\write18{rm -f zzz-\theexample-* ;}%
+    }%
+    \VerbatimEnvironment
+    \begin{VerbatimOut}{zzz-\theexample-\prefix-\filename.tex}}
+% text in the environment
+  {\end{VerbatimOut}
+    \begin{figure}
+      \setlength\parindent{0pt}%
+      \edef\@tempa{[gobble=0,fontsize=\noexpand\small,\options]}%
+      \savebox\X{%
+                  \expandafter\BVerbatimInput
+                  \@tempa{zzz-\theexample-\prefix-\filename.tex}%
+                }%
+      \IfFileExists{zzz-\theexample-\prefix-\filename.pdf}{}
+         {%
+           \edef\XXcmd{%
+             \unexpanded{%
+               \RequirePackage{luatex85}
+               \documentclass[margin=0.2mm]{standalone}
+               \usepackage{booktabs,ifthen,graphicx,xcolor,varwidth}
+               \usepackage{fontspec}
+               \defaultfontfeatures{Ligatures=TeX}
+               \begin{document}
+               \begin{varwidth}{0.7\linewidth}
+               \input} zzz-\theexample-\prefix-\filename.tex
+             \unexpanded{
+               \end{varwidth}
+               \end{document}
+             }%
+           }%
+           \edef\1{%
+             \csname prog@\prefix\endcsname "\unexpanded\expandafter{\XXcmd}";
+             printf '\@percentchar s' '\unexpanded\expandafter{\XXcmd}' > zzz-\theexample-\prefix-\filename-test.tex;
+           }%
+           \immediate\write18{\unexpanded\expandafter{\1}}%
+         }%
+      \savebox\Y{%
+      \IfFileExists{zzz-\theexample-\prefix-\filename.pdf}
+          {\includegraphics{zzz-\theexample-\prefix-\filename.pdf}}
+          {\color{red}\itshape ---Graphic not generated---}%
+      }
+      % TYPESETTING
+      \rule[0.5\baselineskip]{\columnwidth}{1pt}%
+      \vspace{-1.2ex}%
+      \def\@tempa{\small\textsf{Example~\theexample:~}}%
+      \settowidth\@tempdima{\@tempa\captiontext}%
+      \par
+      \ifdim\@tempdima>\linewidth
+        \settowidth\@tempdima{\@tempa}%
+        \@tempa\parbox[t]{\linewidth-\@tempdima}{\small\captiontext}%
+        \vspace{0.4\baselineskip}%
+      \else
+        \parbox{\linewidth}{\centering\@tempa~\captiontext}%
+      \fi
+      \par\rule[0.4\baselineskip]{\columnwidth}{0.4pt}\par
+      \ifdim\dimexpr\wd\X+\wd\Y>\linewidth\relax
+        \null\hfill\makebox[0pt][r]{\usebox\Y}\usebox\X
+      \else
+        \hfill\usebox\Y\hfill\usebox\X
+      \fi
+      \par\rule[0.5\baselineskip]{\columnwidth}{1pt}
+    \end{figure}
+}
+
+\def\prog at X{xelatex
+               -jobname=zzz-\theexample-X-\filename\space}
+
+\def\prog at L{lualatex
+               -jobname=zzz-\theexample-L-\filename\space}
+
+%%%%%%%%%%%%%%%%%%%%%%
+
+\newcommand*\setexsize[1]{\let\examplesize#1}
+\newcommand*\setverbwidth[1]{\def\auxwidth{#1}}
+
+
+
+\newcounter{argument}
+\g at addto@macro\endmacro{\setcounter{argument}{0}}
+\newcommand*\darg[1]{%
+  \stepcounter{argument}%
+  \noindent{\ttfamily\char`\#\theargument~:~}#1\par}
+\newcommand*\doarg[1]{%
+  \stepcounter{argument}%
+  \noindent{\ttfamily\makebox[0pt][r]{[}\char`\#\theargument]:~}#1\par}
+
+\newcommand\unichar[2]{\textsc{\MakeLowercase{u+#1: #2}}}
+
+\newcommand\cmdbox[1]{%
+  \smallskip\par\noindent
+  \fbox{\begin{varwidth}{\linewidth}
+    #1%
+  \end{varwidth}}%
+  \smallskip
+}
+\def\CMD#1{\texttt{\null#1\unskip}}
+
+
+\NewDocumentCommand \otf {somm} {%
+  \featname & #3 & \texttt{#4}
+  \IfBooleanT #1 { & \textdagger }
+  \\
+}
+\newenvironment{features}[1]{%
+  \def\NOTE{}
+  \def\thisfeatname{#1}%
+  \def\featname{\thisfeatname~~\texttt=~~\null\gdef\featname{}}%
+  \begin{table}
+    \caption{Options for the OpenType font feature `\thisfeatname'.}
+    \edef\@tempa{\noexpand\label{feat:\thisfeatname}}\@tempa
+    \centering
+    \begin{tabular}{@{}l@{}l@{\hspace{0.5\tabcolsep}}l@{\hspace{0.5\tabcolsep}}l@{}}
+    \toprule
+    Feature & Option & Tag & \\
+    \midrule
+}{
+    \bottomrule
+    \end{tabular}
+    \par\smallskip
+    \footnotesize
+    \textdagger\ These feature options can be disabled with \texttt{..Off} variants, and reset \\ to default state (neither explicitly on nor off) with \texttt{..Reset}.
+    \NOTE
+  \end{table}
+}
+
+
+%%%%%%%%%%%
+
+\def \MakePrivateLetters {%
+  \catcode `\@ = 11
+  \catcode `\_ = 11
+  \catcode `\: = 11
+}
+
+%% for LaTeX3 csnames
+\catcode `\_= 11
+
+\renewcommand\partname{Part}

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-xetex.tex
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-xetex.tex	2017-02-12 23:32:25 UTC (rev 43201)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc-xetex.tex	2017-02-12 23:33:12 UTC (rev 43202)
@@ -18,6 +18,8 @@
   ``!`A small amount of---text!''
 \end{Xexample}
 
+Only one mapping can be active at a time and a second call to \feat{Mapping}
+will simply override the first.
 Using the |tex-text| mapping is also equivalent to writing |Ligatures=TeX|.
 The use of the latter syntax is recommended for better compatibility with
 \LuaTeX\ documents.
@@ -53,8 +55,8 @@
 
 Multiple Master fonts are parameterised over
 orthogonal font axes, allowing continuous selection along such
-features as weight, width, and optical size~(see \vref{sec:mm} for
-further details). Whereas an OpenType font will have only a few separate
+features as weight, width, and optical size.
+Whereas an OpenType font will have only a few separate
 optical sizes, a Multiple Master font's optical size can be
 specified over a continuous range. Unfortunately, this flexibility makes
 it harder to create an automatic interface through \LaTeX, and the

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc.tex
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc.tex	2017-02-12 23:32:25 UTC (rev 43201)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-doc.tex	2017-02-12 23:33:12 UTC (rev 43202)
@@ -19,7 +19,7 @@
 \title{The \textsf{fontspec} package\\Font selection for \XeLaTeX\ and \LuaLaTeX}
 \author{
    \textsc{Will Robertson} and \textsc{Khaled Hosny}\\
-   \texttt{will.robertson at latex-project.org}
+   \url{http://wspr.io/fontspec/}
 }
 \date{\filedate \qquad \fileversion}
 

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-feat-aat.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-feat-aat.dtx	2017-02-12 23:32:25 UTC (rev 43201)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-feat-aat.dtx	2017-02-12 23:33:12 UTC (rev 43202)
@@ -39,7 +39,7 @@
  {
   Ligatures / TeX .code:n =
    {
-    \@@_update_featstr:n { mapping = tex-text }
+     \tl_set:Nn \l_@@_mapping_tl { tex-text }
    }
  }
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-feat-opentype.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-feat-opentype.dtx	2017-02-12 23:32:25 UTC (rev 43201)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-feat-opentype.dtx	2017-02-12 23:33:12 UTC (rev 43202)
@@ -39,7 +39,13 @@
 %    \end{macrocode}
 % Emulate CM extra ligatures.
 %    \begin{macrocode}
-%<xetexx>\@@_define_opentype_onreset:nnnnn {Ligatures} {TeX} {} { mapping = tex-text } {}
+%<*xetexx>
+\keys_define:nn {fontspec-opentype}
+  {
+    Ligatures / TeX .code:n = { \tl_set:Nn \l_@@_mapping_tl {tex-text} },
+    Ligatures / TeXReset .code:n = { \tl_clear:N \l_@@_mapping_tl },
+  }
+%</xetexx>
 %<luatex>\@@_define_opentype_onreset:nnnnn {Ligatures} {TeX} {} { +tlig } {}
 %    \end{macrocode}
 %
@@ -86,8 +92,9 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\aliasfontfeatureoption {Numbers} {Lowercase} {OldStyle}
-\aliasfontfeatureoption {Numbers} {Uppercase} {Lining}
+\aliasfontfeatureoption {Numbers} {Monospaced} {Tabular}
+\aliasfontfeatureoption {Numbers} {Lowercase}  {OldStyle}
+\aliasfontfeatureoption {Numbers} {Uppercase}  {Lining}
 %    \end{macrocode}
 %
 % |luaotload| provides a custom |anum| feature for replacing Latin

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-fontload.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-fontload.dtx	2017-02-12 23:32:25 UTC (rev 43201)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-fontload.dtx	2017-02-12 23:33:12 UTC (rev 43202)
@@ -1,5 +1,5 @@
 
-% \section{expl3 interface for font loading}
+% \section{expl3 interface for primitive font loading}
 %
 % \iffalse
 %    \begin{macrocode}
@@ -13,6 +13,8 @@
   {
     \font #1 = #2 ~at~ #3 \scan_stop:
   }
+%    \end{macrocode}
+%    \begin{macrocode}
 \cs_set:Npn \@@_primitive_font_gset:Nnn #1#2#3
   {
     \global \font #1 = #2 ~at~ #3 \scan_stop:

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-internal.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-internal.dtx	2017-02-12 23:32:25 UTC (rev 43201)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-internal.dtx	2017-02-12 23:33:12 UTC (rev 43202)
@@ -247,7 +247,9 @@
 %    \begin{macrocode}
 \cs_set:Nn \@@_construct_font_call:nnnnnn
  {
-  " \@@_fontname_wrap:n { #1 #2 #3 } #4 #5
+%<xetexx>  " \@@_fontname_wrap:n { #1 #2 #3 }
+%<luatex>  " \@@_fontname_wrap:n { #1 #2 } #3
+    #4 #5
     \str_if_eq_x:nnF {#6}{} {:#6} "
  }
 %    \end{macrocode}
@@ -276,8 +278,7 @@
   }
 \cs_new:Nn \@@_font_is_file:
   {
-%<xetexx>    \cs_set:Npn \@@_fontname_wrap:n ##1 { [ \l_@@_font_path_tl ##1 ] }
-%<luatex>    \cs_set:Npn \@@_fontname_wrap:n ##1 { file:\l_@@_font_path_tl ##1 }
+    \cs_set:Npn \@@_fontname_wrap:n ##1 { [ \l_@@_font_path_tl ##1 ] }
   }
 %    \end{macrocode}
 % \end{macro}
@@ -341,19 +342,24 @@
   \bool_if:NTF \l_@@_ot_bool
     {
 %<debug>  \typeout{::: Setting~ keys~ for~ OpenType~ font~ features:~"\l_@@_keys_leftover_clist"}
-      \keys_set:nx {fontspec-opentype} {\l_@@_keys_leftover_clist}
+    %  \tracingall
+      \keys_set:nV {fontspec-opentype} \l_@@_keys_leftover_clist
+    %  \EROROR
     }
     {
 %<debug>  \typeout{::: Setting~ keys~ for~ AAT~ font~ features:~"\l_@@_keys_leftover_clist"}
       \bool_if:NT \l_@@_atsui_bool
-        { \keys_set:nx {fontspec-aat} {\l_@@_keys_leftover_clist} }
+        { \keys_set:nV {fontspec-aat} \l_@@_keys_leftover_clist }
     }
 %</xetexx>
 %<*luatex>
 %<debug>  \typeout{::: Setting~ keys~ for~ OpenType~ font~ features:~"\l_@@_keys_leftover_clist"}
-  \keys_set:nx {fontspec-opentype} {\l_@@_keys_leftover_clist}
+  \keys_set:nV {fontspec-opentype} \l_@@_keys_leftover_clist
 %</luatex>
 
+  \tl_if_empty:NF \l_@@_mapping_tl
+    { \@@_update_featstr:n { mapping = \l_@@_mapping_tl } }
+
   \str_if_eq_x:nnF { \l_@@_hexcol_tl \l_@@_opacity_tl }
                    { \g_@@_hexcol_tl \g_@@_opacity_tl }
     { \@@_update_featstr:n { color = \l_@@_hexcol_tl\l_@@_opacity_tl } }

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-keyval.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-keyval.dtx	2017-02-12 23:32:25 UTC (rev 43201)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-keyval.dtx	2017-02-12 23:33:12 UTC (rev 43202)
@@ -646,13 +646,18 @@
 %
 % \paragraph{Mapping}
 %    \begin{macrocode}
-\@@_keys_define_code:nnn {fontspec} {Mapping}
 %<*xetexx>
- {
-  \@@_update_featstr:n { mapping = #1 }
- }
+\@@_keys_define_code:nnn {fontspec-aat} {Mapping}
+  {
+    \tl_set:Nn \l_@@_mapping_tl { #1 }
+  }
+\@@_keys_define_code:nnn {fontspec-opentype} {Mapping}
+  {
+    \tl_set:Nn \l_@@_mapping_tl { #1 }
+  }
 %</xetexx>
 %<*luatex>
+\@@_keys_define_code:nnn {fontspec-opentype} {Mapping}
  {
   \str_if_eq:nnTF {#1} {tex-text}
    {
@@ -805,10 +810,14 @@
 % This allows savvy \XeTeX-ers to input font features manually if they have
 % already memorised the OpenType abbreviations and don't mind not having error checking.
 %    \begin{macrocode}
-\@@_keys_define_code:nnn {fontspec} {RawFeature}
+\@@_keys_define_code:nnn {fontspec-opentype} {RawFeature}
  {
   \@@_update_featstr:n {#1}
  }
+\@@_keys_define_code:nnn {fontspec-aat} {RawFeature}
+ {
+  \@@_update_featstr:n {#1}
+ }
 %    \end{macrocode}
 %
 %

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-lua.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-lua.dtx	2017-02-12 23:32:25 UTC (rev 43201)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-lua.dtx	2017-02-12 23:33:12 UTC (rev 43202)
@@ -3,20 +3,7 @@
 %    \begin{macrocode}
 %<*lua>
 %    \end{macrocode}
-% First we define some metadata.
 %    \begin{macrocode}
-fontspec          = fontspec or {}
-local fontspec    = fontspec
-fontspec.module   = {
-    name          = "fontspec",
-    version       = "2.5a",
-    date          = "2016/02/01",
-    description   = "Advanced font selection for LuaLaTeX.",
-    author        = "Khaled Hosny, Philipp Gesang, Will Robertson",
-    copyright     = "Khaled Hosny, Philipp Gesang, Will Robertson",
-    license       = "LPPL"
-}
-
 local err, warn, info, log = luatexbase.provides_module(fontspec.module)
 %    \end{macrocode}
 % Some utility functions

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-opentype.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-opentype.dtx	2017-02-12 23:32:25 UTC (rev 43201)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-opentype.dtx	2017-02-12 23:33:12 UTC (rev 43202)
@@ -39,7 +39,11 @@
   \@@_feat_prop_add:nn {#3} {#1\,=\,#2}
   \keys_define:nn {fontspec-opentype}
    {
-    #1/#2 .code:n = { \@@_make_OT_feature:nnn {#3} {#4} {#5} }
+    #1/#2 .code:n =
+      {
+%<debug>        \typeout{::::::::fontspec-opentype~#1/#2~=~#3/#4/#5}
+        \@@_make_OT_feature:nnn {#3} {#4} {#5}
+      }
    }
  }
 %    \end{macrocode}
@@ -119,9 +123,9 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\cs_new:Nn \@@_swap_plus_minus:n { \@@_swap_plus_minus_aux:NNNNN #1 }
-\cs_new:Nn \@@_swap_plus_minus_aux:NNNNN
-  { \str_case:nn {#1} { {+} {-#2#3#4#5} {-} {+#2#3#4#5} } }
+\cs_new:Nn \@@_swap_plus_minus:n { \@@_swap_plus_minus_aux:Nq #1 \q_nil }
+\cs_new:Npn \@@_swap_plus_minus_aux:Nq #1#2 \q_nil
+  { \str_case:nn {#1} { {+} {-#2} {-} {+#2} } }
 %    \end{macrocode}
 % \end{macro}
 %

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-patches.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-patches.dtx	2017-02-12 23:32:25 UTC (rev 43201)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-patches.dtx	2017-02-12 23:33:12 UTC (rev 43202)
@@ -4,164 +4,6 @@
 %<*fontspec>
 %    \end{macrocode}
 %
-%
-% \subsection{Italic small caps and so on} \label{sec:sishape}
-%
-% \begin{macro}{\sishape}
-% \begin{macro}{\textsi}
-% These commands for actually selecting italic small caps have been defined for many years; I'm inclined to drop them.
-% They're probably used very infrequently; I personally prefer just writing
-% |\textit{\textsc{...}}| instead.
-%
-%    \begin{macrocode}
-\providecommand*\itscdefault{\itdefault\scdefault}
-\providecommand*\slscdefault{\sldefault\scdefault}
-\DeclareRobustCommand{\sishape}
- {
-  \not at math@alphabet\sishape\relax
-  \fontshape{\itscdefault}\selectfont
- }
-\DeclareTextFontCommand{\textsi}{\sishape}
-%    \end{macrocode}
-% \end{macro} \end{macro}
-%
-% \LaTeX's `shape' font axis needs to be overloaded to support italic small caps and slanted small caps.
-% These are the combinations to support:
-%    \begin{macrocode}
-\cs_new:Nn \@@_shape_merge:nn { c_@@_shape_#1_#2_tl }
-\tl_const:cn { \@@_shape_merge:nn \itdefault   \scdefault } {\itscdefault}
-\tl_const:cn { \@@_shape_merge:nn \sldefault   \scdefault } {\slscdefault}
-\tl_const:cn { \@@_shape_merge:nn \scdefault   \itdefault } {\itscdefault}
-\tl_const:cn { \@@_shape_merge:nn \scdefault   \sldefault } {\slscdefault}
-\tl_const:cn { \@@_shape_merge:nn \slscdefault \itdefault } {\itscdefault}
-\tl_const:cn { \@@_shape_merge:nn \itscdefault \sldefault } {\slscdefault}
-\tl_const:cn { \@@_shape_merge:nn \itscdefault \updefault } {\scdefault}
-\tl_const:cn { \@@_shape_merge:nn \slscdefault \updefault } {\scdefault}
-%    \end{macrocode}
-%
-% \begin{macro}{\fontspec_merge_shape:n}
-% These macros enable the overload on the |\..shape| commands.
-% First, a shape `new+current' (prefix) or `current+new' (suffix) is tried.
-% If not found, fall back on the `new' shape.
-%    \begin{macrocode}
-\cs_new:Nn \fontspec_merge_shape:n
-  {
-    \@@_if_merge_shape:nTF {#1}
-      { \fontshape { \tl_use:c { \@@_shape_merge:nn {\f at shape} {#1} } } \selectfont }
-      { \fontshape {#1} \selectfont }
-  }
-%    \end{macrocode}
-% The following is rather specific; it only returns true if the merged shape exists,
-% but more importantly also if the merged shape is defined for the current font.
-%    \begin{macrocode}
-\prg_new_conditional:Nnn \@@_if_merge_shape:n {TF}
-  {
-    \bool_if:nTF
-      {
-        \tl_if_exist_p:c { \@@_shape_merge:nn {\f at shape} {#1} }   &&
-        \cs_if_exist_p:c
-          {
-            \f at encoding/\f at family/\f at series/
-            \tl_use:c { \@@_shape_merge:nn {\f at shape} {#1} }
-          }
-      }
-    \prg_return_true: \prg_return_false:
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\itshape} \begin{macro}{\scshape} \begin{macro}{\upshape} \begin{macro}{\slshape}
-% The original |\..shape| commands are redefined to use the merge shape macro.
-%    \begin{macrocode}
-\DeclareRobustCommand \itshape
- {
-  \not at math@alphabet\itshape\mathit
-  \fontspec_merge_shape:n\itdefault
- }
-\DeclareRobustCommand \slshape
- {
-  \not at math@alphabet\slshape\relax
-  \fontspec_merge_shape:n\sldefault
- }
-\DeclareRobustCommand \scshape
- {
-  \not at math@alphabet\scshape\relax
-  \fontspec_merge_shape:n\scdefault
- }
-\DeclareRobustCommand \upshape
- {
-  \not at math@alphabet\upshape\relax
-  \fontspec_merge_shape:n\updefault
- }
-%    \end{macrocode}
-% \end{macro} \end{macro} \end{macro} \end{macro}
-%
-%
-%
-% \subsection{Emphasis}
-%
-% \begin{macro}{\em}
-% \begin{macro}{\emph}
-% \begin{macro}{\emshape}
-% \begin{macro}{\eminnershape}
-% \begin{macro}{\emfontdeclare}
-% Redefinition of |{\em ...}| and |\emph{...}| to allow nesting of emphases.
-%
-%    \begin{macrocode}
-\cs_new_protected:Npn \emfontdeclare #1
-  {
-    \prop_clear:N \g_@@_em_prop
-    \int_zero:N   \l_@@_emdef_int
-    \group_begin:
-      \normalfont
-      \clist_map_inline:nn {\emreset,#1}
-        {
-          ##1
-          \prop_gput_if_new:NxV \g_@@_em_prop { \f at series/\f at shape } { \l_@@_emdef_int }
-          \prop_gput:Nxn \g_@@_em_prop { switch-\int_use:N \l_@@_emdef_int } { ##1 }
-          \int_incr:N \l_@@_emdef_int
-        }
-    \group_end:
-  }
-%    \end{macrocode}
-%
-%    \begin{macrocode}
-\DeclareRobustCommand \em
-  {
-    \@nomath\em
-
-    \prop_get:NxNT \g_@@_em_prop { \f at series/\f at shape } \l_@@_em_tmp_tl
-      { \int_set:Nn \l_@@_em_int { \l_@@_em_tmp_tl } }
-
-    \int_incr:N \l_@@_em_int
-
-    \prop_get:NxNTF \g_@@_em_prop { switch-\int_use:N \l_@@_em_int } \l_@@_em_switch_tl
-      { \l_@@_em_switch_tl }
-      {
-        \int_zero:N \l_@@_em_int
-        \emreset
-      }
-
-  }
-%    \end{macrocode}
-% Document commands:
-%    \begin{macrocode}
-\DeclareTextFontCommand{\emph}{\em}
-\cs_set:Npn \emreset { \upshape }
-\cs_set:Npn \emshape { \itshape }
-\cs_set:Npn \eminnershape { \upshape }
-\emfontdeclare{ \emshape, \eminnershape }
-%    \end{macrocode}
-% Ensure nesting resets when necessary:
-%    \begin{macrocode}
-\cs_set:Npn \reset at font { \normalfont \int_zero:N \l__fontspec_em_int }
-%    \end{macrocode}
-% Programmer's interface for setting nesting level:
-%    \begin{macrocode}
-\cs_new:Nn \fontspec_set_em_level:n { \int_set:Nn \l_@@_em_int {#1} }
-%    \end{macrocode}
-% \end{macro} \end{macro} \end{macro} \end{macro} \end{macro}
-%
 % \subsection{\cmd\-}
 %
 % \begin{macro}{\-}

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-user.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-user.dtx	2017-02-12 23:32:25 UTC (rev 43201)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-user.dtx	2017-02-12 23:33:12 UTC (rev 43202)
@@ -337,10 +337,17 @@
  {
   \keys_if_exist:nnF { fontspec / options } {#1}
     { \@@_define_opentype_feature_group:n {#1} }
+
   \keys_if_choice_exist:nnnT {fontspec} {#1} {#2}
     { \@@_warning:nxx {feature-option-overwrite} {#1} {#2} }
-  \@@_define_opentype_feature:nnn {#1}{#2}{#3}
+
+  \exp_args:Nnnx \@@_define_opentype_feature:nnnnn {#1}{#2}{ \@@_strip_plus_minus:n {#3} }{#3}{}
  }
+
+\cs_new:Nn \@@_strip_plus_minus:n { \@@_strip_plus_minus_aux:Nq #1 \q_nil }
+\cs_new:Npn \@@_strip_plus_minus_aux:Nq #1#2 \q_nil
+  { \str_case:nnF {#1} { {+} {#2} {-} {#2} } {#1#2} }
+
 %    \end{macrocode}
 % \end{macro}
 %
@@ -359,11 +366,8 @@
 %<debug> \typeout{::::::::::::::::::::^^J:: aliasfontfeature{#1}{#2}}
   \bool_set_false:N \l_@@_alias_bool
 
-  \clist_map_inline:nn
-   { fontspec, fontspec-opentype, fontspec-aat, fontspec-preparse, fontspec-preparse-external,
-     fontspec-preparse-nested, fontspec-renderer }
+  \clist_map_inline:Nn \g_@@_all_keyval_modules_clist
    {
-
      \keys_if_exist:nnT {##1} {#1}
       {
 %<debug> \typeout{:::: Key~exists~##1~/~#1}
@@ -387,16 +391,17 @@
 
   \clist_map_inline:Nn \g_@@_all_keyval_modules_clist
    {
-
-     \keys_if_exist:nnT {##1} {#1}
+     \keys_if_exist:nnT { ##1 / #1 } {#2}
       {
+%<debug> \typeout{:::: Keyval~exists~##1~/~#1~=~#2}
         \bool_set_true:N \l_@@_alias_bool
-        \keys_define:nn { ##1 / #1 } { #3 .meta:n = {#2} }
+        \keys_define:nn { ##1 / #1 }
+          { #3 .code:n = { \keys_set:nn {##1} { #1 = {#2} } } }
       }
    }
 
   \bool_if:NF \l_@@_alias_bool
-    { \@@_warning:nx {rename-feature-not-exist} {#1} }
+    { \@@_warning:nx {rename-feature-not-exist} {#1/#2} }
  }
 %    \end{macrocode}
 % \end{macro}
@@ -437,7 +442,7 @@
 % \end{macro}
 
 
-% \begin{macro}{\IfFontFeaturesTF}
+% \begin{macro}{\IfFontFeatureActiveTF}
 %    \begin{macrocode}
 \DeclareDocumentCommand \IfFontFeatureActiveTF {mmm}
   {

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-vars.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-vars.dtx	2017-02-12 23:32:25 UTC (rev 43201)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-vars.dtx	2017-02-12 23:33:12 UTC (rev 43202)
@@ -53,6 +53,7 @@
 \bool_new:N \l_@@_never_check_bool
 \bool_new:N \l_@@_defining_encoding_bool
 \bool_new:N \l_@@_script_exist_bool
+\bool_new:N \g_@@_em_normalise_slant_bool
 %    \end{macrocode}
 %
 % \paragraph{Counters}
@@ -63,6 +64,8 @@
 \int_new:N \l_@@_tmp_int
 \int_new:N \l_@@_em_int
 \int_new:N \l_@@_emdef_int
+\int_new:N \l_@@_strong_int
+\int_new:N \l_@@_strongdef_int
 %    \end{macrocode}
 %
 % \paragraph{Floating point}
@@ -139,6 +142,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
+\tl_new:N  \l_@@_mapping_tl
 \tl_new:N  \g_@@_hexcol_tl
 \tl_new:N  \g_@@_opacity_tl
 \tl_set:Nn \g_@@_hexcol_tl {000000}

Added: trunk/Master/texmf-dist/source/latex/fontspec/fontspec-xfss.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec-xfss.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec-xfss.dtx	2017-02-12 23:33:12 UTC (rev 43202)
@@ -0,0 +1,266 @@
+% \section{Changes to the NFSS}
+%
+%    \begin{macrocode}
+%<*fontspec>
+%    \end{macrocode}
+%
+%
+% \subsection{Italic small caps and so on} \label{sec:sishape}
+%
+% \begin{macro}{\sishape}
+% \begin{macro}{\textsi}
+% These commands for actually selecting italic small caps have been defined for many years; I'm inclined to drop them.
+% They're probably used very infrequently; I personally prefer just writing
+% |\textit{\textsc{...}}| instead.
+%
+%    \begin{macrocode}
+\providecommand*\itscdefault{\itdefault\scdefault}
+\providecommand*\slscdefault{\sldefault\scdefault}
+\DeclareRobustCommand{\sishape}
+ {
+  \not at math@alphabet\sishape\relax
+  \fontshape{\itscdefault}\selectfont
+ }
+\DeclareTextFontCommand{\textsi}{\sishape}
+%    \end{macrocode}
+% \end{macro} \end{macro}
+%
+% \LaTeX's `shape' font axis needs to be overloaded to support italic small caps and slanted small caps.
+% These are the combinations to support:
+%    \begin{macrocode}
+\cs_new:Nn \@@_shape_merge:nn { c_@@_shape_#1_#2_tl }
+\tl_const:cn { \@@_shape_merge:nn \itdefault   \scdefault } {\itscdefault}
+\tl_const:cn { \@@_shape_merge:nn \sldefault   \scdefault } {\slscdefault}
+\tl_const:cn { \@@_shape_merge:nn \scdefault   \itdefault } {\itscdefault}
+\tl_const:cn { \@@_shape_merge:nn \scdefault   \sldefault } {\slscdefault}
+\tl_const:cn { \@@_shape_merge:nn \slscdefault \itdefault } {\itscdefault}
+\tl_const:cn { \@@_shape_merge:nn \itscdefault \sldefault } {\slscdefault}
+\tl_const:cn { \@@_shape_merge:nn \itscdefault \updefault } {\scdefault}
+\tl_const:cn { \@@_shape_merge:nn \slscdefault \updefault } {\scdefault}
+%    \end{macrocode}
+%
+% \begin{macro}{\fontspec_merge_shape:n}
+% These macros enable the overload on the |\..shape| commands.
+% First, a shape `new+current' (prefix) or `current+new' (suffix) is tried.
+% If not found, fall back on the `new' shape.
+%    \begin{macrocode}
+\cs_new:Nn \fontspec_merge_shape:n
+  {
+    \@@_if_merge_shape:nTF {#1}
+      { \fontshape { \tl_use:c { \@@_shape_merge:nn {\f at shape} {#1} } } \selectfont }
+      { \fontshape {#1} \selectfont }
+  }
+%    \end{macrocode}
+% The following is rather specific; it only returns true if the merged shape exists,
+% but more importantly also if the merged shape is defined for the current font.
+%    \begin{macrocode}
+\prg_new_conditional:Nnn \@@_if_merge_shape:n {TF}
+  {
+    \bool_if:nTF
+      {
+        \tl_if_exist_p:c { \@@_shape_merge:nn {\f at shape} {#1} }   &&
+        \cs_if_exist_p:c
+          {
+            \f at encoding/\f at family/\f at series/
+            \tl_use:c { \@@_shape_merge:nn {\f at shape} {#1} }
+          }
+      }
+    \prg_return_true: \prg_return_false:
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\itshape} \begin{macro}{\scshape} \begin{macro}{\upshape} \begin{macro}{\slshape}
+% The original |\..shape| commands are redefined to use the merge shape macro.
+%    \begin{macrocode}
+\DeclareRobustCommand \itshape
+ {
+  \not at math@alphabet\itshape\mathit
+  \fontspec_merge_shape:n\itdefault
+ }
+\DeclareRobustCommand \slshape
+ {
+  \not at math@alphabet\slshape\relax
+  \fontspec_merge_shape:n\sldefault
+ }
+\DeclareRobustCommand \scshape
+ {
+  \not at math@alphabet\scshape\relax
+  \fontspec_merge_shape:n\scdefault
+ }
+\DeclareRobustCommand \upshape
+ {
+  \not at math@alphabet\upshape\relax
+  \fontspec_merge_shape:n\updefault
+ }
+%    \end{macrocode}
+% \end{macro} \end{macro} \end{macro} \end{macro}
+%
+%
+%
+% \subsection{Emphasis}
+%
+% \begin{macro}{\emfontdeclare}
+%    \begin{macrocode}
+\cs_new_protected:Npn \emfontdeclare #1
+  {
+    \prop_clear:N    \g_@@_em_prop
+    \int_zero:N      \l_@@_emdef_int
+    \bool_set_true:N \g_@@_em_normalise_slant_bool
+
+    \tl_if_in:nnT {#1} {\slshape}
+      {
+        \tl_if_in:nnT {#1} {\itshape}
+          {
+            \bool_set_false:N \g_@@_em_normalise_slant_bool
+          }
+      }
+
+    \group_begin:
+      \normalfont
+      \clist_map_inline:nn {\emreset,#1}
+        {
+          ##1
+          \prop_gput_if_new:NxV \g_@@_em_prop { \f at shape } { \l_@@_emdef_int }
+          \prop_gput:Nxn \g_@@_em_prop { switch-\int_use:N \l_@@_emdef_int } { ##1 }
+          \int_incr:N \l_@@_emdef_int
+        }
+    \group_end:
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\em}
+%    \begin{macrocode}
+\DeclareRobustCommand \em
+  {
+    \@nomath\em
+    \tl_set:Nx \l_@@_emshape_query_tl { \f at shape }
+
+    \bool_if:NT \g_@@_em_normalise_slant_bool
+      {
+        \tl_replace_all:Nnn \l_@@_emshape_query_tl {/sl} {/it}
+      }
+
+%<debug> \typeout{Emph~ level:~\int_use:N \l_@@_em_int}
+    \prop_get:NxNT \g_@@_em_prop { \l_@@_emshape_query_tl } \l_@@_em_tmp_tl
+      {
+        \int_set:Nn \l_@@_em_int { \l_@@_em_tmp_tl }
+%<debug> \typeout{Shape~ (\l_@@_emshape_query_tl)~ detected;~ new~ level:~\int_use:N \l_@@_em_int}
+      }
+
+    \int_incr:N \l_@@_em_int
+
+    \prop_get:NxNTF \g_@@_em_prop { switch-\int_use:N \l_@@_em_int } \l_@@_em_switch_tl
+      { \l_@@_em_switch_tl }
+      {
+        \int_zero:N \l_@@_em_int
+        \emreset
+      }
+
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\emph}
+% \begin{macro}{\emshape}
+% \begin{macro}{\eminnershape}
+% \begin{macro}{\emreset}
+%    \begin{macrocode}
+\DeclareTextFontCommand{\emph}{\em}
+\cs_set:Npn \emreset { \upshape }
+\cs_set:Npn \emshape { \itshape }
+\cs_set:Npn \eminnershape { \upshape }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsection{Strong emphasis}
+%
+% \begin{macro}{\strongfontdeclare}
+%    \begin{macrocode}
+\cs_new_protected:Npn \strongfontdeclare #1
+  {
+    \prop_clear:N    \g_@@_strong_prop
+    \int_zero:N      \l_@@_strongdef_int
+
+    \group_begin:
+      \normalfont
+      \clist_map_inline:nn {\strongreset,#1}
+        {
+          ##1
+          \prop_gput_if_new:NxV \g_@@_strong_prop { \f at series } { \l_@@_strongdef_int }
+          \prop_gput:Nxn \g_@@_strong_prop { switch-\int_use:N \l_@@_strongdef_int } { ##1 }
+          \int_incr:N \l_@@_strongdef_int
+        }
+    \group_end:
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\strongenv}
+%    \begin{macrocode}
+\DeclareRobustCommand \strongenv
+  {
+    \@nomath\strongenv
+
+%<debug> \typeout{Strong~ level:~\int_use:N \l_@@_strong_int}
+    \prop_get:NxNT \g_@@_strong_prop { \f at series } \l_@@_strong_tmp_tl
+      {
+        \int_set:Nn \l_@@_strong_int { \l_@@_strong_tmp_tl }
+%<debug> \typeout{Series~ (\f at series)~ detected;~ new~ level:~\int_use:N \l_@@_strong_int}
+      }
+
+    \int_incr:N \l_@@_strong_int
+
+    \prop_get:NxNTF \g_@@_strong_prop { switch-\int_use:N \l_@@_strong_int } \l_@@_strong_switch_tl
+      { \l_@@_strong_switch_tl }
+      {
+        \int_zero:N \l_@@_strong_int
+        \strongreset
+      }
+
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\strong}
+% \begin{macro}{\strongreset}
+%    \begin{macrocode}
+\DeclareTextFontCommand{\strong}{\strongenv}
+\cs_set:Npn \strongreset {}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\reset at font}
+% Ensure nesting resets when necessary:
+%    \begin{macrocode}
+\cs_set:Npn \reset at font
+  {
+    \normalfont
+    \int_zero:N \l_@@_em_int
+    \int_zero:N \l_@@_strong_int
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% Programmer's interface for setting nesting levels:
+%    \begin{macrocode}
+\cs_new:Nn \fontspec_set_em_level:n     { \int_set:Nn \l_@@_em_int     {#1} }
+\cs_new:Nn \fontspec_set_strong_level:n { \int_set:Nn \l_@@_strong_int {#1} }
+%    \end{macrocode}
+%
+% Defaults:
+%    \begin{macrocode}
+\strongfontdeclare{ \bfseries }
+\emfontdeclare{ \emshape, \eminnershape }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%</fontspec>
+%    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/fontspec/fontspec.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fontspec/fontspec.dtx	2017-02-12 23:32:25 UTC (rev 43201)
+++ trunk/Master/texmf-dist/source/latex/fontspec/fontspec.dtx	2017-02-12 23:33:12 UTC (rev 43202)
@@ -14,7 +14,7 @@
 \endpreamble
 \postamble
 ------------------------------------------------
-Copyright 2004--2017 Will Robertson <wspr81 at gmail.com>
+Copyright 2004--2017 Will Robertson <will.robertson at latex-project.org>
 Copyright 2009--2013   Khaled Hosny <khaledhosny at eglug.org>
 
 Distributable under the LaTeX Project Public License, version 1.3c or higher.
@@ -27,7 +27,7 @@
 \endpostamble
 \askforoverwritefalse
 \def\MetaPrefix{-- }
-\generate{\file{fontspec.lua}{\from{fontspec-lua.dtx}{lua}}}
+\generate{\file{fontspec.lua}{\from{fontspec.dtx}{lua}\from{fontspec-lua.dtx}{lua}}}
 \let\MetaPrefix\DoubleperCent
 \ifx\FontspecDebug\undefined\def\FSDEBUG{}\else\def\FSDEBUG{,debug}\fi
 
@@ -54,6 +54,7 @@
   \DTX{fontspec-enc.dtx}
   \DTX{fontspec-math.dtx}
   \DTX{fontspec-closing.dtx}
+  \DTX{fontspec-xfss.dtx}
   \DTX{fontspec-patches.dtx}
 }
 
@@ -78,8 +79,19 @@
 %<fontspec&xetexx>\ProvidesExplPackage{fontspec-xetex}%
 %<fontspec&luatex>\ProvidesExplPackage{fontspec-luatex}%
 %<*fontspec>
-  {2017/01/24}{2.5d}{Font selection for XeLaTeX and LuaLaTeX}
+  {2017/02/12}{2.6}{Font selection for XeLaTeX and LuaLaTeX}
 %</fontspec>
+%<lua>fontspec          = fontspec or {}
+%<lua>local fontspec    = fontspec
+%<lua>fontspec.module   = {
+%<lua>    name          = "fontspec",
+%<lua>    version       = "2.6",
+%<lua>    date          = "2017/02/12",
+%<lua>    description   = "Font selection for XeLaTeX and LuaLaTeX",
+%<lua>    author        = "Khaled Hosny, Philipp Gesang, Will Robertson",
+%<lua>    copyright     = "Khaled Hosny, Philipp Gesang, Will Robertson",
+%<lua>    license       = "LPPL"
+%<lua>}
 %
 %<*driver>
 \ExplSyntaxOff

Modified: trunk/Master/texmf-dist/tex/latex/fontspec/fontspec-luatex.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fontspec/fontspec-luatex.sty	2017-02-12 23:32:25 UTC (rev 43201)
+++ trunk/Master/texmf-dist/tex/latex/fontspec/fontspec-luatex.sty	2017-02-12 23:33:12 UTC (rev 43202)
@@ -22,6 +22,7 @@
 %% fontspec-enc.dtx  (with options: `fontspec,luatex')
 %% fontspec-math.dtx  (with options: `fontspec,luatex')
 %% fontspec-closing.dtx  (with options: `fontspec,luatex')
+%% fontspec-xfss.dtx  (with options: `fontspec,luatex')
 %% fontspec-patches.dtx  (with options: `fontspec,luatex')
 %% ------------------------------------------------
 %% The FONTSPEC package for XeLaTeX/LuaLaTeX
@@ -31,7 +32,7 @@
 \RequirePackage{expl3}
 \RequirePackage{xparse}
 \ProvidesExplPackage{fontspec-luatex}%
-  {2017/01/24}{2.5d}{Font selection for XeLaTeX and LuaLaTeX}
+  {2017/02/12}{2.6}{Font selection for XeLaTeX and LuaLaTeX}
 \bool_new:N \l__fontspec_firsttime_bool
 \bool_new:N \l__fontspec_nobf_bool
 \bool_new:N \l__fontspec_noit_bool
@@ -56,6 +57,7 @@
 \bool_new:N \l__fontspec_never_check_bool
 \bool_new:N \l__fontspec_defining_encoding_bool
 \bool_new:N \l__fontspec_script_exist_bool
+\bool_new:N \g__fontspec_em_normalise_slant_bool
 \int_new:N \l__fontspec_script_int
 \int_new:N \l__fontspec_language_int
 \int_new:N \l__fontspec_strnum_int
@@ -62,6 +64,8 @@
 \int_new:N \l__fontspec_tmp_int
 \int_new:N \l__fontspec_em_int
 \int_new:N \l__fontspec_emdef_int
+\int_new:N \l__fontspec_strong_int
+\int_new:N \l__fontspec_strongdef_int
 \fp_new:N \l__fontspec_tmpa_fp
 \fp_new:N \l__fontspec_tmpb_fp
 \dim_new:N \l__fontspec_tmpa_dim
@@ -102,6 +106,7 @@
 \tl_new:N \l_fontspec_script_tl
 \tl_new:N \l__fontspec_lang_name_tl
 \tl_new:N \l_fontspec_lang_tl
+\tl_new:N  \l__fontspec_mapping_tl
 \tl_new:N  \g__fontspec_hexcol_tl
 \tl_new:N  \g__fontspec_opacity_tl
 \tl_set:Nn \g__fontspec_hexcol_tl {000000}
@@ -642,20 +647,24 @@
  {
   \keys_if_exist:nnF { fontspec / options } {#1}
     { \__fontspec_define_opentype_feature_group:n {#1} }
+
   \keys_if_choice_exist:nnnT {fontspec} {#1} {#2}
     { \__fontspec_warning:nxx {feature-option-overwrite} {#1} {#2} }
-  \__fontspec_define_opentype_feature:nnn {#1}{#2}{#3}
+
+  \exp_args:Nnnx \__fontspec_define_opentype_feature:nnnnn {#1}{#2}{ \__fontspec_strip_plus_minus:n {#3} }{#3}{}
  }
+
+\cs_new:Nn \__fontspec_strip_plus_minus:n { \__fontspec_strip_plus_minus_aux:Nq #1 \q_nil }
+\cs_new:Npn \__fontspec_strip_plus_minus_aux:Nq #1#2 \q_nil
+  { \str_case:nnF {#1} { {+} {#2} {-} {#2} } {#1#2} }
+
 \cs_set_eq:NN \newICUfeature \newopentypefeature % deprecated
 \DeclareDocumentCommand \aliasfontfeature {mm}
  {
   \bool_set_false:N \l__fontspec_alias_bool
 
-  \clist_map_inline:nn
-   { fontspec, fontspec-opentype, fontspec-aat, fontspec-preparse, fontspec-preparse-external,
-     fontspec-preparse-nested, fontspec-renderer }
+  \clist_map_inline:Nn \g__fontspec_all_keyval_modules_clist
    {
-
      \keys_if_exist:nnT {##1} {#1}
       {
         \bool_set_true:N \l__fontspec_alias_bool
@@ -673,16 +682,16 @@
 
   \clist_map_inline:Nn \g__fontspec_all_keyval_modules_clist
    {
-
-     \keys_if_exist:nnT {##1} {#1}
+     \keys_if_exist:nnT { ##1 / #1 } {#2}
       {
         \bool_set_true:N \l__fontspec_alias_bool
-        \keys_define:nn { ##1 / #1 } { #3 .meta:n = {#2} }
+        \keys_define:nn { ##1 / #1 }
+          { #3 .code:n = { \keys_set:nn {##1} { #1 = {#2} } } }
       }
    }
 
   \bool_if:NF \l__fontspec_alias_bool
-    { \__fontspec_warning:nx {rename-feature-not-exist} {#1} }
+    { \__fontspec_warning:nx {rename-feature-not-exist} {#1/#2} }
  }
 \DeclareDocumentCommand \newfontscript {mm}
  {
@@ -1069,7 +1078,8 @@
  }
 \cs_set:Nn \__fontspec_construct_font_call:nnnnnn
  {
-  " \__fontspec_fontname_wrap:n { #1 #2 #3 } #4 #5
+  " \__fontspec_fontname_wrap:n { #1 #2 } #3
+    #4 #5
     \str_if_eq_x:nnF {#6}{} {:#6} "
  }
 \cs_set:Nn \__fontspec_construct_font_call:nn
@@ -1088,7 +1098,7 @@
   }
 \cs_new:Nn \__fontspec_font_is_file:
   {
-    \cs_set:Npn \__fontspec_fontname_wrap:n ##1 { file:\l__fontspec_font_path_tl ##1 }
+    \cs_set:Npn \__fontspec_fontname_wrap:n ##1 { [ \l__fontspec_font_path_tl ##1 ] }
   }
 \cs_new:Nn \__fontspec_set_scriptlang:
  {
@@ -1126,8 +1136,11 @@
   \__fontspec_keys_set_known:nxN {fontspec-renderer} {\l__fontspec_fontfeat_clist,#2}
     \l__fontspec_keys_leftover_clist
   \__fontspec_keys_set_known:nxN {fontspec} {\l__fontspec_keys_leftover_clist} \l__fontspec_keys_leftover_clist
-  \keys_set:nx {fontspec-opentype} {\l__fontspec_keys_leftover_clist}
+  \keys_set:nV {fontspec-opentype} \l__fontspec_keys_leftover_clist
 
+  \tl_if_empty:NF \l__fontspec_mapping_tl
+    { \__fontspec_update_featstr:n { mapping = \l__fontspec_mapping_tl } }
+
   \str_if_eq_x:nnF { \l__fontspec_hexcol_tl \l__fontspec_opacity_tl }
                    { \g__fontspec_hexcol_tl \g__fontspec_opacity_tl }
     { \__fontspec_update_featstr:n { color = \l__fontspec_hexcol_tl\l__fontspec_opacity_tl } }
@@ -1515,7 +1528,10 @@
   \__fontspec_feat_prop_add:nn {#3} {#1\,=\,#2}
   \keys_define:nn {fontspec-opentype}
    {
-    #1/#2 .code:n = { \__fontspec_make_OT_feature:nnn {#3} {#4} {#5} }
+    #1/#2 .code:n =
+      {
+        \__fontspec_make_OT_feature:nnn {#3} {#4} {#5}
+      }
    }
  }
 \cs_new:Nn \__fontspec_feat_off:n {#1Off}
@@ -1556,9 +1572,9 @@
       }
   }
 \cs_generate_variant:Nn \__fontspec_make_OT_feature:nnn {xxx}
-\cs_new:Nn \__fontspec_swap_plus_minus:n { \__fontspec_swap_plus_minus_aux:NNNNN #1 }
-\cs_new:Nn \__fontspec_swap_plus_minus_aux:NNNNN
-  { \str_case:nn {#1} { {+} {-#2#3#4#5} {-} {+#2#3#4#5} } }
+\cs_new:Nn \__fontspec_swap_plus_minus:n { \__fontspec_swap_plus_minus_aux:Nq #1 \q_nil }
+\cs_new:Npn \__fontspec_swap_plus_minus_aux:Nq #1#2 \q_nil
+  { \str_case:nn {#1} { {+} {-#2} {-} {+#2} } }
 \prg_new_conditional:Nnn \__fontspec_check_script:n {TF}
   {
     \bool_if:NTF \l__fontspec_never_check_bool
@@ -2121,7 +2137,7 @@
      \int_to_hex:n { \l__fontspec_tmp_int }
    }
  }
-\__fontspec_keys_define_code:nnn {fontspec} {Mapping}
+\__fontspec_keys_define_code:nnn {fontspec-opentype} {Mapping}
  {
   \str_if_eq:nnTF {#1} {tex-text}
    {
@@ -2207,10 +2223,14 @@
    },
   AutoFakeBold .default:n = {1.5}
 }
-\__fontspec_keys_define_code:nnn {fontspec} {RawFeature}
+\__fontspec_keys_define_code:nnn {fontspec-opentype} {RawFeature}
  {
   \__fontspec_update_featstr:n {#1}
  }
+\__fontspec_keys_define_code:nnn {fontspec-aat} {RawFeature}
+ {
+  \__fontspec_update_featstr:n {#1}
+ }
 
 \__fontspec_feat_prop_add:nn {salt} { Alternate\,=\,$N$ }
 \__fontspec_feat_prop_add:nn {nalt} { Annotation\,=\,$N$ }
@@ -2258,8 +2278,9 @@
 \__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Lowercase}    {onum} {onum} {+lnum,-lnum}
 \__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Uppercase}    {lnum} {lnum} {+onum,-onum}
 \__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {SlashedZero}  {zero} {zero} {}
-\aliasfontfeatureoption {Numbers} {Lowercase} {OldStyle}
-\aliasfontfeatureoption {Numbers} {Uppercase} {Lining}
+\aliasfontfeatureoption {Numbers} {Monospaced} {Tabular}
+\aliasfontfeatureoption {Numbers} {Lowercase}  {OldStyle}
+\aliasfontfeatureoption {Numbers} {Uppercase}  {Lining}
   \__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Arabic} {anum} {anum} {}
 \__fontspec_define_opentype_feature_group:n  {VerticalPosition}
 \__fontspec_define_opentype_feature:nnnnn    {VerticalPosition} {ResetAll} {} {}
@@ -3308,14 +3329,24 @@
  }
 \cs_new_protected:Npn \emfontdeclare #1
   {
-    \prop_clear:N \g__fontspec_em_prop
-    \int_zero:N   \l__fontspec_emdef_int
+    \prop_clear:N    \g__fontspec_em_prop
+    \int_zero:N      \l__fontspec_emdef_int
+    \bool_set_true:N \g__fontspec_em_normalise_slant_bool
+
+    \tl_if_in:nnT {#1} {\slshape}
+      {
+        \tl_if_in:nnT {#1} {\itshape}
+          {
+            \bool_set_false:N \g__fontspec_em_normalise_slant_bool
+          }
+      }
+
     \group_begin:
       \normalfont
       \clist_map_inline:nn {\emreset,#1}
         {
           ##1
-          \prop_gput_if_new:NxV \g__fontspec_em_prop { \f at series/\f at shape } { \l__fontspec_emdef_int }
+          \prop_gput_if_new:NxV \g__fontspec_em_prop { \f at shape } { \l__fontspec_emdef_int }
           \prop_gput:Nxn \g__fontspec_em_prop { switch-\int_use:N \l__fontspec_emdef_int } { ##1 }
           \int_incr:N \l__fontspec_emdef_int
         }
@@ -3324,10 +3355,18 @@
 \DeclareRobustCommand \em
   {
     \@nomath\em
+    \tl_set:Nx \l__fontspec_emshape_query_tl { \f at shape }
 
-    \prop_get:NxNT \g__fontspec_em_prop { \f at series/\f at shape } \l__fontspec_em_tmp_tl
-      { \int_set:Nn \l__fontspec_em_int { \l__fontspec_em_tmp_tl } }
+    \bool_if:NT \g__fontspec_em_normalise_slant_bool
+      {
+        \tl_replace_all:Nnn \l__fontspec_emshape_query_tl {/sl} {/it}
+      }
 
+    \prop_get:NxNT \g__fontspec_em_prop { \l__fontspec_emshape_query_tl } \l__fontspec_em_tmp_tl
+      {
+        \int_set:Nn \l__fontspec_em_int { \l__fontspec_em_tmp_tl }
+      }
+
     \int_incr:N \l__fontspec_em_int
 
     \prop_get:NxNTF \g__fontspec_em_prop { switch-\int_use:N \l__fontspec_em_int } \l__fontspec_em_switch_tl
@@ -3342,9 +3381,53 @@
 \cs_set:Npn \emreset { \upshape }
 \cs_set:Npn \emshape { \itshape }
 \cs_set:Npn \eminnershape { \upshape }
+\cs_new_protected:Npn \strongfontdeclare #1
+  {
+    \prop_clear:N    \g__fontspec_strong_prop
+    \int_zero:N      \l__fontspec_strongdef_int
+
+    \group_begin:
+      \normalfont
+      \clist_map_inline:nn {\strongreset,#1}
+        {
+          ##1
+          \prop_gput_if_new:NxV \g__fontspec_strong_prop { \f at series } { \l__fontspec_strongdef_int }
+          \prop_gput:Nxn \g__fontspec_strong_prop { switch-\int_use:N \l__fontspec_strongdef_int } { ##1 }
+          \int_incr:N \l__fontspec_strongdef_int
+        }
+    \group_end:
+  }
+\DeclareRobustCommand \strongenv
+  {
+    \@nomath\strongenv
+
+    \prop_get:NxNT \g__fontspec_strong_prop { \f at series } \l__fontspec_strong_tmp_tl
+      {
+        \int_set:Nn \l__fontspec_strong_int { \l__fontspec_strong_tmp_tl }
+      }
+
+    \int_incr:N \l__fontspec_strong_int
+
+    \prop_get:NxNTF \g__fontspec_strong_prop { switch-\int_use:N \l__fontspec_strong_int } \l__fontspec_strong_switch_tl
+      { \l__fontspec_strong_switch_tl }
+      {
+        \int_zero:N \l__fontspec_strong_int
+        \strongreset
+      }
+
+  }
+\DeclareTextFontCommand{\strong}{\strongenv}
+\cs_set:Npn \strongreset {}
+\cs_set:Npn \reset at font
+  {
+    \normalfont
+    \int_zero:N \l__fontspec_em_int
+    \int_zero:N \l__fontspec_strong_int
+  }
+\cs_new:Nn \fontspec_set_em_level:n     { \int_set:Nn \l__fontspec_em_int     {#1} }
+\cs_new:Nn \fontspec_set_strong_level:n { \int_set:Nn \l__fontspec_strong_int {#1} }
+\strongfontdeclare{ \bfseries }
 \emfontdeclare{ \emshape, \eminnershape }
-\cs_set:Npn \reset at font { \normalfont \int_zero:N \l__fontspec_em_int }
-\cs_new:Nn \fontspec_set_em_level:n { \int_set:Nn \l__fontspec_em_int {#1} }
 \DeclareRobustCommand{\-}
  {
   \discretionary
@@ -3446,7 +3529,7 @@
   { \addfontfeature{Numbers=Lining} #1 }
  }
 %% ------------------------------------------------
-%% Copyright 2004--2017 Will Robertson <wspr81 at gmail.com>
+%% Copyright 2004--2017 Will Robertson <will.robertson at latex-project.org>
 %% Copyright 2009--2013   Khaled Hosny <khaledhosny at eglug.org>
 %% 
 %% Distributable under the LaTeX Project Public License, version 1.3c or higher.

Modified: trunk/Master/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty	2017-02-12 23:32:25 UTC (rev 43201)
+++ trunk/Master/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty	2017-02-12 23:33:12 UTC (rev 43202)
@@ -22,6 +22,7 @@
 %% fontspec-enc.dtx  (with options: `fontspec,xetexx')
 %% fontspec-math.dtx  (with options: `fontspec,xetexx')
 %% fontspec-closing.dtx  (with options: `fontspec,xetexx')
+%% fontspec-xfss.dtx  (with options: `fontspec,xetexx')
 %% fontspec-patches.dtx  (with options: `fontspec,xetexx')
 %% ------------------------------------------------
 %% The FONTSPEC package for XeLaTeX/LuaLaTeX
@@ -31,7 +32,7 @@
 \RequirePackage{expl3}
 \RequirePackage{xparse}
 \ProvidesExplPackage{fontspec-xetex}%
-  {2017/01/24}{2.5d}{Font selection for XeLaTeX and LuaLaTeX}
+  {2017/02/12}{2.6}{Font selection for XeLaTeX and LuaLaTeX}
 \bool_new:N \l__fontspec_firsttime_bool
 \bool_new:N \l__fontspec_nobf_bool
 \bool_new:N \l__fontspec_noit_bool
@@ -56,6 +57,7 @@
 \bool_new:N \l__fontspec_never_check_bool
 \bool_new:N \l__fontspec_defining_encoding_bool
 \bool_new:N \l__fontspec_script_exist_bool
+\bool_new:N \g__fontspec_em_normalise_slant_bool
 \int_new:N \l__fontspec_script_int
 \int_new:N \l__fontspec_language_int
 \int_new:N \l__fontspec_strnum_int
@@ -62,6 +64,8 @@
 \int_new:N \l__fontspec_tmp_int
 \int_new:N \l__fontspec_em_int
 \int_new:N \l__fontspec_emdef_int
+\int_new:N \l__fontspec_strong_int
+\int_new:N \l__fontspec_strongdef_int
 \fp_new:N \l__fontspec_tmpa_fp
 \fp_new:N \l__fontspec_tmpb_fp
 \dim_new:N \l__fontspec_tmpa_dim
@@ -102,6 +106,7 @@
 \tl_new:N \l_fontspec_script_tl
 \tl_new:N \l__fontspec_lang_name_tl
 \tl_new:N \l_fontspec_lang_tl
+\tl_new:N  \l__fontspec_mapping_tl
 \tl_new:N  \g__fontspec_hexcol_tl
 \tl_new:N  \g__fontspec_opacity_tl
 \tl_set:Nn \g__fontspec_hexcol_tl {000000}
@@ -639,20 +644,24 @@
  {
   \keys_if_exist:nnF { fontspec / options } {#1}
     { \__fontspec_define_opentype_feature_group:n {#1} }
+
   \keys_if_choice_exist:nnnT {fontspec} {#1} {#2}
     { \__fontspec_warning:nxx {feature-option-overwrite} {#1} {#2} }
-  \__fontspec_define_opentype_feature:nnn {#1}{#2}{#3}
+
+  \exp_args:Nnnx \__fontspec_define_opentype_feature:nnnnn {#1}{#2}{ \__fontspec_strip_plus_minus:n {#3} }{#3}{}
  }
+
+\cs_new:Nn \__fontspec_strip_plus_minus:n { \__fontspec_strip_plus_minus_aux:Nq #1 \q_nil }
+\cs_new:Npn \__fontspec_strip_plus_minus_aux:Nq #1#2 \q_nil
+  { \str_case:nnF {#1} { {+} {#2} {-} {#2} } {#1#2} }
+
 \cs_set_eq:NN \newICUfeature \newopentypefeature % deprecated
 \DeclareDocumentCommand \aliasfontfeature {mm}
  {
   \bool_set_false:N \l__fontspec_alias_bool
 
-  \clist_map_inline:nn
-   { fontspec, fontspec-opentype, fontspec-aat, fontspec-preparse, fontspec-preparse-external,
-     fontspec-preparse-nested, fontspec-renderer }
+  \clist_map_inline:Nn \g__fontspec_all_keyval_modules_clist
    {
-
      \keys_if_exist:nnT {##1} {#1}
       {
         \bool_set_true:N \l__fontspec_alias_bool
@@ -670,16 +679,16 @@
 
   \clist_map_inline:Nn \g__fontspec_all_keyval_modules_clist
    {
-
-     \keys_if_exist:nnT {##1} {#1}
+     \keys_if_exist:nnT { ##1 / #1 } {#2}
       {
         \bool_set_true:N \l__fontspec_alias_bool
-        \keys_define:nn { ##1 / #1 } { #3 .meta:n = {#2} }
+        \keys_define:nn { ##1 / #1 }
+          { #3 .code:n = { \keys_set:nn {##1} { #1 = {#2} } } }
       }
    }
 
   \bool_if:NF \l__fontspec_alias_bool
-    { \__fontspec_warning:nx {rename-feature-not-exist} {#1} }
+    { \__fontspec_warning:nx {rename-feature-not-exist} {#1/#2} }
  }
 \DeclareDocumentCommand \newfontscript {mm}
  {
@@ -1065,7 +1074,8 @@
  }
 \cs_set:Nn \__fontspec_construct_font_call:nnnnnn
  {
-  " \__fontspec_fontname_wrap:n { #1 #2 #3 } #4 #5
+  " \__fontspec_fontname_wrap:n { #1 #2 #3 }
+    #4 #5
     \str_if_eq_x:nnF {#6}{} {:#6} "
  }
 \cs_set:Nn \__fontspec_construct_font_call:nn
@@ -1124,13 +1134,18 @@
   \__fontspec_keys_set_known:nxN {fontspec} {\l__fontspec_keys_leftover_clist} \l__fontspec_keys_leftover_clist
   \bool_if:NTF \l__fontspec_ot_bool
     {
-      \keys_set:nx {fontspec-opentype} {\l__fontspec_keys_leftover_clist}
+    %  \tracingall
+      \keys_set:nV {fontspec-opentype} \l__fontspec_keys_leftover_clist
+    %  \EROROR
     }
     {
       \bool_if:NT \l__fontspec_atsui_bool
-        { \keys_set:nx {fontspec-aat} {\l__fontspec_keys_leftover_clist} }
+        { \keys_set:nV {fontspec-aat} \l__fontspec_keys_leftover_clist }
     }
 
+  \tl_if_empty:NF \l__fontspec_mapping_tl
+    { \__fontspec_update_featstr:n { mapping = \l__fontspec_mapping_tl } }
+
   \str_if_eq_x:nnF { \l__fontspec_hexcol_tl \l__fontspec_opacity_tl }
                    { \g__fontspec_hexcol_tl \g__fontspec_opacity_tl }
     { \__fontspec_update_featstr:n { color = \l__fontspec_hexcol_tl\l__fontspec_opacity_tl } }
@@ -1546,7 +1561,10 @@
   \__fontspec_feat_prop_add:nn {#3} {#1\,=\,#2}
   \keys_define:nn {fontspec-opentype}
    {
-    #1/#2 .code:n = { \__fontspec_make_OT_feature:nnn {#3} {#4} {#5} }
+    #1/#2 .code:n =
+      {
+        \__fontspec_make_OT_feature:nnn {#3} {#4} {#5}
+      }
    }
  }
 \cs_new:Nn \__fontspec_feat_off:n {#1Off}
@@ -1587,9 +1605,9 @@
       }
   }
 \cs_generate_variant:Nn \__fontspec_make_OT_feature:nnn {xxx}
-\cs_new:Nn \__fontspec_swap_plus_minus:n { \__fontspec_swap_plus_minus_aux:NNNNN #1 }
-\cs_new:Nn \__fontspec_swap_plus_minus_aux:NNNNN
-  { \str_case:nn {#1} { {+} {-#2#3#4#5} {-} {+#2#3#4#5} } }
+\cs_new:Nn \__fontspec_swap_plus_minus:n { \__fontspec_swap_plus_minus_aux:Nq #1 \q_nil }
+\cs_new:Npn \__fontspec_swap_plus_minus_aux:Nq #1#2 \q_nil
+  { \str_case:nn {#1} { {+} {-#2} {-} {+#2} } }
 \prg_new_conditional:Nnn \__fontspec_check_script:n {TF}
   {
     \bool_if:NTF \l__fontspec_never_check_bool
@@ -2240,10 +2258,14 @@
      \int_to_hex:n { \l__fontspec_tmp_int }
    }
  }
-\__fontspec_keys_define_code:nnn {fontspec} {Mapping}
- {
-  \__fontspec_update_featstr:n { mapping = #1 }
- }
+\__fontspec_keys_define_code:nnn {fontspec-aat} {Mapping}
+  {
+    \tl_set:Nn \l__fontspec_mapping_tl { #1 }
+  }
+\__fontspec_keys_define_code:nnn {fontspec-opentype} {Mapping}
+  {
+    \tl_set:Nn \l__fontspec_mapping_tl { #1 }
+  }
 \__fontspec_keys_define_code:nnn {fontspec} {Weight}
  {
   \__fontspec_update_featstr:n{weight=#1}
@@ -2338,10 +2360,14 @@
    },
   AutoFakeBold .default:n = {1.5}
 }
-\__fontspec_keys_define_code:nnn {fontspec} {RawFeature}
+\__fontspec_keys_define_code:nnn {fontspec-opentype} {RawFeature}
  {
   \__fontspec_update_featstr:n {#1}
  }
+\__fontspec_keys_define_code:nnn {fontspec-aat} {RawFeature}
+ {
+  \__fontspec_update_featstr:n {#1}
+ }
 
 \__fontspec_feat_prop_add:nn {salt} { Alternate\,=\,$N$ }
 \__fontspec_feat_prop_add:nn {nalt} { Annotation\,=\,$N$ }
@@ -2360,7 +2386,11 @@
 \__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Discretionary} {dlig} {dlig} {}
 \__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Contextual}    {clig} {clig} {}
 \__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Historic}      {hlig} {hlig} {}
-\__fontspec_define_opentype_onreset:nnnnn {Ligatures} {TeX} {} { mapping = tex-text } {}
+\keys_define:nn {fontspec-opentype}
+  {
+    Ligatures / TeX .code:n = { \tl_set:Nn \l__fontspec_mapping_tl {tex-text} },
+    Ligatures / TeXReset .code:n = { \tl_clear:N \l__fontspec_mapping_tl },
+  }
 \__fontspec_define_opentype_feature_group:n {Letters}
 \__fontspec_define_opentype_feature:nnnnn   {Letters} {ResetAll} {} {}
   {
@@ -2389,8 +2419,9 @@
 \__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Lowercase}    {onum} {onum} {+lnum,-lnum}
 \__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Uppercase}    {lnum} {lnum} {+onum,-onum}
 \__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {SlashedZero}  {zero} {zero} {}
-\aliasfontfeatureoption {Numbers} {Lowercase} {OldStyle}
-\aliasfontfeatureoption {Numbers} {Uppercase} {Lining}
+\aliasfontfeatureoption {Numbers} {Monospaced} {Tabular}
+\aliasfontfeatureoption {Numbers} {Lowercase}  {OldStyle}
+\aliasfontfeatureoption {Numbers} {Uppercase}  {Lining}
 \__fontspec_define_opentype_feature_group:n  {VerticalPosition}
 \__fontspec_define_opentype_feature:nnnnn    {VerticalPosition} {ResetAll} {} {}
   {
@@ -3179,7 +3210,7 @@
  {
   Ligatures / TeX .code:n =
    {
-    \__fontspec_update_featstr:n { mapping = tex-text }
+     \tl_set:Nn \l__fontspec_mapping_tl { tex-text }
    }
  }
 \__fontspec_define_aat_feature_group:n {Letters}
@@ -3574,14 +3605,24 @@
  }
 \cs_new_protected:Npn \emfontdeclare #1
   {
-    \prop_clear:N \g__fontspec_em_prop
-    \int_zero:N   \l__fontspec_emdef_int
+    \prop_clear:N    \g__fontspec_em_prop
+    \int_zero:N      \l__fontspec_emdef_int
+    \bool_set_true:N \g__fontspec_em_normalise_slant_bool
+
+    \tl_if_in:nnT {#1} {\slshape}
+      {
+        \tl_if_in:nnT {#1} {\itshape}
+          {
+            \bool_set_false:N \g__fontspec_em_normalise_slant_bool
+          }
+      }
+
     \group_begin:
       \normalfont
       \clist_map_inline:nn {\emreset,#1}
         {
           ##1
-          \prop_gput_if_new:NxV \g__fontspec_em_prop { \f at series/\f at shape } { \l__fontspec_emdef_int }
+          \prop_gput_if_new:NxV \g__fontspec_em_prop { \f at shape } { \l__fontspec_emdef_int }
           \prop_gput:Nxn \g__fontspec_em_prop { switch-\int_use:N \l__fontspec_emdef_int } { ##1 }
           \int_incr:N \l__fontspec_emdef_int
         }
@@ -3590,10 +3631,18 @@
 \DeclareRobustCommand \em
   {
     \@nomath\em
+    \tl_set:Nx \l__fontspec_emshape_query_tl { \f at shape }
 
-    \prop_get:NxNT \g__fontspec_em_prop { \f at series/\f at shape } \l__fontspec_em_tmp_tl
-      { \int_set:Nn \l__fontspec_em_int { \l__fontspec_em_tmp_tl } }
+    \bool_if:NT \g__fontspec_em_normalise_slant_bool
+      {
+        \tl_replace_all:Nnn \l__fontspec_emshape_query_tl {/sl} {/it}
+      }
 
+    \prop_get:NxNT \g__fontspec_em_prop { \l__fontspec_emshape_query_tl } \l__fontspec_em_tmp_tl
+      {
+        \int_set:Nn \l__fontspec_em_int { \l__fontspec_em_tmp_tl }
+      }
+
     \int_incr:N \l__fontspec_em_int
 
     \prop_get:NxNTF \g__fontspec_em_prop { switch-\int_use:N \l__fontspec_em_int } \l__fontspec_em_switch_tl
@@ -3608,9 +3657,53 @@
 \cs_set:Npn \emreset { \upshape }
 \cs_set:Npn \emshape { \itshape }
 \cs_set:Npn \eminnershape { \upshape }
+\cs_new_protected:Npn \strongfontdeclare #1
+  {
+    \prop_clear:N    \g__fontspec_strong_prop
+    \int_zero:N      \l__fontspec_strongdef_int
+
+    \group_begin:
+      \normalfont
+      \clist_map_inline:nn {\strongreset,#1}
+        {
+          ##1
+          \prop_gput_if_new:NxV \g__fontspec_strong_prop { \f at series } { \l__fontspec_strongdef_int }
+          \prop_gput:Nxn \g__fontspec_strong_prop { switch-\int_use:N \l__fontspec_strongdef_int } { ##1 }
+          \int_incr:N \l__fontspec_strongdef_int
+        }
+    \group_end:
+  }
+\DeclareRobustCommand \strongenv
+  {
+    \@nomath\strongenv
+
+    \prop_get:NxNT \g__fontspec_strong_prop { \f at series } \l__fontspec_strong_tmp_tl
+      {
+        \int_set:Nn \l__fontspec_strong_int { \l__fontspec_strong_tmp_tl }
+      }
+
+    \int_incr:N \l__fontspec_strong_int
+
+    \prop_get:NxNTF \g__fontspec_strong_prop { switch-\int_use:N \l__fontspec_strong_int } \l__fontspec_strong_switch_tl
+      { \l__fontspec_strong_switch_tl }
+      {
+        \int_zero:N \l__fontspec_strong_int
+        \strongreset
+      }
+
+  }
+\DeclareTextFontCommand{\strong}{\strongenv}
+\cs_set:Npn \strongreset {}
+\cs_set:Npn \reset at font
+  {
+    \normalfont
+    \int_zero:N \l__fontspec_em_int
+    \int_zero:N \l__fontspec_strong_int
+  }
+\cs_new:Nn \fontspec_set_em_level:n     { \int_set:Nn \l__fontspec_em_int     {#1} }
+\cs_new:Nn \fontspec_set_strong_level:n { \int_set:Nn \l__fontspec_strong_int {#1} }
+\strongfontdeclare{ \bfseries }
 \emfontdeclare{ \emshape, \eminnershape }
-\cs_set:Npn \reset at font { \normalfont \int_zero:N \l__fontspec_em_int }
-\cs_new:Nn \fontspec_set_em_level:n { \int_set:Nn \l__fontspec_em_int {#1} }
 \DeclareRobustCommand{\-}
  {
   \discretionary
@@ -3712,7 +3805,7 @@
   { \addfontfeature{Numbers=Lining} #1 }
  }
 %% ------------------------------------------------
-%% Copyright 2004--2017 Will Robertson <wspr81 at gmail.com>
+%% Copyright 2004--2017 Will Robertson <will.robertson at latex-project.org>
 %% Copyright 2009--2013   Khaled Hosny <khaledhosny at eglug.org>
 %% 
 %% Distributable under the LaTeX Project Public License, version 1.3c or higher.

Modified: trunk/Master/texmf-dist/tex/latex/fontspec/fontspec.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fontspec/fontspec.lua	2017-02-12 23:32:25 UTC (rev 43201)
+++ trunk/Master/texmf-dist/tex/latex/fontspec/fontspec.lua	2017-02-12 23:33:12 UTC (rev 43202)
@@ -4,6 +4,7 @@
 -- 
 --  The original source files were:
 -- 
+--  fontspec.dtx  (with options: `lua')
 --  fontspec-lua.dtx  (with options: `lua')
 --  ------------------------------------------------
 --  The FONTSPEC package for XeLaTeX/LuaLaTeX
@@ -14,14 +15,13 @@
 local fontspec    = fontspec
 fontspec.module   = {
     name          = "fontspec",
-    version       = "2.5a",
-    date          = "2016/02/01",
-    description   = "Advanced font selection for LuaLaTeX.",
+    version       = "2.6",
+    date          = "2017/02/12",
+    description   = "Font selection for XeLaTeX and LuaLaTeX",
     author        = "Khaled Hosny, Philipp Gesang, Will Robertson",
     copyright     = "Khaled Hosny, Philipp Gesang, Will Robertson",
     license       = "LPPL"
 }
-
 local err, warn, info, log = luatexbase.provides_module(fontspec.module)
 fontspec.log     = log  or (function (s) luatexbase.module_info("fontspec", s)    end)
 fontspec.warning = warn or (function (s) luatexbase.module_warning("fontspec", s) end)
@@ -71,7 +71,7 @@
     end
 end
 --  ------------------------------------------------
---  Copyright 2004--2017 Will Robertson <wspr81 at gmail.com>
+--  Copyright 2004--2017 Will Robertson <will.robertson at latex-project.org>
 --  Copyright 2009--2013   Khaled Hosny <khaledhosny at eglug.org>
 --  
 --  Distributable under the LaTeX Project Public License, version 1.3c or higher.

Modified: trunk/Master/texmf-dist/tex/latex/fontspec/fontspec.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fontspec/fontspec.sty	2017-02-12 23:32:25 UTC (rev 43201)
+++ trunk/Master/texmf-dist/tex/latex/fontspec/fontspec.sty	2017-02-12 23:33:12 UTC (rev 43202)
@@ -13,7 +13,7 @@
 \RequirePackage{expl3}
 \RequirePackage{xparse}
 \ProvidesExplPackage{fontspec}%
-  {2017/01/24}{2.5d}{Font selection for XeLaTeX and LuaLaTeX}
+  {2017/02/12}{2.6}{Font selection for XeLaTeX and LuaLaTeX}
 \sys_if_engine_luatex:T
   { \RequirePackage{luaotfload}
     \directlua{require("fontspec")}
@@ -27,7 +27,7 @@
  }
 \msg_fatal:nn {fontspec} {cannot-use-pdftex}
 %% ------------------------------------------------
-%% Copyright 2004--2017 Will Robertson <wspr81 at gmail.com>
+%% Copyright 2004--2017 Will Robertson <will.robertson at latex-project.org>
 %% Copyright 2009--2013   Khaled Hosny <khaledhosny at eglug.org>
 %% 
 %% Distributable under the LaTeX Project Public License, version 1.3c or higher.



More information about the tex-live-commits mailing list