texlive[62176] Master/texmf-dist: yamlvars (25feb22)

commits+karl at tug.org commits+karl at tug.org
Fri Feb 25 23:14:36 CET 2022


Revision: 62176
          http://tug.org/svn/texlive?view=revision&revision=62176
Author:   karl
Date:     2022-02-25 23:14:36 +0100 (Fri, 25 Feb 2022)
Log Message:
-----------
yamlvars (25feb22)

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/lualatex/yamlvars/yamlvars.pdf
    trunk/Master/texmf-dist/doc/lualatex/yamlvars/yamlvars.tex
    trunk/Master/texmf-dist/tex/lualatex/yamlvars/yamlvars.lua
    trunk/Master/texmf-dist/tex/lualatex/yamlvars/yamlvars.sty

Removed Paths:
-------------
    trunk/Master/texmf-dist/doc/lualatex/yamlvars/YAMLvars.pdf
    trunk/Master/texmf-dist/doc/lualatex/yamlvars/YAMLvars.tex
    trunk/Master/texmf-dist/tex/lualatex/yamlvars/YAMLvars.lua
    trunk/Master/texmf-dist/tex/lualatex/yamlvars/YAMLvars.sty

Deleted: trunk/Master/texmf-dist/doc/lualatex/yamlvars/YAMLvars.pdf
===================================================================
(Binary files differ)

