%% See file 'doclicense.dtx' for copyright and license.
\NeedsTeXFormat{LaTeX2e}[1998/12/01]
\ProvidesPackage{doclicense}
    [2019/04/07 v1.9.0 Support for putting documents under a license]
%% ^^A nag warned about the center environment and it really messes up spacing.

%% Parameters (((
\RequirePackage{kvoptions}
\DeclareStringOption[CC]{type}
\DeclareStringOption[by-sa]{modifier}
\DeclareStringOption{version}
\DeclareStringOption{lang}
\DeclareStringOption{imagemodifier}
\DeclareStringOption[right]{imageposition}
\DeclareStringOption[10em]{imagewidth}
\DeclareStringOption[2em]{imagedistance}
\DeclareStringOption{hyphenation}
%% )))

\ProcessLocalKeyvalOptions*

%% Dependencies (((
\RequirePackage{xifthen}
\RequirePackage{etoolbox} %% \ifcsdef
\RequirePackage{xspace}
\RequirePackage{verbatim}
\RequirePackage{enumitem}

%% \setlistdepth{4} seems not to be needed. Try without it to avoid changing global variables.
%% Enumeration scheme was chosen to match the html page once.
\newlist{doclicense@enumerate}{enumerate}{4}
\setlist[doclicense@enumerate,1]{label = (\alph*)}
\setlist[doclicense@enumerate,2]{label = (\arabic*)}
\setlist[doclicense@enumerate,3]{label = (\Alph*)}
\setlist[doclicense@enumerate,4]{label = (\roman*)}

\ifthenelse{
  \equal{\doclicense@hyphenation}{}
}{}{%
  \RequirePackage{ragged2e}

  \ifthenelse{\isnamedefined{\doclicense@hyphenation}}{}{%
    \PackageError{doclicense}{Hyphenation macro not defined}
      {The macro name given via the hyphenation option is not defined.}%
  }
}
\AtEndPreamble{%
  \@ifpackageloaded{csquotes}{
    %% csquotes has already been loaded so we are fine.
  }{
    \ifcsdef{enquote}{
      %% \enquote is defined but not by csquotes.
      \@ifpackageloaded{biblatex}{
        \PackageError{doclicense}{The enquote macro is defined by biblatex}
          {This package assumes that the enquote macro is defined by the
            csquotes package. Please load csquotes before you load biblatex so
            that biblatex does not define enquote instead.}%
      }{
        \PackageError{doclicense}{The enquote macro is defined by unknown package}
          {This package assumes that the enquote macro is defined by the
            csquotes package. Please check why enquote is defined without
            csquotes being loaded. Maybe try loading csquotes early so that it
            can define the enquote macro instead.}%
      }
    }{
      \RequirePackage{csquotes}
    }
  }
  \@ifpackageloaded{ccicons}{}{\RequirePackage{ccicons}}
    %% For \doclicenseIcon
  \@ifpackageloaded{graphicx}{}{\RequirePackage{graphicx}}
    %% For \doclicenseImage
  \@ifpackageloaded{hyperref}{}{\RequirePackage{hyperref}}
  \@ifpackageloaded{hyperxmp}{%
    %% The following options are only defined when the hyperxmp package was loaded.
    \hypersetup{
      pdfcopyright  = {\doclicenseLongText},
      pdflicenseurl = {\doclicenseURL},
    }
  }{}
}
%% )))

