Module:families
Documentation for this module may be created at Module:families/doc
local export = {}
local Family = {}
function Family:getCode()
return self._code
end
function Family:getCanonicalName()
return self._rawData.canonicalName
end
function Family:getDisplayForm()
return self:getCategoryName("nocap")
end
function Family:getOtherNames(onlyOtherNames)
return require("Module:language-like").getOtherNames(self, onlyOtherNames)
end
function Family:getAliases()
return self._rawData.aliases or {}
end
function Family:getVarieties(flatten)
return require("Module:language-like").getVarieties(self, flatten)
end
--function Family:getAllNames()
-- return self._rawData.names
--end
function Family:getType()
return "family"
end
function Family:getFamily()
if self._rawData.family and not self._familyObject then
self._familyObject = export.getByCode(self._rawData.family)
end
return self._familyObject
end
function Family:getProtoLanguage()
if not self._protoLanguage then
self._protoLanguage = require("Module:languages").getByCode(self._rawData.protoLanguage or self._code .. "-pro")
end
return self._protoLanguage
end
function Family:getCategoryName(nocap)
local name = self._rawData.canonicalName
-- If the name already has "languages" in it, don't add it.
if not name:find("[Ll]anguages$") then
name = name .. " languages"
end
if not nocap then
name = mw.getContentLanguage():ucfirst(name)
end
return name
end
function Family:makeCategoryLink()
return "[[:Category:" .. self:getCategoryName() .. "|" .. self:getDisplayForm() .. "]]"
end
function Family:getWikidataItem()
local item = self._rawData.wikidata_item
if type(item) == "number" then
return "Q" .. item
else
return item
end
end
function Family:getWikipediaArticle()
return (self:getWikidataItem() and mw.wikibase and mw.wikibase.sitelink(self:getWikidataItem(), 'enwiki')) or
self:getCategoryName()
end
function Family:makeWikipediaLink()
return "[[w:" .. self:getWikipediaArticle() .. "|" .. self:getCanonicalName() .. "]]"
end
function Family:toJSON()
local ret = {
canonicalName = self:getCanonicalName(),
categoryName = self:getCategoryName("nocap"),
code = self._code,
family = self._rawData.family,
protoLanguage = self._rawData.protoLanguage,
otherNames = self:getOtherNames(true),
aliases = self:getAliases(),
varieties = self:getVarieties(),
type = self:getType(),
wikidataItem = self:getWikidataItem(),
}
return require("Module:JSON").toJSON(ret)
end
function Family:getRawData()
return self._rawData
end
Family.__index = Family
function export.makeObject(code, data)
return data and setmetatable({ _rawData = data, _code = code }, Family) or nil
end
function export.getByCode(code)
-- FIXME! Remove this when we've tracked down all uses.
if code == 'kdo' then
require('Module:debug').track('Kordofanian')
end
return export.makeObject(code, mw.loadData("Module:families/data")[code])
end
function export.getByCanonicalName(name)
local code = mw.loadData("Module:families/by name")[name]
if not code then
return nil
end
return export.makeObject(code, mw.loadData("Module:families/data")[code])
end
return export