มอดูล:families

จาก วิกิพจนานุกรม พจนานุกรมเสรี
ไปยังการนำทาง ไปยังการค้นหา
local export = {}

local Family = {}


function Family:getCode()
	return self._code
end


function Family:getCanonicalName()
	return self._rawData.canonicalName
end


--function Family:getAllNames()
--	return self._rawData.names
--end


function Family:getOtherNames()
	return self._rawData.otherNames or {}
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()
	local name = self._rawData.canonicalName
	-- พิจารณาร่มเพิ่ม เพื่อจะได้รู้ว่าเป็นตระกูลภาษาหรือกลุ่มภาษา
	local family = self._rawData.family
	
	-- If the name already has "languages" (ตระกูลภาษา/กลุ่มภาษา) in it, don't add it.
	if name:find("^ตระกูลภาษา") or name:find("^กลุ่มภาษา") then
		return name
	else
		if family == nil then
			-- บนสุด
			return "ตระกูลภาษา" .. name
		else
			if family == 'qfa-not' or family == 'qfa-iso' then
				-- ไม่ใช่ภาษา
				return name
			else
				return "กลุ่มภาษา" .. name
			end
		end
	end
end


function Family:toJSON()
	local ret = {
		canonicalName = self:getCanonicalName(),
		categoryName = self:getCategoryName(),
		code = self._code,
		family = self._rawData.family,
		otherNames = self:getOtherNames(),
		type = self:getType(),
		}
	
	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)
	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