<?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%3ACommon</id>
	<title>模块:Common - 版本历史</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%3ACommon"/>
	<link rel="alternate" type="text/html" href="https://wiki.infinf.info/index.php?title=%E6%A8%A1%E5%9D%97:Common&amp;action=history"/>
	<updated>2026-04-15T17:41:39Z</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:Common&amp;diff=1455&amp;oldid=prev</id>
		<title>9Yan：​创建页面，内容为“local common = {}  --- Convert an input to number ---@param num string|integer Input ---@param onFail string|integer Output if conversion fails ---@param base integer Base for tonumber, defaults to 10 ---@return number function common.toNumber( num, onFail, base ) 	base = base or 10      if num == nil then         return onFail     end      return tonumber( num ) or onFail end  --- Formats a number according to the content language ---@param num number|string f…”</title>
		<link rel="alternate" type="text/html" href="https://wiki.infinf.info/index.php?title=%E6%A8%A1%E5%9D%97:Common&amp;diff=1455&amp;oldid=prev"/>
		<updated>2025-08-02T14:22:55Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“local common = {}  --- Convert an input to number ---@param num string|integer Input ---@param onFail string|integer Output if conversion fails ---@param base integer Base for tonumber, defaults to 10 ---@return number function common.toNumber( num, onFail, base ) 	base = base or 10      if num == nil then         return onFail     end      return tonumber( num ) or onFail end  --- Formats a number according to the content language ---@param num number|string f…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local common = {}&lt;br /&gt;
&lt;br /&gt;
--- Convert an input to number&lt;br /&gt;
---@param num string|integer Input&lt;br /&gt;
---@param onFail string|integer Output if conversion fails&lt;br /&gt;
---@param base integer Base for tonumber, defaults to 10&lt;br /&gt;
---@return number&lt;br /&gt;
function common.toNumber( num, onFail, base )&lt;br /&gt;
	base = base or 10&lt;br /&gt;
&lt;br /&gt;
    if num == nil then&lt;br /&gt;
        return onFail&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return tonumber( num ) or onFail&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Formats a number according to the content language&lt;br /&gt;
---@param num number|string&lt;br /&gt;
function common.formatNum( num, onFail )&lt;br /&gt;
    local converted = common.toNumber( num, false )&lt;br /&gt;
&lt;br /&gt;
    if converted == nil or converted == false then&lt;br /&gt;
    	return onFail or false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    local converted = mw.language.getContentLanguage():formatNum( converted )&lt;br /&gt;
