2,788
edits
No edit summary |
No edit summary |
||
Line 14: | Line 14: | ||
["onomatopoeic"] = { | ["onomatopoeic"] = { | ||
categories = {"onomatopoeias"}, | categories = {"onomatopoeias"}, | ||
text = true, | |||
}, | }, | ||
["unknown"] = { | ["unknown"] = { | ||
categories = {"terms with unknown etymologies"}, | categories = {"terms with unknown etymologies"}, | ||
text = function(nocap) return (nocap and "u" or "U") .. "nknown" end, | |||
}, | }, | ||
} | } | ||
local single_term_params = { | local single_term_params = { | ||
[1] = {required = true}, | |||
[2] = {required = true}, | |||
[3] = {alias_of = "alt"}, | |||
[4] = {alias_of = "t"}, | |||
["alt"] = {}, | |||
["t"] = {}, | |||
["pos"] = {}, | |||
["nocap"] = {type = "boolean"}, | |||
["notext"] = {type = "boolean"}, | |||
["nocat"] = {type = "boolean"}, | |||
} | } | ||
local single_term_data = { | local single_term_data = { | ||
["abbreviation"] = { | ["abbreviation"] = { | ||
text = true, | |||
categories = {"abbreviations"} | categories = {"abbreviations"} | ||
}, | }, | ||
["back-formation"] = { | ["back-formation"] = { | ||
text = true, | |||
categories = {"back-formations"} | categories = {"back-formations"} | ||
}, | }, | ||
["clipping"] = { | ["clipping"] = { | ||
text = true, | |||
categories = {"clippings"}, | categories = {"clippings"}, | ||
}, | }, | ||
["doublet"] = { | ["doublet"] = { | ||
text = true, | |||
categories = {"doublets"}, | |||
}, | }, | ||
["ellipsis"] = { | ["ellipsis"] = { | ||
text = true, | |||
categories = {"ellipses"}, | categories = {"ellipses"}, | ||
}, | }, | ||
["initialism"] = { | ["initialism"] = { | ||
text = true, | |||
categories = {"initialisms"}, | categories = {"initialisms"}, | ||
}, | }, | ||
["rebracketing"] = { | ["rebracketing"] = { | ||
text = true, | |||
categories = {"rebracketings"}, | categories = {"rebracketings"}, | ||
}, | }, | ||
["reduplication"] = { | ["reduplication"] = { | ||
text = true, | |||
categories = {"reduplications"}, | categories = {"reduplications"}, | ||
}, | }, | ||
Line 83: | Line 84: | ||
local derived_term_data = { | local derived_term_data = { | ||
["borrowed"] = { | ["borrowed"] = { | ||
categories = {"terms borrowed from"}, | categories = {"terms borrowed from"}, | ||
}, | }, | ||
["calque"] = { | ["calque"] = { | ||
text = function(nocap) return (nocap and "b" or "B") .. "y [[Appendix:Glossary#surface analysis|surface analysis]], " end, | |||
categories = {"terms calqued from"}, | categories = {"terms calqued from"}, | ||
}, | }, | ||
["derived"] = { | ["derived"] = { | ||
categories = {"terms derived from"}, | categories = {"terms derived from"}, | ||
}, | }, | ||
["inherited"] = { | ["inherited"] = { | ||
categories = {"terms inherited from"}, | |||
}, | }, | ||
["learned borrowing"] = { | ["learned borrowing"] = { | ||
text = true, | |||
categories = {"terms borrowed from", "learned borrowings from"}, | categories = {"terms borrowed from", "learned borrowings from"}, | ||
}, | }, | ||
["orthographic borrowing"] = { | ["orthographic borrowing"] = { | ||
text = true, | |||
categories = {"terms borrowed from", "orthographic borrowings from"}, | categories = {"terms borrowed from", "orthographic borrowings from"}, | ||
}, | }, | ||
["semantic loan"] = { | ["semantic loan"] = { | ||
text = true, | |||
categories = {"terms derived from", "semantic loans from"}, | categories = {"terms derived from", "semantic loans from"}, | ||
}, | }, | ||
["phono-semantic matching"] = { | ["phono-semantic matching"] = { | ||
text = true, | |||
categories = {"terms derived from", "phono-semantic matchings from"}, | categories = {"terms derived from", "phono-semantic matchings from"}, | ||
}, | }, | ||
["transliteration"] = { | ["transliteration"] = { | ||
text = true, | |||
categories = {"terms derived from", "transliterations of"}, | categories = {"terms derived from", "transliterations of"}, | ||
}, | }, | ||
Line 147: | Line 145: | ||
end | end | ||
function | local function format_etymology(out, categories) | ||
for _, category in ipairs(categories) do | for _, category in ipairs(categories) do | ||
out = out .. "[[Category:" .. category .. "]]" | out = out .. "[[Category:" .. category .. "]]" | ||
Line 154: | Line 152: | ||
end | end | ||
function | local function format_solo_text(label, text_data, nocap_arg) | ||
if not | if not text_data then return "" end | ||
if type(text_data) == "function" then return text_data(nocap_arg) end | |||
return "[[Appendix:Glossary#" .. label .. "|" .. (nocap_arg and label or mw.ustring.gsub(label, "^%l", string.upper)) .. "]]" | |||
return "[[Appendix:Glossary#" .. | end | ||
local function format_prefixed_text(label, text_data, nocap_arg) | |||
if not text_data then return "" end | |||
if type(text_data) == "function" then return text_data(nocap_arg) end | |||
return "[[Appendix:Glossary#" .. label .. "|" .. (nocap_arg and label or mw.ustring.gsub(label, "^%l", string.upper)) .. "]] of " | |||
end | end | ||
function | local function hydrate_category(category, language_to, language_from) | ||
local new_category = language_to.name .. " " .. category | local new_category = language_to.name .. " " .. category | ||
if language_from then new_category = new_category .. " " .. language_from.name end | if language_from then new_category = new_category .. " " .. language_from.name end | ||
Line 167: | Line 170: | ||
end | end | ||
function | local function hydrate_categories(categories, language_to, language_from) | ||
local new_categories = {} | local new_categories = {} | ||
for i, category in ipairs(categories) do | for i, category in ipairs(categories) do | ||
new_categories[i] = | new_categories[i] = hydrate_category(category, language_to, language_from) | ||
end | end | ||
return new_categories | return new_categories | ||
end | end | ||
function | local function no_term_etymology(template, frame) | ||
local data, args = no_term_data[template], m_parameters.process(frame:getParent().args, no_term_params) | local data, args = no_term_data[template], m_parameters.process(frame:getParent().args, no_term_params) | ||
local out, categories = "", {} | local out, categories = "", {} | ||
local language = m_languages.get_by_code(args[1]) | local language = m_languages.get_by_code(args[1]) | ||
if not args["nocat"] then categories = | if not args["nocat"] then categories = hydrate_categories(data["categories"], language) end | ||
if not args["notext"] then out = | if not args["notext"] then out = format_solo_text(template, data["text"], args["nocap"]) end | ||
return | return format_etymology(out, categories) | ||
end | end | ||
function | local function single_term_etymology(template, frame) | ||
local data, args = single_term_data[template], m_parameters.process(frame:getParent().args, single_term_params) | local data, args = single_term_data[template], m_parameters.process(frame:getParent().args, single_term_params) | ||
local out, categories = "", {} | local out, categories = "", {} | ||
local language = m_languages.get_by_code(args[1]) | local language = m_languages.get_by_code(args[1]) | ||
if not args["notext"] then out = out .. | if not args["notext"] then out = out .. format_prefixed_text(template, data["text"], args["nocap"]) end | ||
out = out .. m_links.full_link({ | out = out .. m_links.full_link({ | ||
term = args[2], | term = args[2], | ||
Line 196: | Line 199: | ||
pos = args["pos"], | pos = args["pos"], | ||
nobold = true, | nobold = true, | ||
},"term") | }, "term") | ||
if not args["nocat"] then categories = | if not args["nocat"] then categories = hydrate_categories(data["categories"], language) end | ||
return | return format_etymology(out, categories) | ||
end | end | ||
function | local function derived_term_etymology(template, frame) | ||
local data, args = derived_term_data[template], m_parameters.process(frame:getParent().args, derived_term_params) | local data, args = derived_term_data[template], m_parameters.process(frame:getParent().args, derived_term_params) | ||
local out, categories = "", {} | local out, categories = "", {} | ||
local language_to = m_languages.get_by_code(args[1]) | local language_to = m_languages.get_by_code(args[1]) | ||
local language_from = m_languages.get_by_code(args[2]) | local language_from = m_languages.get_by_code(args[2]) | ||
if (not args["notext"]) and (not data["silent"]) then out = out .. | if (not args["notext"]) and (not data["silent"]) then out = out .. format_prefixed_text(template, data["text"], args["nocap"]) end | ||
out = out .. m_links.full_link({ | out = out .. m_links.full_link({ | ||
term = args[3], | term = args[3], | ||
Line 215: | Line 218: | ||
showlanguage = true, | showlanguage = true, | ||
nobold = true, | nobold = true, | ||
},"term") | }, "term") | ||
if not args["nocat"] then categories = | if not args["nocat"] then categories = hydrate_categories(data["categories"], language_to, language_from) end | ||
return | return format_etymology(out, categories) | ||
end | end | ||
function | local function affix_etymology(frame) | ||
local args = m_parameters.process(frame:getParent().args, affix_params) | local args = m_parameters.process(frame:getParent().args, affix_params) | ||
local pre_out, categories = {}, {} | local pre_out, categories = {}, {} | ||
Line 233: | Line 236: | ||
if not args["nocat"] then | if not args["nocat"] then | ||
if args["noaff"][i] then | if args["noaff"][i] then | ||
-- | -- this is a marked non-affix, don't let it be classified as one! | ||
elseif language_from then | elseif language_from then | ||
table.insert(categories, language_to.name .. " terms derived from " .. language_from.name) | |||
if is_infix(term) or is_prefix(term) or is_suffix(term) then n_affixes = n_affixes + 1 end | |||
elseif is_infix(term) then | elseif is_infix(term) then | ||
table.insert(categories, language_to.name .. " terms infixed with " .. cite_term) | table.insert(categories, language_to.name .. " terms infixed with " .. cite_term) | ||
Line 256: | Line 259: | ||
showlanguage = (language_from and true), | showlanguage = (language_from and true), | ||
nobold = true, | nobold = true, | ||
},"term")) | }, "term")) | ||
end | end | ||
if (not args["nocat"]) and (n_parts > 1 and n_affixes == 0) then | if (not args["nocat"]) and (n_parts > 1 and n_affixes == 0) then | ||
table.insert(categories, language_to.name .. " compound terms") | table.insert(categories, language_to.name .. " compound terms") | ||
end | end | ||
return | return format_etymology(table.concat(pre_out, " + "), categories) | ||
end | end | ||
function export.show(frame) | function export.show(frame) | ||
local template = frame.args[1] | local template = frame.args[1] | ||
if no_term_data[template] then return | if no_term_data[template] then return no_term_etymology(template, frame) end | ||
if single_term_data[template] then return | if single_term_data[template] then return single_term_etymology(template, frame) end | ||
if derived_term_data[template] then return | if derived_term_data[template] then return derived_term_etymology(template, frame) end | ||
if template == "affix" then return | if template == "affix" then return affix_etymology(frame) end | ||
error("No such sub-template type is defined!") | error("No such sub-template type is defined!") | ||
end | end | ||
return export | return export |