Module:zh/templates

Hello, you have come here looking for the meaning of the word Module:zh/templates. In DICTIOUS you will not only get to know all the dictionary meanings for the word Module:zh/templates, but we will also tell you about its etymology, its characteristics and you will know how to say Module:zh/templates in singular and plural. Everything you need to know about the word Module:zh/templates you have here. The definition of the word Module:zh/templates will help you to be more precise and correct when speaking or writing your texts. Knowing the definition ofModule:zh/templates, as well as those of other words, enriches your vocabulary and provides you with more and better linguistic resources.


local export = {}
local m_zh = require("Module:zh")
local m_zh_link = require("Module:zh/link")

local function format_Chinese_text(text) return '<span class="Hani" lang="zh">' .. text .. '</span>' end
local function format_rom(text) return text and '<i><span class="tr Latn">' .. text .. '</span></i>' or nil end
local function format_gloss(text) return text and '“' .. text .. '”' or nil end

function export.mention(frame)
	return m_zh_link.link(frame, true)
end

function export.der(frame)
	local params = {
		 = { list = true },
		 = { type = "boolean" },
		 = {},
		 = {},
		 = { type = "boolean" },
	}
	
	local args = require("Module:parameters").process(frame:getParent().args, params)
	local curr_title = mw.title.getCurrentTitle()
	local pagename = curr_title.text
	
	if curr_title.namespace == 0 and pagename ~= "不" then
		error("This template has been deprecated. Please use ] instead.")
	end
	
	local result = {}
	
	local fold = args
	local name = args or "Derived terms from"
	local saurus = (curr_title.nsText == "Thesaurus")
	local title = args and " (<i>" .. args .. "</i>)" or ""
	local no_transcript = args
	
	if args then
		local m_ts_data = mw.loadData("Module:zh/data/ts")
		for _, word in ipairs(args) do
			if word then
				local formatted_word = {}
				if word:match("/") then
					for w in mw.text.gsplit(word, "/") do
						table.insert(formatted_word, format_Chinese_text("]"))
					end
				else
					table.insert(formatted_word, format_Chinese_text("]"))
					local word_s = word:gsub(".*", m_ts_data)
					if word_s ~= word then
						table.insert(formatted_word, format_Chinese_text("]"))
					end
				end
				table.insert(result, table.concat(formatted_word, "/"))
			end
		end
	else
		for _, word in ipairs(args) do
			local note = word:match(";(.+)")
			word = word:match("^+")
			if word then
				local colon_pos = word:find(":")
				local split_word = colon_pos and {word:sub(1, colon_pos - 1), word:sub(colon_pos + 1)}
					or {word}
				local slash_pos = split_word:find("/")
				local split_word_main = slash_pos and split_word:sub(1, slash_pos - 1) or split_word
				if split_word_main ~= pagename then  -- synonyms should not be the same as the title
					table.insert(result,
						m_zh_link.link(frame, nil, split_word, pagename, no_transcript) ..
						(note and " (''" .. note .. "'')" or ""))
				end
			end
		end
	end
	
	return 
		require("Module:columns/old").create_table(
			(mw.ustring.len(pagename) > 1 and 2 or 3), -- column number
			result, -- terms
			true, -- alphabetize
			"#F5F5FF", -- background
			(((#result > 72 or fold) and not saurus) and true or false), -- whether to collapse
			"derivedterms", -- class applied to table containing terms
			name .. " " .. format_Chinese_text(pagename) .. title, -- title
			nil, -- column width
			nil, -- line start (??)
			nil -- lang: not needed
		)
end

local lang_abbrev = {
	 = 'Mandarin',
	 = 'Cantonese',  = 'Gan',  = 'Hakka',  = 'Jin',
	 = 'Northern Min',  = 'Eastern Min',  = 'Hokkien',  = 'Teochew',
	 = 'Wu',  = 'Xiang',
}

function export.cls(frame)
	local args = frame:getParent().args
	local result, categories = {}, {}
	local m_zh_cat = require("Module:zh-cat")
	local space = '<span style="padding-left:4px; padding-right:4px">&nbsp;</span>'
	for _, combination in ipairs(args) do
		local part = mw.text.split(combination, ":")
		local note
		if #part == 2 then
			local dialect = { "" }
			local function annotate(main_text, annotation)
				return "<span style=\"border-bottom: 1px dotted var(--wikt-palette-black, #202122); cursor:help\" " ..
					"title=\"" .. annotation .. "\"><i>" .. main_text .. "</i></span>"
			end
			for variety in mw.text.gsplit(part, ",") do
				table.insert(dialect, annotate(variety, lang_abbrev))
			end
			note = table.concat(dialect, " ")
		else
			note = false
			require('Module:debug/track')("zh-mw-no-dialect")
		end
		table.insert(result, m_zh_link.link(frame, nil, { part or part, tr = "-" }) .. -- pagename is undefined!
			(note or ""))
		table.insert(categories, m_zh_cat.categorize("Classifier:" .. (part or part)))
	end
	return "<span style=\"padding-left:15px; font-size:80%\"><span style=\"background:var(--wikt-palette-cyan, #eaffff)\">(''Classifier'': " ..
		table.concat(result, ";" .. space) .. ")</span></span>" .. 
		(mw.title.getCurrentTitle().nsText == "" and table.concat(categories) or "")
end

function export.wikipedia(frame)
	local args = frame:getParent().args
	local title = mw.title.getCurrentTitle().text
	local wp_data = {
		 = { "Written Standard Chinese<sup>]</sup>", "zh" },
		 = { "Eastern Min", "cdo" },
		 = { "Gan", "zh" },
		 = { "Hakka", "hak" },
		 = { "Classical", "zh" },
		 = { "Southern Min", "nan" },
		 = { "Wu", "zh" },
		 = { "Cantonese", "zh" },
		 = { "English", "en" },
	}
	
	args = args and args or { "zh" }
	local result = { '<div class="sister-wikipedia sister-project noprint floatright" style="border: 1px solid #aaa; font-size: 90%; background: var(--background-color-neutral-subtle,#f8f9fa); width: 250px; padding: 4px; text-align: left;"><div style="float: left;">]</div><div style="margin-left: 40px;">] has ' ..
		(args and "articles" or "an article") .. ' on:<ul>' }

	for _, arg in ipairs(args) do
		local lang, pagename = arg:match("(.+):(.+)")
		if not pagename then lang, pagename = arg, title end
		if lang == "zh-classical" then error("Please use lzh instead of zh-classical.")
		elseif lang == "zh-yue" then error("Please use yue instead of zh-yue.")
		elseif lang == "zh-min-nan" then error("Please use nan instead of zh-min-nan.") end
		local lang_data = wp_data or error("" .. lang .. " is not a recognized language.")
		local annotation = lang_data or false
		if lang == "zh" and not args then
			annotation = false
		elseif annotation then
			annotation = " <span style=\"font-size:80%\">(" .. annotation .. ")</span>"
		end
		local script = require("Module:languages").getByCode("zh"):findBestScript(pagename):getCode()
		table.insert(result, '<li><b class="' .. script .. '" lang="' .. lang_data .. '">]</b>' .. (annotation or "") .. '</li>')
	end
	
	table.insert(result, '</ul></div></div>')
	
	return table.concat(result)
end

function export.syn_saurus(frame, kind)
	local args = frame:getParent().args
	local title = mw.title.getCurrentTitle().text
	local word = args or title
	local content = mw.title.new("Thesaurus:" .. word):getContent()
	local temp = kind or "syn"
	local template = content:match("{{zh%-" .. temp .. "%-list|(+)}}")
	if template and template ~= "" then
		local set = {}
		for item in mw.text.gsplit(template, "|") do
			table.insert(set, item ~= title and item or nil)
		end
		set = ((args or kind) == "ant") and "Antonyms of" or "Synonyms of"
		set = args or nil
		if args or #set > 10 then set = 1 end
		return '<div style="float: right; clear: right; font-size:60%"><span class="plainlinks">[' ..
		tostring(mw.uri.fullUrl("Thesaurus:" .. word, {  = "edit" })) ..
		' edit]</span></div>' .. frame:expandTemplate{ title = "Template:zh-der", args = set }
	else
		return ""
	end
end

function export.ant_saurus(frame)
	return export.syn_saurus(frame, "ant")
end

function export.div(frame)
	local args = frame:getParent().args
	local m_links = require("Module:links")
	local lang = require("Module:languages").getByCode("zh")
	local pagename = mw.title.getCurrentTitle().text
	local i, result = 1, ""
	
	local function add_link(pagename, description)
		local target_page = mw.title.new(pagename .. description)
		if target_page.exists and not target_page.isRedirect then
			return format_Chinese_text(m_links.language_link{ term = pagename .. description, alt = "~" .. description, lang = lang })
		else
			return format_Chinese_text("~" .. m_links.language_link{ term = description, lang = lang })
		end
	end

	while args do
		if i ~= 1 then result = result .. "''separator ''" end
		result = result .. add_link(pagename, args)
		if i == 1 and args then
			local j = 2
			result = result .. "'', formerly ''" .. add_link(pagename, args)
			while args do
				result = result .. "'', ''" .. add_link(pagename, args)
				j = j + 1
			end
		end
		i = i + 1
	end
	result = result:gsub("separator", result:match("formerly") and ";" or ",")
	
	return format_Chinese_text("(") .. result .. format_Chinese_text(")")
end

function export.short(frame)
	local args = frame:getParent().args
	local pinyin = args or false
	local gloss = args or false
	local nocap = args or false
	local notext = args or false
	local comb = args or false
	local nodot = args or false
	local ital = frame.args or false
	local noterm = not args or false
	local t, s, tr, anno, word = {}, {}, {}, {}, {}
	local start = (ital and "<i>" or "") .. (nocap and "s" or "S") .. "hort for " .. (ital and "</i>" or "")
	local cat = require("Module:zh-cat").categorize("short")
	if comb then
		for _, arg in ipairs(args) do
			table.insert(word, m_zh_link.link(frame, nil, { arg }))
		end
		return start .. table.concat(word, " + ") .. 
			(gloss and ": " .. format_gloss(gloss) or "") ..
			((ital and not nodot) and "<i>.</i>" or "") .. cat
	end
	for _, arg in ipairs(args) do
		local cap = arg:find("^%^")
		arg = arg:gsub("^%^", "")
		table.insert(t, "]")
		table.insert(s, "]")
		if not pinyin then
			local extracted_pron, _ = require("Module:zh/extract").extract_pron(arg, "m", cap)
			table.insert(tr, extracted_pron)
		end
	end
	local trad = format_Chinese_text(table.concat(t))
	local simp = format_Chinese_text(table.concat(s))
	pinyin = pinyin ~= "-" and pinyin or (#tr == #t and table.concat(tr, " ") or false)
	table.insert(anno, format_rom(pinyin))
	table.insert(anno, format_gloss(gloss))
	return (notext and "" or start) .. (noterm and "" or trad .. (trad ~= simp and "/" .. simp or "") .. 
		((pinyin or gloss) and " (" .. table.concat(anno, ", ") .. ")" or "") .. 
		((ital and not nodot) and "<i>.</i>" or "")) .. cat
end

return export