Module:C: Difference between revisions
From Teriock
More actions
// via Wikitext Extension for VSCode Tag: Reverted |
// via Wikitext Extension for VSCode Tag: Manual revert |
||
| Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
local p = {} | |||
local | |||
function p.c(frame) | function p.c(frame) | ||
| Line 87: | Line 7: | ||
local rawAbilities = args['a'] or '' | local rawAbilities = args['a'] or '' | ||
-- | -- Parse abilities into a structured table | ||
local abilities = {} | local abilities = {} | ||
for ability in mw.text.gsplit(rawAbilities, ";;", true) do | for ability in mw.text.gsplit(rawAbilities, ";;", true) do | ||
ability = mw.text.trim(ability) | ability = mw.text.trim(ability) | ||
| Line 138: | Line 16: | ||
local gifted, adept = false, false | local gifted, adept = false, false | ||
-- flags | |||
if mw.ustring.find(ability, "%-g%-") then gifted = true end | if mw.ustring.find(ability, "%-g%-") then gifted = true end | ||
if mw.ustring.find(ability, "%-a%-") then adept = true end | if mw.ustring.find(ability, "%-a%-") then adept = true end | ||
-- | -- notes (order-insensitive, tolerate any following marker) | ||
local limitedMatch = mw.ustring.match(ability, "%-l%-(.-)(%-[liag]%-|$)") | local limitedMatch = mw.ustring.match(ability, "%-l%-(.-)(%-[liag]%-|$)") | ||
or mw.ustring.match(ability, "%-l%-(.+)$") | or mw.ustring.match(ability, "%-l%-(.+)$") | ||
| Line 150: | Line 29: | ||
if improvedMatch then improved = mw.text.trim(improvedMatch) end | if improvedMatch then improved = mw.text.trim(improvedMatch) end | ||
-- | -- clean name (strip markers + their payloads/flags) | ||
name = mw.ustring.gsub(name, "%-l%-.+", "") | name = mw.ustring.gsub(name, "%-l%-.+", "") | ||
name = mw.ustring.gsub(name, "%-i%-.+", "") | name = mw.ustring.gsub(name, "%-i%-.+", "") | ||
| Line 157: | Line 36: | ||
name = mw.text.trim(name) | name = mw.text.trim(name) | ||
table.insert(abilities, { | |||
name = name, | name = name, | ||
limited = limited, | limited = limited, | ||
| Line 163: | Line 42: | ||
gifted = gifted, | gifted = gifted, | ||
adept = adept | adept = adept | ||
} | }) | ||
end | end | ||
end | end | ||
-- | -- Sort alphabetically by name (stable) | ||
table.sort(abilities, function(a, b) return a.name < b.name end) | |||
local | -- Build the out string (NO visible separators between AE templates) | ||
local transclusions = {} | |||
for _, a in ipairs(abilities) do | |||
local t = {"{{AE|", a.name} | |||
if a.limited ~= "" then table.insert(t, "|limited=" .. a.limited) end | |||
if a.improved ~= "" then table.insert(t, "|improved=" .. a.improved) end | |||
if a.gifted then table.insert(t, "|gifted=1") end | |||
if a.adept then table.insert(t, "|adept=1") end | |||
table.insert(t, "}}") | |||
table.insert(transclusions, table.concat(t)) | |||
end | end | ||
-- | -- Use "" (or "\n") so no semicolons are emitted | ||
local inner = table.concat(transclusions, "") -- <- changed from ";; " | |||
local out = '<div class="expandable-table"><div>' .. frame:preprocess(inner) .. '</div></div>' | local out = '<div class="expandable-table"><div>' .. frame:preprocess(inner) .. '</div></div>' | ||
return out | return out | ||
end | end | ||
return p | return p | ||
Revision as of 06:04, 12 August 2025
Documentation for this module may be created at Module:C/doc
local p = {}
local p = {}
function p.c(frame)
local args = frame.args
local rawAbilities = args['a'] or ''
-- Parse abilities into a structured table
local abilities = {}
for ability in mw.text.gsplit(rawAbilities, ";;", true) do
ability = mw.text.trim(ability)
if ability ~= "" then
local name = ability
local limited, improved = "", ""
local gifted, adept = false, false
-- flags
if mw.ustring.find(ability, "%-g%-") then gifted = true end
if mw.ustring.find(ability, "%-a%-") then adept = true end
-- notes (order-insensitive, tolerate any following marker)
local limitedMatch = mw.ustring.match(ability, "%-l%-(.-)(%-[liag]%-|$)")
or mw.ustring.match(ability, "%-l%-(.+)$")
if limitedMatch then limited = mw.text.trim(limitedMatch) end
local improvedMatch = mw.ustring.match(ability, "%-i%-(.-)(%-[liag]%-|$)")
or mw.ustring.match(ability, "%-i%-(.+)$")
if improvedMatch then improved = mw.text.trim(improvedMatch) end
-- clean name (strip markers + their payloads/flags)
name = mw.ustring.gsub(name, "%-l%-.+", "")
name = mw.ustring.gsub(name, "%-i%-.+", "")
name = mw.ustring.gsub(name, "%-g%-", "")
name = mw.ustring.gsub(name, "%-a%-", "")
name = mw.text.trim(name)
table.insert(abilities, {
name = name,
limited = limited,
improved = improved,
gifted = gifted,
adept = adept
})
end
end
-- Sort alphabetically by name (stable)
table.sort(abilities, function(a, b) return a.name < b.name end)
-- Build the out string (NO visible separators between AE templates)
local transclusions = {}
for _, a in ipairs(abilities) do
local t = {"{{AE|", a.name}
if a.limited ~= "" then table.insert(t, "|limited=" .. a.limited) end
if a.improved ~= "" then table.insert(t, "|improved=" .. a.improved) end
if a.gifted then table.insert(t, "|gifted=1") end
if a.adept then table.insert(t, "|adept=1") end
table.insert(t, "}}")
table.insert(transclusions, table.concat(t))
end
-- Use "" (or "\n") so no semicolons are emitted
local inner = table.concat(transclusions, "") -- <- changed from ";; "
local out = '<div class="expandable-table"><div>' .. frame:preprocess(inner) .. '</div></div>'
return out
end
return p