Jump to content

Module:ur-conj

From Wiktionary, the free dictionary

Impersonal forms of کَرْنا
Undeclined
Stem کَرْ
kar
Infinitive کَرْنا
karnā
Oblique Infinitive کَرْنے
karne
Conjunctive کَرْ کَر
kar kar
کَرْ کے
kar ke
Progressive کَرْتے
karte
Participles
m sg m pl f sg f pl
Infinitive کَرْنا
karnā
کَرْنے
karne
کَرْنی
karnī
کَرْنِیں
karnī̃
Habitual کَرْتا
kartā
کَرْتے
karte
کَرْتی
kartī
کَرْتِیں
kartī̃
Perfective کِیا
kiyā
کِیے
kiye کِئے
kie
کی
کِیں
kī̃
Prospective
Agentive
کَرْنے والا
karne vālā
کَرْنے والے
karne vāle
کَرْنے والی
karne vālī
کَرْنے والِیں
karne vālī̃
Adjectival کِیا ہُوا
kiyā huā
کِیے ہُوئے
kiye hūe کِئے ہُوئے
kie hūe
کی ہُوئی
kī hūī
کی ہُوئِیں
kī hūī̃
Personal forms of کَرْنا
Non-Aspectual
Singular Plural
1st
میں
2nd
تو
3rd
یہ/وہ
1st
ہم
2nd
تم
3rd
یہ/وہ/آپ
Indicative PERF m کِیا
kiyā
کِیا
kiyā
کِیا
kiyā
کِیے
kiye کِئے
kie
کِیے
kiye کِئے
kie
کِیے
kiye کِئے
kie
f کی
کی
کی
کِیں
kī̃
کی
کِیں
kī̃
FUT m کَرُوں گا
karū̃ gā
کَرے گا
kare gā
کَرے گا
kare gā
کَریں گے
karẽ ge
کَرو گے
karo ge
کَریں گے
karẽ ge
f کَرُوں گی
karū̃ gī
کَرے گی
kare gī
کَرے گی
kare gī
کَریں گی
karẽ gī
کَرو گی
karo gī
کَریں گی
karẽ gī
Subjunctive PRS
FUT
کَرُوں
karū̃
کَرے
kare
کَرے
kare
کَریں
karẽ
کَرو
karo
کَریں
karẽ
Contrafactual PRS
PST
m کَرْتا
kartā
کَرْتا
kartā
کَرْتا
kartā
کَرْتے
karte
کَرْتے
karte
کَرْتے
karte
f کَرْتی
kartī
کَرْتی
kartī
کَرْتی
kartī
کَرْتِیں
kartī̃
کَرْتی
kartī
کَرْتِیں
kartī̃
Imperative PRS کَرْ
kar
کَرو
karo
کَرِیے
kariye
FUT کَرِیو
kariyo
کَرْنا
karnā
کَرِیے گا
kariye gā
Habitual Aspect
Indicative PRS m کَرْتا ہُوں
kartā hū̃
کَرْتا ہَے
kartā hai
کَرْتا ہَے
kartā hai
کَرْتے ہَیں
karte ha͠i
کَرْتے ہو
karte ho
کَرْتے ہَیں
karte ha͠i
f کَرْتی ہُوں
kartī hū̃
کَرْتی ہَے
kartī hai
کَرْتی ہَے
kartī hai
کَرْتی ہَیں
kartī ha͠i
کَرْتی ہو
kartī ho
کَرْتی ہَیں
kartī ha͠i
PERF m کَرْتا تھا
kartā thā
کَرْتا تھا
kartā thā
کَرْتا تھا
kartā thā
کَرْتے تھے
karte the
کَرْتے تھے
karte the
کَرْتے تھے
karte the
f کَرْتی تھی
kartī thī
کَرْتی تھی
kartī thī
کَرْتی تھی
kartī thī
کَرْتی تِھیں
kartī thī̃
کَرْتی تھی
kartī thī
کَرْتی تِھیں
kartī thī̃
Presumptive PRS
PST
m کَرْتا ہُوں گا
kartā hū̃ gā
کَرْتا ہو گا
kartā ho gā
کَرْتا ہو گا
kartā ho gā
کَرْتے ہوں گے
karte hõ ge
کَرْتے ہو گے
karte ho ge
کَرْتے ہوں گے
karte hõ ge
f کَرْتی ہُوں گی
kartī hū̃ gī
کَرْتی ہو گی
kartī ho gī
کَرْتی ہو گی
kartī ho gī
کَرْتی ہوں گیں
kartī hõ gẽ
کَرْتی ہو گی
kartī ho gī
کَرْتی ہوں گی
kartī hõ gī
Subjunctive PRS m کَرْتا ہُوں
kartā hū̃
کَرْتا ہو
kartā ho
کَرْتا ہو
kartā ho
کَرْتے ہوں
karte hõ
کَرْتے ہو
karte ho
کَرْتے ہوں
karte hõ
f کَرْتی ہُوں
kartī hū̃
کَرْتی ہو
kartī ho
کَرْتی ہو
kartī ho
کَرْتی ہوں
kartī hõ
کَرْتی ہو
kartī ho
کَرْتی ہوں
kartī hõ
Contrafactual PRS
PST
m کَرْتا ہوتا
kartā hotā
کَرْتا ہوتا
kartā hotā
کَرْتا ہوتا
kartā hotā
کَرْتے ہوتے
karte hote
کَرْتے ہوتے
karte hote
کَرْتے ہوتے
karte hote
f کَرْتی ہوتی
kartī hotī
کَرْتی ہوتی
kartī hotī
کَرْتی ہوتی
kartī hotī
کَرْتی ہوتِیں
kartī hotī̃
کَرْتی ہوتی
kartī hotī
کَرْتی ہوتِیں
kartī hotī̃
Perfective Aspect
Singular Plural
1st
میں
2nd
تو
3rd
یہ/وہ
1st
ہم
2nd
تم
3rd
یہ/وہ/آپ
Indicative PRS m کِیا ہُوں
kiyā hū̃
کِیا ہَے
kiyā hai
کِیا ہَے
kiyā hai
کِیے ہَیں
kiye ha͠i کِئے ہَیں
kie ha͠i
کِیے ہو
kiye ho کِئے ہو
kie ho
کِیے ہَیں
kiye ha͠i کِئے ہَیں
kie ha͠i
f کی ہُوں
kī hū̃
کی ہَے
kī hai
کی ہَے
kī hai
کی ہَیں
kī ha͠i
کی ہو
kī ho
کی ہَیں
kī ha͠i
PST m کِیا تھا
kiyā thā
کِیا تھا
kiyā thā
کِیا تھا
kiyā thā
کِیے تھے
kiye the کِئے تھے
kie the
کِیے تھے
kiye the کِئے تھے
kie the
کِیے تھے
kiye the کِئے تھے
kie the
f کی تھی
kī thī
کی تھی
kī thī
کی تھی
kī thī
کی تِھیں
kī thī̃
کی تھی
kī thī
کی تِھیں
kī thī̃
FUT m کِیا ہُوں گا
kiyā hū̃ gā
کِیا ہو گا
kiyā ho gā
کِیا ہو گا
kiyā ho gā
کِیے ہوں گے
kiye hõ ge کِئے ہوں گے
kie hõ ge
کِیے ہو گے
kiye ho ge کِئے ہو گے
kie ho ge
کِیے ہوں گے
kiye hõ ge کِئے ہوں گے
kie hõ ge
f کی ہُوں گی
kī hū̃ gī
کی ہو گی
kī ho gī
کی ہو گی
kī ho gī
کی ہوں گی
kī hõ gī
کی ہو گی
kī ho gī
کی ہوں گی
kī hõ gī
Presumptive PRS
PST
m کِیا ہُوں گا
kiyā hū̃ gā
کِیا ہو گا
kiyā ho gā
کِیا ہو گا
kiyā ho gā
کِیے ہوں گے
kiye hõ ge کِئے ہوں گے
kie hõ ge
کِیے ہو گے
kiye ho ge کِئے ہو گے
kie ho ge
کِیے ہوں گے
kiye hõ ge کِئے ہوں گے
kie hõ ge
f کی ہُوں گی
kī hū̃ gī
کی ہو گی
kī ho gī
کی ہو گی
kī ho gī
کی ہوں گی
kī hõ gī
کی ہو گی
kī ho gī
کی ہوں گی
kī hõ gī
Subjunctive PRS m کِیا ہُوں
kiyā hū̃
کِیا ہو
kiyā ho
کِیا ہو
kiyā ho
کِیے ہوں
kiye hõ کِئے ہوں
kie hõ
کِیے ہو
kiye ho کِئے ہو
kie ho
کِیے ہوں
kiye hõ کِئے ہوں
kie hõ
f کی ہُوں
kī hū̃
کی ہو
kī ho
کی ہو
kī ho
کی ہوں
kī hõ
کی ہو
kī ho
کی ہوں
kī hõ
FUT m کِیا ہوؤُں
kiyā hoū̃
کِیا ہوئے
kiyā hoe
کِیا ہوئے
kiyā hoe
کِیے ہوئیں
kiye hoẽ کِئے ہوئیں
kie hoẽ
کِیے ہوؤ
kiye hoo کِئے ہوؤ
kie hoo
کِیے ہوئیں
kiye hoẽ کِئے ہوئیں
kie hoẽ
f کی ہوؤُں
kī hoū̃
کی ہوئے
kī hoe
کی ہوئے
kī hoe
کی ہوئیں
kī hoẽ
کی ہوؤ
kī hoo
کی ہوئیں
kī hoẽ
Contrafactual PRS
PST
m کِیا ہوتا
kiyā hotā
کِیا ہوتا
kiyā hotā
کِیا ہوتا
kiyā hotā
کِیے ہوتے
kiye hote کِئے ہوتے
kie hote
کِیے ہوتے
kiye hote کِئے ہوتے
kie hote
کِیے ہوتے
kiye hote کِئے ہوتے
kie hote
f کی ہوتی
kī hotī
کی ہوتی
kī hotī
کی ہوتی
kī hotī
کی ہوتِیں
kī hotī̃
کی ہوتی
kī hotī
کی ہوتِیں
kī hotī̃
Progressive Aspect
Indicative PRS m کَرْ رَہا ہُوں
kar rahā hū̃
کَرْ رَہا ہَے
kar rahā hai
کَرْ رَہا ہَے
kar rahā hai
کَرْ رَہے ہَیں
kar rahe ha͠i
کَرْ رَہے ہو
kar rahe ho
کَرْ رَہے ہَیں
kar rahe ha͠i
f کَرْ رَہی ہُوں
kar rahī hū̃
کَرْ رَہی ہَے
kar rahī hai
کَرْ رَہی ہَے
kar rahī hai
کَرْ رَہی ہَیں
kar rahī ha͠i
کَرْ رَہی ہو
kar rahī ho
کَرْ رَہی ہَیں
kar rahī ha͠i
PST m کَرْ رَہا تھا
kar rahā thā
کَرْ رَہا تھا
kar rahā thā
کَرْ رَہا تھا
kar rahā thā
کَرْ رَہے تھے
kar rahe the
کَرْ رَہے تھے
kar rahe the
کَرْ رَہے تھے
kar rahe the
f کَرْ رَہی تھی
kar rahī thī
کَرْ رَہی تھی
kar rahī thī
کَرْ رَہی تھی
kar rahī thī
کَرْ رَہی تِھیں
kar rahī thī̃
کَرْ رَہی تھی
kar rahī thī
کَرْ رَہی تِھیں
kar rahī thī̃
FUT m کَرْ رَہا ہُوں گا
kar rahā hū̃ gā
کَرْ رَہا ہو گا
kar rahā ho gā
کَرْ رَہا ہو گا
kar rahā ho gā
کَرْ رَہے ہوں گے
kar rahe hõ ge
کَرْ رَہے ہو گے
kar rahe ho ge
کَرْ رَہے ہوں گے
kar rahe hõ ge
f کَرْ رَہی ہُوں گی
kar rahī hū̃ gī
کَرْ رَہی ہو گی
kar rahī ho gī
کَرْ رَہی ہو گی
kar rahī ho gī
کَرْ رَہی ہوں گی
kar rahī hõ gī
کَرْ رَہی ہو گی
kar rahī ho gī
کَرْ رَہی ہوں گی
kar rahī hõ gī
Presumptive PRS
PST
m کَرْ رَہا ہُوں گا
kar rahā hū̃ gā
کَرْ رَہا ہو گا
kar rahā ho gā
کَرْ رَہا ہو گا
kar rahā ho gā
کَرْ رَہے ہوں گے
kar rahe hõ ge
کَرْ رَہے ہو گے
kar rahe ho ge
کَرْ رَہے ہوں گے
kar rahe hõ ge
f کَرْ رَہی ہُوں گی
kar rahī hū̃ gī
کَرْ رَہی ہو گی
kar rahī ho gī
کَرْ رَہی ہو گی
kar rahī ho gī
کَرْ رَہی ہوں گی
kar rahī hõ gī
کَرْ رَہی ہو گی
kar rahī ho gī
کَرْ رَہی ہوں گی
kar rahī hõ gī
Subjunctive PRS m کَرْ رَہا ہُوں
kar rahā hū̃
کَرْ رَہا ہو
kar rahā ho
کَرْ رَہا ہو
kar rahā ho
کَرْ رَہے ہوں
kar rahe hõ
کَرْ رَہے ہو
kar rahe ho
کَرْ رَہے ہوں
kar rahe hõ
f کَرْ رَہی ہُوں
kar rahī hū̃
کَرْ رَہی ہو
kar rahī ho
کَرْ رَہی ہو
kar rahī ho
کَرْ رَہی ہوں
kar rahī hõ
کَرْ رَہی ہو
kar rahī ho
کَرْ رَہی ہوں
kar rahī hõ
FUT m کَرْ رَہا ہوؤُں
kar rahā hoū̃
کَرْ رَہا ہوئے
kar rahā hoe
کَرْ رَہا ہوئے
kar rahā hoe
کَرْ رَہے ہوئیں
kar rahe hoẽ
کَرْ رَہے ہوؤ
kar rahe hoo
کَرْ رَہے ہوئیں
kar rahe hoẽ
f کَرْ رَہی ہوؤُ
kar rahī hoū
کَرْ رَہی ہوئے
kar rahī hoe
کَرْ رَہی ہوئے
kar rahī hoe
کَرْ رَہا ہوئیں
kar rahā hoẽ
کَرْ رَہی ہوؤ
kar rahī hoo
کَرْ رَہا ہوئیں
kar rahā hoẽ
Contrafactual PRS
PST
m کَرْ رَہا ہوتا
kar rahā hotā
کَرْ رَہا ہوتا
kar rahā hotā
کَرْ رَہا ہوتا
kar rahā hotā
کَرْ رَہے ہوتے
kar rahe hote
کَرْ رَہے ہوتے
kar rahe hote
کَرْ رَہے ہوتے
kar rahe hote
f کَرْ رَہی ہوتی
kar rahī hotī
کَرْ رَہی ہوتی
kar rahī hotī
کَرْ رَہی ہوتی
kar rahī hotī
کَرْ رَہی ہوتِیں
kar rahī hotī̃
کَرْ رَہی ہوتی
kar rahī hotī
کَرْ رَہی ہوتِیں
kar rahī hotī̃
Singular Plural
1st
میں
2nd
تو
3rd
یہ/وہ
1st
ہم
2nd
تم
3rd
یہ/وہ/آپ

