# HG changeset patch # User Matthew Wild # Date 1679584150 0 # Node ID 14ed4cb241f44797f9ef849eafb5a1f346a20a3b # Parent 2c17151ed21b60cf56274a631bfb6c0418b6e40e scansion: Support for per-script captures diff -r 2c17151ed21b -r 14ed4cb241f4 main.lua --- a/main.lua Thu Mar 23 12:14:53 2023 +0000 +++ b/main.lua Thu Mar 23 15:09:10 2023 +0000 @@ -141,6 +141,7 @@ end local function initialize_script(script, context) + script.captures = {}; local c = 0; for name, object in pairs(script.objects) do --luacheck: ignore name context.line = object.defined_line diff -r 2c17151ed21b -r 14ed4cb241f4 scansion/helpers.lua --- a/scansion/helpers.lua Thu Mar 23 12:14:53 2023 +0000 +++ b/scansion/helpers.lua Thu Mar 23 15:09:10 2023 +0000 @@ -1,6 +1,9 @@ local function filter_expression(script, s) local expr = s:match("^%$%{(.+)%}$"); if not expr then return s end + if script.captures and script.captures[expr] then + return script.captures[expr]; + end local name, value_name = expr:match("^(.+)'s (.+)$"); assert(name, "Unable to parse expression: "..expr); local key = value_name:lower():gsub(" ", "_"); diff -r 2c17151ed21b -r 14ed4cb241f4 scansion/objects/client.lua --- a/scansion/objects/client.lua Thu Mar 23 12:14:53 2023 +0000 +++ b/scansion/objects/client.lua Thu Mar 23 15:09:10 2023 +0000 @@ -83,7 +83,7 @@ text = "Received unexpected stanza"; stanza = tostring(received_stanza); })); - elseif not expected_stanza or not stanzacmp.stanzas_match(expected_stanza, received_stanza) then + elseif not expected_stanza or not stanzacmp.stanzas_match(expected_stanza, received_stanza, client.script.captures) then if not expected_stanza then client.log("Received a stanza when none were expected: %s", received_stanza); else