Module:User:TAKASUGI Shinji/zh/sandbox

local M = {}

local m_data = mw.loadData('Module:zh/data') local m_skeys = nil local len = mw.ustring.len local cmn_pron = nil

local py_detone={ ['ā']='a',['á']='a',['ǎ']='a',['à']='a', ['ō']='o',['ó']='o',['ǒ']='o',['ò']='o', ['ē']='e',['é']='e',['ě']='e',['è']='e', ['ī']='i',['í']='i',['ǐ']='i',['ì']='i', ['ū']='u',['ú']='u',['ǔ']='u',['ù']='u', ['ǖ']='ü',['ǘ']='ü',['ǚ']='ü',['ǜ']='ü' };

local pos_aliases_title={ ['n']='Noun', ['pn']='Proper noun', ['propn']='Proper noun', ['pron']='Pronoun', --things related to nouns ['v']='Verb', ['a']='Adjective', ['adj']='Adjective', ['adv']='Adverb', --other main POSes ['prep']='Preposition', ['postp']='Postposition', ['conj']='Conjunction', --sentence modifiers ['part']='Particle', ['suf']='Suffix', --word modifiers ['prov']='Proverb', ['id']='Idiom', ['ch']='Idiom', ['cy']='Idiom', ['ph']='Phrase', ['intj']='Interjection', --more than one word ['cl']='Classifier', ['num']='Numeral', ['abb']='Abbreviation', ['deter']='Determiner' --other };

local pos_aliases_head={ ['n']='noun', ['pn']='proper noun', ['propn']='proper noun', ['v']='verb', ['a']='adj', --main POSes ['postp']='post', ['conj']='con', ['part']='particle', ['pron']='pronoun', --sentence modifiers and word modifiers ['prov']='proverb', ['id']='idiom', ['ch']='idiom', ['cy']='idiom', ['ph']='phrase', ['intj']='interj', --more than one word ['abb']='abbr', ['cl']='classifier', ['deter']='det' --other };

local function replace_chars(s, tab) local output = {} for cp in mw.ustring.gcodepoint(s) do		local ch = mw.ustring.char(cp) table.insert(output, tab[ch] or ch) end return table.concat(output) end

function M.sortkey_conv(f) local rs = type(f) == 'table' and f.args[1] or f	local ch = mw.ustring.sub(rs,1,1) ch = m_data.sortkeys[ch] or ch return ch .. mw.ustring.sub(rs,2,mw.ustring.len(rs)) end

function M.py_detone(f) local text = type(f) == 'table' and f.args[1] or f	return replace_chars(text, py_detone) end

function M.py_transf(f) local text = type(f) == 'table' and f.args[1] or f	if mw.ustring.match(text, '[āōēīūǖ]') then text = text .. '1'	elseif mw.ustring.match(text, '[áóéíúǘ]') then text = text .. '2'	elseif mw.ustring.match(text, '[ǎǒěǐǔǚ]') then text = text .. '3'	elseif mw.ustring.match(text, '[àòèìùǜ]') then text = text .. '4'	end text = replace_chars(text, py_detone) return text end

function M.tone_determ(f) local text = type(f) == 'table' and f.args[1] or f	if mw.ustring.match(text, '[āōēīūǖ]') then return '1' elseif mw.ustring.match(text, '[áóéíúǘ]') then return '2' elseif mw.ustring.match(text, '[ǎǒěǐǔǚ]') then return '3' elseif mw.ustring.match(text, '[àòèìùǜ]') then return '4' else return '5' end end

function M.ts_determ(f) local text = type(f) == 'table' and f.args[1] or f	for cp in mw.ustring.gcodepoint(text) do		local ch = mw.ustring.char(cp) if m_data.ts[ch] then return 'trad' end if m_data.st[ch] then return 'simp' end end return 'both' end

function M.ts(f) local text = type(f) == 'table' and f.args[1] or f	text = replace_chars(text, m_data.ts) return text end

function M.st(f) local text = type(f) == 'table' and f.args[1] or f	text = replace_chars(text, m_data.st) return text end

