Module:ur

From Wiktionary, the free dictionary
Jump to navigation Jump to search

This module needs documentation.
Please document this module by describing its purpose and usage on the documentation page.

local export = {}

local lang = require("Module:languages").getByCode("ur")
local gsub = mw.ustring.gsub
local sub = mw.ustring.sub

--From [[Module:th]]
function export.new(frame)
	local title = mw.title.getCurrentTitle().text
	local args = frame:getParent().args
	local pos = args[1] or ""
	local def = args[2] or "{{rfdef|lang=ur}}"
	local pos2 = args[3] or (args[4] and "" or false)
	local def2 = args[4] or "{{rfdef|lang=ur}}"
	local pos3 = args[5] or (args[6] and "" or false)
	local def3 = args[6] or "{{rfdef|lang=ur}}"
	local etym = args["e"] or false
	local head = args["head"] or false
	local pron = args["pron"] or false
	local g = args["g"] or false
    local g2 = args["g2"] or false
    local g3 = args["g3"] or false
    local decl = args["decl"] or false
	local conj = args["conj"] or false -- conjugation stuff
    local v = args["v"] or false
    local karna = args["karna"] or false
    local t = args["t"] or false
    local c = args["c"] or args["cat"] or false
    local ref = args["ref"] or false
    local pp = args["pp"] or false --perfect participle

	local result = ""
	
	local function genTitle(text)
		local pos_title = {
			[""] = "Noun", ["n"] = "Noun", ["pn"] = "Proper noun", ["propn"] = "Proper noun", ["pron"] = "Pronoun",
			["v"] = "Verb", ["a"] = "Adjective", ["adj"] = "Adjective", ["adv"] = "Adverb",
			["prep"] = "Preposition", ["postp"] = "Postposition", ["post"] = "Postposition", ["con"] = "Conjunction",
			["part"] = "Particle", ["suf"] = "Suffix", ["pref"] = "Prefix",
			["prov"] = "Proverb", ["id"] = "Idiom", ["ph"] = "Phrase", ["intj"] = "Interjection", ["interj"] = "Interjection",
			["num"] = "Numeral", ["abb"] = "Abbreviation", ["conj"] = "Conjunction",
            ["adj-form"] = "Adjective", ["verb-form"] = "Verb", ["noun-form"] = "Noun",
            ["pp"] = "Perfect participle",
		};
		return pos_title[text] or mw.ustring.upper(sub(text, 1, 1)) .. sub(text, 2, -1)
	end
	
	local function genHead(text)
		local pos_head = {
			[""] = "noun", ["n"] = "noun", ["pn"] = "proper noun", ["propn"] = "proper noun", ["v"] = "verb", ["a"] = "adj", ["adv"] = "adv",
			["postp"] = "post", ["prep"] = "prep", ["conj"] = "con", ["pron"] = "pron",
			["intj"] = "interj", ["pp"] = "perfect participle",
		};
		return pos_head[text] or text
	end
	
	local function other(class, title, args)
		local code = ""
		if args[class] then
			code = code .. "\n\n===" .. title .. "===\n* {{l|ur|" .. args[class] .. "}}"
			
			if args[class .. "2"] then
				code = code .. "\n* {{l|ur|" .. args[class .. "2"] .. "}}"
				
				if args[class .. "3"] then
					code = code .. "\n* {{l|ur|" .. args[class .. "3"] .. "}}"
					
					if args[class .. "4"] then
						code = code .. "\n* {{l|ur|" .. args[class .. "4"] .. "}}"
					end
				end
			end
		end
		return code
	end
	
	-- header
	result = result .. "==Urdu=="
	
	-- Wikipedia
	if args["wp"] then result = result .. "\n{{wikipedia|lang=ur}}" end
	
	-- Alternative forms
	result = result .. other("alt", "Alternative forms", args)
	
	-- Etymology
	if etym then etym = mw.ustring.gsub(etym, "^%<", "From") end
	if etym then result = result .. "\n\n===Etymology===\n" .. etym end
	
	-- Pronunciation
	if pron then
		result = result .. "\n\n===Pronunciation===\n* {{ur-IPA|" .. ((pron ~= title and pron ~= "") and ("|" .. gsub(pron, ",", "|")) or "") .. "}}"
	else
		result = result .. "\n\n===Pronunciation===\n* {{ur-IPA}}"
	end
	result = result .. "\n\n===" .. genTitle(pos) .. "===\n{{ur-" .. genHead(pos) .. (head and ("|head=" .. head) or "") .. (g and ("|g=" .. g) or "") .. (t and ("|" .. t) or "") .. (pp and ("|" .. pp) or "") .. "}}\n\n# " .. def
    
    -- Morphology
    if decl then result = result .. "\n\n====Declension====\n{{ur-" .. genHead(pos) .. "-" .. ((decl ~= title and decl ~= "") and (gsub(decl, ",", "|")) or "") .. "}}" end
    if conj then result = result .. "\n\n====Conjugation====\n{{ur-conj" .. (v and ("-v") or "") .. (karna and ("-karna") or "") .. "|" .. (conj or "") .. "}}" end
	
	-- Other
	result = result .. other("syn", "=Synonyms=", args)
	result = result .. other("ant", "=Antonyms=", args)
	result = result .. other("der", "=Derived terms=", args)
	result = result .. other("also", "=See also=", args)
	
	-- Actual Entry
	if pos2 then
		result = result .. "\n\n===" .. genTitle(pos2) .. "===\n{{ur-" .. genHead(pos2) .. (head and ("|head=" .. head) or "") .. (g2 and ("|g=" .. g2) or "") .. "}}\n\n# " .. def2
	end
	
	if pos3 then
		result = result .. "\n\n===" .. genTitle(pos3) .. "===\n{{ur-" .. genHead(pos3) .. (head and ("|head=" .. head) or "")  .. (g3 and ("|g=" .. g3) or "") .. "}}\n\n# " .. def3
	end
    
    -- categories and references
    if ref then
    	result = result .. "\n\n====References====\n* {{R:Ox HI-EN|" .. ref .."}}"
    end
    
    if c then
    	result = result .. "\n\n{{topics|ur" .. ((c ~= title and c ~= "") and ("|" .. gsub(c, ",", "|")) or "") .. "}}"
    end
	
	return result
end


return export