local export = {}
local sub = mw.ustring.sub
local eras = {
{ "[[w:Nhà Thương|Thương]]", { "bronze-shang", "oracle" } },
{ "[[w:Tây Chu|Tây Chu]]", { "bronze", "oracle-zhouyuan" } },
{ "[[w:Xuân Thu|Xuân Thu]]", { "bronze-spring" } },
{ "[[w:Chiến Quốc|Chiến Quốc]]", { "bronze-warring", "silk", "slip" } },
{ "''[[w:Thuyết văn giải tự|Thuyết văn giải tự]]'' (biên soạn vào thời [[w:Nhà Hán|Hán]])", { "zhou", "ancient", "odd", "seal", "vulgar" } },
{ "''Hanjian'' (compiled in [[w:Song dynasty|Song]])", { "hanjian" } },
{ "''Guwen Sishengyun'' (compiled in [[w:Song dynasty|Song]])", { "GWSSY" } },
{ "''Jizhuan Guwen Yunhai'' (compiled in [[w:Song dynasty|Song]])", { "JZGWYH" } },
{ "''Lục thư thông'' (biên soạn vào thời [[w:Nhà Minh|Minh]])", { "bigseal" } },
{ "''Lệ biện'' (biên soạn vào thời [[w:Nhà Thanh|Thanh]])", { "clerical" } },
{ "[[w:Kaicheng Stone Classics|Tang Stone Classics]]", { "kai-Kaicheng" } },
{ "''[[w:Khang Hi tự điển|Khang Hi tự điển]]'' (biên soạn vào thời [[w:Nhà Thanh|Thanh]])", { "mingti-Kangxi" } },
}
local scripts = {
["bronze-shang"] = "[[w:Kim văn|Kim văn]]",
["oracle"] = "[[w:Giáp cốt văn|Giáp cốt văn]]",
["oracle-zhouyuan"] = "[[w:Oracle bone script|Oracle bone script]]",
["bronze"] = "[[w:Kim văn|Kim văn]]",
["bronze-spring"] = "[[w:Kim văn|Kim văn]]",
["bronze-warring"] = "[[w:Kim văn|Kim văn]]",
["silk"] = "[[w:Thẻ tre|Thẻ tre và lụa thời Sở]]",
["slip"] = "[[w:Thẻ tre|Thẻ tre thời Tần]]",
["zhou"] = "''Shizhoupian'' script",
["ancient"] = "Ancient script",
["odd"] = "Odd character",
["seal"] = "[[w:Tiểu triện|Tiểu triện]]",
["vulgar"] = "Vulgar character",
["bigseal"] = "Sao chép văn tự cổ",
["hanjian"] = "Transcribed ancient scripts",
["GWSSY"] = "Transcribed ancient scripts",
["JZGWYH"] = "Transcribed ancient scripts",
["clerical"] = "[[w:Lệ thư|Lệ thư]]",
["kai-Kaicheng"] = "[[w:Regular script|Regular script]]",
["mingti-Kangxi"] = "[[w:en:Ming (typefaces)|Minh thể]]",
}
local hide_scripts = { "oracle", "bronze", "seal", "bigseal" }
local script_abbrev = {
["B"] = "bronze",
["b"] = "bronze",
["31"] = "bronze",
["32"] = "bronze",
["33"] = "bronze",
["34"] = "bronze",
["j"] = "oracle",
["41"] = "oracle",
["42"] = "oracle",
["43"] = "oracle",
["51"] = "silk",
["52"] = "silk",
["53"] = "silk",
["71"] = "slip",
["Q"] = "slip",
["S"] = "silk",
["s"] = "seal",
["27"] = "seal",
["L"] = "bigseal",
}
function export.main(frame)
local params = {
[1] = {},
["no_img"] = {type = "boolean"},
["no_phon"] = {type = "boolean"},
}
local args, invalid_args, invalid_args_warning = require("Module:checkparams").process(frame:getParent(), params)
local pagename = mw.title.getCurrentTitle().subpageText
local target_page = args[1] or pagename
local showEras, showScripts, showImgs, hideText = {}, {}, {}, {}
local success, data_module = pcall(mw.loadData, "Module:zh/data/glyph-data/" .. target_page)
local char_data = {
["bronze"] = {},
["oracle"] = {},
["silk"] = {},
["slip"] = {},
["seal"] = {},
["bigseal"] = {},
}
count = 0
if not frame:getParent().args["no_img"] then
for _, era in ipairs(eras) do
local count_era = 0
for _, script in ipairs(era[2]) do
local img_link = target_page .. "-" .. script .. ".svg"
local img_file = mw.title.new("Media:" .. img_link)
if img_file.exists and not img_file.isRedirect then
count = count + 1
count_era = count_era + 1
table.insert(showScripts, "\n!" .. scripts[script])
table.insert(showImgs, "\n| style=\"padding: 8px;\"|[[File:" .. img_link .. "|60px]]")
end
end
if count_era > 0 then
table.insert(showEras, "\n! colspan=\"" .. count_era .. "\"|" .. era[1])
end
end
end
if success then
local img_count = 0
for _, img in ipairs(data_module[1]) do
img_count = img_count + 1
end
success = success and mw.title.new("Media:ACC-" .. data_module[1][img_count] .. ".svg").exists
end
if success then
local capacity = 8
for _, img in ipairs(data_module[1]) do
table.insert(char_data[script_abbrev[sub(img, 1, 1)]], '<td><div class="gallerybox"' ..
'>\n<div style="text-align:center; padding:8px" class="thumb">[[File:ACC-' .. img ..
'.svg|60px]]\n<div class="gallerytext">\n<p><small>' .. img .. '</small></p>\n</div>\n</div>\n</div>\n</td>')
end
for _, script in ipairs(hide_scripts) do
if char_data[script][1] then
local script_concat = { "\n----\n<table class=\"gallery\">\n<caption><b>", scripts[script], "</b></caption>\n" }
script_data = char_data[script]
for i = 0, math.ceil(#script_data / capacity) - 1 do
table.insert(script_concat, "<tr>")
for j = 1, capacity do
table.insert(script_concat, script_data[i*capacity+j] or nil)
end
table.insert(script_concat, "</tr>")
end
table.insert(script_concat, "\n</table>")
table.insert(hideText, table.concat(script_concat))
end
end
table.insert(hideText, '\n|- class="vsHide"\n| width="100%" align="left" colspan="' .. (count == 0 and 1 or count) ..
'|\n----<div class="toccolours mw-collapsible mw-collapsed"><b>Tham khảo</b>:' ..
'<div class="mw-collapsible-content">\nChủ yếu lấy từ \' ' ..
"[http://hanziyuan.net/#" ..
target_page .. " trang Từ nguyên tiếng Trung] của Richard Sears ([[c:Commons:Ancient Chinese characters/Richard Sears Agreement" ..
"|giấy phép]]),<br>dữ liệu được lấy từ những bộ sưu tập khác nhau về các dạng ký tự tiếng Trung Quốc cổ đại" ..
", bao gồm:\n* ''Thuyết văn giải tự'' (tiểu triện), \n* ''Kim văn biên'' (kim văn)" ..
", \n* ''Lục thư thông'' (các ký tự Lực thư thông) và \n* ''Yinxu Jiaguwen Bian'' (giáp cốt văn).</div></div>")
end
if ( success or count > 0 ) and not frame:getParent().args["no_img"] then
glyph_forms = [=[{| class="wikitable zh-glyph]=] .. (success and ' vsSwitcher" data-toggle-category="forms' or "") ..
[=[" cellpadding=7 style="border-spacing: 1px; border: 1px solid darkgray; text-align:center"
! class="vsToggleElement" colspan="]=] .. (count == 0 and 1 or count) ..
[=[" |Sự tiến hóa của chữ <span lang="zh-Hant" class="Hani">]=] .. target_page .. [=[</span>]=] ..
(count > 0
and "\n|-" .. table.concat(showEras) .. "\n|-" .. table.concat(showScripts) .. "\n|-" .. table.concat(showImgs)
or "") ..
(success
and "\n|- class=\"vsHide\"\n| align=\"center\" colspan=\"" .. (count == 0 and 1 or count) ..
"|" .. table.concat(hideText, "")
or "") ..
"\n|}"
else
glyph_forms = ""
end
local phonText = {}
local list = mw.loadData("Module:zh-glyph/phonetic/list")
phonComp = list[target_page] or nil
if phonComp and not frame:getParent().args["no_phon"] then
table.insert(phonText,
'\n' ..
'<div class="NavFrame" style="border:0px; max-width: 37em; text-align:center;" cellpadding="6">' ..
'<div class="NavHead" style="font-size:105%; border:1px solid #aaaaaa; margin-left:-1px; background-color:#CCCCFF; text-align:center;" cellpadding="3">' ..
'Các ký tự trong cùng [[Wiktionary:Tiếng Trung Quốc/Chuỗi ngữ âm|chuỗi ngữ âm]]' ..
' (<span class="Hani">[[' .. phonComp .. ']]</span>)' ..
' <small>([[Wiktionary:Tiếng Trung Quốc/Tham khảo|Zhengzhang, 2003]])</small> ' ..
'</div>' ..
'<div class="NavContent">' ..
'\n{| class="wikitable zh-glyph" style="margin-top: 0; width: 100%;"' ..
'\n|-\n! align="center"|\n!Tiếng Hán thượng cổ'
)
local phonData = mw.loadData("Module:zh-glyph/phonetic")
local m_och = require("Module:och-pron").retrieve_pron
for item in mw.text.gsplit(phonData[phonComp], "") do
table.insert(phonText, '\n|-\n| align="center" |<span class="Hani">[[' .. item .. '#Tiếng Trung Quốc|' .. item .. ']]</span>')
local IPA = m_och(item, nil, true)
if IPA then
table.insert(phonText, '\n|<small><span class="IPA">' .. IPA .. '</span></small>')
end
end
table.insert(phonText, '\n|}\n</div></div>')
end
return glyph_forms .. table.concat(phonText) .. invalid_args_warning
end
return export