% \iffalse meta-comment
%
% Copyright (C) 2015 by Robin Schneider <ypid@riseup.net>
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, 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 Robin Schneider.
%
% This work consists of the files doclicense.dtx and doclicense.ins
% and the derived files doclicense.sty and doclicense.pdf.
%
% \fi
%
% \iffalse
%<*driver>
\ProvidesFile{doclicense.dtx}
%</driver>
%<package>%% See file 'doclicense.dtx' for copyright and license.
%<package>\NeedsTeXFormat{LaTeX2e}[1998/12/01]
%<package>\ProvidesPackage{doclicense}
%<*package>
    [2015/02/13 v0.10 Set and print the license of a document]
%</package>
%
%<*driver>
\documentclass[english]{ltxdoc}
\setlength{\parindent}{0pt}
\newcommand{\PackageURL}{https://github.com/ypid/latex-packages/tree/master/doclicense}
\newcommand{\PackageCTANURL}{https://www.ctan.org/pkg/doclicense}
\newcommand{\PackageAuthor}{Robin Schneider}
\newcommand{\PackageAuthorEmail}{ypid@riseup.net}
\newcommand{\PackageName}{\PrintPackage{doclicense}\xspace}
\newcommand{\PrintPackage}[1]{\textsf{#1}}
\newcommand{\PrintOptionF}[1]{\emph{#1}} %% ^^A This macro is used for
%% ^^A explaining any parameter when they first come up in the documentation.
\newcommand{\DescribePara}[1]{\marginpar{\raggedleft\strut\MacroFont\string#1}}
\usepackage{doclicense}
\usepackage{
  babel,
  csquotes,
  xcolor,
  url,
  hyperxmp,
  hypdoc,
  nameref,
  xspace,
  eqlist,
}
\GetFileInfo{doclicense.dtx}
\hypersetup{
  pdftitle={A manual for \PackageName},
  pdfauthor={\PackageAuthor{} <\PackageAuthorEmail>},
  pdfsubject={\fileinfo},
  baseurl={\PackageURL},
  pdfkeywords={This document corresponds to \PackageName~\fileversion,
    dated \filedate},
}

\title{The \PackageName{} package\thanks{This document
corresponds to \PackageName~\fileversion, dated \filedate.}}
\author{\PackageAuthor\\
  \texttt{\href{mailto:\PackageAuthorEmail?subject=LaTeX package doclicense%
    \&body=Dear Robin Schneider,}%
    {\PackageAuthorEmail}%
  }%
}

\EnableCrossrefs%
\CodelineIndex%
\RecordChanges%
\begin{document}
  \DocInput{doclicense.dtx}
  \PrintChanges%
  \PrintIndex%
\end{document}
%</driver>
% \fi
%
% ^^A \CheckSum{0}
% ^^A I use version control and so on which has much better checksums :)
%
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
% \changes{0.7}{2015/02/05}{Initial version}
% \changes{0.8}{2015/02/06}{Added support for CC-zero and CC-pd and small improvements}
% \changes{0.9}{2015/02/07}{Added list of supported licenses to docu and added option imagemodifier.
%   Also renamed macro \cmd{\doclicenseLicense} to \cmd{\doclicenseThis}}
% \changes{0.10}{2015/02/13}{Added support for hyperxmp}
%
% \DoNotIndex{\RequirePackage, \DeclareOption, \ProcessOptions}
% \DoNotIndex{\PackageWarning, \MessageBreak}
% \DoNotIndex{\DeclareRobustCommand, \newcommand, \renewcommand, \def, \edef}
% \DoNotIndex{\DeclareStringOption, \ProcessLocalKeyvalOptions}
% \DoNotIndex{\ProcessKeyvalOptions, \SetupKeyvalOptions, \DeclareBoolOption}
% \DoNotIndex{\newenvironment}
% \DoNotIndex{\if, \else, \fi, \ifcase, \or, \ifthenelse, \AND, \OR, \value, \relax}
% \DoNotIndex{\loop, \repeat, \the, \ifnum}
% \DoNotIndex{\equal, \boolean, \@currname, \newcounter, \setcounter}
% \DoNotIndex{\stepcounter, \addtocounter}
% \DoNotIndex{\endinput, \begin, \end}
% \DoNotIndex{\not}
%
% \maketitle
%
% \phantomsection
% \addcontentsline{toc}{section}{\abstractname}
% \begin{abstract}
% Make it easy to set your documents under a certain license. \\
% Information site on CTAN: \url{\PackageCTANURL} \\
% Example on Stackexchange: \url{https://tex.stackexchange.com/a/226788/32320} \\
% Fork me on GitHub: \url{\PackageURL} \end{abstract}
%
% \tableofcontents
%
% \section{Introduction}
% The \PrintPackage{doclicense} package allows you to put your document under a
% license and include a link to read about the license or include an icon or
% image of the license.  Currently, only \doclicenseLongType is supported but this
% package is designed to handle all kinds of licenses. See \nameref{sec:contributing}.
%
% \section{Usage}
% Just load the package placing
% \begin{quote}
%   |\usepackage{doclicense}|
% \end{quote}
% in the preamble of your \LaTeXe{} source file. This will select the default
% license which is \doclicenseNameRef, currently. Please always set your
% license explicitly as package options like so:
%
% \begin{quote}
%   |\usepackage[| \\
%   |  type={CC},| \\
%   |  modifier={by-sa},| \\
%   |  version={3.0},| \\
%   |]{doclicense}|
% \end{quote}
%
% This will explicitly set the license to \doclicenseNameRef.
%
% If the \PrintPackage{hyperxmp} package is loaded, then the options
% \PrintOptionF{pdflicenseurl} and \PrintOptionF{pdfcopyright} will be set
% by \PrintPackage{doclicense} to the corresponding values
% (\enquote{\url{\doclicenseURL}} and \enquote{\doclicenseLongText{}}).
%
% \bigskip
%
% The first parameter is \enquote{\PrintOptionF{type}}. \DescribePara{type}
% This sets the license type. Like in this example, the type can be
% \enquote{CC} to cover all the \doclicenseLongType licenses.
% Please make sure that the type is all uppercase. See the \nameref{sec:supported-licenses} section for a complete list.
%
% The \DescribePara{modifier} next parameter is \enquote{\PrintOptionF{modifier}} which allows to
% select different subclasses of a license. In this
% example it is \enquote{by-sa}.
% Please make sure that the type is all lowercase. See the \nameref{sec:supported-licenses} section for a complete list.
%
% As \DescribePara{version} there can be more than one version of a license, the version can also be set.
%
% This package can output some texts like the long license name.
% \DescribePara{lang}
% Because of this, there needs to be a way to specify the language to use.
% If this parameter is omitted, then this package will default to
% \cmd{\languagename} which is normally set by packages like
% \PrintPackage{babel} or \PrintPackage{polyglossia}.
% Currently only English and German are supported.
%
% Default image width for the license image.
% \DescribePara{imagewidth}
%
% This options was added to support variations in the license images.
% \DescribePara{imagemodifier}
% For example, Creative Commons provides sometimes more than one image for one version.
% See the \href{https://creativecommons.org/about/downloads}{donwload page}.
% You will note that there are by-nc.eu and by-nc which only differ in the money unit.
% By default the by-nc image would be used but you can change this with:
% \begin{quote}
%   |\usepackage[imagemodifier={-eu}]{romanbarpagenumber}|
% \end{quote}
%
% Note that if German is set as language then \enquote{eu} will be used as
% default for this option.
%
% \section{Macros}
% \DescribeMacro{\doclicenseType}
% Expands to the type as set in the package options. Example: \enquote{\doclicenseType{}}
%
% \DescribeMacro{\doclicenseLongType}
% Same as \cmd{\doclicenseType} except that it expands to the long license
% type. Example: \enquote{\doclicenseLongType{}}
%
% \DescribeMacro{\doclicenseModifier}
% Expands to the modifier as set in the package options. Example: \enquote{\doclicenseModifier{}}
%
% \DescribeMacro{\doclicenseVersion}
% Expands to the version as set in the package options. Example: \enquote{\doclicenseVersion{}}
%
% \DescribeMacro{\doclicenseURL}
% Expands to the official URL about the license. Note that it expands to the
% raw URL string without the use of \cmd{\href} or similar. If you want the
% link to be clickable then you can use \cmd{\href} or \cmd{\url} from the
% \PrintPackage{hyperref} package or just read on because the following macros
% can also do this for your. Example:
% \enquote{\doclicenseURL{}}
%
% \DescribeMacro{\doclicenseName}
% Expands to the short name of the license. Example: \enquote{\doclicenseName{}}
%
% \DescribeMacro{\doclicenseLongName}
% Expands to the long name of the license. Example: \enquote{\doclicenseLongName{}}
%
% \DescribeMacro{\doclicenseNameRef}
% Same as \cmd{\doclicenseName} except that it links to the URL of the license.
% Example: \enquote{\doclicenseNameRef{}}
%
% \DescribeMacro{\doclicenseLongNameRef}
% Same as \cmd{\doclicenseLongName} except that it links to the URL of the
% license. Example:
% \enquote{\doclicenseLongNameRef{}}
%
% \DescribeMacro{\doclicenseText}
% Expands to a localized text which states that this document is licensed under
% the license. Example:
% \enquote{\doclicenseText{}}
%
% \DescribeMacro{\doclicenseLongText}
% Same as \cmd{\doclicenseText} except that it uses the long name of the license.
% Example: \enquote{\doclicenseLongText{}}
%
% \DescribeMacro{\doclicenseIcon}
% Expands to a icon of the license. Example:
% \enquote{\doclicenseIcon{}}. This macro is based on the
% \PrintPackage{ccicons} package.
%
% \DescribeMacro{\doclicenseImage}
% This is kind of similar with \cmd{\doclicenseIcon} but it will typeset an
% bigger pictogram of the license. Example:
% \enquote{\doclicenseImage}
%
% Note that you can change the image size with the \oarg{imagewidth} parameter
% like this:
% \enquote{\doclicenseImage[imagewidth=2em]}
%
% \begin{quote}
%   |\doclicenseImage[imagewidth=2em]|
% \end{quote}
%
% The images are bundled with the \PackageName package.
%
% \DescribeMacro{\doclicenseThis}
% And last but not least there is the \cmd{\doclicenseThis} macro which will
% typeset the \cmd{\doclicenseText} next to the \cmd{\doclicenseImage} in a
% \enquote{minipage} environment. This will look like the following:
%
% \doclicenseThis
%
% \section{Supported licenses}
% \label{sec:supported-licenses}
% \subsection{CC (Creative commons)}
%
% \makeatletter
% \begin{eqlist}
%   \item[by@3.0] \@nameuse{doclicense@lang@lic@CC@by@3.0}
%   \item[by-sa@3.0] \@nameuse{doclicense@lang@lic@CC@by-sa@3.0}
%   \item[by-nd@3.0] \@nameuse{doclicense@lang@lic@CC@by-nd@3.0}
%   \item[by-nc@3.0] \@nameuse{doclicense@lang@lic@CC@by-nc@3.0}
%   \item[by-nc-sa@3.0] \@nameuse{doclicense@lang@lic@CC@by-nc-sa@3.0}
%   \item[by-nc-nc@3.0] \@nameuse{doclicense@lang@lic@CC@by-nc-nd@3.0}
%   \item[zero@1.0] \@nameuse{doclicense@lang@lic@CC@zero@1.0}
%   \item[pd@1.0] \@nameuse{doclicense@lang@lic@CC@pd@1.0}
% \end{eqlist}
% \makeatother
%
% \section{Contributing}
% \label{sec:contributing}
% This package is being developed on GitHub: \url{\PackageURL}. When you want
% to modify the .sty file, make sure that you make your changes in the .dtx
% file instead, as the .sty file is automatically generated.
%
% \StopEventually{}
%
% \newpage
% \section{Implementation}
% \iffalse
%<*package>
% \fi
% This package depends on these packages.
%    \begin{macrocode}

%% Dependencies {{{
\RequirePackage{kvoptions}
\RequirePackage{xifthen}
\RequirePackage{etoolbox} %% \ifcsdef
\RequirePackage{xspace}
\AtEndPreamble{%
  \@ifpackageloaded{csquotes}{}{\RequirePackage{csquotes}}
  \@ifpackageloaded{ccicons}{}{\RequirePackage{ccicons}}
    %% For \doclicenseIcon
  \@ifpackageloaded{graphicx}{}{\RequirePackage{graphicx}}
    %% For \doclicenseImage
  \@ifpackageloaded{hyperref}{}{\RequirePackage{hyperref}}
  \@ifpackageloaded{hyperxmp}{%
    \hypersetup{
      pdfcopyright  = {\doclicenseLongText},
      pdflicenseurl = {\doclicenseURL},
    }
  }{}
}
%% }}}

%    \end{macrocode}
% \subsection{Declaring the options}
%    \begin{macrocode}
%% Parameters {{{
\DeclareStringOption[CC]{type}
\DeclareStringOption[by-sa]{modifier}
\DeclareStringOption{version}
\DeclareStringOption{lang}
\DeclareStringOption{imagemodifier}
\DeclareStringOption[10em]{imagewidth}
%% }}}

%    \end{macrocode}
% To test if all parameters are valid the macro |\ProcessLocalKeyvalOptions*|
% is expanded to ensure this before leaving the preamble. This is the only
% purpose for the |\ProcessLocalKeyvalOptions*| macro in this case.
%    \begin{macrocode}
\ProcessLocalKeyvalOptions*
%    \end{macrocode}
% \subsection{Declare variables and macros}
%    \begin{macrocode}
%% 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.}%
}
%% }}}

%    \end{macrocode}
% \subsection{Macro user macros}
%    \begin{macrocode}
%% User macros {{{
\newcommand{\doclicenseType}{\doclicense@type\xspace}
\newcommand{\doclicenseLongType}{}
\newcommand{\doclicenseModifier}{\MakeUppercase{\doclicense@modifier}\xspace}
\newcommand{\doclicenseVersion}{\doclicense@versionUsed\xspace}
\newcommand{\doclicenseName}{%
  \doclicense@type~\doclicense@modifier~\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{\doclicenseImage}[1][]{%
  \setkeys{doclicense}{#1}
  \href{\doclicenseURL}{%
    \includegraphics[width=\doclicense@imagewidth]%
      {doclicense-\doclicense@type-\doclicense@modifier\doclicense@imagemodifier}%
  }
}

\newcommand{\doclicenseLicense}{\doclicenseThis} %% legacy support
\newcommand{\doclicenseThis}{
  \setlength{\doclicense@hsize}{\textwidth-\doclicense@imagewidth-2em}
  \ifthenelse{\lengthtest{\hsize > \vsize}}{%% landscape
    \setlength{\doclicense@hsize}{\doclicense@hsize-10em}
  }{}
  \begin{center}
    \begin{minipage}{\doclicense@hsize}
      \doclicenseLongText%
    \end{minipage}
    \hfill
    \begin{minipage}{\doclicense@imagewidth}
      \doclicenseImage%
    \end{minipage}
  \end{center}
}
%% }}}

%    \end{macrocode}
% \subsection{Language selection}
% The following lines include the ldf file. All language dependent things
% should be stored there or can be changed there. Note that one could redefine
% macros like \cmd{\doclicenseLongText} if necessary.
%    \begin{macrocode}
%% 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}
}

%% }}}

%    \end{macrocode}
% \subsection{Internals}
%    \begin{macrocode}
%% 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}

    \ifthenelse{\equal{\doclicense@lang@lic@CC@code}{}}{%
      \edef\doclicense@UrlLangPart{}
    }{%
      \edef\doclicense@UrlLangPart{/\doclicense@lang@lic@CC@code}
    }
    \doclicense@setVersion[3.0]
    \edef\doclicenseURL{%
      \doclicense@baseUrlCC/%
      licenses/%
      \doclicense@modifier/%
      \doclicense@versionUsed\doclicense@UrlLangPart}
    \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}
      \renewcommand{\doclicense@imagemodifier}{}
    }{}
    \ifthenelse{\equal{\doclicense@modifier}{by-nc-sa}}
      {\renewcommand{\doclicense@icon}{\ccbync}}{}
    \ifthenelse{\equal{\doclicense@modifier}{by-nc-nd}}
      {\renewcommand{\doclicense@icon}{\ccbync}}{}
    \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%
%    \end{macrocode}
% That's it.
%    \begin{macrocode}
\endinput
%    \end{macrocode}
%
% \iffalse
%</package>
% \fi
%
% \Finale
\endinput
