Module:曲师列表:修订间差异
改用 模块:署名解析 的共用解析器 |
修复:回填被误删的 groupRank / PACK_ORDER 等工具段(改用 模块:署名解析 共用解析器) |
||
| 第16行: | 第16行: | ||
local parse = require('模块:署名解析') | local parse = require('模块:署名解析') | ||
local norm = parse.norm | local norm = parse.norm | ||
-- ===== 工具 ===== | |||
local function esc(s) | |||
return (tostring(s or ''):gsub('|', '|')) | |||
end | |||
-- 链接目标: # 是 MediaWiki 的锚点分隔符, 标题里一律换成全角 # | |||
-- 优先用「链接名」字段; 没有就回退到曲名并自动替换 (与 模块:曲目列表 保持一致) | |||
local function pageName(song, suffix) | |||
local n = song['链接名'] or song['曲名'] | |||
if suffix then | |||
n = n .. '(' .. suffix .. ')' | |||
end | |||
return (n:gsub('#', '#')) | |||
end | |||
-- 排序分组: 0=符号/数字 1=拉丁 2=假名 3=汉字 4=其他 | |||
local function groupRank(name) | |||
local cp = mw.ustring.codepoint(name, 1, 1) | |||
if not cp then return 9 end | |||
if (cp >= 0x30 and cp <= 0x39) or cp < 0x30 then return 0 end | |||
if (cp >= 0x41 and cp <= 0x5A) or (cp >= 0x61 and cp <= 0x7A) then return 1 end | |||
if (cp >= 0x3040 and cp <= 0x30FF) then return 2 end | |||
if (cp >= 0x3400 and cp <= 0x9FFF) then return 3 end | |||
return 4 | |||
end | |||
local function langWrap(song) | |||
local lang = song['lang'] | |||
if lang == 'ja' then | |||
return '{{lang|ja|' .. esc(song['曲名']) .. '}}' | |||
elseif lang == 'zh-Hant' then | |||
return '{{lang|zh-Hant|' .. esc(song['曲名']) .. '}}' | |||
end | |||
return esc(song['曲名']) | |||
end | |||
local function loadJson(title) | local function loadJson(title) | ||