模組:Vgname/sandbox
外观
![]() | 这是Module:Vgname(差异)的沙盒。 参见本模块的测试样例(运行)。 |
请在 Module:Vgname/languages定义新的外语
require('Module:No globals')
local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local lc = require('Module:WikitextLC')
local foreignRegionList = mw.loadData('Module:沙盒/D2F0F5/First')
local p = {}
local function separateFootnotesFromText(str)
local pattern = '\127\'"`UNIQ%-%-ref%-%x+%-QINU`"\'\127' -- [[en:WP:UNIQ]]
str = str or ''
local s, _ = str:find(pattern)
if s then
return str:sub(1, s-1), str:sub(s)
end
return str, ''
end
local function bold(args, str, openBracket, closeBracket, isConvert)
local text, footnotes = separateFootnotesFromText(str)
if yesno(isConvert) == true then
text = lc.converted(text, {'zh-hans', 'zh-hant'})
end
if yesno(args.bold) ~= false then
text = '<b>' .. text .. '</b>'
end
if yesno(args.bracket) == false then
-- do nothing
elseif openBracket and closeBracket then
text = openBracket .. text .. closeBracket
end
return text .. footnotes
end
local function boldWithIdeographicComma(args, str, openBracket, closeBracket, isConvert)
local tab, _tab = mw.text.split(str, '、'), {}
for _, value in ipairs(tab) do
local str = bold(args, value, openBracket, closeBracket, isConvert)
table.insert(_tab, str)
end
return table.concat(_tab, '、')
end
local function styleForeignLanguageAndAddLabel(args, indexOfTheForeignRegion, str)
local text, footnotes = separateFootnotesFromText(str)
local theLanguage = foreignRegionList[indexOfTheForeignRegion]
local langcode = theLanguage.langcode
local style = theLanguage.italic and 'italic' or 'normal'
local label
if yesno(args.diff) == true then
label = theLanguage.diff
elseif yesno(args.diff) == false then
label = theLanguage.same
elseif args.na or args.eu or args.au then
label = theLanguage.diff
else
label = theLanguage.same
end
return string.format('%s:「<span lang="%s" style="font-style:%s;">-{%s}-</span>」%s',
label,
langcode,
style,
text,
footnotes
)
end
local function head(args)
local str = args[1]
local openBracket, closeBracket
if args.bracket == 'q' then
openBracket, closeBracket = '「', '」'
else
openBracket, closeBracket = '《', '》'
end
return bold(args, str, openBracket, closeBracket, false)
end
local function foreign(args)
local tab = {}
local englishRegionList = {'na', 'eu', 'au'}
for _, value in ipairs(englishRegionList) do
local str = args[value]
if str then
local text = styleForeignLanguageAndAddLabel(args, value, str)
table.insert(tab, text)
end
end
if #tab == 0 and args.en then
local text = styleForeignLanguageAndAddLabel(args, 'en', args.en)
table.insert(tab, text)
end
for key, value in ipairs(foreignRegionList) do
local str = args[value.langcode]
if str then
local text = styleForeignLanguageAndAddLabel(args, key, str)
table.insert(tab, 1, text)
end
end
if #tab == 0 then return '' end
return table.concat(tab, ',')
end
function p.main(frame)
local args = getArgs(frame)
return p._main(args)
end
function p._main(args)
local tab, _tab = {}, {}
tab = {
foreign(args)
}
for _, value in ipairs(tab) do
if value ~= '' then
table.insert(_tab, value)
end
end
if #_tab > 0 then
return string.format('%s<span style="font-weight:normal;">(%s)</span>',
head(args),
table.concat(_tab, ',')
)
end
return head(args)
end
return p