Difference between revisions of "Module:IPA"

From blackwiki
Jump to navigation Jump to search
blackwiki>Erutuon
(same for HTML tags)
m (32 revisions imported)
 
(5 intermediate revisions by one other user not shown)
Line 30: Line 30:
 
 
 
local err = {}
 
local err = {}
 +
local trackingCategories = {}
 
local IPApage
 
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
 
if linkHelpPage then
Line 52: Line 62:
 
 
 
if text then
 
if text then
-- Replaces regular g with IPA g.
+
workingString = text
local function IPAg(text)
 
return gsub(text, U(0x67), U(0x261))
 
end
 
 
if match(text, "%[%[") or  match(text, "<[^>]+>") then
 
--[[ First, escape targets of wikilinks,
 
replacing them with sequences $1, $2, ... . ]]
 
local escaped = {}
 
 
local i = 1
 
for link_target in mw.ustring.gmatch(text, "%[%[([^|]+|)") do
 
escaped[i] = link_target
 
text = mw.ustring.gsub(text, link_target, "$" .. i)
 
i = i + 1
 
end
 
 
-- Escape HTML tags.
 
for HTML_tag in mw.ustring.gmatch(text, "<[^>]+>") do
 
escaped[i] = HTML_tag
 
text = mw.ustring.gsub(text, HTML_tag, "$" .. i)
 
i = i + 1
 
end
 
 
text = IPAg(text)
 
 
 
-- Unescape whatever was escaped above.
+
-- Remove targets of wikilinks.
text = mw.ustring.gsub(
+
workingString = gsub(workingString, "%[%[([^|]+|)", "")
text,
+
-- Remove HTML tags.
"$(%d)",
+
workingString = gsub(workingString, "<[^>]+>", "")
function(a)
+
track(workingString)
a = tonumber(a)
 
return escaped[a]
 
end
 
)
 
else
 
text = IPAg(text)
 
end
 
 
 
 
text = IPAspan(text)
 
text = IPAspan(text)
Line 113: Line 92:
 
end
 
end
 
 
return output
+
return output .. table.concat(trackingCategories)
 
end
 
end
  
 
return p
 
return p

Latest revision as of 17:11, 26 September 2020

Usage

{{#invoke:IPA|tag|en|ðɪs|link=1}}
{{#invoke:IPA|tag|ðɪs}}
{{#invoke:IPA|tag|gɛt}}
{{#invoke:IPA|tag||gɛt|link=1}}
{{#invoke:IPA|tag|||link=1}}
{{#invoke:IPA|tag|en||link=1}}

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