--[=[

		This module creates verb inflections for Urdu. 

		Author: [[User:AryamanA]], converted to Urdu by [[User:Babr]]
	
		Originally a sandbox for Hindi by Aryaman that was ultimately superseded by [[Module:hi-verb]] so it was never actually used
		that sandbox has been repurposed and modified for Urdu. However, despite the modifications, most of the code was still written by Aryanman.
		(Hopefully, this module is a temporary stop-gap until [[Module:hi-verb]] is converted to Urdu.
		but the current state of conjugation templates in Urdu is bad, hence this more simple module in the mean time).



	FIXME:
		1. Make identical Arrays in the same row merge, as they do in hi-translit
		2. Support irregular verbs imperatives of پینا, دینا, لینا.
		3. Add alternative spellings to notes, as opposed to leaving them in the conjugation table and creating clutter
		4. Support irregular prefixes of کرنا, جانا, لینا, دینا and ہونا

]=]

local export = {}

local lang = require("Module:languages").getByCode("ur")
local u = require("Module:string/char")
local m_translit = require("Module:ur-translit")
--local util = require("Module:hi")
local data = require("Module:ur-conj/data")
local m_script_utilities = require("Module:script utilities")
local m_string_utilities = require("Module:string utilities")
local m_links = require("Module:links")

