Module:User:Babr/fa-l

--[=[
Extremely primitive example module of Persian links. Might not be necessary though.

FIXME:

1. there should be a check to make sure the words on both sides of // are the same before replacing
2. add support for \ as an escape character
3. instead of args["tr"], it should be possible to specify args["cls"] and args["fa"] - or Maybe allow // ?
]=]

local export = {}

local m_links = require("Module:links")
local m_string_utils = require("Module:string utilities")
local ugsub = m_string_utils.gsub
local upper = m_string_utils.upper
local U = m_string_utils.char
local get_translit = require("Module:fa-translit").tr

--characters (annoying to type)
local fatHataan = U(0x64B)
local Dammataan = U(0x64C)
local kasrataan = U(0x64D)
local fatHa = U(0x64E)
local Damma = U(0x64F)
local kasra = U(0x650)
local shadda = U(0x651)
local sukuun = U(0x652)
local dagger_alif = U(0x670)
local alif_waSl = U(0x671)
local diacritics = "([" .. fatHataan .. Dammataan .. kasrataan .. fatHa .. Damma .. kasra .. shadda .. sukuun .. dagger_alif .. alif_waSl .. "])"
local EOW = "([" .. "%s" .. "\n" .. "%p" .. "%x" .. "])"
local POW = "([^" .. "%s" .. "%p" .. "]+)"
hyphen = "<span class=\"Zsym mention\" style=\"font-size:85%;\">/</span>"

function export.link(data, options)
	options = options or {}
	data.lang = data.lang or require'Module:languages'.getByCode'fa'
	local term_for_rom = data.term
	if data.tr ~= '-' then
		if not data.tr then
			data.tr = m_links.remove_links(get_translit(term_for_rom))
		else
			a = data.tr
			b = data.tr
			b = ugsub(b, ".*[^\\]//" , "")
			a = ugsub(a, "([^\\])//.*" , "%1")
			data.tr = a .. hyphen .. require('Module:fa-IPA').romanize_ira(b)
			end
			else if data.tr ~= ".*//.*" then
			data.tr = data.tr .. hyphen .. require('Module:fa-IPA').romanize_ira(data.tr)
		end
		data.tr = require("Module:script utilities").tag_translit(data.tr, data.lang:getCode(), "term")
end
	data.term = ugsub(data.term, diacritics, "")
	data.term = ugsub(data.term, "%-", "")
	data.term = ugsub(data.term, "(//)" .. POW .. "$" , "")
	data.term = ugsub(data.term, "(//)" .. POW .. EOW , "%3")
	return m_links.full_link(data, options.face, not options.disableSelfLink)
	end

function export.show(frame)
	local boolean = {type = "boolean"}
	local plain = {}
	local args = require("Module:parameters").process(frame:getParent().args, {
		[1] = {required=true},
		[2] = plain,
		['gloss'] = plain,
		['t'] = {alias_of = 'gloss'},
		['linkto'] = {allow_empty = true},
		['tr'] = {alias_of = tr },
		['lit'] = plain,
		['pos'] = plain,
		['id'] = plain,
		['self'] = {type = "boolean", default = false},
	})

	return export.link({
	term = args[1],
	lang = require('Module:languages').getByCode('fa'),
	id = args["id"],
	tr = args[2] or args["tr"],
	gloss = args["gloss"],
	pos = args["pos"],
	lit = args["lit"],
	disableSelfLink = args["self"],
})

end

return export