diff options
Diffstat (limited to 'macros/latex/contrib/fontspec/fontspec-code-xfss.dtx')
-rw-r--r-- | macros/latex/contrib/fontspec/fontspec-code-xfss.dtx | 290 |
1 files changed, 290 insertions, 0 deletions
diff --git a/macros/latex/contrib/fontspec/fontspec-code-xfss.dtx b/macros/latex/contrib/fontspec/fontspec-code-xfss.dtx new file mode 100644 index 0000000000..4f1bdd2d56 --- /dev/null +++ b/macros/latex/contrib/fontspec/fontspec-code-xfss.dtx @@ -0,0 +1,290 @@ +%%^^A%% fontspec-code-xfss.dtx -- part of FONTSPEC <wspr.io/fontspec> + +% \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@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 } +\cs_new:Nn \@@_merge_default_shapes: + { + \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} + } +\@@_merge_default_shapes: +% \end{macrocode} +% +% \begin{macro}{\@@_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 \@@_merge_shape:n + { + \@@_if_merge_shape:nTF {#1} + { \fontshape { \tl_use:c { \@@_shape_merge:nn {\f@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_lazy_and:nnTF + { \tl_if_exist_p:c { \@@_shape_merge:nn {\f@shape} {#1} } } + { + \cs_if_exist_p:c + { + \f@encoding/\f@family/\f@series/ + \tl_use:c { \@@_shape_merge:nn {\f@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@math@alphabet\itshape\mathit + \@@_merge_shape:n\itdefault + } +\DeclareRobustCommand \slshape + { + \not@math@alphabet\slshape\relax + \@@_merge_shape:n\sldefault + } +\DeclareRobustCommand \scshape + { + \not@math@alphabet\scshape\relax + \@@_merge_shape:n\scdefault + } +\DeclareRobustCommand \upshape + { + \not@math@alphabet\upshape\relax + \@@_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_gclear:N \g_@@_em_prop + \int_zero:N \l_@@_emdef_int + \bool_gset_true:N \g_@@_em_normalise_slant_bool + + \tl_if_in:nnT {#1} {\slshape} + { + \tl_if_in:nnT {#1} {\itshape} + { + \bool_gset_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@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@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_gclear: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@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@series } \l_@@_strong_tmp_tl + { + \int_set:Nn \l_@@_strong_int { \l_@@_strong_tmp_tl } +%<debug> \typeout{Series~ (\f@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@font} +% Ensure nesting resets when necessary: +% \begin{macrocode} +\cs_set:Npn \reset@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} + + +\endinput + +% /© +% ------------------------------------------------ +% The FONTSPEC package <wspr.io/fontspec> +% ------------------------------------------------ +% Copyright 2004-2019 Will Robertson, LPPL "maintainer" +% Copyright 2009-2015 Khaled Hosny +% Copyright 2013 Philipp Gesang +% Copyright 2013-2016 Joseph Wright +% ------------------------------------------------ +% This package is free software and may be redistributed and/or modified under +% the conditions of the LaTeX Project Public License, version 1.3c or higher +% (your choice): <http://www.latex-project.org/lppl/>. +% ------------------------------------------------ +% ©/ |