From 27d6efb5f5a076f825fe2da1875e0cabaf02b4e7 Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 17 Nov 2021 23:03:07 +0800 Subject: + LuaMacro --- Tools/LuaMacro/tests/rawhash.lua | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Tools/LuaMacro/tests/rawhash.lua (limited to 'Tools/LuaMacro/tests/rawhash.lua') diff --git a/Tools/LuaMacro/tests/rawhash.lua b/Tools/LuaMacro/tests/rawhash.lua new file mode 100644 index 0000000..fdd86b3 --- /dev/null +++ b/Tools/LuaMacro/tests/rawhash.lua @@ -0,0 +1,34 @@ +local M = require 'macro' + +local concat = table.concat + +M.define ('Tab',function(get) + get() -- skip space + -- 'Tab' acts as a 'type' followed by a variable list + local vars,endt = get:idens (function(t,v) + return t == '=' or (t == 'space' and v:find '\n') + end) + local values = {} + for i,name in ipairs(vars) do + M.define_scoped(name,function(get,put) + local t,v = get:peek(1) + if t ~= '[' then return nil, true end -- pass-through; plain var reference + get:expecting '[' + local args = get:list(']','') + local index = args[1] + for i = 1,#index do + if index[i][1] == '#' and (i == #index or index[i+1][1] ~= 'iden') then + table.insert(index,i+1,{'iden',name}) + end + end + return '['..tostring(index)..']',true + end) + values[i] = '{}' + end + local lcal = M._interactive and '' or 'local ' + local res = lcal..concat(vars,',')..' = '..concat(values,',')..tostring(endt) + return res +end) + + + -- cgit v1.1-26-g67d0