Module:pron qualifier

From Wiktionary, the free dictionary
Archived revision by Benwing2 (talk | contribs) as of 00:27, 20 May 2024.
Jump to navigation Jump to search

Detailed documentation

export.format_qualifiers

function export.format_qualifiers(data, text, qualifiers_right)

This function is used by any module that wants to add support for left and right regular and accent qualifiers to a template that specifies a pronunciation or related property. It is currently used by Module:rhymes, Module:hyphenation, Module:homophones and Module:es-pronunc (for specifying pronunciation, rhymes, hyphenation, homophones and audio in {{es-pr}}). It should potentially also be used in {{audio}}. To reduce memory usage, the caller should check that any qualifiers exist before loading the module.

data is a structure containing the following fields:

  • q: List of left regular qualifiers, each a string.
  • qq: List of right regular qualifiers, each a string.
  • qualifiers: List of qualifiers, each a string, for compatibility. If qualifiers_right is given, these are right qualifiers, otherwise left qualifiers. If both qualifiers and q/qq (depending on the value of qualifiers_right) are non-nil, qualifiers is ignored.
  • a: List of left accent qualifiers, each a string.
  • aa: List of right accent qualifiers, each a string.
  • lang: Language object for accent qualifiers.
  • text: The text to wrap with qualifiers.
  • qualifiers_right: If specified, qualifiers in qualifiers are placed to the right, otherwise the left. See above.

Accent qualifiers precede (are to the left of) regular qualifiers, both on the left and right sides.

For compatibility purposes, the text and qualifiers_right items can be specified as separate fields; this will be going away.


local export = {}

local function track(page)
	require("Module:debug/track")("pron qualifier/" .. page)
	return true
end

--[==[
This function is used by any module that wants to add support for left and right regular and accent qualifiers to a
template that specifies a pronunciation or related property. It is currently used by [[Module:rhymes]],
[[Module:hyphenation]], [[Module:homophones]] and [[Module:es-pronunc]] (for specifying pronunciation, rhymes,
hyphenation, homophones and audio in {{tl|es-pr}}). It should potentially also be used in {{tl|audio}}. To reduce memory
usage, the caller should check that any qualifiers exist before loading the module.

`data` is a structure containing the following fields:
* `q`: List of left regular qualifiers, each a string.
* `qq`: List of right regular qualifiers, each a string.
* `qualifiers`: List of qualifiers, each a string, for compatibility. If `qualifiers_right` is given, these are
   right qualifiers, otherwise left qualifiers. If both `qualifiers` and `q`/`qq` (depending on the value of
   `qualifiers_right`) are non-{nil}, `qualifiers` is ignored.
* `a`: List of left accent qualifiers, each a string.
* `aa`: List of right accent qualifiers, each a string.
* `lang`: Language object for accent qualifiers.
* `text`: The text to wrap with qualifiers.
* `qualifiers_right`: If specified, qualifiers in `qualifiers` are placed to the right, otherwise the left. See above.

Accent qualifiers precede (are to the left of) regular qualifiers, both on the left and right sides.

For compatibility purposes, the `text` and `qualifiers_right` items can be specified as separate fields; this will be
going away.
]==]
function export.format_qualifiers(data, text, qualifiers_right)
	if text or qualifiers_right or not data.text then
		error("Don't pass separate `text` or `qualifiers_right`; you must pass them in the `data` structure")
	end
	if not data.lang then
		track("nolang")
	end
	-- Prepare to move to just `data` as single argument.
	text = text or data.text
	qualifiers_right = qualifiers_right or data.qualifiers_right
	local function format_q(q)
		return require("Module:qualifier").format_qualifier(q)
	end
	local function format_a(a)
		return require("Module:accent qualifier").format_qualifiers(data.lang, a)
	end
	-- This order puts the accent qualifiers before other qualifiers on both the left and the right.
	local leftq = data.q or not qualifiers_right and data.qualifiers
	if leftq and leftq[1] then
		text = format_q(leftq) .. " " .. text
	end
	local lefta = data.a
	if lefta and lefta[1] then
		text = format_a(lefta) .. " " .. text
	end
	local righta = data.aa
	if righta and righta[1] then
		text = text .. " " .. format_a(righta)
	end
	local rightq = data.qq or qualifiers_right and data.qualifiers
	if rightq and rightq[1] then
		text = text .. " " .. format_q(rightq)
	end
	return text
end

return export