local gsub = m_string_utilities.gsub
local sub = m_string_utilities.sub
local match = m_string_utilities.match
local len = m_string_utilities.len

-- Lua always goes apeshit when there is bidirectional text or diacritics, so we'll use this when necessary. 
local zabar = u(0x64E)
local zer = u(0x650)
local pesh = u(0x64F)
local jazm = u(0x652)
local UU = "ؤ" .. pesh
local O = "ؤ"
local E = "ئ"
local ye = "ی"
local vao = "و"
--[=[ 

Things that are not actually used rn but might be needed in the future:

local fatHataan = u(0x64B)
local Dammataan = u(0x64C) -- un
local kasrataan = u(0x64D) -- in
local tashdid = u(0x651) -- also called tashdid
local he = "ہ"
local med_N = "ن" .. u(0x658)
local N = "ں"

]=]

local function ur_format(text, tr)
	text = "[[" .. gsub(text, "([%s%-]+)", "]]%1[[") .. "]]"
	return m_links.full_link({term = text, tr = "-", lang = lang}, "term")
	end

local function wordify(text)
	local words, translits = {}, {}
	for word in mw.text.gsplit(text, ",") do
		table.insert(words, ur_format(word))
		table.insert(translits, m_translit.tr(word, "ur", "ur-Arab"))
	end
	text = table.concat(words, ", ") .. "<br><span style=\"color:#888\">" ..
		table.concat(translits, ", ") .. "</span>"
	return text