Deleted: trunk/Master/texmf-dist/doc/lualatex/yamlvars/YAMLvars.tex
===================================================================
--- trunk/Master/texmf-dist/doc/lualatex/yamlvars/YAMLvars.tex	2022-02-25 22:14:10 UTC (rev 62175)
+++ trunk/Master/texmf-dist/doc/lualatex/yamlvars/YAMLvars.tex	2022-02-25 22:14:36 UTC (rev 62176)
@@ -1,368 +0,0 @@
-% Kale Ewasiuk (kalekje at gmail.com)
-% 2022-01-18
-% 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.
-
-
-\documentclass[11pt,parskip=half]{scrartcl}
-\setlength{\parindent}{0ex}
-\newcommand{\llcmd}[1]{\leavevmode\llap{\texttt{\detokenize{#1}\ }}}
-\newcommand{\cmd}[1]{\texttt{\detokenize{#1}}}
-\newcommand{\qcmd}[1]{``\cmd{#1}''}
-\usepackage{url}
-\usepackage{xcolor}
-\usepackage{showexpl}
-\lstset{explpreset={justification=\raggedright,pos=r,wide=true}}
-\setlength\ResultBoxRule{0mm}
-\lstset{
-	language=[LaTeX]TeX,
-	basicstyle=\ttfamily\small,
-	commentstyle=\ttfamily\small\color{gray},
-	frame=none,
-	numbers=left,
-	numberstyle=\ttfamily\small\color{gray},
-	prebreak=\raisebox{0ex}[0ex][0ex]{\color{gray}\ensuremath{\hookleftarrow}},
-	extendedchars=true,
-	breaklines=true,
-	tabsize=4,
-}
-\addtokomafont{title}{\raggedright}
-\addtokomafont{author}{\raggedright}
-\addtokomafont{date}{\raggedright}
-\author{Kale Ewasiuk (\url{kalekje at gmail.com})}
-\usepackage[yyyymmdd]{datetime}\renewcommand{\dateseparator}{--}
-\date{\today}
-
-
-
-\usepackage[overwritedefs]{YAMLvars}
-\title{YAMLvars}
-\subtitle{a YAML variable parser for LuaLaTeX}
-
-\begin{document}
-
-
-\maketitle
-
-
-%%%%%
-
-%{NOTE::: \Huge todo use LTXexample and improve examples/testing\\
-%todo need way better error tracing for this pkg}
-
-
-
-%%%%%%%%%%%
-
-
-YAMLvars is a LuaLaTeX-based package to help make definitions or produce LaTeX code using a YAML file.
-This package might be useful for you if you want to batch create docummnts
-by pushing various sets YAML data to a fixed LaTeX template,
-or just find it easier to read document metadata from a YAML file compared to the
-standard title, author, etc. commands.
-
-\section{Package Options}
-\leavevmode\llap{\texttt{useyv}\ \ \ }By default, when you specify a YAML variable, it will be defined using \texttt{gdef}
-(only if it wasn't defined previously).
-If you use this setting, unless otherwise specified, YAML variables will be accessible under
-the \texttt{\textbackslash yv\{<var>\}} command.
-This also allows numbers and symbols in the variable names.
-Note that internally, the variables are stored in the command sequence
-\texttt{yv--<var>}.
-
-\leavevmode\llap{\texttt{parseCLI}\ \ \ }If this option is enabled, any arguments passed to your lualatex compile
-command that end in ``.yaml'' will be used, separated by a space.
-If two yaml files are passed, the first one will be the declaration file,
-and the second will be the parsing file.
-They will be used at the beginning of the document.
-If one yaml file is passed, it will be treated as a parsing file, so you should
-declare the variables somewhere in the preamble.
-This option is offered to help with automation scripts.
-An example is showin in Section \ref{example}.
-
-\hspace*{3ex}\llcmd{allowundeclared}%
-It might be helpful to define something in your YAML parsing doc without declaring it.
-If you want this flexibility, use this setting. Note that eisting definitions will not be overwritten and an error
-will br thrown if the name exists.
-
-\llcmd{overwritedefs}Danger! This will allow you to \cmd{gdef} commands with YAML. Caution should be taken to not set definitions like \cmd{begin}, \cmd{section}, etc.
-
-\section{Dependencies}
-%This package contains the \texttt{tinyyaml} Lua package.
-\llcmd{Note:}This package requires that the \cmd{markdown} (\url{https://ctan.org/pkg/markdown}) be installed. This package does not use the package in its entirety, but rather depends on the YAML interpreter it comes with: \cmd{markdown-tinyyaml.lua}. This dependency is chosen to avoid redundancy in your TeX installation and align development of the \cmd{tinyyaml} Lua package.
-If you want to use the YAML interpreter for other purposes, you can bring it into Lua by either:
-\begin{verbatim}
-\directlua{yaml = YAMLvars.yaml}           or
-\directlua{yaml = require'markdown-tinyyaml'}
-\end{verbatim}
-The distribution: \url{https://github.com/api7/lua-tinyyaml}\\
-The YAML specification: \url{https://yaml.org/spec/}\\
-
-Many of the ``transform'' and ``processing'' functions built-in to this package rely on other packages,
-like
-\texttt{hyperref}, for example, but it is not loaded, and this package will only load
-\cmd{penlight},
-\cmd{luacode},
-\cmd{xspace}, and
-\cmd{etoolbox}.
-
-\section{Declaring variables}
-A declaration file can either be parsed with the command \texttt{declareYAMLvarsFile} command,
-or, if you want to do it \LaTeX, you can put the YAML code in the \texttt{declareYAMLvars} environment.
-It is a declaring YAML docuemnt is (like all YAML) key-value ditionary:
-The top level key is the name of the variable to be defined/used.
-If the value of the top level is a string: it's interpreted as a single transform function to be applied.
-Otherwise, it must
-be a table that contains at least one of the following keys:\\
-\texttt{xfm} (transform, may be a string or list of strings),\\
-\texttt{prc} (processing, must be a single string), or \\
-\texttt{dft} (default value, if being defined. Must be a string).
-
-If you want to change the way a variable is initialized, you can change the function
-\cmd{YAMLvars.dec.PRC = function (var) ... end } where \cmd{PRC} is how the variable will be processed (\cmd{gdef}, \cmd{yvdef}, \cmd{length}, or something of your choosing).
-
-The default value for variables is the Lua \texttt{nil}.
-YAMLvars will first check if the definition exists, if so, an error will be thrown
-so that we avoid overwriting.
-If the token is available, it is set to a package error, so that if the variable no defined later on, an error will
-tell the user they forgot to set it.
-This will be overwritten when you parse the variables and assign a value to it.
-
-You can change the default \texttt{xfm}, \texttt{prc}, or \texttt{dft} by changing
-the value (in Lua): \texttt{YAMLvars.xfmDefault = ''} etc.
-
-Here is an example of a declaration document.
-\begin{verbatim}
-\begin{declareYAMLvars}
-Location: addxspace                      # sets xfm=addxspace
-People: [arrsortlastnameAZ, list2nl]     # BAD! don't do.
-People:
-  xfm: [arrsortlastnameAZ, list2nl]      # Correct way
-Company:
-  dft: Amazon                            # Change default only
-Revisions:
-  dft: '1 & \today & initial version \\'
-  xfm: [sortZA, list2tab]
-Rhead:
-  prc: setRightHead
-\end{declareYAMLvars}
-\end{verbatim}
-
-
-To change how a variable is declared (initialize), you can modify or add functions in
-\texttt{YAMLvars.dec} table, where the index is the same as the \texttt{prc} name. 
-This function accepts two variables, the var name, and the default value set by dft.
-For lengths and toggles (from etoolbox), these functions are used to initialize lengths
-with newlength and newtoggle.
-
-
-\section{Parsing variables}
-A YAML file to be parsed will contain the variables as the top level keys, similar to declaring.
-The value can be anything you want; as long as you have applied appropriate transform and declaring
-functions to it so that it can be useful. For example, a value specified as a YAML list will first be
-interpreted as a Lua table (with numeric indexes/keys). You could declare a series of transforms functions
-to sort this table, map functions, and convert it to a series of \LaTeX  \texttt{\textbackslash item}s.
-
-Here is an example of a parsing document.
-
-
-\begin{verbatim}
-\begin{declareYAMLvars}
-Location: Planet Earth
-People:                # a YAML list
-  - Some One           # turns into Lua table
-  - No Body
-# company assumed Amazon if not set here
-Rhead: \today
-\end{declareYAMLvars}
-\end{verbatim}
-
-
- \section{xfm -- Transform Functions}
-These functions accept two arguments: \texttt{(var, val)} where \texttt{var} is the variable (or key) and val is the value.
-The transforms are specified as a list and are iteratively applied to the val.
-Usually, the final \texttt{xfm} function should produce a string so it can be defined.
-
-Hint: if for some reason, your \texttt{xfm} and \texttt{prc} depends on other variables,
-you can access them within the function
-with \texttt{YAMLvars.varsvals}
-
-\subsection{Defining your own transform functions}
-After the package is loaded, you may add your function (somewhere in Lua)
-by adding it to the \texttt{YAMLvars.xfm} table.
-For example, if you wanted to wrap a variable's value with ``xxx'', here's how you could do that.
-\begin{verbatim}
-function myfunction(var, val)
-        return 'xxx'..val..'xxx'
-end
-YAMLvars.xfm['addmyfunction'] = myfunction
-\end{verbatim}
-
-If you want to run some Lua code and write in your YAML file (weird idea, but maybe useful for one-off functions),
-you can do so by specifying a transform function with an \texttt{=} in it to make a lambda function.
-For example, a \texttt{xfm} equal to
-``\texttt{= '---'..x..'---'}''
-would surround your YAML variable's value with em-dashes.
-You can access the variable name with this lambda function with \texttt{v}.
-If you want to just execute code (instead of settings \texttt{x = }, use \texttt{/}).
-
-  \section{prc -- Processing Functions}
-Like the transform functions, the processing function must accept \texttt{(var, val)}.
-Only one processing function is applied to the final (var, val) after the transforms are done.
-
-This package includes \texttt{gdef} to set a definition, \texttt{yvdef} to define a variable under the \texttt{yv} command.
-\texttt{title, author, date} to set \texttt{\textbackslash @title, \textbackslash @author, \textbackslash @date},
-respectively
-
-\pagebreak
-
-\section{Some Examples}
-
-\begin{LTXexample}
-%! language = yaml
-\begin{declareYAMLvars}
-address:
-  xfm:
-    - list2nl
-    - = x..'!!!'
-name: null
-
-title:
-    xfm:
-        - lb2nl
-#        - / YAMLvars.prvcmd(titletext, YAMLvars.varsvals['atitle']:gsub('\n', ' ')..'\\xspace{}')
-\end{declareYAMLvars}
-
-%! language = yaml
-\begin{parseYAMLvars}
-title: |-
-    A Multiline
-    Monumental Title!
-
-name: Joe Smith
-address:
-  - 1234 Fake St.
-  - City
-\end{parseYAMLvars}
-
-\title
-
-%\titletext!
-
-\name
-
-\address
-
-\end{LTXexample}
-
-\pagebreak
-    \section{Automation Example}\label{example}
-
-    Suppose you had a number of bills of sales in yaml format and wanted to produce some nice pdfs.
-    The following code shows how this could be done.
-
-    \pagebreak
-    \vspace*{-5em}
-    \subsection{The main tex template}
-    \begin{verbatim}
- %% main.tex
-\documentclass{article}
-\usepackage[paperheight=4in,paperwidth=3in,margin=0.25in]{geometry}
-\usepackage[pl,func,extras]{penlight}
-\usepackage[useyv,parseCLI]{YAMLvars}  % using command line option to make files
-\usepackage{hyperref}
-\usepackage{xspace}
-\usepackage{luacode}
-
-\setlength{\parindent}{0ex}
-\setlength{\parskip}{0.75em}
-
-\begin{luacode*} -- adding a custom function, put hfill between k-v pairs
-    function YAMLvars.xfm.kv2hfill(var, val)
-        local t = {}
-        for k, v in pairs(val) do
-            t[#t+1] = k..'\\hfill '..tostring(v)
-        end
-        return t
-    end
-\end{luacode*}
-
-
-%! language = yaml
-\begin{declareYAMLvars}
-Customer: addxspace
-Date: addxspace
-Items:
-    xfm: [kv2hfill, arr2itemize]
-\end{declareYAMLvars}
-
-\begin{document}
-    Bill of sale for: \hfill \yv{Customer}\\
-    Purchased: \hfill \yv{Date}\\
-    \begin{itemize}
-        \item[] ITEM \hfill PRICE
-        \yv{Items}             % the yaml variable
-        \begin{luacode*}
-            totalcost = pl.tablex.reduce('+',
-                pl.tablex.values(YAMLvars.varsvals['Items']), 0)
-            tex.print('\\item[] TOTAL:\\hfill'..tostring(totalcost))
-        \end{luacode*}
-    \end{itemize}
-\end{document}
-    \end{verbatim}
-
-    \subsection{The lua automation script}
-    \begin{verbatim}
---automate.lua
-for f in io.popen('dir .'):lines() do  -- get all files and info in cwd
-    local i, j = f:find('%S*%.yaml')  --  find fnames
-    if i ~= nil then
-        f = f:sub(i,j) --  extract .yaml file name (no space in fname allowed)
-        os.execute('lualatex -output-format=pdf main.tex '.. f)
-                                    -- compile w/ yaml file as arg
-        local fnew = f:gsub('yaml', 'pdf') -- file name for output pdf
-        os.remove(fnew) -- delete if it exists already
-        os.rename('main.pdf', fnew) -- change main.pdf to same as yaml file name
-    end
-end
-    \end{verbatim}
-
-\subsection{The yaml data files}
-    \begin{verbatim}
-# sale1.yaml
-Customer: Someone Cold
-Date: January 2, 2021
-Items:
-    Toque: 12
-    Mitts: 5.6
-    Boots: 80
-
-# sale2.yaml
-Customer: Someone Warm
-Date: July 1, 2021
-Items:
-    Beer (24 pk): 24
-    Sunscreen: 5
-    Hat: 12
-    \end{verbatim}
-\end{document}
-

Added: trunk/Master/texmf-dist/doc/lualatex/yamlvars/yamlvars.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/lualatex/yamlvars/yamlvars.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/lualatex/yamlvars/yamlvars.pdf	2022-02-25 22:14:10 UTC (rev 62175)
+++ trunk/Master/texmf-dist/doc/lualatex/yamlvars/yamlvars.pdf	2022-02-25 22:14:36 UTC (rev 62176)

Property changes on: trunk/Master/texmf-dist/doc/lualatex/yamlvars/yamlvars.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/lualatex/yamlvars/yamlvars.tex
===================================================================
--- trunk/Master/texmf-dist/doc/lualatex/yamlvars/yamlvars.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/lualatex/yamlvars/yamlvars.tex	2022-02-25 22:14:36 UTC (rev 62176)
@@ -0,0 +1,368 @@
+% Kale Ewasiuk (kalekje at gmail.com)
+% 2022-02-25
+% 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.
+
+
+\documentclass[11pt,parskip=half]{scrartcl}
+\setlength{\parindent}{0ex}
+\newcommand{\llcmd}[1]{\leavevmode\llap{\texttt{\detokenize{#1}\ }}}
+\newcommand{\cmd}[1]{\texttt{\detokenize{#1}}}
+\newcommand{\qcmd}[1]{``\cmd{#1}''}
+\usepackage{url}
+\usepackage{xcolor}
+\usepackage{showexpl}
+\lstset{explpreset={justification=\raggedright,pos=r,wide=true}}
+\setlength\ResultBoxRule{0mm}
+\lstset{
+	language=[LaTeX]TeX,
+	basicstyle=\ttfamily\small,
+	commentstyle=\ttfamily\small\color{gray},
+	frame=none,
+	numbers=left,
+	numberstyle=\ttfamily\small\color{gray},
+	prebreak=\raisebox{0ex}[0ex][0ex]{\color{gray}\ensuremath{\hookleftarrow}},
+	extendedchars=true,
+	breaklines=true,
+	tabsize=4,
+}
+\addtokomafont{title}{\raggedright}
+\addtokomafont{author}{\raggedright}
+\addtokomafont{date}{\raggedright}
+\author{Kale Ewasiuk (\url{kalekje at gmail.com})}
+\usepackage[yyyymmdd]{datetime}\renewcommand{\dateseparator}{--}
+\date{\today}
+
+
+
+\usepackage[overwritedefs]{YAMLvars}
+\title{YAMLvars}
+\subtitle{a YAML variable parser for LuaLaTeX}
+
+\begin{document}
+
+
+\maketitle
+
+
+%%%%%
+
+%{NOTE::: \Huge todo use LTXexample and improve examples/testing\\
+%todo need way better error tracing for this pkg}
+
+
+
+%%%%%%%%%%%
+
+
+YAMLvars is a LuaLaTeX-based package to help make definitions or produce LaTeX code using a YAML file.
+This package might be useful for you if you want to batch create docummnts
+by pushing various sets YAML data to a fixed LaTeX template,
+or just find it easier to read document metadata from a YAML file compared to the
+standard title, author, etc. commands.
+
+\section{Package Options}
+\leavevmode\llap{\texttt{useyv}\ \ \ }By default, when you specify a YAML variable, it will be defined using \texttt{gdef}
+(only if it wasn't defined previously).
+If you use this setting, unless otherwise specified, YAML variables will be accessible under
+the \texttt{\textbackslash yv\{<var>\}} command.
+This also allows numbers and symbols in the variable names.
+Note that internally, the variables are stored in the command sequence
+\texttt{yv--<var>}.
+
+\leavevmode\llap{\texttt{parseCLI}\ \ \ }If this option is enabled, any arguments passed to your lualatex compile
+command that end in ``.yaml'' will be used, separated by a space.
+If two yaml files are passed, the first one will be the declaration file,
+and the second will be the parsing file.
+They will be used at the beginning of the document.
+If one yaml file is passed, it will be treated as a parsing file, so you should
+declare the variables somewhere in the preamble.
+This option is offered to help with automation scripts.
+An example is showin in Section \ref{example}.
+
+\hspace*{3ex}\llcmd{allowundeclared}%
+It might be helpful to define something in your YAML parsing doc without declaring it.
+If you want this flexibility, use this setting. Note that existing definitions will not be overwritten and an error
+will br thrown if the name exists. Alternatively, you can use the commands \cmd{\AllowUndeclaredYV} or \cmd{\ForbidUndeclaredYV} to toggle this behavior.
+
+\llcmd{overwritedefs}Danger! This will allow you to \cmd{gdef} commands with YAML. Caution should be taken to not set definitions like \cmd{begin}, \cmd{section}, etc.
+
+\section{Dependencies}
+%This package contains the \texttt{tinyyaml} Lua package.
+\llcmd{Note:}This package requires that the \cmd{markdown} (\url{https://ctan.org/pkg/markdown}) be installed. This package does not use the package in its entirety, but rather depends on the YAML interpreter it comes with: \cmd{markdown-tinyyaml.lua}. This dependency is chosen to avoid redundancy in your TeX installation and align development of the \cmd{tinyyaml} Lua package.
+If you want to use the YAML interpreter for other purposes, you can bring it into Lua by either:
+\begin{verbatim}
+\directlua{yaml = YAMLvars.yaml}           or
+\directlua{yaml = require'markdown-tinyyaml'}
+\end{verbatim}
+The distribution: \url{https://github.com/api7/lua-tinyyaml}\\
+The YAML specification: \url{https://yaml.org/spec/}\\
+
+Many of the ``transform'' and ``processing'' functions built-in to this package rely on other packages,
+like
+\texttt{hyperref}, for example, but it is not loaded, and this package will only load
+\cmd{penlight},
+\cmd{luacode},
+\cmd{xspace}, and
+\cmd{etoolbox}.
+
+\section{Declaring variables}
+A declaration file can either be parsed with the command \texttt{declareYAMLvarsFile} command,
+or, if you want to do it \LaTeX, you can put the YAML code in the \texttt{declareYAMLvars} environment.
+It is a declaring YAML docuemnt is (like all YAML) key-value ditionary:
+The top level key is the name of the variable to be defined/used.
+If the value of the top level is a string: it's interpreted as a single transform function to be applied.
+Otherwise, it must
+be a table that contains at least one of the following keys:\\
+\texttt{xfm} (transform, may be a string or list of strings),\\
+\texttt{prc} (processing, must be a single string), or \\
+\texttt{dft} (default value, if being defined. Must be a string).
+
+If you want to change the way a variable is initialized, you can change the function
+\cmd{YAMLvars.dec.PRC = function (var) ... end } where \cmd{PRC} is how the variable will be processed (\cmd{gdef}, \cmd{yvdef}, \cmd{length}, or something of your choosing).
+
+The default value for variables is the Lua \texttt{nil}.
+YAMLvars will first check if the definition exists, if so, an error will be thrown
+so that we avoid overwriting.
+If the token is available, it is set to a package error, so that if the variable no defined later on, an error will
+tell the user they forgot to set it.
+This will be overwritten when you parse the variables and assign a value to it.
+
+You can change the default \texttt{xfm}, \texttt{prc}, or \texttt{dft} by changing
+the value (in Lua): \texttt{YAMLvars.xfmDefault = ''} etc.
+
+Here is an example of a declaration document.
+\begin{verbatim}
+\begin{declareYAMLvars}
+Location: addxspace                      # sets xfm=addxspace
+People: [arrsortlastnameAZ, list2nl]     # BAD! don't do.
+People:
+  xfm: [arrsortlastnameAZ, list2nl]      # Correct way
+Company:
+  dft: Amazon                            # Change default only
+Revisions:
+  dft: '1 & \today & initial version \\'
+  xfm: [sortZA, list2tab]
+Rhead:
+  prc: setRightHead
+\end{declareYAMLvars}
+\end{verbatim}
+
+
+To change how a variable is declared (initialize), you can modify or add functions in
+\texttt{YAMLvars.dec} table, where the index is the same as the \texttt{prc} name. 
+This function accepts two variables, the var name, and the default value set by dft.
+For lengths and toggles (from etoolbox), these functions are used to initialize lengths
+with newlength and newtoggle.
+
+
+\section{Parsing variables}
+A YAML file to be parsed will contain the variables as the top level keys, similar to declaring.
+The value can be anything you want; as long as you have applied appropriate transform and declaring
+functions to it so that it can be useful. For example, a value specified as a YAML list will first be
+interpreted as a Lua table (with numeric indexes/keys). You could declare a series of transforms functions
+to sort this table, map functions, and convert it to a series of \LaTeX  \texttt{\textbackslash item}s.
+
+Here is an example of a parsing document.
+
+
+\begin{verbatim}
+\begin{parseYAMLvars}
+Location: Planet Earth
+People:                # a YAML list
+  - Some One           # turns into Lua table
+  - No Body
+# company assumed Amazon if not set here
+Rhead: \today
+\end{parseYAMLvars}
+\end{verbatim}
+
+
+ \section{xfm -- Transform Functions}
+These functions accept two arguments: \texttt{(var, val)} where \texttt{var} is the variable (or key) and val is the value.
+The transforms are specified as a list and are iteratively applied to the val.
+Usually, the final \texttt{xfm} function should produce a string so it can be defined.
+
+Hint: if for some reason, your \texttt{xfm} and \texttt{prc} depends on other variables,
+you can access them within the function
+with \texttt{YAMLvars.varsvals}
+
+\subsection{Defining your own transform functions}
+After the package is loaded, you may add your function (somewhere in Lua)
+by adding it to the \texttt{YAMLvars.xfm} table.
+For example, if you wanted to wrap a variable's value with ``xxx'', here's how you could do that.
+\begin{verbatim}
+function myfunction(var, val)
+        return 'xxx'..val..'xxx'
+end
+YAMLvars.xfm['addmyfunction'] = myfunction
+\end{verbatim}
+
+If you want to run some Lua code and write in your YAML file (weird idea, but maybe useful for one-off functions),
+you can do so by specifying a transform function with an \texttt{=} in it to make a lambda function.
+For example, a \texttt{xfm} equal to
+``\texttt{= '---'..x..'---'}''
+would surround your YAML variable's value with em-dashes.
+You can access the variable name with this lambda function with \texttt{v}.
+If you want to just execute code (instead of settings \texttt{x = }, use \texttt{/}).
+
+  \section{prc -- Processing Functions}
+Like the transform functions, the processing function must accept \texttt{(var, val)}.
+Only one processing function is applied to the final (var, val) after the transforms are done.
+
+This package includes \texttt{gdef} to set a definition, \texttt{yvdef} to define a variable under the \texttt{yv} command.
+\texttt{title, author, date} to set \texttt{\textbackslash @title, \textbackslash @author, \textbackslash @date},
+respectively
+
+\pagebreak
+
+\section{Some Examples}
+
+\begin{LTXexample}
+%! language = yaml
+\begin{declareYAMLvars}
+address:
+  xfm:
+    - list2nl
+    - = x..'!!!'
+name: null
+
+title:
+    xfm:
+        - lb2nl
+#        - / YAMLvars.prvcmd(titletext, YAMLvars.varsvals['atitle']:gsub('\n', ' ')..'\\xspace{}')
+\end{declareYAMLvars}
+
+%! language = yaml
+\begin{parseYAMLvars}
+title: |-
+    A Multiline
+    Monumental Title!
+
+name: Joe Smith
+address:
+  - 1234 Fake St.
+  - City
+\end{parseYAMLvars}
+
+\title
+
+%\titletext!
+
+\name
+
+\address
+
+\end{LTXexample}
+
+\pagebreak
+    \section{Automation Example}\label{example}
+
+    Suppose you had a number of bills of sales in yaml format and wanted to produce some nice pdfs.
+    The following code shows how this could be done.
+
+    \pagebreak
+    \vspace*{-5em}
+    \subsection{The main tex template}
+    \begin{verbatim}
+ %% main.tex
+\documentclass{article}
+\usepackage[paperheight=4in,paperwidth=3in,margin=0.25in]{geometry}
+\usepackage[pl,func,extras]{penlight}
+\usepackage[useyv,parseCLI]{YAMLvars}  % using command line option to make files
+\usepackage{hyperref}
+\usepackage{xspace}
+\usepackage{luacode}
+
+\setlength{\parindent}{0ex}
+\setlength{\parskip}{0.75em}
+
+\begin{luacode*} -- adding a custom function, put hfill between k-v pairs
+    function YAMLvars.xfm.kv2hfill(var, val)
+        local t = {}
+        for k, v in pairs(val) do
+            t[#t+1] = k..'\\hfill '..tostring(v)
+        end
+        return t
+    end
+\end{luacode*}
+
+
+%! language = yaml
+\begin{declareYAMLvars}
+Customer: addxspace
+Date: addxspace
+Items:
+    xfm: [kv2hfill, arr2itemize]
+\end{declareYAMLvars}
+
+\begin{document}
+    Bill of sale for: \hfill \yv{Customer}\\
+    Purchased: \hfill \yv{Date}\\
+    \begin{itemize}
+        \item[] ITEM \hfill PRICE
+        \yv{Items}             % the yaml variable
+        \begin{luacode*}
+            totalcost = pl.tablex.reduce('+',
+                pl.tablex.values(YAMLvars.varsvals['Items']), 0)
+            tex.print('\\item[] TOTAL:\\hfill'..tostring(totalcost))
+        \end{luacode*}
+    \end{itemize}
+\end{document}
+    \end{verbatim}
+
+    \subsection{The lua automation script}
+    \begin{verbatim}
+--automate.lua
+for f in io.popen('dir .'):lines() do  -- get all files and info in cwd
+    local i, j = f:find('%S*%.yaml')  --  find fnames
+    if i ~= nil then
+        f = f:sub(i,j) --  extract .yaml file name (no space in fname allowed)
+        os.execute('lualatex -output-format=pdf main.tex '.. f)
+                                    -- compile w/ yaml file as arg
+        local fnew = f:gsub('yaml', 'pdf') -- file name for output pdf
+        os.remove(fnew) -- delete if it exists already
+        os.rename('main.pdf', fnew) -- change main.pdf to same as yaml file name
+    end
+end
+    \end{verbatim}
+
+\subsection{The yaml data files}
+    \begin{verbatim}
+# sale1.yaml
+Customer: Someone Cold
+Date: January 2, 2021
+Items:
+    Toque: 12
+    Mitts: 5.6
+    Boots: 80
+
+# sale2.yaml
+Customer: Someone Warm
+Date: July 1, 2021
+Items:
+    Beer (24 pk): 24
+    Sunscreen: 5
+    Hat: 12
+    \end{verbatim}
+\end{document}
+


Property changes on: trunk/Master/texmf-dist/doc/lualatex/yamlvars/yamlvars.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Deleted: trunk/Master/texmf-dist/tex/lualatex/yamlvars/YAMLvars.lua
===================================================================
--- trunk/Master/texmf-dist/tex/lualatex/yamlvars/YAMLvars.lua	2022-02-25 22:14:10 UTC (rev 62175)
+++ trunk/Master/texmf-dist/tex/lualatex/yamlvars/YAMLvars.lua	2022-02-25 22:14:36 UTC (rev 62176)
@@ -1,492 +0,0 @@
---% Kale Ewasiuk (kalekje at gmail.com)
---% 2022-01-18
---% 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.
-
-
--- tinyyaml license
---MIT License
---
---Copyright (c) 2017 peposso
---
---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.
-
-
-
-YAMLvars = {} -- self table
-YAMLvars.xfm = {}
-YAMLvars.prc = {}
-YAMLvars.dec = {} -- table of declare function
-
-YAMLvars.varsvals = {}
-YAMLvars.varspecs = {}
-
-YAMLvars.prcDefault = 'gdef'
-YAMLvars.dftDefault = nil
-YAMLvars.xfmDefault = {}
-
-YAMLvars.allowUndeclared = false
-YAMLvars.overwritedefs = false
-
-YAMLvars.valTemp = ''
-YAMLvars.varTemp = ''
-
-YAMLvars.tabmidrule = 'hline'
-
-YAMLvars.debug = false
-
-YAMLvars.yaml = require'markdown-tinyyaml' -- note: YAMLvars.sty will have checked existence of this already
-local pl = _G['penlight'] or _G['pl'] -- penlight for this namespace is pl
-
-
-function YAMLvars.debugtalk(s, ss)
-    if YAMLvars.debug then
-        help_wrt(s, ss)
-    end
-end
-
-
--- xfm functions (transforms) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-function YAMLvars.xfm.addxspace(var, val)
-    return val .. '\\xspace{}'
-end
-
-function YAMLvars.xfm.tab2arr(var, val)
-     return pl.array2d.from_table(val)
-end
-
-function YAMLvars.xfm.arrsort2ZA(var, val)
-    return pl.array2d.sortOP(val, pl.operator.strgt)
-end
-
-function YAMLvars.xfm.addrule2arr(var, val)
-     return pl.array2d.map_slice2(_1..'\\\\\\'.. YAMLvars.tabmidrule..' ', val, 1,-1,-2,-1) -- todo make gmidrule
-end
-
-function YAMLvars.xfm.arr2tabular(var, val)
-     return pl.array2d.toTeX(val)..'\\\\'
-end
-
-
-function YAMLvars.xfm.list2items(var, val) -- todo should be list2item
-     return pl.List(val):map('\\item '.._1):join(' ')
-end
-YAMLvars.xfm.arr2itemize = YAMLvars.xfm.list2items
-
-function YAMLvars.xfm.arrsortAZ(var, val)
-     return pl.List(val):sort(pl.operator.strlt)
-end
-
-function YAMLvars.xfm.arrsortZA(var, val)
-     return pl.List(val):sort(pl.operator.strgt)
-end
-
-local function complastname(a, b)
-    a = a:split(' ')
-    b = b:split(' ')
-    a = a[#a]
-    b = b[#b]
-    return a < b
-end
-
-function YAMLvars.xfm.arrsortlastnameAZ(var, val)
-    val = pl.List(val):sort(complastname)
-    return val
-end
--- todo need distinction beyyween table and penlight list ???
-function YAMLvars.xfm.list2nl(var, val)
-    return pl.tablex.join(val,'\\\\ ')
-end
-
-    --val = pl.array2d.map_slice1(_1..'\\\\', val, 1,-2)
-    --return val:join('')
-    --return pl.tablex.reduce(_1.._2, val, '')
-
-
-function YAMLvars.xfm.lb2nl(var, val) --linebreak in text 2 new line
-    val, _ = val:gsub('\n','\\\\ ')
-    return val
-end
-
-function YAMLvars.xfm.lowercase(var, val)
-    return val:lower()
-end
-
-
-function YAMLvars.xfm.markdown(var, val)
-     --return '\\begin{markdown} '..val..'\n \\end{markdown}'
-     help_wrt(val, md)
-     return [[begin markdown ..val..
-
-     par end markdown]]
-end
-
-
-
--- dec laration functions, -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-
-function YAMLvars.dec.gdef(var, dft)
-            YAMLvars.deccmd(var, dft)
-end
-
-function YAMLvars.dec.yvdef(var, dft)
-        YAMLvars.deccmd('yv--'..var, dft)
-end
-
-function YAMLvars.dec.toggle(var, dft)
-        tex.print('\\global\\newtoggle{'..var..'}')
-        YAMLvars.prc.toggle(var, dft)
-end
-
-function YAMLvars.dec.length(var, dft)
-        tex.print('\\global\\newlength{\\'..var..'}')
-        YAMLvars.prc.length(var, dft)
-end
-
-
-
--- prc functions (processing) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-
-function YAMLvars.prc.gdef(var, val)
-    token.set_macro(var, val, 'global')
-    YAMLvars.debugtalk(var..' = '..val, 'prc gdef')
-end
-
-function YAMLvars.prc.yvdef(var, val)
-    token.set_macro('yv--'..var, val, 'global')
-    YAMLvars.debugtalk('yv--'..var..' = '..val, 'prc yvdef')
-end
-
-function YAMLvars.prc.toggle(t, v) -- requires penlight extras
-    local s = ''
-    if hasval(v) then
-        s = '\\global\\toggletrue{'..t..'}'
-    else
-        s = '\\global\\togglefalse{'..t..'}'
-    end
-    tex.print(s)
-    YAMLvars.debugtalk(s, 'prc toggle')
-end
-
-function YAMLvars.prc.length(t, v)
-    v = v or '0pt'
-    local s = '\\global\\setlength{\\global\\'..t..'}{'..v..'}'
-    tex.print(s)
-    YAMLvars.debugtalk(s, 'prc length')
-end
-
-function YAMLvars.prc.PDFtitle(var, val)
-    tex.print('\\hypersetup{pdftitle={'..val..'}}')
-    --tex.print('\\setPDFtitle{'..val..'}')
-end
-
-function YAMLvars.prc.PDFauthor(var, val)
-    tex.print('\\hypersetup{pdfauthor={'..val..'}}')
-        --tex.print('\\setPDFauthor{'..val..'}')
-end
-
-
-function YAMLvars.prc.setheader(val, rl)
-    local _, count = string.gsub(val, '\\\\', '')
-    if count == 0 then
-        val = '{\\ }\\\\'..val
-    end
-    val = '\\setstretch{0.8}'..val
-    tex.print('\\'..rl..'ohead{'..val..'}')
-end
-
-function YAMLvars.prc.rhead(var, val)
-    YAMLvars.prc.setheader(val, 'r')
-end
-
-function YAMLvars.prc.lhead(var, val)
-    YAMLvars.prc.setheader(val, 'l')
-end
-
-function YAMLvars.prc.title(var, val)
-        token.set_macro('@title', val, 'global')
-end
-
-function YAMLvars.prc.author(var, val)
-        token.set_macro('@author', val, 'global')
-end
-
-function YAMLvars.prc.date(var, val)
-        token.set_macro('@date', val, 'global')
-end
-
--- do this with author, title, company
-function YAMLvars.prc.setdocvar(var, val)
-        tex.print('\\'..var..'{'..val..'}')
-end
-
-function YAMLvars.prc.setdocvarOpts(var, val)
-        local s = '\\'..var..'{'..tostring(val[1])..'}'
-        for k, v in pairs(val) do
-            if k > 1 then
-                s = s..'['..tostring(v)..']'
-            end
-        end
-        tex.print(s)
-end
-
-
-
--- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-
-
-
-function YAMLvars.prvcmd(cs, val) -- provide command via lua
-   if token.is_defined(cs) and (not YAMLvars.overwritedefs) then
-        tex.print('\\PackageError{YAMLvars}{Variable '..cs..' already defined, could not declare}{}')
-    else
-        token.set_macro(cs, val, 'global')
-    end
-end
-
-function YAMLvars.deccmd(cs, def)
-    if def == nil then
-        YAMLvars.prvcmd(cs, '\\PackageError{YAMLvars}{Variable "'..cs..'" was declared and used but, not set}{}')
-    else
-        YAMLvars.prvcmd(cs, def)
-    end
-end
-
-
-local function getYAMLfile(y)
-    local f = io.open(y,"r")
-    if f ~= nil then
-        y = f:read('*a')
-        io.close(f)
-        return y
-    else
-        tex.print('\\PackageError{YAMLvars}{YAML file "'..y..'" not found}{}')
-        return 'YAMLvars: FileNotFound'
-    end
-end
-
-
-
-function YAMLvars.declareYAMLvarsStr(y)
-    local t = YAMLvars.yaml.parse(y)
-    for var, specs in pairs(t) do
-        YAMLvars.varspecs[var] = {xfm=YAMLvars.xfmDefault,prc=YAMLvars.prcDefault,dft=YAMLvars.dftDefault}
-        if type(specs) == 'string' then
-            specs = {xfm={specs}}
-        end
-        if specs['xfm'] == nil then specs['xfm'] = {} end
-        for s, p in pairs(specs) do
-            if s == 'xfm' and type(p) ~= 'table' then p = {p} end
-            YAMLvars.varspecs[var][s] = p -- set property of var
-        end
-        if YAMLvars.dec[YAMLvars.varspecs[var].prc] ~= nil then
-            YAMLvars.dec[YAMLvars.varspecs[var].prc](var, YAMLvars.varspecs[var].dft)
-        --else -- actually don't a dec function for all
-        --    -- -- -- tex.print('\\PackageError{YAMLvars}{Declaration function for '..YAMLvarspecs[var].prc..'not found}{}')
-        end
-    end
-    YAMLvars.debugtalk(YAMLvars.varspecs, 'declared YAML vars, varspecs')
-end
-
-
-
-function YAMLvars.declareYAMLvarsFile(y)
-    YAMLvars.declareYAMLvarsStr(getYAMLfile(y))
-end
-
-
-local  function check_def(var, val)
-    if YAMLvars.allowUndeclared then
-        if YAMLvars.prcDefault == 'yvdef' then
-            YAMLvars.prc.yvdef(var, val)
-        else
-            YAMLvars.prvcmd(var, val)
-        end
-     else
-        tex.print('\\PackageError{YAMLvars}{Variable "'..var..'" set but not declared}{}')
-    end
-end
-
-local function sub_lua_var(s, v1, v2)
-    return s:gsub('([%A?%-?])('..v1..')([%W?%-?])', '%1'..v2..'%3') -- replace x variables
-end
-
-local _YV_invalid_expression = '\1 invalid expression'
-local _YV_no_return = '\2 no return val'
-local function eval_expr(func, var, val)
-    local s, c = func:gsub('^[=/]', {['/'] = '\2', ['='] = 'YAMLvars.valTemp = '}, 1) -- / is run code, = sets val = code
-    if c == 0 then
-        return _YV_invalid_expression
-    else
-        --help_wrt(s, var)
-        --help_wrt(val, var)
-        YAMLvars.valTemp = val
-        YAMLvars.varTemp = var
-        --help_wrt(s, var)
-        s, c = s:gsub('\2', '') -- strip \2 that might have appeared if / was applied
-        s = sub_lua_var(' '..s, 'x', 'YAMLvars.valTemp')
-        s = sub_lua_var(s, 'v', 'YAMLvars.varTemp')
-        --help_wrt(s, var)
-        local f, err = pcall(loadstring(s))
-        if not f then
-            tex.print('\\PackageError{YAMLvars}{xfm with "= or /" error on var "'..var..'"}{}') --
-        end
-        if c > 0 then
-            return _YV_no_return
-        end
-        return YAMLvars.valTemp
-    end
-end
-
-local function transform_and_prc(var, val)
-    for _, func in pairs(YAMLvars.varspecs[var]['xfm']) do --apply cleaning functions
-        local f = YAMLvars.xfm[func]
-        if f == nil then
-            local val2 =  eval_expr(func, var, val)
-            if val2 == _YV_invalid_expression then
-                tex.print('\\PackageError{YAMLvars}{xfm function "'..func..'" not defined or invalid expression passed on var "'..var..'"}{}')
-            elseif val == _YV_no_return then
-            else
-                val = val2
-            end
-        else
-            val = f(var, val)
-        end
-    end
-    f = YAMLvars.prc[YAMLvars.varspecs[var]['prc']]
-    if f == nil then
-        tex.print('\\PackageError{YAMLvars}{prc function "'..YAMLvars.varspecs[var]['prc']..'" on var "'..var..'" not defined}{}')
-    end
-    f(var, val) -- prc the value of the variable
-end
-
-function YAMLvars.parseYAMLvarsStr(y)
-    YAMLvars.varsvals = YAMLvars.yaml.parse(y)
-    for var, val in pairs(YAMLvars.varsvals) do
-        if YAMLvars.varspecs[var] == nil then
-            check_def(var, val) -- if not declared
-            -- todo consider free form parse declaring
-            -- variable name: {xfm:, dec:, prc:, val: }
-            -- definitely doable here
-        else
-            transform_and_prc(var, val)
-        end
-    end
-end
-
-function YAMLvars.parseYAMLvarsFile(y)
-    YAMLvars.parseYAMLvarsStr(getYAMLfile(y))
-end
-
-
-
-function YAMLvars.print_varspecs()
-    local pretty = require('pl.pretty')
-    texio.write_nl('VVVVVV Var specifications:')
-    texio.write_nl(pretty.write(YAMLvars.varspecs))
-end
-
-
-
--- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-
--- https://tex.stackexchange.com/questions/38150/in-lualatex-how-do-i-pass-the-content-of-an-environment-to-lua-verbatim
-recordedbuf = ""
-function readbuf(buf)
-    i,j = string.find(buf, '\\end{%w+}')
-     if i==nil then -- if not ending an environment
-        recordedbuf = recordedbuf .. buf .. "\n"
-        return ""
-    else
-        return nil
-    end
-end
-
-function startrecording()
-    recordedbuf = ""
-    luatexbase.add_to_callback('process_input_buffer', readbuf, 'readbuf')
-end
-
-function stoprecording()
-    luatexbase.remove_from_callback('process_input_buffer', 'readbuf')
-    recordedbuf = recordedbuf:gsub("\\end{%w+}\n","")
-end
-
-
-
-function YAMLvars.doYAMLfiles(t)
-    if #t == 2 then
-        YAMLvars.declareYAMLvarsFile(t[1])
-        YAMLvars.parseYAMLvarsFile(t[2])
-    elseif #t == 1 then
-        YAMLvars.parseYAMLvarsFile(t[1])
-    else
-        tex.print('\\PackageWarning{YAMLvars}{No .yaml files found in CLI args"}{}')
-    end
-end
-
-function YAMLvars.getYAMLcli()
-    local t = {}
-    if arg then
-      for i,v in pairs(arg) do
-          if v:find('.*%.yaml$') then
-              t[#t+1] = v
-          end
-      end
-    end
-    --help_wrt(t)
-    return t
- end
-
-
-return YAMLvars
-
-
-
-  --clean = clean or true
-    --if clean then -- clean first part of yaml string
-    --    y = clean_tex_spaces(y)
-    --end
---local function clean_tex_spaces(s)
---    help_wrt(s)
---    if s:sub(1,2) == '%s' then
---        s, _ = s:gsub('%s+','',1)
---    end
---    s, _ = s:gsub('\\par ','\n\n')
---    return s
---end
\ No newline at end of file

Deleted: trunk/Master/texmf-dist/tex/lualatex/yamlvars/YAMLvars.sty
===================================================================
--- trunk/Master/texmf-dist/tex/lualatex/yamlvars/YAMLvars.sty	2022-02-25 22:14:10 UTC (rev 62175)
+++ trunk/Master/texmf-dist/tex/lualatex/yamlvars/YAMLvars.sty	2022-02-25 22:14:36 UTC (rev 62176)
@@ -1,74 +0,0 @@
-% Kale Ewasiuk (kalekje at gmail.com)
-% 2022-01-18
-% 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.
-
-
-
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{YAMLvars}[2022-01-18]
-
-\IfFileExists{markdown-tinyyaml.lua}{}{\PackageError{YAMLvars}{This package requires installation of the 'markdown' package, please install it and try again}{}}
-
-\RequirePackage{luacode}
-\RequirePackage{xspace}
-\RequirePackage{etoolbox}
-\RequirePackage[pl,extras]{penlight}
-
-\luadirect{YAMLvars = require('YAMLvars')}
-
-\DeclareOption{useyv}{
-        \gdef\yv#1{\csname yv--#1\endcsname}
-        \luadirect{YAMLvars.prcDefault = 'yvdef'}
-}
-\DeclareOption{parseCLI}{
-      \AtBeginDocument{\luadirect{YAMLvars.doYAMLfiles(YAMLvars.getYAMLcli())}}
-}
-\DeclareOption{allowundeclared}{
-        \luadirect{YAMLvars.allowUndeclared = true}
-}
-\DeclareOption{overwritedefs}{
-        \luadirect{YAMLvars.overwritedefs = true}
-}
-\DeclareOption{debug}{
-        \luadirect{YAMLvars.debug = true}
-}
-
-\DeclareOption*{\PackageWarning{YAMLvars}{Unknown option: '\CurrentOption'}{}}
-\ProcessOptions\relax
-
-
-\newcommand{\declareYAMLvarsFile}[1]{\luadirect{YAMLvars.declareYAMLvarsFile(\luastring{#1})}}
-\newcommand{\parseYAMLvarsFile}[1]{\luadirect{YAMLvars.parseYAMLvarsFile(\luastring{#1})}}
-
-
-\newenvironment{declareYAMLvars}{\luadirect{startrecording()}}{\luadirect{stoprecording()}
-\luadirect{YAMLvars.declareYAMLvarsStr(recordedbuf)}
-}
-
-\newenvironment{parseYAMLvars}{\luadirect{startrecording()}}{\luadirect{stoprecording()}
-\luadirect{YAMLvars.parseYAMLvarsStr(recordedbuf)}
-}
-
-\newcommand{\resetYAMLvarsspec}{\luadirect{YAMLvars.varspec = {}}}
-
-\newcommand{\AllowUndeclaredYV}{\luadirect{YAMLvars.allowUndeclared = true}}

Added: trunk/Master/texmf-dist/tex/lualatex/yamlvars/yamlvars.lua
===================================================================
--- trunk/Master/texmf-dist/tex/lualatex/yamlvars/yamlvars.lua	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/lualatex/yamlvars/yamlvars.lua	2022-02-25 22:14:36 UTC (rev 62176)
@@ -0,0 +1,498 @@
+--% Kale Ewasiuk (kalekje at gmail.com)
+--% 2022-02-25
+--% 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.
+
+
+-- tinyyaml license
+--MIT License
+--
+--Copyright (c) 2017 peposso
+--
+--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.
+
+
+
+YAMLvars = {} -- self table
+YAMLvars.xfm = {}
+YAMLvars.prc = {}
+YAMLvars.dec = {} -- table of declare function
+
+YAMLvars.varsvals = {}
+YAMLvars.varspecs = {}
+
+YAMLvars.xfmDefault = {}
+YAMLvars.prcDefault = 'gdef'
+YAMLvars.dftDefault = nil
+
+YAMLvars.allowUndeclared = false
+YAMLvars.overwritedefs = false
+
+YAMLvars.valTemp = ''
+YAMLvars.varTemp = ''
+
+YAMLvars.tabmidrule = 'hline'
+
+YAMLvars.debug = false
+
+YAMLvars.yaml = require'markdown-tinyyaml' -- note: YAMLvars.sty will have checked existence of this already
+local pl = _G['penlight'] or _G['pl'] -- penlight for this namespace is pl
+
+
+function YAMLvars.debugtalk(s, ss)
+    if YAMLvars.debug then
+        help_wrt(s, ss)
+    end
+end
+
+
+-- xfm functions (transforms) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+function YAMLvars.xfm.addxspace(var, val)
+    return val .. '\\xspace'
+end
+
+function YAMLvars.xfm.tab2arr(var, val)
+     return pl.array2d.from_table(val)
+end
+
+function YAMLvars.xfm.arrsort2ZA(var, val)
+    return pl.array2d.sortOP(val, pl.operator.strgt)
+end
+
+function YAMLvars.xfm.addrule2arr(var, val)
+     return pl.array2d.map_slice2(_1..'\\\\\\'.. YAMLvars.tabmidrule..' ', val, 1,-1,-2,-1) -- todo make gmidrule
+end
+
+function YAMLvars.xfm.arr2tabular(var, val)
+     return pl.array2d.toTeX(val)..'\\\\'
+end
+
+
+function YAMLvars.xfm.list2items(var, val) -- todo should be list2item
+     return pl.List(val):map('\\item '.._1):join(' ')
+end
+YAMLvars.xfm.arr2itemize = YAMLvars.xfm.list2items
+
+function YAMLvars.xfm.arrsortAZ(var, val)
+     return pl.List(val):sort(pl.operator.strlt)
+end
+
+function YAMLvars.xfm.arrsortZA(var, val)
+     return pl.List(val):sort(pl.operator.strgt)
+end
+
+local function complastname(a, b)
+    a = a:split(' ')
+    b = b:split(' ')
+    a = a[#a]
+    b = b[#b]
+    return a < b
+end
+
+function YAMLvars.xfm.arrsortlastnameAZ(var, val)
+    val = pl.List(val):sort(complastname)
+    return val
+end
+-- todo need distinction beyyween table and penlight list ???
+function YAMLvars.xfm.list2nl(var, val)
+    return pl.tablex.join(val,'\\\\ ')
+end
+
+    --val = pl.array2d.map_slice1(_1..'\\\\', val, 1,-2)
+    --return val:join('')
+    --return pl.tablex.reduce(_1.._2, val, '')
+
+
+function YAMLvars.xfm.lb2nl(var, val) --linebreak in text 2 new line
+    val, _ = val:gsub('\n','\\\\ ')
+    return val
+end
+
+function YAMLvars.xfm.lowercase(var, val)
+    return val:lower()
+end
+
+
+function YAMLvars.xfm.markdown(var, val)
+     --return '\\begin{markdown} '..val..'\n \\end{markdown}'
+     help_wrt(val, md)
+     return [[begin markdown ..val..
+
+     par end markdown]]
+end
+
+
+
+-- dec laration functions, -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+function YAMLvars.dec.gdef(var, dft)
+            YAMLvars.deccmd(var, dft)
+end
+
+function YAMLvars.dec.yvdef(var, dft)
+        YAMLvars.deccmd('yv--'..var, dft)
+end
+
+function YAMLvars.dec.toggle(var, dft)
+        tex.print('\\global\\newtoggle{'..var..'}')
+        YAMLvars.prc.toggle(var, dft)
+end
+
+function YAMLvars.dec.length(var, dft)
+        tex.print('\\global\\newlength{\\'..var..'}')
+        YAMLvars.prc.length(var, dft)
+end
+
+
+
+-- prc functions (processing) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+function YAMLvars.prc.gdef(var, val)
+    token.set_macro(var, val, 'global')
+    YAMLvars.debugtalk(var..' = '..val, 'prc gdef')
+end
+
+function YAMLvars.prc.yvdef(var, val)
+    token.set_macro('yv--'..var, val, 'global')
+    YAMLvars.debugtalk('yv--'..var..' = '..val, 'prc yvdef')
+end
+
+function YAMLvars.prc.toggle(t, v) -- requires penlight extras
+    local s = ''
+    if hasval(v) then
+        s = '\\global\\toggletrue{'..t..'}'
+    else
+        s = '\\global\\togglefalse{'..t..'}'
+    end
+    tex.print(s)
+    YAMLvars.debugtalk(s, 'prc toggle')
+end
+
+function YAMLvars.prc.length(t, v)
+    v = v or '0pt'
+    local s = '\\global\\setlength{\\global\\'..t..'}{'..v..'}'
+    tex.print(s)
+    YAMLvars.debugtalk(s, 'prc length')
+end
+
+function YAMLvars.prc.PDFtitle(var, val)
+    tex.print('\\hypersetup{pdftitle={'..val..'}}')
+    --tex.print('\\setPDFtitle{'..val..'}')
+end
+
+function YAMLvars.prc.PDFauthor(var, val)
+    tex.print('\\hypersetup{pdfauthor={'..val..'}}')
+        --tex.print('\\setPDFauthor{'..val..'}')
+end
+
+
+function YAMLvars.prc.setheader(val, rl)
+    local _, count = string.gsub(val, '\\\\', '')
+    if count == 0 then
+        val = '{\\ }\\\\'..val
+    end
+    val = '\\setstretch{0.8}'..val
+    tex.print('\\'..rl..'ohead{'..val..'}')
+end
+
+function YAMLvars.prc.rhead(var, val)
+    YAMLvars.prc.setheader(val, 'r')
+end
+
+function YAMLvars.prc.lhead(var, val)
+    YAMLvars.prc.setheader(val, 'l')
+end
+
+function YAMLvars.prc.title(var, val)
+        token.set_macro('@title', val, 'global')
+end
+
+function YAMLvars.prc.author(var, val)
+        token.set_macro('@author', val, 'global')
+end
+
+function YAMLvars.prc.date(var, val)
+        token.set_macro('@date', val, 'global')
+end
+
+-- do this with author, title, company
+function YAMLvars.prc.setdocvar(var, val)
+        tex.print('\\'..var..'{'..val..'}')
+end
+
+function YAMLvars.prc.setdocvarOpts(var, val)
+        local s = '\\'..var..'{'..tostring(val[1])..'}'
+        for k, v in pairs(val) do
+            if k > 1 then
+                s = s..'['..tostring(v)..']'
+            end
+        end
+        tex.print(s)
+end
+
+
+
+-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+function YAMLvars.prvcmd(cs, val) -- provide command via lua
+   if token.is_defined(cs) and (not YAMLvars.overwritedefs) then
+        tex.print('\\PackageError{YAMLvars}{Variable '..cs..' already defined, could not declare}{}')
+    else
+        token.set_macro(cs, val, 'global')
+    end
+end
+
+function YAMLvars.deccmd(cs, def)
+    if def == nil then
+        YAMLvars.prvcmd(cs, '\\PackageError{YAMLvars}{Variable "'..cs..'" was declared and used but, not set}{}')
+    else
+        YAMLvars.prvcmd(cs, def)
+    end
+end
+
+
+local function getYAMLfile(y)
+    local f = io.open(y,"r")
+    if f ~= nil then
+        y = f:read('*a')
+        io.close(f)
+        return y
+    else
+        tex.print('\\PackageError{YAMLvars}{YAML file "'..y..'" not found}{}')
+        return 'YAMLvars: FileNotFound'
+    end
+end
+
+
+
+function YAMLvars.declareYAMLvarsStr(y)
+    local t = YAMLvars.yaml.parse(y)
+    for var, specs in pairs(t) do
+        YAMLvars.varspecs[var] = {xfm=YAMLvars.xfmDefault,prc=YAMLvars.prcDefault,dft=YAMLvars.dftDefault}
+        if type(specs) == 'string' then
+            specs = {xfm={specs}}
+        end
+        if specs['xfm'] == nil then specs['xfm'] = {} end
+        for s, p in pairs(specs) do
+            if s == 'xfm' and type(p) ~= 'table' then p = {p} end
+            YAMLvars.varspecs[var][s] = p -- set property of var
+        end
+        if YAMLvars.dec[YAMLvars.varspecs[var].prc] ~= nil then
+            YAMLvars.dec[YAMLvars.varspecs[var].prc](var, YAMLvars.varspecs[var].dft)
+        --else -- actually don't a dec function for all
+        --    -- -- -- tex.print('\\PackageError{YAMLvars}{Declaration function for '..YAMLvarspecs[var].prc..'not found}{}')
+        end
+    end
+    YAMLvars.debugtalk(YAMLvars.varspecs, 'declared YAML vars, varspecs')
+end
+
+
+
+function YAMLvars.declareYAMLvarsFile(y)
+    YAMLvars.declareYAMLvarsStr(getYAMLfile(y))
+end
+
+
+local  function check_def(var, val)
+    if YAMLvars.allowUndeclared then
+        if YAMLvars.prcDefault == 'yvdef' then
+            YAMLvars.prc.yvdef(var, val)
+        else
+            YAMLvars.prvcmd(var, val)
+        end
+     else
+        tex.print('\\PackageError{YAMLvars}{Variable "'..var..'" set but not declared}{}')
+    end
+end
+
+local function sub_lua_var(s, v1, v2)
+    return s:gsub('([%A?%-?])('..v1..')([%W?%-?])', '%1'..v2..'%3') -- replace x variables
+end
+
+local _YV_invalid_expression = '\1 invalid expression'
+local _YV_no_return = '\2 no return val'
+
+local function expr_err(var, val)
+    tex.print('\\PackageError{YAMLvars}{xfm with "= or /" error on var "'..var..'"}{}') -- todo make program stop
+end
+
+local function eval_expr(func, var, val)
+    local s, c = func:gsub('^[=/]', {['/'] = '\2', ['='] = 'YAMLvars.valTemp = '}, 1) -- / is run code, = sets val = code
+    if c == 0 then
+        return _YV_invalid_expression
+    else
+        --help_wrt(s, var)
+        --help_wrt(val, var)
+        YAMLvars.valTemp = val
+        YAMLvars.varTemp = var
+        --help_wrt(s, var)
+        s, c = s:gsub('\2', '') -- strip \2 that might have appeared if / was applied
+        s = sub_lua_var(' '..s, 'x', 'YAMLvars.valTemp')
+        s = sub_lua_var(s, 'v', 'YAMLvars.varTemp')
+        --help_wrt(s, var)
+        local f, err = pcall(loadstring(s))
+        if not f then
+            tex.print('\\PackageError{YAMLvars}{xfm with "= or /" error on var "'..var..'"}{}') --
+        end
+        if c > 0 then
+            expr_err(var)
+            return _YV_no_return
+        end
+        return YAMLvars.valTemp
+    end
+end
+
+local function transform_and_prc(var, val)
+    for _, func in pairs(YAMLvars.varspecs[var]['xfm']) do --apply cleaning functions
+        local f = YAMLvars.xfm[func]
+        if f == nil then
+            local val2 =  eval_expr(func, var, val)
+            if val2 == _YV_invalid_expression then
+                tex.print('\\PackageError{YAMLvars}{xfm function "'..func..'" not defined or invalid expression passed on var "'..var..'"}{}')
+            elseif val == _YV_no_return then
+            else
+                val = val2
+            end
+        else
+            val = f(var, val)
+        end
+    end
+    f = YAMLvars.prc[YAMLvars.varspecs[var]['prc']]
+    if f == nil then
+        tex.print('\\PackageError{YAMLvars}{prc function "'..YAMLvars.varspecs[var]['prc']..'" on var "'..var..'" not defined}{}')
+    end
+    f(var, val) -- prc the value of the variable
+end
+
+function YAMLvars.parseYAMLvarsStr(y)
+    YAMLvars.varsvals = YAMLvars.yaml.parse(y)
+    for var, val in pairs(YAMLvars.varsvals) do
+        if YAMLvars.varspecs[var] == nil then
+            check_def(var, val) -- if not declared
+            -- todo consider free form parse declaring
+            -- variable name: {xfm:, dec:, prc:, val: }
+            -- definitely doable here
+        else
+            transform_and_prc(var, val)
+        end
+    end
+end
+
+function YAMLvars.parseYAMLvarsFile(y)
+    YAMLvars.parseYAMLvarsStr(getYAMLfile(y))
+end
+
+
+
+function YAMLvars.print_varspecs()
+    local pretty = require('pl.pretty')
+    texio.write_nl('VVVVVV Var specifications:')
+    texio.write_nl(pretty.write(YAMLvars.varspecs))
+end
+
+
+
+-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+-- https://tex.stackexchange.com/questions/38150/in-lualatex-how-do-i-pass-the-content-of-an-environment-to-lua-verbatim
+recordedbuf = ""
+function readbuf(buf)
+    i,j = string.find(buf, '\\end{%w+}')
+     if i==nil then -- if not ending an environment
+        recordedbuf = recordedbuf .. buf .. "\n"
+        return ""
+    else
+        return nil
+    end
+end
+
+function startrecording()
+    recordedbuf = ""
+    luatexbase.add_to_callback('process_input_buffer', readbuf, 'readbuf')
+end
+
+function stoprecording()
+    luatexbase.remove_from_callback('process_input_buffer', 'readbuf')
+    recordedbuf = recordedbuf:gsub("\\end{%w+}\n","")
+end
+
+
+
+function YAMLvars.doYAMLfiles(t)
+    if #t == 2 then
+        YAMLvars.declareYAMLvarsFile(t[1])
+        YAMLvars.parseYAMLvarsFile(t[2])
+    elseif #t == 1 then
+        YAMLvars.parseYAMLvarsFile(t[1])
+    else
+        tex.print('\\PackageWarning{YAMLvars}{No .yaml files found in CLI args"}{}')
+    end
+end
+
+function YAMLvars.getYAMLcli()
+    local t = {}
+    if arg then
+      for i,v in pairs(arg) do
+          if v:find('.*%.yaml$') then
+              t[#t+1] = v
+          end
+      end
+    end
+    --help_wrt(t)
+    return t
+ end
+
+
+return YAMLvars
+
+
+
+  --clean = clean or true
+    --if clean then -- clean first part of yaml string
+    --    y = clean_tex_spaces(y)
+    --end
+--local function clean_tex_spaces(s)
+--    help_wrt(s)
+--    if s:sub(1,2) == '%s' then
+--        s, _ = s:gsub('%s+','',1)
+--    end
+--    s, _ = s:gsub('\\par ','\n\n')
+--    return s
+--end
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/lualatex/yamlvars/yamlvars.lua
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/lualatex/yamlvars/yamlvars.sty
===================================================================
--- trunk/Master/texmf-dist/tex/lualatex/yamlvars/yamlvars.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/lualatex/yamlvars/yamlvars.sty	2022-02-25 22:14:36 UTC (rev 62176)
@@ -0,0 +1,75 @@
+% Kale Ewasiuk (kalekje at gmail.com)
+% 2022-02-25
+% 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.
+
+
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{YAMLvars}[2022-02-25]
+
+\IfFileExists{markdown-tinyyaml.lua}{}{\PackageError{YAMLvars}{This package requires installation of the 'markdown' package, please install it and try again}{}}
+
+\RequirePackage{luacode}
+\RequirePackage{xspace}
+\RequirePackage{etoolbox}
+\RequirePackage[pl,extras]{penlight}
+
+\luadirect{YAMLvars = require('YAMLvars')}
+
+\DeclareOption{useyv}{
+        \gdef\yv#1{\csname yv--#1\endcsname}
+        \luadirect{YAMLvars.prcDefault = 'yvdef'}
+}
+\DeclareOption{parseCLI}{
+      \AtBeginDocument{\luadirect{YAMLvars.doYAMLfiles(YAMLvars.getYAMLcli())}}
+}
+\DeclareOption{allowundeclared}{
+        \luadirect{YAMLvars.allowUndeclared = true}
+}
+\DeclareOption{overwritedefs}{
+        \luadirect{YAMLvars.overwritedefs = true}
+}
+\DeclareOption{debug}{
+        \luadirect{YAMLvars.debug = true}
+}
+
+\DeclareOption*{\PackageWarning{YAMLvars}{Unknown option: '\CurrentOption'}{}}
+\ProcessOptions\relax
+
+
+\newcommand{\declareYAMLvarsFile}[1]{\luadirect{YAMLvars.declareYAMLvarsFile(\luastring{#1})}}
+\newcommand{\parseYAMLvarsFile}[1]{\luadirect{YAMLvars.parseYAMLvarsFile(\luastring{#1})}}
+
+
+\newenvironment{declareYAMLvars}{\luadirect{startrecording()}}{\luadirect{stoprecording()}
+\luadirect{YAMLvars.declareYAMLvarsStr(recordedbuf)}
+}
+
+\newenvironment{parseYAMLvars}{\luadirect{startrecording()}}{\luadirect{stoprecording()}
+\luadirect{YAMLvars.parseYAMLvarsStr(recordedbuf)}
+}
+
+\newcommand{\resetYAMLvarsspec}{\luadirect{YAMLvars.varspec = {}}}
+
+\newcommand{\AllowUndeclaredYV}{\luadirect{YAMLvars.allowUndeclared = true}}
+\newcommand{\ForbidUndeclaredYV}{\luadirect{YAMLvars.allowUndeclared = false}}


Property changes on: trunk/Master/texmf-dist/tex/lualatex/yamlvars/yamlvars.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property


More information about the tex-live-commits mailing list.