function M.py(text,comp,pos,p,is_erhua) if not is_erhua then is_erhua = false end if type(text) == 'table' then text,comp,pos,p,is_erhua = text.args[1],text.args[2],text.args[3],text.args[4],text.args[5] end comp = comp or '' local q = {} local sum = 0 textconv = M.ts(text) len = mw.ustring.len(text) if is_erhua then len = len - 1 end text = '' if comp ~= '' and comp ~= '12' and comp ~= '21' and not ((pos == 'cy' or pos == 'Idiom' or pos == 'idiom') and len == 4) and not is_erhua then for i = 1,mw.ustring.len(comp) do			sum = sum + tonumber(mw.ustring.sub(comp,i,i)) q[sum] = 'y'		end end if not p then p={} end local initial = true for i = 1,len do		if p[i] and p[i] ~= '' then --pronunciation supplied text = text .. p[i] else local char = mw.ustring.sub(textconv,i,i) char = m_data.py[char] or char if is_erhua or initial or not mw.ustring.find(char,'^[aoeāōēáóéǎǒěàòè]') then text = text .. char else text = text .. "&#39;" .. char end if char ~= mw.ustring.sub(textconv,i,i) then initial = false else initial = true end end if q[i] == 'y' and i ~= len and not is_erhua then text = text .. ' ' end end if is_erhua == true then text = text .. 'r' end if pos == 'pn' or pos == 'propn' then characters = mw.text.split(text,' ') for i=1,#characters do			characters[i] = mw.language.getContentLanguage:ucfirst(characters[i]) end text = table.concat(characters,' ') end return text end

function M.py_er(text,comp,pos,p) return M.py(text,comp,pos,p,true) end

function M.pytemp(text,comp,pos,p,is_erhua) if not is_erhua then is_erhua = false end if type(text) == 'table' then text,comp,pos = text.args[1],text.args[2],text.args[3] or 'n' end comp = comp or '' local q = {} local sum = 0 textconv = M.ts(text) len = mw.ustring.len(text) if is_erhua == true then len = len - 1 textconv = mw.ustring.sub(textconv,1,len) end text = '' if comp ~= '' and comp ~= '12' and comp ~= '21' and not is_erhua then for i = 1,mw.ustring.len(comp) do			sum = sum + tonumber(mw.ustring.sub(comp,i,i)) q[sum] = 'y'		end end if not p then p={} end for i = 1,len do		if p[i] and p[i] ~= '' then --pronunciation supplied text = text .. p[i] else local char = mw.ustring.sub(textconv,i,i) if mw.ustring.find(char,'[一不期績绩蹟跡迹嵌框微突帆藩擊击夾夹鞠拈夕汐昔惜息危椰濤涛叔寂馴驯築筑質质播究菌矻識识穴膜餾馏企辱署偽伪蹈諷讽斂敛坊樸朴儲储剖檔档髮轍辙賜赐堤壑酵括懾慑蝸蜗淆攜携崖癌暫暂蟄蛰驟骤液血酪嘌覲幀蕁曳]') then text = text .. char else char = m_data.py[char] or char if i ~= 1 and mw.ustring.find(char,'^[aoeāōēáóéǎǒěàòè]') then char = "'" .. char end text = text .. char end end if q[i] == 'y' and i ~= len and not is_erhua then text = text .. ' ' end end text = mw.ustring.gsub(text," '"," ") if pos == 'pn' or pos == 'propn' then characters = mw.text.split(text,' ') for i=1,#characters do			characters[i] = mw.language.getContentLanguage:ucfirst(characters[i]) end text = table.concat(characters,' ') end return text end

function M.pytemp_er(text,comp,pos,p) return M.pytemp(text,comp,pos,p,true) end

function M.pywordconv(text,p) if type(text) == 'table' then text = text.args[1] end textconv = M.ts(text) len = mw.ustring.len(text) text = '' if not p then p={} for i=1,20 do p[i]='' end end for i = 1,len do		if p[i] ~= '' then text = text .. M.py_transf(p[i]) else char = mw.ustring.sub(textconv,i,i) cpy = m_data.py[char] or char text = text .. M.py_transf(cpy) end end return text end

