%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Copyright © 2022 Maximilian Keßler
% 
% This work may be distributed and/or modified
% 
% 1. under the LaTeX Project Public License and/or
% 2. under the GNU General Public License
% 
% Distribution under conditions of the LaTeX Project Public License,
% requires either version 1.3 of this license or (at your option)
% any later version.
% The latest version of this license is in
%    http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
% 
% This work has the LPPL maintenance status \`maintained'.
% 
% The Current Maintainer of this work is Maximilian Keßler.
% 
% 
% Distribution under the GNU General Public License requires either
% version 3 or (at your opinion) any later version.
% 
% This package has been generated by PyTeX, available at
%    https://github.com/kesslermaximilian/PyTeX
% and built from source file 'categories.pysty3'.
% It is STRONGLY DISCOURAGED to edit this source file directly, since local
% changes will not be versioned by Git and overwritten by the next build. Always
% edit the source file and build the package again.
% 
% Build details:
%   PyTeX version: v1.2.0-29-ged64948 (commit ed64948)
%   Source code version: v2.8-29-g275bc70 (commit 275bc70)
% 
% This LaTeX package is free software and is dual-licensed
% under the LPPLv1.3c and the GPLv3 licenses.
% You may use it freely for your purposes.
% The latest version of the package sources can be obtained
% via GitLab under
%    https://gitlab.com/latexci/packages/LatexPackages
% The latest version of the built packages can be obtained via GitLab under
%    https://gitlab.com/latexci/packages/LatexPackagesBuild
% For further information see the urls above.
% Reportings of bugs, suggestions and improvements are welcome, see the README
% at the Git repository for further information.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\ProvidesExplPackage{mkessler-categories}{2022/01/30}{2.8-29-g275bc70}{Definitions of categories with automatic indexing}

%% Wrapper commands specific for defining categories

\RequirePackage{mkessler-symbindex}
\RequirePackage{translator}
\RequirePackage{amsmath}

\usedictionary{translator-mathematical-categories-dictionary}

\NewDocumentCommand{\category}{ m }
  {
    \operatorname{\textbf{#1}}
  }


\NewDocumentCommand{\DeclareCategory}{ O{} m }
  {
    \DeclareSymbol[group = categories, #1]{#2}
  }


\NewDocumentCommand{\DeclareSimpleCategory}{ o m o}
  {
    \IfValueTF{#1}
      {
        \IfValueTF{#3}
        {
          \DeclareCategory[operator = \category, description = #3, #1]{#2}
        }
        {
          \DeclareCategory[operator = \category, #1]{#2}
        }
      }
      {
        \IfValueTF{#3}
        {
          \DeclareCategory[operator = \category, description = #3]{#2}
        }
        {
          \DeclareCategory[operator = \category]{#2}
        }
      }
  }


\NewDocumentCommand{\MakeCategoryIndex}{ }
  {
    \printindex[categories]
  }

\makeindex
  [
    name = categories,
    title = \translate{Index~of~categories}
  ]


%%%% Categories
\DeclareSimpleCategory
  { Top }
  [
    \translate{Top~(Category~description)}
  ]
\DeclareSimpleCategory
  { hTop }
  [
    \translate{hTop~(Category~description)}
  ]
\DeclareSimpleCategory
  { Set }
  [
    \translate{Set~(Category~description)}
  ]
\DeclareSimpleCategory
  { CHaus }
  [
    \translate{CHaus~(Category~description)}
  ]
\DeclareSimpleCategory
  { Grp }
  [
    \translate{Grp~(Category~description)}
  ]
\DeclareSimpleCategory
  { Ab }
  [
    \translate{Ab~(Category~description)}
  ]
\DeclareSimpleCategory
  { CRing }
  [
    \translate{CRing~(Category~description)}
  ]
\DeclareSimpleCategory
  { Ring }
  [
    \translate{Ring~(Category~description)}
  ]
\DeclareSimpleCategory
  [
    defaultargs = _k
  ]
  { Vect }
  [
    \translate{Vect~(Category~description)}
  ]
\DeclareSimpleCategory
  { Cat }
  [
    \translate{Cat~(Category~description)}
  ]
\DeclareSimpleCategory
  [
    defaultargs = _R
  ]
  { Mod }
  [
    \translate{Mod~(Category~description)}
  ]
\DeclareSimpleCategory
  [
    defaultargs = _k
  ]
  { Alg }
  [
    \translate{Alg~(Category~description)}
  ]
\DeclareSimpleCategory
  { Field }
  [
    \translate{Field~(Category~description)}
  ]
\DeclareSimpleCategory
  [
    defaultargs = _k
  ]
  { AffVar }
  [
    \translate{AffVar~(Category~description)}
  ]

\DeclareSimpleCategory
  { Sch }
  [
    \translate{Sch~(Category~description)}
  ]
\DeclareSimpleCategory
  { GrAb }
  [
    \translate{GrAb~(Category~description)}
  ]
\DeclareCategory
  [
    operator = \operatorname,
    formula = \Delta,
    ordered = Ordinal,
    description = \translate{Ordinal ~ number ~ category ~ (Category ~ description)}
  ]
  {OrdCat}