&lt;br /&gt;
    return string.gsub( converted, &amp;#039;−&amp;#039;, &amp;#039;-&amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Removes (...) suffixes&lt;br /&gt;
---@param pageName string&lt;br /&gt;
---@param suffix string|table&lt;br /&gt;
function common.removeTypeSuffix( pageName, suffix )&lt;br /&gt;
    if type( suffix ) == &amp;#039;table&amp;#039; then&lt;br /&gt;
        for _, toRemove in pairs( suffix ) do&lt;br /&gt;
            pageName = common.removeTypeSuffix( pageName, toRemove )&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        return pageName&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return mw.text.trim( pageName:gsub( &amp;#039;%(&amp;#039; .. suffix .. &amp;#039;%)&amp;#039;, &amp;#039;&amp;#039; ), &amp;#039;_ &amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Create interwiki links for a given title&lt;br /&gt;
---@param pageName string&lt;br /&gt;
function common.generateInterWikiLinks( pageName )&lt;br /&gt;
	if pageName == nil or #pageName == &amp;#039;&amp;#039; then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local prefixes = { &amp;#039;de&amp;#039;, &amp;#039;hu&amp;#039;, &amp;#039;zh&amp;#039; }&lt;br /&gt;
	local suffixes = {}&lt;br /&gt;
&lt;br /&gt;
	local out = &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	for _, prefix in pairs( prefixes ) do&lt;br /&gt;
		local page = common.removeTypeSuffix( pageName, suffixes )&lt;br /&gt;
		out = out .. string.format( &amp;#039;[[%s:%s]]&amp;#039;, prefix, page )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Checks if Setting SMW Data was successful&lt;br /&gt;
---@param result table&lt;br /&gt;
function common.checkSmwResult( result )&lt;br /&gt;
	if result == nil then&lt;br /&gt;
        return&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    if result ~= true and result.error ~= nil then&lt;br /&gt;
        error( &amp;#039;Semantic Mediawiki error &amp;#039; .. result.error )&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Checks if Api Request was successful and if the Response is valid&lt;br /&gt;
---@param response table&lt;br /&gt;
---@param errorOnData boolean&lt;br /&gt;
---@param errorOnData boolean&lt;br /&gt;
---@return boolean&lt;br /&gt;
function common.checkApiResponse( response, errorOnStatus, errorOnData )&lt;br /&gt;
    if response[ &amp;#039;status_code&amp;#039; ] ~= nil and response[ &amp;#039;status_code&amp;#039; ] ~= 200 then&lt;br /&gt;
        if errorOnStatus == nil or errorOnStatus == true then&lt;br /&gt;
            error( &amp;#039;API request returns the error code &amp;#039; .. response[ &amp;#039;status_code&amp;#039; ] .. &amp;#039;(&amp;#039; .. response[ &amp;#039;message&amp;#039; ] .. &amp;#039;)&amp;#039;, 0 )&lt;br /&gt;
        end&lt;br /&gt;
        return false&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if response[ &amp;#039;data&amp;#039; ] == nil then&lt;br /&gt;
        if errorOnData == nil or errorOnData == true then&lt;br /&gt;
            error( &amp;#039;API data does not contain a &amp;quot;data&amp;quot; field&amp;#039;, 0 )&lt;br /&gt;
        end&lt;br /&gt;
        return false&lt;br /&gt;
    end&lt;br /&gt;
    return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Walks a table in order, can be used like pairs()&lt;br /&gt;
---@param t table&lt;br /&gt;
---@param order function - Sorting function OPTIONAL&lt;br /&gt;
function common.spairs( t, order )&lt;br /&gt;
    -- collect the keys&lt;br /&gt;
    local keys = {}&lt;br /&gt;
    for k in pairs(t) do keys[#keys+1] = k end&lt;br /&gt;
&lt;br /&gt;
    -- if order function given, sort by it by passing the table and keys a, b,&lt;br /&gt;
    -- otherwise just sort the keys&lt;br /&gt;
    if order then&lt;br /&gt;
        table.sort(keys, function(a,b) return order(t, a, b) end)&lt;br /&gt;
    else&lt;br /&gt;
        table.sort(keys)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- return the iterator function&lt;br /&gt;
    local i = 0&lt;br /&gt;
    return function()&lt;br /&gt;
        i = i + 1&lt;br /&gt;
        if keys[i] then&lt;br /&gt;
            return keys[i], t[keys[i]]&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Alternative for doing table[key][key], this returns nil instead of an error if it doesn&amp;#039;t exist&lt;br /&gt;
---@param object table?&lt;br /&gt;
---@param ... string&lt;br /&gt;
function common.safeAccess( object, ... )&lt;br /&gt;
    local value = object&lt;br /&gt;
    if not value then return end&lt;br /&gt;
    for _, key in ipairs( { ... } ) do&lt;br /&gt;
        value = value[ key ]&lt;br /&gt;
        if value == nil then return nil end&lt;br /&gt;
    end&lt;br /&gt;
    return value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Split a string with seperator&lt;br /&gt;
---@param str string Input string&lt;br /&gt;
---@param sep string Seperator&lt;br /&gt;
---@return table&amp;lt;string&amp;gt;&lt;br /&gt;
function common.split( str, sep )&lt;br /&gt;
    local matches = {}&lt;br /&gt;
    for matchedString in string.gmatch( str, &amp;#039;([^&amp;#039; .. sep .. &amp;#039;]+)&amp;#039; ) do&lt;br /&gt;
        table.insert( matches, string.gsub( matchedString, &amp;#039;%b()&amp;#039;, &amp;#039;&amp;#039; ) or &amp;#039;&amp;#039; )&lt;br /&gt;
    end&lt;br /&gt;
    return matches&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Remove parentheses and their content&lt;br /&gt;
--- Primairly used for starmap related things, such as making `TrueName (OldName)` &amp;gt; `TrueName`&lt;br /&gt;
---@param inputString string&lt;br /&gt;
---@return string&lt;br /&gt;
function common.removeParentheses( inputString )&lt;br /&gt;
    return string.match( string.gsub( inputString, &amp;#039;%b()&amp;#039;, &amp;#039;&amp;#039; ), &amp;#039;^%s*(.*%S)&amp;#039; ) or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Trim a string&lt;br /&gt;
---@param str string&lt;br /&gt;
---@return string&lt;br /&gt;
function common.trim( str )&lt;br /&gt;
    return string.match( str, &amp;#039;([^:%(%s]+)&amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Uses Module:Pluralize to pluralize a string&lt;br /&gt;
---@param str string&lt;br /&gt;
---@return string&lt;br /&gt;
function common.pluralize( str )&lt;br /&gt;
    return require( &amp;#039;Module:Pluralize&amp;#039; ).pluralize( { args = { str } } )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Returns a table containing the numbers of the arguments that exist&lt;br /&gt;
--- for the specified prefix. For example, if the prefix was &amp;#039;data&amp;#039;, and&lt;br /&gt;
--- &amp;#039;data1&amp;#039;, &amp;#039;data2&amp;#039;, and &amp;#039;data5&amp;#039; exist, it would return {1, 2, 5}.&lt;br /&gt;
---&lt;br /&gt;
--- @param prefix string Prefix of the argument name&lt;br /&gt;
--- @param args table Table of arguments&lt;br /&gt;
--- @return table Table of argument numbers&lt;br /&gt;
function common.getArgNums(prefix, args)&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local num = tostring(k):match(&amp;#039;^&amp;#039; .. prefix .. &amp;#039;([1-9]%d*)$&amp;#039;)&lt;br /&gt;
		if num then table.insert(nums, tonumber(num)) end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return common&lt;/div&gt;</summary>
		<author><name>9Yan</name></author>
	</entry>
</feed>