\NeedsTeXFormat{LaTeX2e}[2018-04-01]
\ProvidesPackage{dlrg}[2025/03/15 v1.1.0 Kommandos fuer die DLRG]

% ********************************************************************
% * Paketoptionen                                                    *
% ********************************************************************

% Abhängigkeiten
% ********************************************************************
\RequirePackage{pgfopts}
\RequirePackage{xifthen}

% Boolesche Optionen
% ********************************************************************
%\newboolean{dlrg@boolwert}
\newboolean{dlrg@debug}

% Standardwerte
% ********************************************************************
%\newcommand{\dlrg@wert}{Standard}
\newcommand{\dlrg@typ}{} % Für Kompatibilitätsmoduss
\newcommand{\dlrg@module}{}
\newcommand{\dlrg@sprache}{}

% Definition der Paketoptionen
% ********************************************************************
\pgfkeys{
    /dlrg/.cd,
    module/.store in=\dlrg@module,
    typ/.store in=\dlrg@typ,
    sprache/.store in=\dlrg@sprache,
    debug/.value forbidden,
    debug/.code=\setboolean{dlrg@debug}{true},
    .unknown/.code={}, % Unbekannte Optionen ignorieren.
}

% Frühe Paketoptionen verarbeiten (etwa die zu ladenden Module und den
% Typ des Dokuments)
% ********************************************************************
\ProcessPgfPackageOptions{/dlrg}


% ********************************************************************
% * Basisfunktionen und deren Abhängigkeiten                         *
% ********************************************************************

