Module:IPA: Difference between revisions

Content added Content deleted
(perhaps logging the character and the text would make it easier to find the incorrect transcriptions on the page)
(No difference)

Revision as of 18:57, 23 June 2017

Documentation for this module may be created at Module:IPA/doc

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
	
	-- Tracks incorrect characters.
	local function track(text)
		-- non-IPA g
		if mw.ustring.find(text, U(0x67)) then
			mw.log("Incorrect character g found in " .. text)
			table.insert(trackingCategories, "[[Category:IPA templates with incorrect characters]]")
		end
	end
	
	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
		workingString = text
		
		-- Remove targets of wikilinks.
		workingString = gsub(workingString, "%[%[([^|]+|)", "")
		-- Remove HTML tags.
		workingString = gsub(workingString, "<[^>]+>", "")
		track(workingString)
		
		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