%%^^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{macrocode}
\providecommand*\scitdefault{\scdefault\itdefault}
\providecommand*\scsldefault{\scdefault\sldefault}
\providecommand*\scswdefault{\scdefault\swdefault}
%    \end{macrocode}
% \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 \shapedefault\scdefault    } {\scdefault}
    \tl_const:cn { \@@_shape_merge:nn \itdefault   \scdefault    } {\scitdefault}
    \tl_const:cn { \@@_shape_merge:nn \sldefault   \scdefault    } {\scsldefault}
    \tl_const:cn { \@@_shape_merge:nn \swdefault   \scdefault    } {\scswdefault}
    \tl_const:cn { \@@_shape_merge:nn \scdefault   \itdefault    } {\scitdefault}
    \tl_const:cn { \@@_shape_merge:nn \scdefault   \sldefault    } {\scsldefault}
    \tl_const:cn { \@@_shape_merge:nn \scdefault   \swdefault    } {\scswdefault}
    \tl_const:cn { \@@_shape_merge:nn \scsldefault \itdefault    } {\scitdefault}
    \tl_const:cn { \@@_shape_merge:nn \scitdefault \sldefault    } {\scsldefault}
    \tl_const:cn { \@@_shape_merge:nn \scitdefault \shapedefault } {\scdefault}
    \tl_const:cn { \@@_shape_merge:nn \scsldefault \shapedefault } {\scdefault}
  }
\@@_merge_default_shapes:
%    \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}
%
%
%    \begin{macrocode}
\cs_set_eq:NN \emfontdeclare \DeclareEmphSequence
%    \end{macrocode}
%
%
%
%
% \subsection{Strong emphasis}
%
% \begin{macro}{\strongfontdeclare}
%    \begin{macrocode}
\cs_set_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_@@_strong_int
  }
%    \end{macrocode}
% \end{macro}
%
% Programmer's interface for setting nesting levels:
%    \begin{macrocode}
\cs_new:Nn \fontspec_set_strong_level:n { \int_set:Nn \l_@@_strong_int {#1} }
%    \end{macrocode}
%
% Defaults:
%    \begin{macrocode}
\strongfontdeclare{ \bfseries }
%    \end{macrocode}
%
%    \begin{macrocode}
%</fontspec>
%    \end{macrocode}


\endinput

% /©
% ------------------------------------------------
% The FONTSPEC package  <wspr.io/fontspec>
% ------------------------------------------------
% Copyright  2004-2022  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/>.
% ------------------------------------------------
% ©/
