Module:languages: Verskil tussen weergawes

Content deleted Content added
Pynappel (Besprekings | bydraes)
Nuwe bladsy geskep met 'local export = {} local find = mw.ustring.find --[=[ This function checks for things that could plausibly be a language code: two or three lowercase letters, two or t...'
 
Naudefj (Besprekings | bydraes)
Werk by vanaf en:
Lyn 1:
local export = {}
 
local find = mw.ustring.find
 
--[=[ This function checks for things that could plausibly be a language code:
Line 8 ⟶ 6:
it is likely the editor simply forgot to enter a language code. ]=]
 
function export.err(langCode, param, text, template_tag)
local ordinals = {
"first", "second", "third", "fourth", }"fifth", "sixth",
"seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth",
"thirteenth", "fourteenth", "fifteenth", "sixteenth", "seventeenth",
"eighteenth", "nineteenth", "twentieth"
}
if type(param)not == "number"template_tag then
template_tag = ""
else
if type(template_tag) ~= "string" then
template_tag = template_tag()
end
template_tag = " (Original template: " .. template_tag .. ")"
end
local paramType = type(param)
if paramType == "number" then
ordinal = ordinals[param]
param = ordinal .. ' parameter'
elseif type(param)paramType == "string" then
param = 'parameter "' .. param .. '"'
else
error("The parameter name is "
.. (type(param)paramType == "table" and "a table" or tostring(param))
.. ", but it should be a number or a string." .. template_tag, 2)
end
--[[ Can't use "%l"string.find because thatlanguage wouldcodes includeonly allcontain UnicodeASCII.
lowercase letters; language codes only use ASCII. ]]
local lower = "[a-z]"
if not langCode or langCode == "" then
error("The " .. param .. " (" .. (text or "language code") .. ") is missing." .. template_tag, 2)
elseif langCode:find(langCode, "^" .. lower .. lower .. lower .. "%l%l%l?$")
or langCode:find("^%l%l%l%-%l%l%l$")
or find(langCode, "^" .. lower .. lower .. lower
or langCode:find("^%l%l%l%-%l%l%l%-%l%l%l$") then
.. "%-" .. lower .. lower .. lower .. "$")
error("The language code \"" .. langCode .. "\" is not valid." .. template_tag, 2)
or find(langCode, "^" .. lower .. lower .. lower
.. "%-" .. lower .. lower .. lower
.. "%-" .. lower .. lower .. lower .. "$") then
error("The language code \"" .. langCode .. "\" is not valid.", 2)
else
error("Please enter a " .. (text or "language code") .. " in the " .. param .. "." .. template_tag, 2)
end
end
 
local function do_entry_name_or_sort_key_replacements(text, replacements)
if replacements.from then
for i, from in ipairs(replacements.from) do
local to = replacements.to[i] or ""
text = mw.ustring.gsub(text, from, to)
end
end
if replacements.remove_diacritics then
text = mw.ustring.toNFD(text)
text = mw.ustring.gsub(text,
'[' .. replacements.remove_diacritics .. ']',
'')
text = mw.ustring.toNFC(text)
end
return text
end
 
Line 48 ⟶ 73:
 
function Language:getCanonicalName()
return self._rawData[1] or self._rawData.canonicalName
end
 
 
-- Commented out; I don't think anything uses this, the presence/absence of script errors should confirm
--function Language:getAllNames()
-- return self._rawData.names
--end
 
 
Line 81 ⟶ 100:
return self._wikimediaLanguageObjects
end
 
 
function Language:getWikipediaArticle()
returnif self._rawData.wikipedia_article or mw.ustring.gsub(self:getCategoryName(), "Creole language", "Creole")then
return self._rawData.wikipedia_article
elseif self._wikipedia_article then
return self._wikipedia_article
elseif self:getWikidataItem() and mw.wikibase then
self._wikipedia_article = mw.wikibase.sitelink(self:getWikidataItem(), 'enwiki')
end
if not self._wikipedia_article then
self._wikipedia_article = mw.ustring.gsub(self:getCategoryName(), "Creole language", "Creole")
end
return self._wikipedia_article
end
 
 
 
function Language:makeWikipediaLink()
Line 93 ⟶ 119:
end
 
function Language:getWikidataItem()
return self._rawData[2] or self._rawData.wikidata_item
end
 
function Language:getScripts()
Line 112 ⟶ 141:
 
function Language:getFamily()
if self._rawData.family and not self._familyObject then
return self._familyObject = require("Module:families").getByCode(self._rawData.family)
end
local family = self._rawData[3] or self._rawData.family
if family then
self._familyObject = require("Module:families").getByCode(family)
end
Line 187 ⟶ 221:
 
