Module:zh-glyph

Mula Wiktionary

Ang dokumentasyon ng ng modyul na ito ay maaaring likhain sa Module:zh-glyph/doc

local export = {}
local sub = mw.ustring.sub

local scripts = {
	{ 1, "oracle", "[[w:Oracle bone script|Iskrip ng Butong Orakulo]]" },
	{ 2, "bronze", "[[w:Bronze inscriptions|Mga sulat sa tanso]]" },
	{ 3, "silk", "[[w:Bamboo and silk script|Iskrip sa bamboo at seda]]" },
	{ 4, "bigseal", "[[w:Large seal script|Iskrip sa malaking selyo]]" },
	{ 5, "seal", "[[w:Small seal script|Iskrip sa maliit na selyo]]" }
}

local script_abbrev = {
	["B"] = "tanso",
	["b"] = "tanso",
	["j"] = "orakulo",
	["L"] = "malaking selyo",
	["s"] = "selyo",
	["S"] = "seda/sutla",
}

function export.main(frame)
	local pagename = mw.title.getCurrentTitle().subpageText
	local showTitles, showImgs, hideText = {}, {}, {}
	local success, data_module = pcall(mw.loadData, "Module:zh/data/glyph-data/" .. pagename)
	
	local char_data = {
		["bigseal"] = {},
		["bronze"] = {},
		["oracle"] = {},
		["seal"] = {},
		["silk"] = {},
	}
	
	count = 0
	table.sort(scripts, function(first, second) return first[1] < second[1] end)
	for _, script in ipairs(scripts) do
		local img_link = pagename .. "-" .. script[2] .. ".svg"
		if mw.title.new("Media:" .. img_link).exists then
			count = count + 1
			table.insert(showTitles, "\n!" .. script[3])
			table.insert(showImgs, "\n| style=\"padding: 8px;\"|[[File:" .. img_link .. "|60px]]")
		end
	end
	if success then
		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</td>')
		end
		for _, script in ipairs(scripts) do
			if char_data[script[2]][1] then
				local script_concat = { "\n----\n<table class=\"gallery\">\n<caption><b>", script[3], "</b></caption>\n" }
				script_data = char_data[script[2]]
				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>References</b>:' ..
			'<div class="mw-collapsible-content">\nMostly from Richard Sears\' ' .. 
			"[http://internationalscientific.org/CharacterEtymology.aspx?submitButton1=Etymology&characterInput=" ..
			pagename .. " Chinese Etymology site] ([[c:Commons:Ancient Chinese characters/Richard Sears Agreement" ..
			"|authorisation]]),<br>which in turn draws data from various collections of ancient forms of Chinese characters" ..
			", including:\n* ''Shuowen Jiezi'' (small seal), \n* ''Jinwen Bian'' (bronze inscriptions)" ..
			", \n* ''Liushutong'' (large seal) and \n* ''Xu Jiaguwen Bian'' (oracle bone script).</div></div>")
	end

	if success or count > 0 then
		
		glyph_forms = [=[{| class="inflection-table]=] .. (success and " vsSwitcher vsToggleCategory-forms" or "") ..
			[=[" cellpadding=7 style="border-spacing: 1px; border: 1px solid darkgray; text-align:center"
			! class="vsToggleElement" colspan="]=] .. (count == 0 and 1 or count) ..
			[=[" |Historical forms of the character <span lang="zh-Hant" class="Hani">]=] .. pagename .. [=[</span>]=] .. 
			
			(count > 0
				and "\n----\n|-" .. table.concat(showTitles) .. "\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[pagename] or nil
	
	if phonComp then
		table.insert(phonText, '\n{| class="wikitable mw-collapsible mw-collapsed" cellpadding="6" style="text-align:center"')
		table.insert(phonText, '\n|-\n! style="background-color:#F3F7F2; padding: 5px 10px 5px 10px;" colspan=2|Mga karakter sa parehong [[Wiktionary:About Chinese/phonetic series|seryeng palatinigan]] (<span style="font-size:120%"><span class="Hani">[[' .. phonComp .. ']]</span></span>) <small>([[Wiktionary:About Chinese/references|Zhengzhang, 2003]])</small>&nbsp; ')
		
		local phonData = mw.loadData("Module:zh-glyph/phonetic")
		local m_och = require("Module:och-pron").retrieve_pron
		
		table.insert(phonText, '\n|-\n! align="center"|\n!Lumang Wikang Tsino')
		
		for item in mw.text.gsplit(phonData[phonComp], "") do
			table.insert(phonText, '\n|-\n| align="center" style="font-size:120%"|<span class="Hani">[[' .. item .. '#Chinese|' .. item .. ']]</span>')
			table.insert(phonText, '\n|<small><span class="IPA">' .. m_och(item, nil, true) .. '</span></small>')
		end
		table.insert(phonText, '\n|}')
	end
	
	return glyph_forms .. table.concat(phonText)
end

return export