Module:languages: Verskil tussen weergawes
Content deleted Content added
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...' |
Werk by vanaf en: |
||
Lyn 1:
local export = {}
--[=[ 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", "seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth",
"thirteenth", "fourteenth", "fifteenth", "sixteenth", "seventeenth",
"eighteenth", "nineteenth", "twentieth"
}
if
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
param = 'parameter "' .. param .. '"'
else
error("The parameter name is "
.. (
.. ", but it should be a number or a string." .. template_tag, 2)
end
--
if not langCode or langCode == "" then
error("The " .. param .. " (" .. (text or "language code") .. ") is missing." .. template_tag, 2)
elseif langCode:find(
or langCode:find("^%l%l%l%-%l%l%l$")
or langCode:find("^%l%l%l%-%l%l%l%-%l%l%l$") then
error("The language code \"" .. langCode .. "\" is not valid." .. template_tag, 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
Line 81 ⟶ 100:
return self._wikimediaLanguageObjects
end
function Language:getWikipediaArticle()
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
return self._familyObject
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
-- If the name already has "language" in it, don't add it.
Line 204 ⟶ 238:
function Language:makeEntryName(text)
text = mw.ustring.
if self:getCode() == "ar" then
Line 220 ⟶ 253:
if type(self._rawData.entry_name) == "table" then
end
Line 251 ⟶ 273:
function Language:makeSortKey(name, sc)
if has_dotted_undotted_i[self:getCode()] then
name =
end
Line 259 ⟶ 281:
local hyphens_regex = "^[-־ـ*]+(.)"
name = mw.ustring.gsub(name, hyphens_regex, "%1")
-- If there are language-specific rules to generate the key, use those
if type(self._rawData.sort_key) == "table" then
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 =
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
if self._rawData.entry_name.from then
entryNamePatterns = {}
local to = self._rawData.entry_name.to[i] or ""
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("^
return "languages/data2"
elseif code:find("^
local prefix = code:sub(1, 1)
return "languages/data3/" .. prefix
elseif code:find("^[
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
|