%% See file 'doclicense.dtx' for copyright and license. \NeedsTeXFormat{LaTeX2e}[1998/12/01] \ProvidesPackage{doclicense} [2020/05/27 v2.0.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{type} \DeclareStringOption{modifier} \DeclareStringOption{version} \DeclareStringOption{lang} \DeclareStringOption[-88x31]{imagemodifier}% chktex 29 \DeclareStringOption[right]{imageposition} \DeclareStringOption[10em]{imagewidth} \DeclareStringOption[2em]{imagedistance} \DeclareStringOption{hyphenation} %% ))) \ProcessLocalKeyvalOptions* %% Dependencies ((( \RequirePackage{xifthen} \RequirePackage{xstring} \RequirePackage{etoolbox} %% \ifcsdef \RequirePackage{xspace} \RequirePackage{verbatim} %% Custom enumerate list with adjusted labels %% that match the license text conventions \newenvironment{doclicense@enumerate}{% \begin{enumerate} \renewcommand{\labelenumi}{(\alph{enumi})}% \renewcommand{\labelenumii}{(\arabic{enumii})}% \renewcommand{\labelenumiii}{(\Alph{enumiii})}% \renewcommand{\labelenumiv}{(\roman{enumiv})}% }{\end{enumerate}} \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}, } }{} } %% ))) %% Deprecation handling ((( \ifthenelse{ \equal{\doclicense@type}{} }{ \PackageWarning{doclicense}{% "type" package option missing. % chktex 18 This option is now required and the fallback to "CC" is deprecated. % chktex 18 In an upcoming major version of doclicense, this will be a package error. Please explicitly pick a license of your choosing. } \renewcommand{\doclicense@type}{CC} }{} \ifthenelse{ \equal{\doclicense@modifier}{} }{ \PackageWarning{doclicense}{% "modifier" package option missing. % chktex 18 This option is now required and the fallback to "by-sa" is deprecated. % chktex 18 In an upcoming major version of doclicense, this will be a package error. Please explicitly pick a license of your choosing. } \renewcommand{\doclicense@modifier}{by-sa} }{} \ifthenelse{ \equal{\doclicense@version}{} }{ \PackageWarning{doclicense}{% "version" package option missing. % chktex 18 This option is now required and the fallback is deprecated. % chktex 18 In an upcoming major version of doclicense, this will be a package error. Please explicitly pick a license of your choosing. } }{} %% ))) %% 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 manual 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}}% chktex 27 \newcommand{\doclicenseLicense}{\doclicenseThis} %% legacy support \newcommand{\doclicenseThis}{% \setlength{\doclicense@hsize}{\linewidth-\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}% chktex 27 }{% \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}% chktex 27 } \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} }{} \ifthenelse{\equal{\doclicense@modifier}{by-sa}}{% \renewcommand{\doclicense@icon}{\ccbysa} }{} \ifthenelse{\equal{\doclicense@modifier}{by-nd}}{% \renewcommand{\doclicense@icon}{\ccbynd} }{} \ifthenelse{\equal{\doclicense@modifier}{by-nc}}{% \renewcommand{\doclicense@icon}{\ccbync} \IfBeginWith{\doclicense@imagemodifier}{-eu}{% \renewcommand{\doclicense@icon}{\ccbynceu} }{} \IfBeginWith{\doclicense@imagemodifier}{-jp}{% \renewcommand{\doclicense@icon}{\ccbyncjp} }{} }{} \ifthenelse{\equal{\doclicense@modifier}{by-nc-sa}}{ \renewcommand{\doclicense@icon}{\ccbyncsa} \IfBeginWith{\doclicense@imagemodifier}{-eu}{% \renewcommand{\doclicense@icon}{\ccbyncsaeu} }{} \IfBeginWith{\doclicense@imagemodifier}{-jp}{% \renewcommand{\doclicense@icon}{\ccbyncsajp} }{} }{} \ifthenelse{\equal{\doclicense@modifier}{by-nc-nd}}{ \renewcommand{\doclicense@icon}{\ccbyncnd} \IfBeginWith{\doclicense@imagemodifier}{-jp}{% \renewcommand{\doclicense@icon}{\ccbyncndjp} }{} }{} \ifthenelse{\equal{\doclicense@modifier}{zero}}{% \renewcommand{\doclicense@icon}{\cczero} \doclicense@setVersion[1.0] \edef\doclicenseURL{% \doclicense@baseUrlCC/% publicdomain/% \doclicense@modifier/% \doclicense@versionUsed\doclicense@UrlLangPart} }{} \ifthenelse{\equal{\doclicense@modifier}{pd}}{ \PackageError{doclicense}{CC PD license removed as of version 2.0.0}{ Creative Commons PD has been replaced by CC-zero. Please update your license choice. }% }{} \IfSubStr{\doclicense@modifier}{nc}{}{ %% eu (Euro) does only exist for nc (non commercial) so if not nc then reset -eu. \ifthenelse{\equal{\doclicense@imagemodifier}{-eu}}{% \renewcommand{\doclicense@imagemodifier}{} }{} } \ifcsdef{doclicense@lang@lic@\doclicense@type% @\doclicense@modifier @\doclicense@versionUsed}{}{% \PackageError{doclicense}{License long name not defined}{% Please check the manual 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 manual of doclicense to see what you can do about it.% }% }{}% } %% ))) \doclicense@set% \endinput %% %% End of file `doclicense.sty'.