Jump to content

Module:IPA

Permanently protected module
From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Erutuon (talk | contribs) at 18:18, 23 June 2017 (escaping is unnecessary, because the original text doesn't have to be restored). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

local p = {}

local match = mw.ustring.match
local gsub = mw.ustring.gsub
local U = mw.ustring.char

local function IPAspan(text)
	return
		'<span title="Representation in the International Phonetic Alphabet (IPA)" class="IPA">' ..
		text ..
		'</span>'
end

local function ine(text)
	if text == "" then
		return nil
	else
		return text
	end
end

function p.tag(frame)
	local linkHelpPage = require('Module:Yesno')(frame.args.link, false)
	
	local args = frame:getParent().args[1] and frame:getParent().args
		or frame.args
	local namespace = mw.title.getCurrentTitle().nsText
	
	local text, lang
	
	local err = {}
	local trackingCategories = {}
	local IPApage
	
	if linkHelpPage then
		text = ine(args[2])
		lang = ine(args[1])
	
		if lang then
			IPApage = mw.loadData("Module:IPA/data")[lang]
			
			if not IPApage then 
				table.insert(err, "[No IPA key for the language code " .. lang.."]")
			end
		else
			table.insert(err, "[language code?]")
		end
	else
		text = ine(args[1])
	end
	
	local output = ""
	
	if text then
		-- Tracks incorrect characters.
		local function track(text)
			-- non-IPA g
			if mw.ustring.find(text, U(0x67)) then
				table.insert(trackingCategories, "[[Category:IPA templates with incorrect characters]]")
			end
		end
		
		if match(text, "%[%[") or  match(text, "<[^>]+>") then
			--	First, remove targets of wikilinks.
			workingString = text
			
			workingString = gsub(workingString, "%[%[([^|]+|)", "")
			workingString = gsub(workingString, "<[^>]+>", "")
			
			track(workingString)
		end
		
		text = IPAspan(text)
	
		if IPApage then
			output = "[[" .. IPApage .. "|" .. text .. "]]"
		elseif text then
			output = text
		end
	else
		table.insert(err, "[IPA symbols?]")
	end
	
	if #err > 0 then
		err = "<sup>" .. table.concat(err) .. "</sup>"
	else
		err = ""
	end
	
	-- Makes the error message show only in preview mode.
	if frame:preprocess("{{REVISIONID}}") == "" then
		output = output .. err
	end
	
	return output .. table.concat(trackingCategories)
end

return p