Modul:InLang
Documentația poate fi citită și modificată la Modul:InLang/doc
Modul realizat pentru a înlocui funcționalitatea formatului {{Limba}}. Folosește Modul:Lang pentru afișarea efectivă a textului.
Testele unitare sunt la Discuție Modul:InLang/testcases.
local getArgs = require('Modul:Arguments').getArgs
local illWd = require('Modul:Ill-wd')
local StringUtils = require('Modul:StringUtils')
local wikidata = require('Modul:Wikidata')
local lang = require('Modul:Lang')
local p = {}
p.getLangLink = function(q)
return illWd.fromArgs(q, StringUtils._removeStart({StringUtils._removeStart({wikidata.findLabel(q), 'Limba '}), 'limba '}), nil)
end
local function getAlphabetCode(alphabetQID)
return wikidata.findOneValueNoRef('P506', alphabetQID)
end
local function getLanguageDir(alphabetQID)
local languageDirectionalities = wikidata.getBestEntityIdsList(alphabetQID, 'P1406')
local languageDir
if languageDirectionalities and languageDirectionalities[1] then
languageDir = (languageDirectionalities[1] == 7333457) and 'rtl' or nil
end
return languageDir
end
p.fromArgs = function(langId, langText, alternateSpellings, defaultAlphabet, italics)
local languageLink
if mw.ustring.match(langId, 'Q?%d+') then
languageLink = p.getLangLink(langId)
local langISOcode = wikidata.findOneValueNoRef('P218', langId) or wikidata.findOneValueNoRef('P219', langId) or wikidata.findOneValueNoRef('P305', langId)
local languageDir = nil
local defaultAlphabetCode
if not defaultAlphabet then
languageAlphabets = wikidata.getBestEntityIdsList(langId, 'P282')
if languageAlphabets and languageAlphabets[1] then
defaultAlphabet = languageAlphabets[1]
end
elseif mw.ustring.match(defaultAlphabet, 'Q%d+') then -- must be on an 'else' here because we need an explicit alphabet code only if more are possible (so only if a default is specified)
defaultAlphabetCode = getAlphabetCode(defaultAlphabet)
end
if defaultAlphabet then
languageDir = getLanguageDir(defaultAlphabet)
end
local out = languageLink .. ' '
if langText then
if langISOcode then
local htmlText = lang.fromArgs(defaultAlphabetCode and (langISOcode .. '-' .. defaultAlphabetCode) or langISOcode, languageDir, langText, italics)
out = out .. htmlText
else
out = out .. '\'\'' .. langText .. '\'\''
end
end
if alternateSpellings then
local spellingsTexts = {}
for _,eachSpelling in ipairs(alternateSpellings) do
local crtAlphabet = eachSpelling.alphabet
local crtAlphabetDir = nil
local crtSpellingText = ''
local crtAlphabetCode = 'Latn'
if mw.ustring.match(crtAlphabet, 'Q%d+') then
crtAlphabetDir = getLanguageDir(crtAlphabet)
crtAlphabetCode = getAlphabetCode(crtAlphabet)
crtSpellingText = 'cu ' .. wikidata.findLinkToItem(crtAlphabet)
else
crtSpellingText = crtAlphabet
end
if langISOcode then
local htmlText = lang.fromArgs(crtAlphabetCode and (langISOcode .. '-' .. crtAlphabetCode) or langISOcode, crtAlphabetDir, eachSpelling.spelling, italics)
crtSpellingText = crtSpellingText .. ': ' .. htmlText
else
crtSpellingText = crtSpellingText .. ': \'\'' .. eachSpelling.spelling .. '\'\''
end
table.insert(spellingsTexts, crtSpellingText)
end
if #spellingsTexts > 0 then
out = out .. ', ' .. table.concat(spellingsTexts, ', ')
end
return out
end
else
languageLink = '[[Limba ' .. langId .. '|' .. langId .. ']]'
return languageLink .. ' ' .. (langText and ((italics and '\'\'' or '') .. langText .. (italics and '\'\'' or '')) or '') .. (langTranslit and (', ' .. latinVariantName .. ' ' .. '\'\'' .. langTranslit .. '\'\'') or '')
end
end
p.fromArray = function(args)
local languageId = args[1]
local languageText = args[2]
local languageTranslit = args[3]
local latinVariantName = args[4] or 'transliterat'
local defaultAlphabet = args['default_alphabet']
local alternateSpellings = {}
if languageTranslit then
table.insert(alternateSpellings, {spelling = languageTranslit, alphabet = latinVariantName})
end
local crtArgIndex = 5
while args[crtArgIndex + 1] do
if args[crtArgIndex] then
table.insert(alternateSpellings, {spelling = args[crtArgIndex], alphabet = args[crtArgIndex + 1]})
end
crtArgIndex = crtArgIndex + 2
end
local italics = (args['italics'] ~= 'no')
return p.fromArgs(languageId, languageText, alternateSpellings, defaultAlphabet, italics)
end
p.fromFrame = function(frame)
argsOptions = {frameOnly = false, parentOnly = false}
if frame.args['args'] then
argsOptions.frameOnly = (frame.args['args'] == 'frameOnly')
argsOptions.parentOnly = (frame.args['args'] == 'parentOnly')
end
local args = getArgs(frame, argsOptions)
return p.fromArray(args)
end
return p