end

local function get_stylesheet()
	return require("Module:TemplateStyles")("Module:ur-conj/style.css")
end

local test = {}

local vowel_conv = {
	[UU] = pesh .. vao, [O] = vao, [E] = "", ["ا"] = "ا", [zer] = zer .. E
}
local signs = zer .. zabar .. pesh .. "ا" .. vao .. "آ"

local irregular_perfects = {
	['کَرْ'] = "کِی",
	['جا'] = "گَ",
	['لی'] = "لِی",
	['دی'] = "دِی",
	['ہو'] = "ہُو",
}

local irreg_subj = {
	["دی"] = "د",
	["لی"] = "ل",
}

local irreg_polite_imp = {
	["کَرْ"] = {"کِیج", "کَرْ"},
	["لی"] = "لِیج",
	["دی"] = "دِیج",
	["پِی"] = "پِیج",
	["ہو"] = {"ہو", {form = "ہُوج", footnotes = {"[rare]"}}},
}

notes = {}

local function make_row(data, count, word)
	local rows = 0
	local name = data["name"]
	local abbrev = data["abbrev"]
	local cur = {}
	local cols = 1
	if data["data"] ~= nil then
		local has_entries = false
		local subcount = 1
		for index, value in ipairs(data["data"]) do
			if type(value) == "string" then
				has_entries = true
				
				-- make extra rows for masculine and feminine forms
				if #data["data"] == 12 then
					if index == 1 then
						table.insert(cur, '! class="ur-gender" | <span class="gender"><abbr title="masculine gender">m</abbr></span>')
					end
					if index == 7 then
						table.insert(cur, '|- class="vsHide"')
						table.insert(cur, '! class="ur-gender" | <span class="gender"><abbr title="feminine gender">f</abbr></span>')
					end
				else
					cols = 2
				end
				
				
				-- when the form doesn't exist (indicated by hyphen)
				-- also handles consonant-ending verb stem forcing vowel diacritic
				if value == '-' then
					table.insert(cur, "|")
				else
					local infl = ""
					local old_word = word
					local altform = nil

					-- sandhi
					if sub(word, -2 ) == zer .. "ی" then 
						if sub(value, 1, 2) == "ئے" then
							altform = sub(word, 1, -3) .. zer .. "ئ"
							value = sub(value, 2)
						elseif sub(value, 1, 2) == "ئی" then
							word = sub(word, 1, -3)
							value = sub(value, 2)
						elseif sub(value, 1, 3) == "ئِی" then
							word = sub(word, 1, -2)
							value = sub(value, 3)
						end
					elseif sub(value, 1, 1) == "ا" then
						if sub(word, -1 ) == "ا" or sub(word, -1 ) == "آ" then 
							value = ye .. value
						elseif sub(word, -1) == zabar then
							value = "ی" .. value
						end
					end

					if match(sub(word, -1), '[' .. signs .. ']') then -- stem ends in a vowel diacritic
							if sub(value, 1, 1) == zer then
							value = "ئ" .. zer .. sub(value, 2)
							end
						infl = word .. value
						if altform then
							table.insert(notes, notes[infl] .. " " .. altform .. value)
						end
					elseif vowel_conv[sub(word, -1, -1)] == nil then -- stem ends in a consonant => merge vowels
						if vowel_conv[sub(value, 1, 2)] ~= nil or vowel_conv[sub(value, 1, 1)] ~= nil then
				
							if sub(word, -1) == jazm then
							word = sub(word, 1, -2)
							end --[=[ removes jazm/sukoon if the following letter is NOT a vowel
							it must be here EXACTLY or it'll break. Why? Who knows. ]=]
							
							if vowel_conv[sub(value, 1, 2)] ~= nil then
							infl = word .. vowel_conv[sub(value, 1, 2)] .. sub(value, 3)
							else
							infl = word .. vowel_conv[sub(value, 1, 1)] .. sub(value, 2)
							end
						else
							infl = word .. value
						end
					else -- full vowel
						infl = word .. value
					end 

					if #data["data"] == 1 then
						table.insert(cur, '| colspan="100%" | ' .. wordify(infl) .. (altform and " " .. wordify(altform .. value) or ""))
						else if #data["data"] == 2 then
						table.insert(cur, '| colspan="2"|' .. wordify(infl))
					else
						table.insert(cur, '| ' .. wordify(infl) .. (altform and " " .. wordify(altform .. value) or ""))
					end end

					word = old_word
				end
				
			else
				
				-- recursion until it reaches actual forms; this is so all the various rowspans are correct
				local add = nil
				
				-- irregular root changes
				local old_word = word
				if word:match".+ .+" then
				light_verb, word = match( word , "(.+ )(%S+)$" )
				end
				if (value["name"] == "Perfect") or (value["name"] == "Perfective") or
					(name == "Perfective Aspect") or (value["name"] == "Adjectival") then
					if irregular_perfects[word] ~= nil then
						if light_verb then
						add = make_row(value, subcount, light_verb .. irregular_perfects[word])
						else
						add = make_row(value, subcount, irregular_perfects[word])
						end
					else
						if light_verb then
						add = make_row(value, subcount, light_verb .. word)
						else
						add = make_row(value, subcount, word)
						end
					end
				else
					if light_verb then
						add = make_row(value, subcount, light_verb .. word)
						else
						add = make_row(value, subcount, word)
						end
				end
				if add[2] ~= 0 then
					subcount = subcount + 1
					rows = rows + add[2]
					table.insert(cur, add[1])
				end
				word = old_word
			end
		end
		
		-- masc+fem or no distinction, maintain rowspan
		if has_entries then
			if #data["data"] == 12 then
				rows = rows + 2
			else
				rows = rows + 1
			end
		end
		
	end
	
	-- debug, comment out if you want
	-- table.insert(test, "* " .. name .. " (" .. rows .. ")" .. " " .. count .. " " .. word)
	
	-- magic for making sure new rows are made at the right points
	local res = ""
	if count == 0 then
		cols = "100%"
		rows = 1
	end
	if count ~= 1 then res = res .. '\n|- class="vsHide"' end
	if name == "Non-Aspectual" or name:match(".+Aspect")  then
	res = res .. '\n! class="ur-sec-div" '
	else
	res = res .. '\n! class="ur-polarity-cell" '
	end
	res = res .. 'rowspan=' .. rows .. " colspan=" .. cols .. " | "
	res = res .. "''" .. (abbrev and ('<abbr style="font-variant: small-caps; text-transform: lowercase;" title=' .. name .. '>' .. abbrev .. '</abbr>') or name) .. "''\n"
	if count == 0 then res = res .. '\n|- class="vsHide"' end
	if name == "Participles" then
		res = res .. '\n|- class="vsHide"'
		res = res .. '\n| style="background:#E6F2FF" colspan=2 |'
		res = res .. '\n! class = ur-gender | <span class="gender"><abbr title="masculine gender">m</abbr></span> <span class="gender"><abbr title="singular number">sg</abbr></span>'
		res = res .. '\n! class = ur-gender | <span class="gender"><abbr title="feminine gender">m</abbr></span> <span class="gender"><abbr title="plural number">pl</abbr></span>'
		res = res .. '\n! class = ur-gender | <span class="gender"><abbr title="feminine gender">f</abbr></span> <span class="gender"><abbr title="singular number">sg</abbr></span>'
		res = res .. '\n! class = ur-gender | <span class="gender"><abbr title="feminine gender">f</abbr></span> <span class="gender"><abbr title="plural number">pl</abbr></span>'
		res = res .. '\n|- class="vsHide"'
	end
	
	if name == "Non-Aspectual" or name == "Perfective Aspect" then
		res = res ..  '\n|- class="vsHide ur-table-header"'
		res = res ..  '\n| rowspan=2 |'
		res = res ..  '\n| rowspan=2 |'
		res = res ..  '\n| rowspan=2 |'
		res = res ..  "\n| colspan=3 | '''Singular'''"
		res = res ..  "\n| colspan=3 | '''Plural'''"
		res = res ..  '\n|- class="vsHide ur-table-header";"'
		res = res ..  "\n| '''1<sup>st</sup>'''<br>" .. ur_format('میں')
		res = res ..  "\n| '''2<sup>nd</sup>'''<br>" .. ur_format('تو')
		res = res ..  "\n| '''3<sup>rd</sup>'''<br>" .. ur_format('یہ]]/[[وہ')
		res = res ..  "\n| '''1<sup>st</sup>'''<br>" .. ur_format('ہم')
		res = res ..  "\n| '''2<sup>nd</sup>'''<br>" .. ur_format('تم')
		res = res ..  "\n| '''3<sup>rd</sup>'''<br>" .. ur_format('یہ]]/[[وہ]]/[[آپ')
		res = res ..  '\n|- class="vsHide"'
	end
	return {res .. table.concat(cur, "\n"), rows}
end

function export.show(frame)
	local args = frame:getParent().args
	local word = args[1] or mw.title.getCurrentTitle().text
	if word == 'ur-conj-auto' or word == 'ur-conj' then word =  'کَرْنا' end
	if sub(word, -3 ) == "نَا" then
	word = sub(word, 1, -4)
	else
	word = sub(word, 1, -3)
	end

	local res = {'{| class="inflection-table inflection-ur inflection-verb vsSwitcher" data-toggle-category="inflection" style="width:100%"' }
	table.insert(res, '|- ')
	table.insert(res, '! class="vsToggleElement ur-table-title" colspan=15 | Impersonal forms of ' .. ur_format(word ..  "نا"))
	table.insert(res, make_row(data[5], 0, word)[1])
	table.insert(res, make_row(data[6], 0, word)[1])
	table.insert(res, "|}")

	table.insert(res, '{| class="inflection-table inflection-ur inflection-verb vsSwitcher" data-toggle-category="inflection" style="width:100%"')
	table.insert(res, '|- ')
	table.insert(res, '! class="vsToggleElement ur-table-title" colspan=15 | Personal forms of ' .. ur_format(word .. "نا"))
	table.insert(res, make_row(data[1], 0, word)[1])
	table.insert(res, make_row(data[2], 0, word)[1])
	table.insert(res, make_row(data[3], 0, word)[1])
	table.insert(res, make_row(data[4], 0, word)[1])
	table.insert(res, '|- class="vsHide ur-table-header"')
	table.insert(res, '| rowspan=2 |')
	table.insert(res, '| rowspan=2 |')
	table.insert(res, '| rowspan=2 |')
	table.insert(res, "| colspan=3 | '''Singular'''")
	table.insert(res, "| colspan=3 | '''Plural'''")
	table.insert(res, '|- class="vsHide ur-table-header"')
	table.insert(res, "| '''1<sup>st</sup>'''<br>" .. ur_format('میں'))
	table.insert(res, "| '''2<sup>nd</sup>'''<br>" .. ur_format('تو'))
	table.insert(res, "| '''3<sup>rd</sup>'''<br>" .. ur_format('یہ]]/[[وہ'))
	table.insert(res, "| '''1<sup>st</sup>'''<br>" .. ur_format('ہم'))
	table.insert(res, "| '''2<sup>nd</sup>'''<br>" .. ur_format('تم'))
	table.insert(res, "| '''3<sup>rd</sup>'''<br>" .. ur_format('یہ]]/[[وہ]]/[[آپ'))
	table.insert(res, "|}")
	for orig, alt in pairs(notes) do
		table.insert(ur_format(orig) .. ' may also be written ' .. ur_format(alt))
	end
	
	return table.concat(res, "\n") .. get_stylesheet()
end

return export