%% Declare variables (((
\newcommand{\doclicense@baseUrlCC}{https://creativecommons.org}
\newcommand{\doclicense@versionFallback}{}
\newcommand{\doclicense@versionUsed}{}
\newboolean{doclicense@licenseKnown}
\newlength{\doclicense@hsize}
\newcommand{\doclicense@longName}{%
  \@nameuse{doclicense@lang@lic@\doclicense@type @\doclicense@modifier%
    @\doclicense@versionUsed}%
}
\newcommand{\doclicense@icon}{%
  \PackageError{doclicense}{Icon not defined}
    {Please check the documentation of doclicense to see what you can do about it.}%
}
\newcommand{\doclicense@modifier@uppercase}{\texorpdfstring{%
    \MakeUppercase{\doclicense@modifier}%
  }{%
    \doclicense@modifier}%
}
%% )))

%% User macros (((
\newcommand{\doclicenseType}{\doclicense@type\xspace}
\newcommand{\doclicenseLongType}{}
\newcommand{\doclicenseModifier}{\doclicense@modifier@uppercase\xspace}
\newcommand{\doclicenseVersion}{\doclicense@versionUsed\xspace}
\newcommand{\doclicenseName}{%
  \doclicense@type\nobreakspace\doclicense@modifier@uppercase\nobreakspace%
  \doclicense@versionUsed\xspace%
}
\newcommand{\doclicenseNameRef}{\href{\doclicenseURL}{\doclicenseName}\xspace}
\newcommand{\doclicenseLongName}{\doclicenseLongType\space%
  \doclicense@longName\xspace}
\newcommand{\doclicenseLongNameRef}{\href{\doclicenseURL}{\doclicenseLongName}}
\newcommand{\doclicenseText}{%
  \doclicense@lang@thisDoc\space
  \href{\doclicenseURL}{\enquote{\doclicenseName{}}}%
  \doclicense@lang@word@license.\xspace%
}
\newcommand{\doclicenseLongText}{%
  \doclicense@lang@thisDoc\space
  \href{\doclicenseURL}{\doclicenseLongType\space\enquote{\doclicense@longName}}%
  \doclicense@lang@word@license.\xspace%
}
\newcommand{\doclicenseIcon}{\doclicense@icon\xspace}
\newcommand{\doclicenseTypeIcon}{\doclicenseType}
\newcommand{\doclicenseImageFileName}{%
  doclicense-\doclicense@type-\doclicense@modifier\doclicense@imagemodifier}
\newcommand{\doclicenseImage}[1][]{%
  \setkeys{doclicense}{#1}
  \href{\doclicenseURL}{%
    \includegraphics[
      width=\doclicense@imagewidth%
    ]{\doclicenseImageFileName}%
  }
}
\newcommand{\doclicensePlainFullTextFileName}{%
  doclicense-\doclicense@type-\doclicense@modifier%
  -\doclicense@versionUsed-plaintext
}
\newcommand{\doclicensePlainFullText}{%
  \verbatiminput{\doclicensePlainFullTextFileName}
}
\newcommand{\doclicenseFullTextFileName}{%
  doclicense-\doclicense@type-\doclicense@modifier-\doclicense@versionUsed-latex}
\newcommand{\doclicenseFullText}{\input{\doclicenseFullTextFileName}}

\newcommand{\doclicenseLicense}{\doclicenseThis} %% legacy support
\newcommand{\doclicenseThis}{%
  \setlength{\doclicense@hsize}{\textwidth-\doclicense@imagewidth-\doclicense@imagedistance}%
  \ifthenelse{\equal{\doclicense@imageposition}{left}}{%
    \begin{center}
      \begin{minipage}{\doclicense@imagewidth}
        \doclicenseImage%
      \end{minipage}
      \hfill
      \begin{minipage}{\doclicense@hsize}
        \ifthenelse{\isempty{\doclicense@hyphenation}}{}{%
          \@nameuse{\doclicense@hyphenation}%
        }%
        \doclicenseLongText%
      \end{minipage}
    \end{center}
  }{%
  % \ifthenelse{\isnamedefined{iflandscape}}{%
  %   \iflandscape{%
  %     \setlength{\doclicense@hsize}{\doclicense@hsize-10em}%
  %   }{}%
  % }{}%
  % {%
    \begin{center}
      \begin{minipage}{\doclicense@hsize}
        \ifthenelse{\isempty{\doclicense@hyphenation}}{}{%
          \@nameuse{\doclicense@hyphenation}%
        }%
        \doclicenseLongText%
      \end{minipage}
      \hfill
      \begin{minipage}{\doclicense@imagewidth}
        \doclicenseImage%
      \end{minipage}
    \end{center}
  % }
  }
}
%% )))

%% Language support (((
\ifthenelse{\equal{\doclicense@lang}{}}{%
  \renewcommand{\doclicense@lang}{\languagename}}{}
\IfFileExists{doclicense-\doclicense@lang.ldf}{%
  \input{doclicense-\doclicense@lang.ldf}
}{%
  \PackageWarning{doclicense}{%
    No language definition for \doclicense@lang found.
    Please add one and submit a patch. Using English as fallback.}
  \renewcommand{\doclicense@lang}{english}
  \input{doclicense-\doclicense@lang.ldf}
}
\ifthenelse{\equal{\doclicense@imagemodifier}{-us}}{%
  \@namedef{doclicense@imagemodifier}{}
}{}

%% )))

%% Set license (((
\newcommand{\doclicense@setVersion}[1][]{%
  \ifthenelse{\equal{#1}{}}{}{%
    \renewcommand{\doclicense@versionFallback}{#1}
  }
  \ifthenelse{\equal{\doclicense@version}{}}{%
    \renewcommand{\doclicense@versionUsed}{\doclicense@versionFallback}
  }{%
    \renewcommand{\doclicense@versionUsed}{\doclicense@version}
  }
}
\newcommand{\doclicense@set}{%
  %% CC (((
  \ifthenelse{\equal{\doclicense@type}{CC}}{%
    \renewcommand{\doclicenseLongType}{Creative Commons\xspace}
    \renewcommand{\doclicenseTypeIcon}{\ccLogo\xspace}

    \doclicense@setVersion[3.0]

    %% Allow to predefine the following macros in ldf files.
    \ifcsdef{doclicense@UrlLangPart}{}{%
      \ifthenelse{\equal{\doclicense@lang@lic@CC@code}{}}{%
        \edef\doclicense@UrlLangPart{}
      }{%
        \edef\doclicense@UrlLangPart{/deed.\doclicense@lang@lic@CC@code}
      }
    }
    \ifcsdef{doclicenseURL}{}{%
      \edef\doclicenseURL{%
        \doclicense@baseUrlCC/%
        licenses/%
        \doclicense@modifier/%
        \doclicense@versionUsed\doclicense@UrlLangPart%
      }
    }
    \ifthenelse{\equal{\doclicense@modifier}{by}}{%
      \renewcommand{\doclicense@icon}{\ccby}
      \renewcommand{\doclicense@imagemodifier}{}
    }{}
    \ifthenelse{\equal{\doclicense@modifier}{by-sa}}{%
      \renewcommand{\doclicense@icon}{\ccbysa}
      \renewcommand{\doclicense@imagemodifier}{}
    }{}
    \ifthenelse{\equal{\doclicense@modifier}{by-nd}}{%
      \renewcommand{\doclicense@icon}{\ccbynd}
      \renewcommand{\doclicense@imagemodifier}{}
    }{}
    \ifthenelse{\equal{\doclicense@modifier}{by-nc}}{%
      \renewcommand{\doclicense@icon}{\ccbync}
      \ifthenelse{\equal{\doclicense@imagemodifier}{-eu}}{%
        \renewcommand{\doclicense@icon}{\ccbynceu}
      }{}
      \ifthenelse{\equal{\doclicense@imagemodifier}{-jp}}{%
        \renewcommand{\doclicense@icon}{\ccbyncjp}
      }{}
      \renewcommand{\doclicense@imagemodifier}{}
    }{}
    \ifthenelse{\equal{\doclicense@modifier}{by-nc-sa}}{
      \renewcommand{\doclicense@icon}{\ccbyncsa}
      \ifthenelse{\equal{\doclicense@imagemodifier}{-eu}}{%
        \renewcommand{\doclicense@icon}{\ccbyncsaeu}
      }{}
      \ifthenelse{\equal{\doclicense@imagemodifier}{-jp}}{%
        \renewcommand{\doclicense@icon}{\ccbyncsajp}
      }{}
    }{}
    \ifthenelse{\equal{\doclicense@modifier}{by-nc-nd}}{
      \renewcommand{\doclicense@icon}{\ccbyncnd}
      \ifthenelse{\equal{\doclicense@imagemodifier}{-eu}}{%
        \renewcommand{\doclicense@icon}{\ccbyncndeu}
      }{}
      \ifthenelse{\equal{\doclicense@imagemodifier}{-jp}}{%
        \renewcommand{\doclicense@icon}{\ccbyncndjp}
      }{}
    }{}
    \ifthenelse{\equal{\doclicense@modifier}{zero}}{%
      \renewcommand{\doclicense@icon}{\cczero}
      \renewcommand{\doclicense@imagemodifier}{}
      \doclicense@setVersion[1.0]
      \edef\doclicenseURL{%
        \doclicense@baseUrlCC/%
        publicdomain/%
        \doclicense@modifier/%
        \doclicense@versionUsed\doclicense@UrlLangPart}
    }{}
    \ifthenelse{\equal{\doclicense@modifier}{pd}}{
      \renewcommand{\doclicense@icon}{\ccpd}
      \renewcommand{\doclicense@imagemodifier}{}
      \doclicense@setVersion[1.0]
      \edef\doclicenseURL{%
        \doclicense@baseUrlCC/%
        licenses/publicdomain/%
        \doclicense@versionUsed\doclicense@UrlLangPart}
    }{}

    \ifcsdef{doclicense@lang@lic@\doclicense@type%
      @\doclicense@modifier @\doclicense@versionUsed}{}{%

      \PackageError{doclicense}{License long name not defined}%
        {%
          Please check the documentation of doclicense
          to see what you can do about it.%
        }%
    }

    \setboolean{doclicense@licenseKnown}{true}
  }{}%% )))
  \ifthenelse{\not\boolean{doclicense@licenseKnown}}{%
    \PackageError{doclicense}{License unknown}%
      {%
        Please check the documentation of doclicense
        to see what you can do about it.%
      }%
  }{}%
}
%% )))

\doclicense@set%
\endinput
%%
%% End of file `doclicense.sty'.
