Module:accent qualifier: difference between revisions
track missing `lang` in format_qualifiers(); pass in `true` in show() (called by {{a}}/{{accent}}) so only internal callers trigger the tracking |
put `lang` first but allow older calling convention with `qualifiers` first |
||
Line 16: | Line 16: | ||
Currently, `lang` is accepted and should be supplied, but is ignored (and callers not supplying `lang` are tracked). |
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. |
In time, `lang` will be come mandatory. The old calling convention of {format_qualifiers(qualifiers)} is stil allowed, |
||
but deprecated. |
|||
]==] |
]==] |
||
function export.format_qualifiers( |
function export.format_qualifiers(lang, qualifiers) |
||
if lang ~= true and not lang.getCode then |
|||
-- old calling convention: (qualifiers) insteads of (lang, qualifiers). Note that lang=true is a special hack used |
|||
-- by show() below to avoid the tracking. |
|||
qualifiers = lang |
|||
lang = nil |
|||
end |
|||
if not lang then |
if not lang then |
||
track("nolang") |
track("nolang") |
||
Line 128: | Line 135: | ||
args = require("Module:parameters").process(args, params) |
args = require("Module:parameters").process(args, params) |
||
return export.format_qualifiers(args[1] |
return export.format_qualifiers(true, args[1]) |
||
end |
end |
||
Revision as of 00:25, 20 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(lang, qualifiers)
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. The old calling convention of format_qualifiers(qualifiers)
is stil allowed, but deprecated.
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. The old calling convention of {format_qualifiers(qualifiers)} is stil allowed,
but deprecated.
]==]
function export.format_qualifiers(lang, qualifiers)
if lang ~= true and not lang.getCode then
-- old calling convention: (qualifiers) insteads of (lang, qualifiers). Note that lang=true is a special hack used
-- by show() below to avoid the tracking.
qualifiers = lang
lang = nil
end
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
local formatted_qualifiers = {}
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
table.insert(formatted_qualifiers, to_insert)
else
-- FIXME: Does this happen?
end
end
return
"<span class=\"ib-brac\">(</span><span class=\"ib-content\">" ..
table.concat(formatted_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(true, args[1])
end
return export