summaryrefslogtreecommitdiff
path: root/macros/luatex/latex/lua-placeholders/scripts/lua-placeholders-namespace.lua
diff options
context:
space:
mode:
Diffstat (limited to 'macros/luatex/latex/lua-placeholders/scripts/lua-placeholders-namespace.lua')
-rw-r--r--macros/luatex/latex/lua-placeholders/scripts/lua-placeholders-namespace.lua94
1 files changed, 94 insertions, 0 deletions
diff --git a/macros/luatex/latex/lua-placeholders/scripts/lua-placeholders-namespace.lua b/macros/luatex/latex/lua-placeholders/scripts/lua-placeholders-namespace.lua
new file mode 100644
index 0000000000..fb84447a25
--- /dev/null
+++ b/macros/luatex/latex/lua-placeholders/scripts/lua-placeholders-namespace.lua
@@ -0,0 +1,94 @@
+-- lua-placeholders-namespace.lua
+-- Copyright 2024 E. Nijenhuis
+--
+-- This work may be distributed and/or modified under the
+-- conditions of the LaTeX Project Public License, either version 1.3c
+-- 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.3c 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 E. Nijenhuis.
+--
+-- This work consists of the files lua-placeholders.sty
+-- lua-placeholders-manual.pdf lua-placeholders.lua
+-- lua-placeholders-common.lua lua-placeholders-namespace.lua
+-- lua-placeholders-parser.lua and lua-placeholders-types.lua
+
+require('lua-placeholders-types')
+
+local namespace = {
+ strict = false,
+ recipe_file = nil,
+ recipe_loaded = false,
+ payload_file = nil,
+ payload_loaded = false
+}
+
+function namespace.parse_filename(path)
+ local abs_path = kpse.find_file(path)
+ local _, _, name = abs_path:find('/?%w*/*(%w+)%.%w+')
+ return name, abs_path
+end
+
+function namespace:new(_o)
+ local o = {
+ recipe_file = _o.recipe_file,
+ payload_file = _o.payload_file,
+ strict = _o.strict,
+ values = {}
+ }
+ setmetatable(o, self)
+ self.__index = self
+ return o
+end
+
+function namespace:load_recipe(params)
+ for key, opts in pairs(params) do
+ local param = base_param.define(key, opts)
+ if param then
+ self.values[key] = param
+ end
+ end
+ self.recipe_loaded = true
+end
+
+function namespace:load_payload(values)
+ if self.recipe_loaded then
+ if values then
+ for key, value in pairs(values) do
+ if self.values[key] then
+ local param = self.values[key]
+ param:load(key, value)
+ else
+ texio.write_nl('Warning: passed an unknown key ' .. key)
+ end
+ texio.write_nl('Key' .. key)
+ end
+ else
+ texio.write_nl('Warning: Payload file was empty')
+ end
+ self.payload_loaded = true
+ end
+end
+
+function namespace:param(key)
+ if not self.recipe_loaded then
+ tex.error('Error: Recipe was not loaded yet...')
+ return nil
+ end
+ if not self.payload_loaded then
+ if self.strict then
+ tex.error('Error: Payload was not loaded yet...')
+ return nil
+ else
+ texio.write_nl('Warning: Payload was not loaded yet...')
+ end
+ end
+ return self.values[key]
+end
+
+return namespace