跳转到内容

Module:Yesno

来自Undertale Wiki

此模組用於處理類似布林值的 wikitext 輸入。


--  <nowiki>
--- Yesno 模組,用於處理類似布林值的 wikitext 輸入。
--  
--  它的運作方式與 [[wikipedia:Template:Yesno|Yesno 維基百科模板]] 類似。這個模組是用來處理來自模板的 wikitext 輸入,並提供一致的 Lua 介面。
--  
--  維基百科模板所使用的 wikitext 標記僅允許字串參數,如 `"0"`、`"yes"`、`"no"` 等等。由於 Lua 擁有布林值原生類型,Yesno 模組將這些 wikitext 轉換為布林值,以便 Lua 可以進行處理。
--  
--  @script             yesno
--  @release            穩定版
--  @author             [[User:Dessamator|Dessamator]]
--  @attribution        [[wikipedia:User:ATDT|ATDT]]
--  @attribution        [[wikipedia:User:Mr. Stradivarius|Mr. Stradivarius]]
--  @attribution        [[wikipedia:Special:PageHistory/Module:Yesno|其他維基百科貢獻者]]
--  @see                [[wikipedia:Module:Yesno|維基百科原始模組]]
--  @see                [[Module:Yesno/testcases|該模組的測試案例]]
--  @param              {?boolean|string} value Wikitext 類型的布林值或 Lua 布林值輸入。
--                       * 真值的 wikitext 輸入(`'yes'`、`'y'`、`'1'`、`'t'` 或 `'on'`)將返回 `true`。
--                       * Lua 中的真值字串(`'true'`)也會返回 `true`。
--                       * 假值的 wikitext 輸入(`'no'`、`'n'`、`'0'`、`'f'` 或 `'off'`)將返回 `false`。
--                       * Lua 中的假值字串(`'false'`)也會返回 `false`。
--                       * 當地化的文字意味著 `'yes'` 或 `'no'` 也會分別評估為 `true` 或 `false`。
--  @param[opt]         {?boolean|string} default 當 Yesno 的 `value` 輸入無法識別時,將返回的輸出值。
--  @return             {?boolean} 與 `val` 對應的布林值輸出:
--                       * 上述字串會產生布林值輸出。
--                       * `nil` 值會返回 `nil` 輸出。
--                       * 如果無法識別的值返回 `default` 參數。空字串是 Yesno 的一個無法識別的值,並且可以在有預設值的情況下評估為 `true`。
local lower = mw.ustring.lower
local msg = mw.message.new

local yes = lower(msg('htmlform-yes'):plain())
local no = lower(msg('htmlform-no'):plain())
local en_yes = lower(msg('htmlform-yes'):inLanguage('en'):plain())
local en_no = lower(msg('htmlform-no'):inLanguage('en'):plain())

return function(value, default)
    value = type(value) == 'string' and lower(value) or value

    if value == nil then
        return nil

    elseif value == true
        or value == yes
        or value == en_yes
        or value == 'y'
        or value == 'true'
        or value == 't'
        or value == 'on'
        or value == 'enable'
        or tonumber(value) == 1
    then
        return true

    elseif value == false
        or value == no
        or value == en_no
        or value == 'n'
        or value == 'false'
        or value == 'f'
        or value == 'off'
        or value == 'disable'
        or tonumber(value) == 0
    then
        return false

    else
        return default
    end
end
--  </nowiki>