function M.pywordconv_er(text,p) if type(text) == 'table' then text = text.args[1] end len = mw.ustring.len(text) - 1 textconv = mw.ustring.sub(M.ts(text),1,len) text = '' if not p then p={} for i=1,20 do p[i]='' end end for i = 1,len do		if p[i] ~= '' then if i == len then p[i] = p[i] .. 'r' end text = text .. M.py_transf(p[i]) else char = mw.ustring.sub(textconv,i,i) cpy = m_data.py[char] or char if i == len then cpy = cpy .. 'r' end text = text .. M.py_transf(cpy) end end return text end

function M.decomp(text,comp) if type(text) == 'table' then text,comp = text.args[1],text.args[2] or '' end comp = comp or tostring(mw.ustring.len(text)) local num = tonumber(comp) char = mw.ustring.sub(text,num,num) return char end

function M.compdecomp(title,comp) if type(title) == 'table' then title,comp = title.args[1],title.args[2] end comp = comp or '' local start = 1 local finish = 1 local sum = 0 local text = '' local p={} textlen = mw.ustring.len(title) if comp == '' then for i = 1,textlen do comp = comp .. '1'		end end for i = 1,mw.ustring.len(comp) do		p[i] = tonumber(mw.ustring.sub(comp,i,i)) sum = sum + p[i] end if sum ~= textlen then comp = '' for j = 1,textlen do			p[j] = tonumber(1) comp = comp .. '1'		end end for i = 1,mw.ustring.len(comp) do		if i ~= 1 then start = start + p[i-1] end finish = start + p[i] - 1 text = (text ..  .. mw.ustring.sub(title,start,finish) .. ) end return text end

function M.compdecompetym(title,comp) if type(title) == 'table' then title,comp = title.args[1],title.args[2] end comp = comp or '' local start = 1 local finish = 1 local sum = 0 local text = '' local p={} textlen = mw.ustring.len(title) if comp == '' then for i = 1,textlen do comp = (comp .. '1') end end for i = 1,mw.ustring.len(comp) do		p[i] = tonumber(mw.ustring.sub(comp,i,i)) sum = sum + p[i] end if sum ~= textlen then comp = '' for j = 1,textlen do			p[j] = tonumber(1) comp = (comp .. '1') end end for i = 1,mw.ustring.len(comp) do		if i ~= 1 then start = start + p[i-1] end finish = start + p[i] - 1 if i ~= 1 then text = (text .. '|') end text = (text .. mw.ustring.sub(title,start,finish)) end return text end

function M.hzbox(title,comp,e) if type(title) == 'table' then title,comp = title.args[1],title.args[2] end local id = M.ts_determ(title) local text = '' end

function M.hzbox_er(title) if type(title) == 'table' then title = title.args[1] end len = mw.ustring.len(title) if mw.ustring.sub(title,len,len) == '兒' then id = 'trad' else id = 'simp' end title = mw.ustring.sub(title,1,len-1) text = '')	else		text = (text .. '' .. M.ts(title) .. '儿|' .. title .. '兒}}')	end	return text end

function M.sort(title) if type(title) == 'table' then title = title.args[1] end local text = '' len = mw.ustring.len(title) title = M.ts(title) for i = 1,len do		charpy = mw.ustring.sub(title,i,i) charpy = m_data.py[charpy] or charpy text = text .. M.py_transf(charpy) end return text end

function M.postitle(pos) pos = pos or '' if pos == '' then pos = 'n' end return pos_aliases_title[pos] or pos end

function M.poshead(pos) pos = pos or '' if pos == '' then pos = 'n' end return pos_aliases_head[pos] or pos end

function M.skeys(title) if m_skeys == nil then m_skeys = mw.loadData('Module:zh/data/skeys') end if type(title) == 'table' then title = title.args[1] end text = mw.ustring.sub(title,1,1) text = m_skeys.skeys[text] or text return text end

function M.chardecomp(title) if type(title) == 'table' then title = title.args[1] end text = mw.text.split(title,"") return table.concat(text,"|") end

function M.semantics(text,name,sem) if sem[1] and sem[1] ~= '' then text = (text .. '\n\n====' .. name .. '====') if name == 'Derived terms' then text = text .. '\n' else for i = 1, #sem do text = text .. '\n* ' end end end return text end

