local getArgs = require('Module:Arguments').getArgs
local p = {}
function p.main(frame)
local args = getArgs(frame)
local data = {}
local i = 1
while args['作品' .. i] do
local title = args['作品' .. i]
local abbr = args['简称' .. i] or args['簡稱' .. i] or ''
local orig = args['原始题材' .. i] or args['原始題材' .. i] or ''
local origCount = args['原文字数' .. i] or args['原文字數' .. i] or ''
local tranCount = args['译名字数' .. i] or args['譯名字數' .. i] or ''
table.insert(data, {title, abbr, orig, origCount, tranCount})
i = i + 1
end
local item = {}
local function len(a)
local rlt = 0
for j = 1, mw.ustring.len(a) do
local char = mw.ustring.sub(a, j, j)
local charnum = mw.ustring.byte(char)
if (charnum > 33 and charnum < 126)
or char == '‘'
or char == '’'
or char == '“'
or char == '”'
or char == '「'
or char == '」'
or char == '《'
or char == '》'
or char == '('
or char == ')'
or char == '【'
or char == '】'
or char == '{'
or char == '}' then
rlt = rlt + 0.5
elseif char == ' '
or char == ' '
or char == '\n'
or char == '\t' then
-- do nothing
else
rlt = rlt + 1
end
end
return rlt
end
local function cmp(a, b)
return a.len > b.len
end
for k = 1, #data do
local sort_key = data[k][1]:gsub('<%s-/?del.->', ''):gsub('<%s-/?span.->', '')
if (string.match(sort_key, '^%[%[.-%|(.-)%]%]$')) then
sort_key = string.match(sort_key, '%[%[.-%|(.-)%]%]')
elseif (string.match(sort_key, '^%[%[(.-)%]%]$')) then
sort_key = string.match(sort_key, '^%[%[(.-)%]%]$')
end
-- mw.log(sort_key)
local length
if (data[k][5] ~= nil and data[k][5] ~= '') then
length = tonumber(data[k][5])
else
length = len(sort_key)
end
-- mw.log(data[k][5])
table.insert(item, {
name=data[k][1],
short=data[k][2],
theme=data[k][3],
original_number=data[k][4],
len=length
})
end
table.sort(item, cmp)
local rlt = '{| class="wikitable sortable mw-collapsible mw-collapsed" style="font-size:smaller;"\n|-\n! 作品 !! [[标题简化|简称]] !! 原始体裁 !! 字数(原文) <ref name="count">假名、汉字、及标点符号,每个符号均记为一字;拉丁字母、阿拉伯数字等半角文字,每两个符号记为一字;括号、书名号等成对出现的符号,每一对记为一字;空格、换行等留白不计入字数。</ref>!! 字数(通行译名)<ref name="count" />\n|-'
for l = 1, #item do
rlt = rlt..'|-\n|'..item[l].name..'||'..item[l].short..'||<span class="long-title-theme">'..item[l].theme..'</span>||'..item[l].original_number..'||'..item[l].len..'\n'
end
return frame:preprocess(rlt..'\n|}')
end
return p