function Language:getCategoryName()
local name = self._rawData.canonicalName:getCanonicalName()
-- If the name already has "language" in it, don't add it.
Line 204 ⟶ 238:
 
function Language:makeEntryName(text)
text = mw.ustring.gsubmatch(text, "^[¿¡]",(.-[^%s%p].-)[؟?!;՛՜ "՞ ՟?!︖︕।॥။၊་།]$") or text
text = mw.ustring.gsub(text, "(.)[؟?!;՛՜ ՞ ՟?!︖︕।॥။၊་།]$", "%1")
if self:getCode() == "ar" then
Line 220 ⟶ 253:
if type(self._rawData.entry_name) == "table" then
fortext i= do_entry_name_or_sort_key_replacements(text, from in ipairs(self._rawData.entry_name.from) do
local to = self._rawData.entry_name.to[i] or ""
text = mw.ustring.gsub(text, from, to)
end
end
--[=[ For instance, ᾰ (alpha-breve) + combining smooth breathing is converted
to alpha + combining smooth breathing by the entry_name replacements.
It must be re-combined to alpha-smooth breathing (ἀ) so that
allowSelfLink in [[Module:links]] will work properly. ]=]
if self:getCode() == "grc" then
text = mw.ustring.toNFC(text)
end
Line 251 ⟶ 273:
function Language:makeSortKey(name, sc)
if has_dotted_undotted_i[self:getCode()] then
name = mw.ustring.name:gsub(name, "I", "ı")
end
Line 259 ⟶ 281:
local hyphens_regex = "^[-־ـ*]+(.)"
name = mw.ustring.gsub(name, hyphens_regex, "%1")
-- Remove parentheses, as long as they are either preceded or followed by something
name = mw.ustring.gsub(name, "(.)[()]+", "%1")
name = mw.ustring.gsub(name, "[()]+(.)", "%1")
-- If there are language-specific rules to generate the key, use those
if type(self._rawData.sort_key) == "table" then
forname i= do_entry_name_or_sort_key_replacements(name, from in ipairs(self._rawData.sort_key.from) do
local to = self._rawData.sort_key.to[i] or ""
name = mw.ustring.gsub(name, from, to)
end
elseif type(self._rawData.sort_key) == "string" then
name = require("Module:" .. self._rawData.sort_key).makeSortKey(name, self:getCode(), sc and sc:getCode())
end
-- Remove parentheses, as long as they are either preceded or followed by something
name = mw.ustring.gsub(name, "(.)[()]+", "%1")
name = mw.ustring.gsub(name, "[()]+(.)", "%1")
if has_dotted_undotted_i[self:getCode()] then
name = mw.ustring.name:gsub(name, "i", "İ")
end
Line 314 ⟶ 333:
function Language:toJSON()
local entryNamePatterns = nil
local entryNameRemoveDiacritics = nil
if self._rawData.entry_name then
entryNameRemoveDiacritics = self._rawData.entry_name.remove_diacritics
entryNamePatterns = {}
if self._rawData.entry_name.from then
entryNamePatterns = {}
for i, from in ipairs(self._rawData.entry_name.from) do
localfor toi, =from in ipairs(self._rawData.entry_name.to[i] orfrom) ""do
local to = self._rawData.entry_name.to[i] or ""
table.insert(entryNamePatterns, { from = from, to = to })
table.insert(entryNamePatterns, { from = from, to = to })
end
end
end
Line 330 ⟶ 352:
code = self._code,
entryNamePatterns = entryNamePatterns,
family = self._rawData[3] or self._rawData.family,
otherNames = self:getOtherNames(),
scripts = self._rawData.scripts,
type = self:getType(),
wikimediaLanguages = self._rawData.wikimedia_codes,
wikidataItem = self:getWikidataItem(),
}
Line 351 ⟶ 374:
 
function export.getDataModuleName(code)
if code:find("^[a-z][a-z]%l%l$") then
return "languages/data2"
elseif code:find("^[a-z][a-z][a-z]%l%l%l$") then
local prefix = code:sub(1, 1)
return "languages/data3/" .. prefix
elseif code:find("^[a-z%l-]+$") then
return "languages/datax"
else
Line 424 ⟶ 447:
return export.makeObject(code, data)
end
end
 
--[[ If language is an etymology language, iterates through parent languages
until it finds a non-etymology language. ]]
function export.getNonEtymological(lang)
while lang:getType() == "etymology language" do
local parentCode = lang:getParentCode()
lang = export.getByCode(parentCode)
or require("Module:etymology languages").getByCode(parentCode)
or require("Module:families").getByCode(parentCode)
end
return lang
end