diff options
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.lua | 94 |
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 |