__HEADER__(Grouping theorems for easier customization.)


\ExplSyntaxOn

\RequirePackage{amsthm}
\RequirePackage{thmtools}



\cs_new:Nn \declaretheorem:nn
{
  \declaretheorem [ #1 ] { #2 }
}

\cs_generate_variant:Nn \declaretheorem:nn {V V}


\keys_define:nn { groupthm / theoremgroup }
  {
    postname     .tl_set:N   = \l_groupthm_postname_tl,
    prename      .tl_set:N   = \l_groupthm_prename_tl,
    mapname      .tl_set:N   = \l_groupthm_mapname_tl,
    thmtools     .tl_set:N   = \l_groupthm_thmtools_tl
  }


\clist_new:N __PACKAGE_MACRO__(thmtools_args)

\keys_define:nn { groupthm / groupedtheorem }
{
  thmtools       .clist_set:N    = __PACKAGE_MACRO__(thmtools_args_clist),
  group          .clist_set:N    = __PACKAGE_MACRO__(groups_clist),
  name           .tl_set:N       = __PACKAGE_MACRO__(theorem_name_tl),
  name           .default:n      = \q_no_value
}

\NewDocumentCommand{\NewGroupedTheorem}{o m}
{
  \keys_set:nn { groupthm / groupedtheorem } { #1 }
  \RemoveFromHook
  \UseHook
  

  % Construct name
  \str_new:N \__name_str
  \str_set:Nx \__name_str
    {
      \quark_if_no_value:NTF __PACKAGE_MACRO__(theorem_name_tl)
        {
          \text_titlecase_first:n {#2}
        }
        {
          \tl_use:N __PACKAGE_MACRO__(theorem_name_tl)
        }
    }

  % Process groups here, adding to the hooks for prename, postname, mapname, thmtools
  % mapname currently not implemented

%  \clist_new:N __PACKAGE_MACRO__(mapname_clist)
%  \clist_set:N

    \str_put_left:Nx \__name_str
      {
        \UseHook { groupthm / prename }
      }
    \str_put_right:Nx \__name_str
      {
        \UseHook { groupthm / postname }
      }

  \declaretheorem:VV
  {
    __PACKAGE_MACRO__(thmtools_args_clist)
  }
  { \__name_str }
}

\cs_new: