<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="vi-Hani">
	<id>https://hannom-rcv.org/wi/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%BA%89%3AParameterAliasNormalizer</id>
	<title>模庉:ParameterAliasNormalizer - 歷史𠊝𢷮</title>
	<link rel="self" type="application/atom+xml" href="https://hannom-rcv.org/wi/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%BA%89%3AParameterAliasNormalizer"/>
	<link rel="alternate" type="text/html" href="https://hannom-rcv.org/wi/index.php?title=%E6%A8%A1%E5%BA%89:ParameterAliasNormalizer&amp;action=history"/>
	<updated>2026-05-08T18:19:58Z</updated>
	<subtitle>歷史𠊝𢷮張尼𨑗威其</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://hannom-rcv.org/wi/index.php?title=%E6%A8%A1%E5%BA%89:ParameterAliasNormalizer&amp;diff=26374&amp;oldid=prev</id>
		<title>Trong Dang：造張㵋貝內容「local ModuleObj = {} local getArgs = require(&quot;Module:Arguments&quot;).getArgs  --     Hàm dùng để chuẩn bị dữ liệu -- function ModuleObj.main(frame)    local moduleArgs = getArgs(frame, {frameOnly = true})    local callerArgs = getArgs(frame, {parentOnly = true})    return ModuleObj._main(frame, moduleArgs, callerArgs) end  --     Chuẩn hóa tên của tham số về tên gốc -- function ModuleObj._main(frame, moduleArgs, callerArgs)     -- Replac…」</title>
		<link rel="alternate" type="text/html" href="https://hannom-rcv.org/wi/index.php?title=%E6%A8%A1%E5%BA%89:ParameterAliasNormalizer&amp;diff=26374&amp;oldid=prev"/>
		<updated>2025-04-11T14:22:03Z</updated>

		<summary type="html">&lt;p&gt;造張㵋貝內容「local ModuleObj = {} local getArgs = require(&amp;quot;Module:Arguments&amp;quot;).getArgs  --&lt;a href=&quot;/wi/index.php?title=H%C3%A0m_d%C3%B9ng_%C4%91%E1%BB%83_chu%E1%BA%A9n_b%E1%BB%8B_d%E1%BB%AF_li%E1%BB%87u_--&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Hàm dùng để chuẩn bị dữ liệu --（張空存在）&quot;&gt;Hàm dùng để chuẩn bị dữ liệu --&lt;/a&gt; function ModuleObj.main(frame)    local moduleArgs = getArgs(frame, {frameOnly = true})    local callerArgs = getArgs(frame, {parentOnly = true})    return ModuleObj._main(frame, moduleArgs, callerArgs) end  --&lt;a href=&quot;/wi/index.php?title=Chu%E1%BA%A9n_h%C3%B3a_t%C3%AAn_c%E1%BB%A7a_tham_s%E1%BB%91_v%E1%BB%81_t%C3%AAn_g%E1%BB%91c_--&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Chuẩn hóa tên của tham số về tên gốc --（張空存在）&quot;&gt;Chuẩn hóa tên của tham số về tên gốc --&lt;/a&gt; function ModuleObj._main(frame, moduleArgs, callerArgs)     -- Replac…」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;張㵋&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local ModuleObj = {}&lt;br /&gt;
local getArgs = require(&amp;quot;Module:Arguments&amp;quot;).getArgs&lt;br /&gt;
&lt;br /&gt;
--[[ &lt;br /&gt;
   Hàm dùng để chuẩn bị dữ liệu&lt;br /&gt;
--]]&lt;br /&gt;
function ModuleObj.main(frame)&lt;br /&gt;
   local moduleArgs = getArgs(frame, {frameOnly = true})&lt;br /&gt;
   local callerArgs = getArgs(frame, {parentOnly = true})&lt;br /&gt;
   return ModuleObj._main(frame, moduleArgs, callerArgs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ &lt;br /&gt;
   Chuẩn hóa tên của tham số về tên gốc&lt;br /&gt;
--]]&lt;br /&gt;
function ModuleObj._main(frame, moduleArgs, callerArgs)&lt;br /&gt;
    -- Replace dấu dollar thành số nếu có&lt;br /&gt;
    replaceDollar(moduleArgs)&lt;br /&gt;
    &lt;br /&gt;
    -- Lowercase hóa key của bảng callerArgs&lt;br /&gt;
    callerArgs = lowerKey(callerArgs)&lt;br /&gt;
