Mòdul:exemples
A continuació es mostra la documentació transclosa de la subpàgina /ús. [salta a la caixa de codi]
Mòdul per generar exemples i citacions de les accepcions. És usat per les plantilles {{ex-us}} i {{ex-cit}}.
local p = {}
local m_languages = require("Module:llengua")
-- microformat2 classes, see https://phabricator.wikimedia.org/T138709
local class = {
container_ux = 'h-usage-example',
container_quotation = 'h-quotation',
example = 'e-example',
quotation = 'e-quotation',
quotation_with_citation = 'e-quotation cited-passage',
translation = 'e-translation',
transliteration = 'e-transliteration',
transcription = 'e-transcription',
literally = 'e-literally',
source = 'e-source',
footer = 'e-footer'
}
-- helper functions
local function wrap(tag, class, text, langcode)
if langcode then
langcode = ' lang="' .. langcode .. '"'
else
langcode = ""
end
if text and class then
return table.concat{'<', tag, ' class="', class, '"', langcode, '>', text, '</', tag, '>'}
else
return nil
end
end
local function span(class, text) return wrap('span', class, text) end
local function div(class, text) return wrap('div', class, text) end
local function format_usex(data)
local namespace = mw.title.getCurrentTitle().nsText
local lang, sc, usex, translation, transliteration, transcription, noenum, inline,
ref, quote, lit, substs, qualifiers, source, nocat, brackets, footer, sortkey =
data.lang, data.sc, data.usex, data.translation, data.transliteration,
data.transcription, data.noenum, data.inline, data.ref, data.quote,
data.lit, data.substs, data.qualifiers, data.source, data.nocat,
data.brackets, data.footer, data.sortkey
--[[
if lang:getType() == "reconstructed" or namespace == "Reconstruction" then
error("Reconstructed languages and reconstructed terms cannot have usage examples, as we have no record of their use.")
end
]]
if lit then
lit = "(literalment, «" .. span(class.literally, lit) .. "»)"
end
if source then
source = "(" .. span(class.source, source) .. ")"
end
if footer then
footer = span(class.footer, footer)
end
local example_type = quote and "citació" or "exemple d'ús" -- used in error messages
local categories = {}
if not sc then -- really?
sc = m_languages.script(lang.code)
end
-- tr=- means omit transliteration altogether
if transliteration == "-" then
transliteration = nil
elseif sc ~= 'Latn' then
-- Try to auto-transliterate
if not transliteration and usex then
local subbed_usex = require("Module:enllaç").remove_links(usex)
if substs then
local substs = mw.text.split(substs, ",")
for _, subpair in ipairs(substs) do
local subsplit = mw.text.split(subpair, mw.ustring.find(subpair, "//") and "//" or "/")
subbed_usex = mw.ustring.gsub(subbed_usex, subsplit[1], subsplit[2])
end
end
transliteration = m_languages.trans(lang.code, subbed_usex)
end
-- If there is still no transliteration, then add a cleanup category
if not transliteration then
transliteration = "(afegiu la transliteració)"
end
end
if transliteration then
transliteration = span(class.transliteration, transliteration)
end
if transcription then
transcription = span(class.transcription, transcription)
end
if translation == "-" then
translation = nil
elseif translation then
translation = span(class.translation, translation)
elseif lang.code ~= "ca" and lang.code ~= "und" then
-- add trreq category if translation is unspecified and language is not english or undetermined
table.insert(categories, "Traduccions demanades en " .. lang.name)
translation = "<small>(afegiu la traducció en català)</small>"
end
if usex then
if usex:find("[[", 1, true) then
usex = require("Module:enllaç").language_link({term = usex, lang = lang}, false)
end
local face
if quote then
usex = "«" .. usex .. "»"
face = nil
else
face = "terme"
end
usex = require("Module:enllaç").tag_text(usex, lang.code, sc ~= 'Latn' and sc or '', face)
usex = span(quote == "quote-meta" and class.quotation_with_citation or
quote and class.quotation or class.example, usex)
else
-- TODO: Trigger some kind of error here
usex = "<small>(afegiu el text en l'escriptura original)</small>"
end
local result = {}
if m_languages.dir(lang.code) == "rtl" then -- TODO: add function getDirection(lang.sc)
usex = "‏" .. usex .. "‎"
end
table.insert(result, usex)
if qualifiers then
table.insert(result, " (" .. span("qualifier-content", qualifiers) .. ")")
end
if ref then
-- tracking ref tags
local pattern_ref = string.format( "%c'%c`UNIQ%s%sref%s%s%sQINU`%c'%c",
127, 34, "%-", "%-", "%-", "%x+",
"%-", 34, 127 )
if mw.ustring.find(ref, pattern_ref) then
require('Mòdul:utilitats').track("ex-cit/ref")
end
ref = ' <span style="font-size:90%">(' .. ref .. ')</span>'
--if string.sub(ref, 1, 1) ~= "(" and string.sub(ref, 1, 1) ~= "<" and not string.find(ref, "ref") then
-- ref = '(' .. ref .. ')'
--end
--ref = ' ' .. ref
--if string.sub(ref, 3, 1) ~= "{" and string.sub(ref, 2, 1) ~= "<" then
-- ref = '<span style="font-size:90%">' .. ref .. '</span>'
--end
end
table.insert(result, ref)
if inline then
if transliteration then
table.insert(result, " ― " .. transliteration)
if transcription then
table.insert(result, " /" .. transcription .. "/")
end
elseif transcription then
table.insert(result, " ― /" .. transcription .. "/")
end
if translation then
table.insert(result, " ― " .. translation)
end
if lit then
table.insert(result, " " .. lit)
end
if source then
table.insert(result, " " .. source)
end
if footer then
table.insert(result, " " .. footer)
end
if brackets then
table.insert(result, "]")
end
elseif transliteration or translation or transcription or lit or source or footer then
table.insert(result, "<dl>")
local closing_tag = ""
if transliteration then
table.insert(result, closing_tag)
table.insert(result, "<dd>" .. transliteration)
closing_tag = "</dd>"
end
if transcription then
table.insert(result, closing_tag)
table.insert(result, "<dd>/" .. transcription .. "/")
closing_tag = "</dd>"
end
if translation then
table.insert(result, closing_tag)
table.insert(result, "<dd>" .. translation)
closing_tag = "</dd>"
end
if lit then
table.insert(result, closing_tag)
table.insert(result, "<dd>" .. lit)
closing_tag = "</dd>"
end
local extra_indent, closing_extra_indent
if transliteration or transcription or translation or lit then
extra_indent = "<dd><dl><dd>"
closing_extra_indent = "</dd></dl></dd>"
else
extra_indent = "<dd>"
closing_extra_indent = "</dd>"
end
if source then
table.insert(result, closing_tag)
table.insert(result, extra_indent .. source)
closing_tag = closing_extra_indent
end
if footer then
table.insert(result, closing_tag)
table.insert(result, extra_indent .. footer)
closing_tag = closing_extra_indent
end
if brackets then
table.insert(result, "]")
end
table.insert(result, closing_tag)
table.insert(result, "</dl>")
else
if brackets then
table.insert(result, "]")
end
end
result = table.concat(result)
result = div(quote and class.container_quotation or class.container_ux, result)
result = result .. require("Module:utilitats").format_categories(categories, lang, sortkey)
if noenum then
result = "\n: " .. result
end
return result
end
-- from en:Module:usex/templates
function p.usex_t(frame)
local args = frame:getParent().args
args[3] = args[3] or args.t or args.trad or args.translation
args.inline = args.inline and true or false
args.noenum = args.noenum and true or false
args.tr = args.tr or args.trans or args.transliteration
args.ts = args.ts or args.transcription
args.nocat = args.nocat and true or false
args.brackets = args.brackets and true or false
local quote = (frame.args["quote"] or "") ~= ""
local template_inline = (frame.args["inline"] or "") ~= ""
local lang = m_languages.getByCode(args[1] or "und")
local data = {
lang = lang,
sc = args.sc or lang.sc,
usex = args[2] and mw.text.trim(args[2]),
translation = args[3] and mw.text.trim(args[3]),
transliteration = args["tr"],
transcription = args["ts"],
noenum = args["noenum"],
inline = args["inline"] or template_inline,
ref = frame.args.ref or args.ref,
quote = quote,
lit = args["lit"],
substs = args["subst"],
qualifiers = args["q"],
source = args["font"],
footer = args["peu"],
nocat = args["nocat"],
brackets = args["claudators"],
sortkey = args["ordre"],
}
return format_usex(data)
end
return p