<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.infinf.info/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3AManufacturer</id>
	<title>模块:Manufacturer - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.infinf.info/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3AManufacturer"/>
	<link rel="alternate" type="text/html" href="https://wiki.infinf.info/index.php?title=%E6%A8%A1%E5%9D%97:Manufacturer&amp;action=history"/>
	<updated>2026-04-19T08:34:20Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://wiki.infinf.info/index.php?title=%E6%A8%A1%E5%9D%97:Manufacturer&amp;diff=1456&amp;oldid=prev</id>
		<title>9Yan：​创建页面，内容为“require( &#039;strict&#039; )  local Manufacturer = {}  local metatable = {} local methodtable = {}  metatable.__index = methodtable  local MODULE_NAME = &#039;Module:Manufacturer&#039;  local libraryUtil = require( &#039;libraryUtil&#039; ) local checkType = libraryUtil.checkType local i18n = require( &#039;Module:i18n&#039; ):new()  local mArguments  local cache = {}   --- Wrapper function for Module:i18n.translate --- --- @param key string The translation key --- @return string|nil local function…”</title>
		<link rel="alternate" type="text/html" href="https://wiki.infinf.info/index.php?title=%E6%A8%A1%E5%9D%97:Manufacturer&amp;diff=1456&amp;oldid=prev"/>
		<updated>2025-08-02T14:23:38Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“require( &amp;#039;strict&amp;#039; )  local Manufacturer = {}  local metatable = {} local methodtable = {}  metatable.__index = methodtable  local MODULE_NAME = &amp;#039;Module:Manufacturer&amp;#039;  local libraryUtil = require( &amp;#039;libraryUtil&amp;#039; ) local checkType = libraryUtil.checkType local i18n = require( &amp;#039;Module:i18n&amp;#039; ):new()  local mArguments  local cache = {}   --- Wrapper function for Module:i18n.translate --- --- @param key string The translation key --- @return string|nil local function…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require( &amp;#039;strict&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
local Manufacturer = {}&lt;br /&gt;
&lt;br /&gt;
local metatable = {}&lt;br /&gt;
local methodtable = {}&lt;br /&gt;
&lt;br /&gt;
metatable.__index = methodtable&lt;br /&gt;
&lt;br /&gt;
local MODULE_NAME = &amp;#039;Module:Manufacturer&amp;#039;&lt;br /&gt;
&lt;br /&gt;
local libraryUtil = require( &amp;#039;libraryUtil&amp;#039; )&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
local i18n = require( &amp;#039;Module:i18n&amp;#039; ):new()&lt;br /&gt;
&lt;br /&gt;
local mArguments&lt;br /&gt;
&lt;br /&gt;
local cache = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- Wrapper function for Module:i18n.translate&lt;br /&gt;
---&lt;br /&gt;
--- @param key string The translation key&lt;br /&gt;
--- @return string|nil&lt;br /&gt;
local function t( key )&lt;br /&gt;
	return i18n:translate( key, { [&amp;#039;returnKey&amp;#039;] = false } )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- Escape magic characters in Lua for use in regex&lt;br /&gt;
--- TODO: This should be move upstream to Module:Common&lt;br /&gt;
---&lt;br /&gt;
--- @param str string string to escape&lt;br /&gt;
--- @return string&lt;br /&gt;
local function escapeMagicCharacters( str )&lt;br /&gt;
    local magicCharacters = { &amp;#039;%&amp;#039;, &amp;#039;^&amp;#039;, &amp;#039;$&amp;#039;, &amp;#039;(&amp;#039;, &amp;#039;)&amp;#039;, &amp;#039;.&amp;#039;, &amp;#039;[&amp;#039;, &amp;#039;]&amp;#039;, &amp;#039;*&amp;#039;, &amp;#039;+&amp;#039;, &amp;#039;-&amp;#039;, &amp;#039;?&amp;#039; }&lt;br /&gt;
    for _, magicChar in ipairs( magicCharacters ) do&lt;br /&gt;
        str = str:gsub( &amp;#039;%&amp;#039; .. magicChar, &amp;#039;%%&amp;#039; .. magicChar )&lt;br /&gt;
    end&lt;br /&gt;
    return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- Helper function to get message from i18n&lt;br /&gt;
---&lt;br /&gt;
--- @param code string manufacturer code&lt;br /&gt;
--- @param messageType string &lt;br /&gt;
--- @return string|nil&lt;br /&gt;
local function getMessage( code, messageType )&lt;br /&gt;
	return t( string.format( &amp;#039;manufacturer_%s_%s&amp;#039;, code, messageType ) ) &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- Return the manufacturer table either from cache or build it from the i18n&lt;br /&gt;
---&lt;br /&gt;
--- @return table&lt;br /&gt;
local function getManufacturers()&lt;br /&gt;
    if #cache &amp;gt; 0 then return cache end&lt;br /&gt;
&lt;br /&gt;
    local codes = mw.loadJsonData( MODULE_NAME .. &amp;#039;/data.json&amp;#039; ).codes&lt;br /&gt;
&lt;br /&gt;
    local manufacturers = {}&lt;br /&gt;
    for _, code in pairs( codes ) do&lt;br /&gt;
        local manufacturer = {}&lt;br /&gt;
        manufacturer[&amp;#039;code&amp;#039;] = code&lt;br /&gt;
		manufacturer[&amp;#039;name&amp;#039;] = getMessage( code, &amp;#039;name&amp;#039; )&lt;br /&gt;
		manufacturer[&amp;#039;shortname&amp;#039;] = getMessage( code, &amp;#039;name_short&amp;#039; )&lt;br /&gt;
        table.insert( manufacturers, manufacturer )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if #manufacturers &amp;gt; 0 then&lt;br /&gt;
        cache = manufacturers&lt;br /&gt;
        --mw.log( &amp;#039;⌛ [Manufacturer] Initialized dataset&amp;#039; )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return cache&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- Match the string with any value in the manufacturers table and return the manufacturer object&lt;br /&gt;
---&lt;br /&gt;
--- @param s string Match string&lt;br /&gt;
--- @return table|nil Manufacturer&lt;br /&gt;
function methodtable.get( self, s )&lt;br /&gt;
    checkType( MODULE_NAME .. &amp;#039;.get&amp;#039;, 1, self, &amp;#039;table&amp;#039; )&lt;br /&gt;
    checkType( MODULE_NAME .. &amp;#039;.get&amp;#039;, 2, s, &amp;#039;string&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
    --mw.log( string.format( &amp;#039;🔍 [Manufacturer] Looking for manufacturer: %s&amp;#039;, s ) )&lt;br /&gt;
&lt;br /&gt;
    -- Initalize manufacturers&lt;br /&gt;
    local manufacturers = getManufacturers()&lt;br /&gt;
&lt;br /&gt;
    local regex = string.format( &amp;#039;^%s$&amp;#039;, string.lower( escapeMagicCharacters( s ) ) )&lt;br /&gt;
&lt;br /&gt;
    for _, manufacturer in ipairs( manufacturers ) do&lt;br /&gt;
        for _, value in pairs( manufacturer ) do&lt;br /&gt;
            if string.match( string.lower( value ), regex ) then&lt;br /&gt;
                --mw.logObject( manufacturer, &amp;#039;✅ [Manufacturer] Matched manufacturer&amp;#039; )&lt;br /&gt;
                return manufacturer&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    --mw.log( &amp;#039;❌ [Manufacturer] Could not match manufacturer: %s&amp;#039;, s )&lt;br /&gt;
&lt;br /&gt;
    return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- New Instance&lt;br /&gt;
---&lt;br /&gt;
--- @return table Manufacturer&lt;br /&gt;
function Manufacturer.new( self )&lt;br /&gt;
    local instance = {}&lt;br /&gt;
&lt;br /&gt;
    setmetatable( instance, metatable )&lt;br /&gt;
&lt;br /&gt;
    return instance&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- Helper function for templates invoking the module&lt;br /&gt;
---&lt;br /&gt;
--- @param frame table&lt;br /&gt;
--- @param type string type of the value returned&lt;br /&gt;
--- @param returnKey boolean true to return key, false to return error&lt;br /&gt;
--- @return string&lt;br /&gt;
local function fromTemplate( frame, type, returnKey )&lt;br /&gt;
    mArguments = require( &amp;#039;Module:Arguments&amp;#039; )&lt;br /&gt;
    local args = mArguments.getArgs( frame )&lt;br /&gt;
    local s = args[1]&lt;br /&gt;
&lt;br /&gt;
    if not s then&lt;br /&gt;
        return string.format( &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;#039;, t( &amp;#039;message_error_no_text&amp;#039; ) )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local instance = Manufacturer:new()&lt;br /&gt;
    local match = instance:get( s )&lt;br /&gt;
&lt;br /&gt;
    if not match then&lt;br /&gt;
        if returnKey then&lt;br /&gt;
            return s&lt;br /&gt;
        else&lt;br /&gt;
            return &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;&amp;#039; .. string.format( t( &amp;#039;message_error_not_found&amp;#039; ), type, s ) .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return match[type]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- Implement {{Manufactuer code}}&lt;br /&gt;
---&lt;br /&gt;
--- @param frame table&lt;br /&gt;
--- @return string&lt;br /&gt;
function Manufacturer.getCode( frame )&lt;br /&gt;
    return fromTemplate( frame, &amp;#039;code&amp;#039;, false )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- Implement {{Manufactuer name}}&lt;br /&gt;
---&lt;br /&gt;
--- @param frame table&lt;br /&gt;
--- @return string&lt;br /&gt;
function Manufacturer.getName( frame )&lt;br /&gt;
    return fromTemplate( frame, &amp;#039;name&amp;#039;, false )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- Implement {{Manufacturer return name}}&lt;br /&gt;
---&lt;br /&gt;
--- @param frame table&lt;br /&gt;
--- @return string&lt;br /&gt;
function Manufacturer.getNameButReturnName( frame )&lt;br /&gt;
    return fromTemplate( frame, &amp;#039;name&amp;#039;, true )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return Manufacturer&lt;/div&gt;</summary>
		<author><name>9Yan</name></author>
	</entry>
</feed>