Difference between revisions of "Module:IPA"
Jump to navigation
Jump to search
blackwiki>Erutuon (better way to do it, borrowed from wikt:Module:script utilities, where it is used to insert line breaks into Mongolian text...) |
blackwiki>Erutuon (same for HTML tags) |
||
| Line 57: | Line 57: | ||
end | end | ||
| − | if match(text, "%[%[") then | + | if match(text, "%[%[") or match(text, "<[^>]+>") then |
--[[ First, escape targets of wikilinks, | --[[ First, escape targets of wikilinks, | ||
replacing them with sequences $1, $2, ... . ]] | replacing them with sequences $1, $2, ... . ]] | ||
| Line 66: | Line 66: | ||
escaped[i] = link_target | escaped[i] = link_target | ||
text = mw.ustring.gsub(text, link_target, "$" .. i) | 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 | i = i + 1 | ||
end | end | ||
| Line 71: | Line 78: | ||
text = IPAg(text) | text = IPAg(text) | ||
| − | -- Unescape | + | -- Unescape whatever was escaped above. |
text = mw.ustring.gsub( | text = mw.ustring.gsub( | ||
text, | text, | ||
Revision as of 23:38, 22 June 2017
| 40x40px | This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
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}}
- ðɪs
- ðɪs
- ɡɛt
- ɡɛt
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 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
-- Replaces regular g with IPA g.
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.
text = mw.ustring.gsub(
text,
"$(%d)",
function(a)
a = tonumber(a)
return escaped[a]
end
)
else
text = IPAg(text)
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
end
return p