function M.create_er(f) return M.create(f,true) end

local function checkpos(pos) for poscode,posname in pairs(pos_aliases_head) do		if pos == posname then return poscode end end for poscode,posname in pairs(pos_aliases_title) do		if pos == posname then return poscode end end return pos end

function M.headword(title,comp,pos,is_erhua) if not is_erhua then is_erhua = false end is_table = (type(title) == 'table') p = {} for i=4,23 do table.insert(p,(is_table and title.args[i] or '')) end if type(title) == 'table' then title,comp,pos = title.args[1],title.args[2],title.args[3] end text = '\n\n# ' end

function M.link(frame,mention,args,pagename) args = args or frame:getParent.args pagename = pagename or mw.title.getCurrentTitle.text if args[2] and mw.ustring.match(args[2], '[一-龯㐀-䶵]') then gloss = args[4] or '' tr = args[3] or '' text = args[1] .. '/' .. args[2] else text = args[1] or '' if not args['gloss'] or args['gloss'] == '' then if args[2] and (mw.ustring.match(args[2], '[āōēīūǖáóéíúǘǎǒěǐǔǚàòèìùǜâêîôû̍ⁿ]') or mw.ustring.match(args[2], '[bcdfghjklmnpqrstwz]h?y?[aeiou][aeiou]?[iumnptk]?g?[1-9]')) then tr = args[2] or '' gloss = args[3] or '' else tr = '' gloss = args[2] or '' end else tr = args[2] or '' gloss = args['gloss'] end end if args['tr'] and args['tr'] ~= '' then tr = args['tr'] gloss = gloss or args[2] or '' end if text ~= '' and not text:match('[%[%]]') then word = mw.text.split(text,"/",true) if #word == 1 and M.ts_determ(word[1]) == 'trad' and not mw.ustring.match(word[1], '%*') then table.insert(word, M.ts(word[1])) end if tr == '' and word[1] and mw.title.new(word[1]).exists and text ~= pagename then content = mw.title.new(word[1]):getContent content = mw.ustring.gsub(content, ",([^ ])", ";%1") template = mw.ustring.match(content, "{{zh%-pron[^}]*|m=([^};|\n]+)") if template and template ~= "" then if cmn_pron == nil then cmn_pron = require("Module:cmn-pron") end tr = cmn_pron.str_analysis(template, 'link') end end for i = 1,#word do			word[i] = mw.ustring.gsub(word[i], '%*', '') if mention then word[i] = '' .. word[i] .. '' -- (disabled to allow links to, for example, a link to 冥王星 else word[i] = ' ' .. word[i] .. ' ' end end text = table.concat(word,"／") elseif text:match('[%[%]]') or text == pagename then if mention then text = '' .. text .. '' else text = ' ' .. text .. ' '		end end if tr == '-' then tr = '' -- allow translit to be disabled: remove translit if it is "-", just like normal end if tr ~=  or gloss ~=  then text = text .. ' ('		if tr ~=  then			text = text .. '  .. tr ..  '			if gloss ~=  then				text = text .. ', '			end		end		if gloss ~= '' then			text = text .. '“' .. gloss .. '”'		end		text = text .. ')' end return text end

function M.mention(frame) return M.link(frame,true) end

function M.check_pron(text, variety, length, entry_creation) if type(text) == 'table' then text, variety = text.args[1], text.args[2] end if not text then return end startpoint, address = { ['yue'] = 51, ['hak'] = 19968, ['nan'] = 19968 }, { ['yue'] = 'Jyutping_word/%03d', ['hak'] = 'hak-pron/%02d', ['nan'] = 'nan-pron/%03d' } unit = 1000 first_char = mw.ustring.sub(text, 1, 1) codepoints = { ['simp'] = mw.ustring.codepoint(first_char), ['trad'] = mw.ustring.codepoint(M.st(first_char)) } texts = { ['simp'] = text, ['trad'] = M.st(text) } local result = false for identity, codepoint in pairs(codepoints) do		if length == 1 and variety == "yue" then success, data = pcall(mw.loadData, 'Module:zh/data/Jyutping character') else page_index = math.floor((codepoint - startpoint[variety]) / unit) success, data = pcall(mw.loadData,				('Module:zh/data/' .. address[variety]):format(page_index)			) end if success then result = data[texts[identity]] or false else result = false end if result then if variety == "nan" and entry_creation then result = mw.ustring.gsub(result, "%-á%-", "-仔-") result = mw.ustring.gsub(result, "%-á/", "-仔/") result = mw.ustring.gsub(result, "%-á$", "-仔") result = mw.ustring.gsub(result, "^(.+)%-%1%-%1$", "(%1)") result = mw.ustring.gsub(result, "^(.+)%-%1%-%1([%-%/])", "(%1)%2") result = mw.ustring.gsub(result, "([%-%/])(.+)%-%1%-%1$", "%1(%2)") result = mw.ustring.gsub(result, "([%-%/])(.+)%-%1%-%1([%-%/])", "%1(%2)%3") end return result end end return result end

