Module:accent qualifier: difference between revisions
add documentation; accept but ignore lang in format_qualifiers() |
No edit summary |
||
Line 18: | Line 18: | ||
In time, `lang` will be come mandatory. |
In time, `lang` will be come mandatory. |
||
'''WARNING''': Destructively modifies `qualifiers`. |
|||
]==] |
]==] |
||
function export.format_qualifiers(qualifiers, lang) |
function export.format_qualifiers(qualifiers, lang) |
Revision as of 06:14, 19 May 2024
- The following documentation is located at Module:accent qualifier/documentation. [edit]
- Useful links: subpage list • links • transclusions • testcases • sandbox
This module implements the {{accent}}
or {{a}}
template. To add more regional accent presets, edit Module:accent qualifier/data.
Detailed documentation
export.format_qualifiers
function export.format_qualifiers(qualifiers, lang)
Format accent qualifiers. Implements the {{a}}
(shortcut for {{accent}}
) template. A cross between {{q}}
(for qualifiers), and {{lb}}
(for labels). In time, it will require a language code in |1=
and have the recognized accent qualifiers merged with labels; at that point, the main difference between {{a}}
and [Term?] will be that the latter categorizes.
Currently, lang
is accepted and should be supplied, but is ignored (and callers not supplying lang
are tracked). In time, lang
will be come mandatory.
WARNING: Destructively modifies qualifiers
.
export.show
function export.show(frame)
External entry point that implements {{accent}}
and {{a}}
.
local export = {}
local accent_qualifier_data_module = "Module:accent qualifier/data"
local labels_qualifiers_module = "Module:labels/data/qualifiers"
local function track(page)
require("Module:debug/track")("accent qualifier/" .. page)
return true
end
--[==[
Format accent qualifiers. Implements the {{tl|a}} (shortcut for {{tl|accent}}) template. A cross between {{tl|q}} (for
qualifiers), and {{tl|lb}} (for labels). In time, it will require a language code in {{para|1}} and have the
recognized accent qualifiers merged with labels; at that point, the main difference between {{tl|a}} and {{t|lb}} will
be that the latter categorizes.
Currently, `lang` is accepted and should be supplied, but is ignored (and callers not supplying `lang` are tracked).
In time, `lang` will be come mandatory.
'''WARNING''': Destructively modifies `qualifiers`.
]==]
function export.format_qualifiers(qualifiers, lang)
-- Not yet; wait till we've changed most callers to pass in a lang.
--if not lang then
-- track("nolang")
--end
local m_data = mw.loadData(accent_qualifier_data_module)
local m_labels_qualifiers
if type(qualifiers) ~= "table" then
qualifiers = { qualifiers }
end
-- local categories = {}
local omit_preComma = false
local omit_postComma = true
local omit_preSpace = false
local omit_postSpace = true
for i, accent in ipairs(qualifiers) do
omit_preComma = omit_postComma
omit_postComma = false
omit_preSpace = omit_postSpace
omit_postSpace = false
local data
local to_insert
-- Replace an alias with the label that has a data table.
if m_data.aliases[accent] then
accent = m_data.aliases[accent]
end
-- Retrieve the label's data table.
if m_data.labels[accent] then
data = m_data.labels[accent]
end
-- Use the link and displayed text in the data table, if they exist.
if data then
if data.link then
to_insert = "[[w:" .. data.link .. "|" .. (data.display or data.link) .. "]]"
elseif data.display then
to_insert = data.display
end
--[[
if data[accent] then
if data[accent].type == "sound change" then
table.insert(categories, lang:getCanonicalName() .. " terms with pronunciations exhibiting " .. accent)
end
end
]]
elseif #qualifiers > 1 then
-- Only check label qualifiers if there's more than one accent given, as an optimization.
m_labels_qualifiers = m_labels_qualifiers or mw.loadData(labels_qualifiers_module)
local labdata = m_labels_qualifiers[accent]
if labdata and (type(labdata) == "string" or labdata.alias_of) then
accent = labdata.alias_of or labdata
labdata = m_labels_qualifiers[accent]
end
if labdata then
omit_preComma = omit_preComma or labdata.omit_preComma
omit_postComma = labdata.omit_postComma
omit_preSpace = omit_preSpace or labdata.omit_preSpace
omit_postSpace = labdata.omit_postSpace
to_insert = labdata.display or accent
else
to_insert = accent
end
else
to_insert = accent
end
if to_insert then
if to_insert ~= "" then
to_insert =
(omit_preComma and "" or '<span class="ib-comma">,</span>') ..
(omit_preSpace and "" or " ") ..
to_insert
end
qualifiers[i] = to_insert
else
-- FIXME: Does this happen?
qualifiers[i] = ""
end
end
return
"<span class=\"ib-brac\">(</span><span class=\"ib-content\">" ..
table.concat(qualifiers, "") ..
"</span><span class=\"ib-brac\">)</span>"
end
--[==[
External entry point that implements {{tl|accent}} and {{tl|a}}.
]==]
function export.show(frame)
local args = frame.getParent and frame:getParent().args or frame
if (not args[1] or args[1] == "") and mw.title.getCurrentTitle().nsText == "Template" then
return export.format_qualifiers("{{{1}}}")
end
local params = {
[1] = {required = true, list = true}
}
args = require("Module:parameters").process(args, params)
return export.format_qualifiers(args[1])
end
return export