% Kale Ewasiuk (kalekje@gmail.com) % 2022-10-24 % Copyright (C) 2021-2022 Kale Ewasiuk % % Permission is hereby granted, free of charge, to any person obtaining a copy % of this software and associated documentation files (the "Software"), to deal % in the Software without restriction, including without limitation the rights % to use, copy, modify, merge, publish, distribute, sublicense, and/or sell % copies of the Software, and to permit persons to whom the Software is % furnished to do so, subject to the following conditions: % % The above copyright notice and this permission notice shall be included in % all copies or substantial portions of the Software. % % THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF % ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED % TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A % PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT % SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR % ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN % ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, % OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE % OR OTHER DEALINGS IN THE SOFTWARE. \ProvidesPackage{penlight}[2022-10-24] \RequirePackage{luacode} \IfFileExists{luakeys.lua}{}{\PackageError{penlight}{This package requires that luakeys be installed}{}} \DeclareOption{pl}{\luadirect{ pl = require'penlight' __PENLIGHT__ = 'pl' }} \DeclareOption{penlight}{\luadirect{ penlight = require'penlight' __PENLIGHT__ = 'penlight' }} \DeclareOption{stringx}{\luadirect{_G[__PENLIGHT__].stringx.import()}} \DeclareOption{format}{\luadirect{_G[__PENLIGHT__].stringx.format_operator()}} \DeclareOption{func}{\luadirect{_G[__PENLIGHT__].utils.import(__PENLIGHT__..'.func')}} \DeclareOption{extras}{\luadirect{require'penlightextras'}} \DeclareOption{extrasglobals}{\luadirect{ __PL_GLOBALS__ = true require'penlightextras' }} \ProcessOptions*\relax \luadirect{ if __PENLIGHT__ == nil then tex.sprint('\\PackageError{penlight}{"penlight" or "pl" option must be passed to penlight as the first option}{}') end } \newcommand{\writePDFmetadata}{\luadirect{_G[__PENLIGHT__].tex.writePDFmetadata()}} \NewDocumentCommand{\writePDFmetadatakv}{ s m }{ \IfBooleanTF{#1}{% if *, overwrite everything \luadirect{ __PDFmetadata__ = luakeys.parse(\luastring{#2}) _G[__PENLIGHT__].tex.writePDFmetadata() }}{ \luadirect{ __PDFmetadata__ = __PDFmetadata__ or {} _G[__PENLIGHT__].tablex.update(__PDFmetadata__, luakeys.parse(\luastring{#2})) _G[__PENLIGHT__].tex.writePDFmetadata() }} } \def\luastringT#1{\luastring{\unexpanded\expandafter\expandafter\expandafter{#1}}} % expand luastring twice \let\luastringF\luastring % fully expanded luastring % allow control over expansion of arguments to a latex function \NewDocumentCommand{\MakeluastringCommands}{O{} m }{% #1 the desired commands #2 defaults \luadirect{_G[__PENLIGHT__].tex.aliasluastring(\luastring{#2},\luastring{#1})}% } \NewDocumentCommand{\splitToComma}{ O{nn} m m }{% \MakeluastringCommands[nn]{#1}% \luadirect{_G[__PENLIGHT__].tex.split2comma(\plluastringA{#2},\plluastringB{#3})}% } \NewDocumentCommand{\splitToItems}{ O{NN} m m }{% \MakeluastringCommands[nn]{#1}% \luadirect{_G[__PENLIGHT__].tex.split2items(\plluastringA{#2},\plluastringB{#3})}% }