function M.nan_for_bot text = mw.title.getCurrentTitle.text result = M.check_pron(text, 'nan') if result then return '\n|mn=' .. result else return end end

function M.der(frame) local m_columns = require("Module:columns") local args = frame:getParent.args local pagename = mw.title.getCurrentTitle.text local result = {} for i, word in ipairs(args) do		table.insert(result, M.link(frame,nil,{ word },pagename)) end return m_columns.create_table((mw.ustring.len(pagename) > 1 and 2 or 3), result, 1, "#F5F5FF", (#result > 72 and 1 or 0), "Derived terms",		"Derived terms from " .. pagename .. " ",		math.floor(80 / (mw.ustring.len(pagename) > 1 and 2 or 3)), "* ", nil) end

local lang_abbrev = { ['m'] = 'Mandarin', ['c'] = 'Cantonese', ['g'] = 'Gan', ['h'] = 'Hakka', ['j'] = 'Jin', ['md'] = 'Min Dong', ['mn'] = 'Min Nan', ['mn-t'] = 'Teochew', ['w'] = 'Wu', ['x'] = 'Xiang', }

function M.cls(frame) local args = frame:getParent.args local result = {} for i, combination in ipairs(args) do		part = mw.text.split(combination, ":") if #part == 2 then local dialect = { "" } local function annotate(main_text, annotation) return "''" .. main_text .. "'' "			end for variety in mw.text.gsplit(part[1], ",") do				table.insert(dialect, annotate(variety, lang_abbrev[variety])) end note = table.concat(dialect, " ") else note = false end table.insert(result, mw.getCurrentFrame:expandTemplate{ title = "Template:zh-l",			args = { "*" .. (part[2] or part[1]) }, tr = "-" } .. (note or "")) end return " (Classifier: " .. table.concat(result, "; ") .. ") " end

function M.newDer(frame) local title = mw.title.getCurrentTitle.text local wordlist = require("Module:zh/data/wordlist").list local args = frame:getParent.args local result = {} local limit = args["limit"] and tonumber(args["limit"]) or false args["limit"] = nil for _, arg in ipairs(args) do		table.insert(result, arg) end for _, word in ipairs(wordlist) do		if mw.ustring.match(word, title) and word ~= title and not (len(title) == 1 and len(word) > (limit or 4)) then table.insert(result, word) end end local hash, res = {}, {} for _, element in ipairs(result) do		if not hash[element] then res[#res + 1] = element hash[element] = true end end return "" end

function M.create(f,is_erhua) if not is_erhua then is_erhua = false end local title = mw.title.getCurrentTitle.text local params = { ["type"] = {}, ["comp"] = {alias_of = "type"}, [1] = {list = true, allow_holes = true}, ["pos"] = {list = true, allow_holes = true}, ["def"] = {list = true, allow_holes = true}, ["e1"] = {list = "e"}, ["etym1"] = {list = "etym"}, ["etymology1"] = {list = "etymology"}, ["meaning"] = {list = true}, ["gloss"] = {list = true}, ["k"] = {}, ["ko"] = {alias_of = "k"}, ["korean"] = {alias_of = "k"}, ["kt"] = {}, ["tr"] = {alias_of = "kt"}, ["transcription"] = {alias_of = "kt"}, ["ktr"] = {alias_of = "kt"}, ["kotr"] = {alias_of = "kt"}, ["koreantr"] = {alias_of = "kt"}, ["ktrans"] = {alias_of = "kt"}, ["kotrans"] = {alias_of = "kt"}, ["ke"] = {}, ["kodef"] = {alias_of = "ke"}, ["kodefinition"] = {alias_of = "ke"}, ["koreandef"] = {alias_of = "ke"}, ["v"] = {}, ["vi"] = {alias_of = "v"}, ["vietnam"] = {alias_of = "v"}, ["ve"] = {}, ["videf"] = {alias_of = "ve"}, ["videfinition"] = {alias_of = "ve"}, ["vietnamdef"] = {alias_of = "ve"}, ["vietnamdefinition"] = {alias_of = "ve"}, ["p"] = {list = true}, ["pron"] = {list = true}, ["pronunciation"] = {list = true}, ["e"] = {}, ["etym"] = {alias_of = "e"}, ["etymology"] = {alias_of = "e"}, ["origin"] = {alias_of = "e"}, ["ori"] = {alias_of = "e"}, ["o"] = {alias_of = "e"}, ["syn"] = {list = true}, ["synonym"] = {list = true}, ["ant"] = {list = true}, ["antonym"] = {list = true}, ["der"] = {list = true}, ["deriv"] = {list = true}, ["derived"] = {list = true}, ["derivedterm"] = {list = true}, ["also"] = {list = true}, ["see"] = {list = true}, ["seealso"] = {list = true}, ["alsosee"] = {list = true}, ["wp"] = {}, ["wiki"] = {alias_of = "wp"}, ["wikipedia"] = {alias_of = "wp"}, ["cat"] = {list = true}, ["category"] = {list = true}, ["categories"] = {list = true}, ["categorize"] = {list = true}, ["categorise"] = {list = true}, ["categorization"] = {list = true}, ["categorisation"] = {list = true}, ["pic"] = {}, ["file"] = {alias_of = "pic"}, ["image"] = {alias_of = "pic"}, ["picture"] = {alias_of = "pic"}, ["piccap"] = {}, ["caption"] = {alias_of = "piccap"}, ["description"] = {alias_of = "piccap"}, ["desc"] = {alias_of = "piccap"}, ["er"] = {}, ["erhua"] = {alias_of = "er"}, ["tl"] = {}, ["toneless"] = {alias_of = "tl"}, ["tonelessvariant"] = {alias_of = "tl"}, ["variant"] = {alias_of = "tl"}, ["variation"] = {alias_of = "tl"}, ["tonelessvariation"] = {alias_of = "tl"}, ["a"] = {}, ["audio"] = {alias_of = "a"}, ["listen"] = {alias_of = "a"}, ["sound"] = {alias_of = "a"}, ["pronounced"] = {alias_of = "a"}, ["alt"] = {list = true}, ["alter"] = {list = true}, ["altern"] = {list = true}, ["alternate"] = {list = true}, ["alternative"] = {list = true}, ["alternativeform2"] = {list = true}, ["c"] = {}, ["cant"] = {alias_of = "c"}, ["cantonese"] = {alias_of = "c"}, ["mn"] = {}, ["nan"] = {alias_of = "mn"}, ["minnan"] = {alias_of = "mn"}, ["w"] = {}, ["wu"] = {alias_of = "w"}, ["shanghai"] = {alias_of = "w"}, ["m"] = {}, ["h"] = {}, ["md"] = {}, ["mc"] = {}, ["oc"] = {}, }	local args = require("Module:parameters").process(f:getParent.args, params) local comp = args["type"] or "" local pos = {} local def = {} for i=1,math.max(args[1].maxindex/2, args["pos"].maxindex, args["def"].maxindex) do		table.insert(pos, args[1][2*i-1] or args["pos"][i] or "") table.insert(def, args[1][2*i] or args["def"][i] or "") end local function expand(arg) local result = {} local maximum = 0 for i=1,#arg do if #arg[i] > maximum then maximum = #arg[i] end end local current = nil for i=1,maximum do			current = nil for j=1,#arg do				if current then break else current = arg[j][i] end end current = current or "" table.insert(result, current) end return result end local function fetch_all(arg) local result = {} for i=1,#arg do			for j=1,#arg[i] do				table.insert(result,arg[i][j]) end end return result end local etyms = expand({args["e1"], args["etym1"], args["etymology1"], args["gloss"], args["meaning"]}) local ko = args["k"] or "" local kotrans = args["kt"] or "" local kodef = args["ke"] or def[1] or "" local vi = args["v"] or "" local videf = args["ve"] or def[1] or "" local p = expand({args["p"], args["pron"], args["pronunciation"]}) local etym = args["etym"] or "" local syn = expand({args["syn"], args["synonym"]}) local ant = expand({args["ant"], args["antonym"]}) local der = expand({args["der"], args["deriv"], args["derived"], args["derivedterm"]}) local also = expand({args["also"], args["see"], args["alsosee"], args["seealso"]}) local wp = args["wp"] or "" local cat = fetch_all({args["cat"], args["category"], args["categories"], args["categorize"], args["categorise"], args["categorization"], args["categorisation"]}) local pic = args["pic"] or "" local piccap = args["piccap"] or "" local er = args["er"] or "" local tl = args["tl"] or "" local audio = args["a"] or "" local alt = expand({args["alt"], args["alter"], args["altern"], args["alternate"], args["alternative"], args["alternativeform"]}) local c = args["c"] or "" local mn = args["mn"] or "" local w = args["w"] or "" local m = args["m"] or "" local h = args["h"] or "" local md = args["md"] or "" local mc = args["mc"] or "" local oc = args["oc"] or "" text = '' if not pos[1] or pos[1] == '' then pos[1] = 'n' end for i=1,#pos do pos[i] = checkpos(pos[i]) end text = (text .. '==Chinese==\n') if M.ts_determ(title) == 'simp' then return text .. '\n\n%s'):format(mw.title.getCurrentTitle.text)	end	length = mw.ustring.len(title)	noerhua = mw.ustring.sub(title,1,length-1)	erhua = mw.ustring.sub(title,length,length)	text = text .. (is_erhua and M.hzbox_er(title) or M.hzbox(title,comp,table.concat(etyms,'|')))	if wp ~= '' then text = (text .. '\n') end	if pic ~= '' then text = (text .. '\n')	end	if is_erhua then		text = (text .. '\n\n===Etymology===\n\n\n")		text = (text .. '===Pronunciation===\n\n\n')	else		text = (text .. '\n\n')		if #alt > 0 then			text = (text .. '===Alternative forms===')			for i=1,#alt do text = (text .. '\n* ') end			text = (text .. '\n\n')		end		if etym ~= '' then text = (text .. '===Etymology===\n' .. etym .. '\n\n') end		if #etyms > 0 then			text = (text .. '===Etymology===\n')			text = (text .. '\n\n')		end		text = (text .. '===Pronunciation===\n\n\n')	end	text = (text .. '===' .. (length == 1 and "Definitions" or M.postitle(pos[1])) .. '===\n')	text = (text .. '\n\n')	if is_erhua then		text = text .. '# '	else		text = (text .. '# ' .. ((def[1] and def[1] ~= "") and def[1] or ""))	end	text = M.semantics(text,'Synonyms',syn)	text = M.semantics(text,'Antonyms',ant)	text = M.semantics(text,'Derived terms',der)	for i=2,#pos do		text = text .. '\n\n===' .. M.postitle(pos[i]) .. '===\n' text = text .. '\n\n' if is_erhua then text = text .. '# '		else text = text .. '# ' .. def[i] end end if #also > 0 then text = (text .. '\n\n===See also===') for i=1,#also do text = (text .. '\n* ') end end if #cat > 0 then text = (text .. '\n\n') end if ko ~= '' then text = text .. '\n\n\n\n==Korean==\n\n\n===Noun===\n\n\n# ' end if vi ~= '' then text = text .. '\n\n\n\n==Vietnamese==\n\n\n===' .. M.postitle(pos[1]) .. '===\n\n\n# ' end if not mw.title.getCurrentTitle.exists then text = text .. ('\n\n%s'):format(mw.title.getCurrentTitle.text) end return text end

return M