% Fehlerbehandlung und -ausgabe
% ********************************************************************
\newcommand{\swarnung}[1]{\PackageWarning{dlrg}{#1}}
\newcommand{\sfehler}[1]{\PackageError{dlrg}{#1}}
\newcommand{\sinfo}[1]{\PackageInfo{dlrg}{#1}}

% Debugvarianten
\newcommand{\sdwarnung}[1]{
    \ifthenelse{\boolean{dlrg@debug}}{
        \swarnung{#1}
    }{
        % stillschweigend ignorieren
    }
}
\newcommand{\sdinfo}[1]{
    \ifthenelse{\boolean{dlrg@debug}}{
        \sinfo{#1}
    }{
        % stillschweigend ignorieren
    }
}


% unschädliche Warnungen im Normalbetrieb unterdrücken
\ifthenelse{\boolean{dlrg@debug}}{}{
    \usepackage{silence}

    % Kompatiblität von ctable zu TikZ
    \WarningFilter{ctable}{Transp}
}

% Laden von Dokumenttypen
% ********************************************************************
% Laden der jeweiligen Dokumenttyp-Definition. Falls keine gefunden
% wurde und das Paket nicht eingebettet verwendet wird, wird die
% Definition von Publikationen geladen.

% \dlrg@typDateiLaden{Dokumenttyp}{Abschnitt}
\newcommand{\dlrg@typDateiLaden}[2]{
    \ifthenelse{\equal{\dlrg@typ}{ohne}}{
        \sdinfo{Eingebetteter Modus. Es wird kein Dokumenttyp geladen!}
    }{
        \IfFileExists{dlrg.typ.#1.#2.tex}{
            % Wenn die Datei existiert
            \input{dlrg.typ.#1.#2.tex}
            \sdinfo{Dokumenttyp #1.#2 geladen!}
        }{
            % Wenn die Datei nicht existiert, lade Dokument.
            \sdwarnung{Dokumenttyp #1.#2 nicht gefunden, %
                lade Dokument!}
            \IfFileExists{dlrg.typ.doc.#2.tex}{
                % Wenn die Datei existiert
                \input{dlrg.typ.doc.#2.tex}
                \sdinfo{dlrg.typ.doc.#2 geladen!}
            }{
                % Wenn die Datei nicht existiert Fehler melden!
                \sdwarnung{Dokumenttyp dlrg.pub.#2 nicht gefunden!}
            }
        }
    }
}

% Modullader
% ********************************************************************
% Um Kollisionen zu vermeiden muss gespeichert werden, ob eine Datei
% bereits geladen wurde. So können Module auch mehrfach angegeben
% und von anderen Modulen verwendet werden.

% \dlrg@modulDateiLaden{Kategorie}{Modulname}{Abschnitt}
\newcommand{\dlrg@modulDateiLaden}[3]{
    \IfFileExists{dlrg.#1.#2.#3.tex}{
        % Wenn die Datei existiert
        \ifcsname dlrg@geladen#1#2#3\endcsname
        % Wenn die Datei bereits geladen wurde
        \sdwarnung{Moduldatei dlrg.#1.#2.#3 war bereits geladen!}
        \else
        % Wenn die Datei nicht bereits geladen wurde
        \input{dlrg.#1.#2.#3.tex}
        \expandafter\def
            \csname dlrg@geladen#1#2#3\endcsname{true}
        \expandafter\def
            \csname dlrg@geladen#1#2\endcsname{true}
        \sdinfo{Moduldatei dlrg.#1.#2.#3 geladen!}
        \fi
    }{
        % Wenn die Datei nicht existiert
        \sdwarnung{Moduldatei dlrg.#1.#2.#3 nicht gefunden!}
    }
}


% \dlrg@modulNachladen{Modulname}
% Lädt ein Modul mit allen Abschnitten. Interne Hilfsfunktion für
% Erfüllung von Abhängigkeiten in Modulen. Die Verwendung zu anderen
% Zwecken wird nicht empfohlen.
\newcommand{\dlrg@modulNachladen}[1]{
    \dlrg@modulDateiLaden{mod}{#1}{optionen}
    \ProcessPgfPackageOptions{/dlrg}
    \dlrg@modulDateiLaden{mod}{#1}{pakete}
    \dlrg@modulDateiLaden{mod}{#1}{code}
}

% Modulliste
% ********************************************************************
\RequirePackage{forarray}
% Standardmodule laden und um optionale Module ergänzen
\edef\dlrg@ladeModule{%
    Schrift,
    \dlrg@module
}

% ********************************************************************
% * Paketoptionen der Module                                         *
% ********************************************************************

% Definitionen der Paketoptionen der Module laden
% ********************************************************************
\ForEachX{,}{
    \dlrg@modulDateiLaden{mod}{\thislevelitem}{optionen}
}{\dlrg@ladeModule}

% Definitionen der Paketabhängigkeiten des Dokumenttyps laden
% ********************************************************************
\dlrg@typDateiLaden{\dlrg@typ}{optionen}

% Paketoptionen verarbeiten
% ********************************************************************
% Zurücksetzen der unbekannten Optionen
%\def\dlrg@unbekannteOptionen{}
% TODO: Evtl. Warnung, falls unbekannte Option gesetzt.
% Erneutes Verarbeiten der Optionen
\ProcessPgfPackageOptions{/dlrg}

% ********************************************************************
% * Paketabhängigkeiten                                              *
% ********************************************************************

% Allgemeine Paketabhängigkeiten
% ********************************************************************

% Eingabe und Sprache
\RequirePackage[\dlrg@sprache,ngerman]{babel}
\RequirePackage[utf8]{inputenc}
\RequirePackage[TS1,T1]{fontenc}

% Makros
\RequirePackage{xparse}
\RequirePackage{xstring}
\RequirePackage{environ}

% Mathematisches
\RequirePackage{amsmath}

% Grafik
\PassOptionsToPackage{table,dvipsnames}{xcolor}
\RequirePackage{xcolor}
\RequirePackage{tikz}
\RequirePackage{graphicx}

% Referenzen
\RequirePackage{hyperref}


% Paketabhängigkeiten der Module
% ********************************************************************
\ForEachX{,}{
    \dlrg@modulDateiLaden{mod}{\thislevelitem}{pakete}
}{\dlrg@ladeModule}

% Paketabhängigkeiten des Dokumenttyps
% ********************************************************************
\dlrg@typDateiLaden{\dlrg@typ}{pakete}


% ********************************************************************
% * Module laden                                                     *
% ********************************************************************

\ForEachX{,}{
    \dlrg@modulDateiLaden{mod}{\thislevelitem}{code}
}{\dlrg@ladeModule}

% ********************************************************************
% * Code des Dokumenttyps einbinden                                  *
% ********************************************************************
\dlrg@typDateiLaden{\dlrg@typ}{code}