&lt;br /&gt;
    -- Hàm kiểm tra chuỗi có rỗng không&lt;br /&gt;
	local function isEmpty(s)&lt;br /&gt;
	  return s == nil or mw.text.trim(s) == &amp;#039;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Lấy tên bản mẫu gốc&lt;br /&gt;
	local templateName = moduleArgs.__template&lt;br /&gt;
    moduleArgs.__template = nil;&lt;br /&gt;
&lt;br /&gt;
    -- Lấy giá trị của đối số ánh xạ gán cho đối số gốc&lt;br /&gt;
	for baseParam, aliasesStr in pairs(moduleArgs) do&lt;br /&gt;
		for alias in mw.text.gsplit(aliasesStr, &amp;#039;\\&amp;#039;, true) do&lt;br /&gt;
			alias = mw.ustring.lower(mw.text.trim(alias))&lt;br /&gt;
			if callerArgs[alias] ~= nil then&lt;br /&gt;
	            local value = callerArgs[alias]&lt;br /&gt;
	            if isEmpty(value) == false then&lt;br /&gt;
	                callerArgs[baseParam] = value&lt;br /&gt;
	            end&lt;br /&gt;
            	callerArgs[alias] = nil&lt;br /&gt;
            end&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Tạo bản mẫu với bảng đối số callerArgs&lt;br /&gt;
	local content = frame:expandTemplate{ title = templateName, args = callerArgs }&lt;br /&gt;
	return content&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
    Hàm lowercase hóa key của các pair trong một table&lt;br /&gt;
--]]&lt;br /&gt;
function lowerKey(table)&lt;br /&gt;
    local lowercased = {}&lt;br /&gt;
    for key, value in pairs(table) do&lt;br /&gt;
        lowercased[mw.ustring.lower(key)] = value&lt;br /&gt;
    end&lt;br /&gt;
    return lowercased&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Hàm thay dấu dollar thành số&lt;br /&gt;
	Ví dụ: &amp;quot;combatant${1,3} = bên $&amp;quot; sẽ sinh ra 3 đối số:&lt;br /&gt;
	&amp;quot;combatant1 = bên 1&amp;quot;, &amp;quot;combatant2 = bên 2&amp;quot;, &amp;quot;combatant3 = bên 3&amp;quot;&lt;br /&gt;
--]]&lt;br /&gt;
function replaceDollar(table)&lt;br /&gt;
	local temp = {}&lt;br /&gt;
	&lt;br /&gt;
	-- Tìm các key có pattern phù hợp, sinh các cặp key-value tương ứng&lt;br /&gt;
	-- và xóa cặp key-value ban đầu&lt;br /&gt;
	for key, value in pairs(table) do&lt;br /&gt;
		if (mw.ustring.match(key, &amp;quot;${(%d+,%d+)}&amp;quot;)) then&lt;br /&gt;
			local points = mw.text.split(mw.ustring.match(key, &amp;quot;${(%d+,%d+)}&amp;quot;), &amp;quot;,&amp;quot;, true)&lt;br /&gt;
			for i = points[1], points[2], 1 do&lt;br /&gt;
				local k = mw.ustring.gsub(key, &amp;quot;(${%d+,%d+})&amp;quot;, i)&lt;br /&gt;
				local v = mw.ustring.gsub(value, &amp;quot;%$&amp;quot;, i)&lt;br /&gt;
				temp[k] = v&lt;br /&gt;
			end&lt;br /&gt;
			table[key] = nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for key, value in pairs(temp) do&lt;br /&gt;
		table[key] = value&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return ModuleObj&lt;/div&gt;</summary>
		<author><name>Trong Dang</name></author>
	</entry>
</feed>