% Document-class detection and compatibility helpers for the layout subsystem.

\makeatletter
\providecommand{\LayoutCurrentClass}{unknown}
\@ifclassloaded{beamer}{\renewcommand{\LayoutCurrentClass}{beamer}}{}
\@ifclassloaded{book}{\renewcommand{\LayoutCurrentClass}{book}}{}
\@ifclassloaded{ctexbook}{\renewcommand{\LayoutCurrentClass}{book}}{}
\@ifclassloaded{report}{\renewcommand{\LayoutCurrentClass}{report}}{}
\@ifclassloaded{ctexrep}{\renewcommand{\LayoutCurrentClass}{report}}{}
\@ifclassloaded{article}{\renewcommand{\LayoutCurrentClass}{article}}{}
\@ifclassloaded{ctexart}{\renewcommand{\LayoutCurrentClass}{article}}{}
\makeatother

\ExplSyntaxOn

\clist_new:N \l__layout_targets_clist
\tl_new:N \l__layout_current_class_tl

\cs_new_protected:Npn \__layout_set_current_class:
  { \tl_set:Nx \l__layout_current_class_tl { \LayoutCurrentClass } }

\prg_new_conditional:Npnn \__layout_targets_allow_current:n #1 { TF }
  {
    \__layout_set_current_class:
    \clist_set:Nn \l__layout_targets_clist {#1}

    \clist_if_in:NnTF \l__layout_targets_clist { all }
      { \prg_return_true: }
      {
        \str_case:VnF \l__layout_current_class_tl
          {
            { article }
              {
                \clist_if_in:NnTF \l__layout_targets_clist { article }
                  { \prg_return_true: }
                  {
                    \clist_if_in:NnTF \l__layout_targets_clist { all-paper }
                      { \prg_return_true: }
                      { \prg_return_false: }
                  }
              }
            { report }
              {
                \clist_if_in:NnTF \l__layout_targets_clist { report }
                  { \prg_return_true: }
                  {
                    \clist_if_in:NnTF \l__layout_targets_clist { all-paper }
                      { \prg_return_true: }
                      { \prg_return_false: }
                  }
              }
            { book }
              {
                \clist_if_in:NnTF \l__layout_targets_clist { book }
                  { \prg_return_true: }
                  {
                    \clist_if_in:NnTF \l__layout_targets_clist { all-paper }
                      { \prg_return_true: }
                      { \prg_return_false: }
                  }
              }
            { beamer }
              {
                \clist_if_in:NnTF \l__layout_targets_clist { beamer }
                  { \prg_return_true: }
                  { \prg_return_false: }
              }
            { unknown }
              {
                \clist_if_in:NnTF \l__layout_targets_clist { unknown }
                  { \prg_return_true: }
                  { \prg_return_false: }
              }
          }
          { \prg_return_false: }
      }
  }

\ExplSyntaxOff
