Module:fi-dialects

Hello, you have come here looking for the meaning of the word Module:fi-dialects. In DICTIOUS you will not only get to know all the dictionary meanings for the word Module:fi-dialects, but we will also tell you about its etymology, its characteristics and you will know how to say Module:fi-dialects in singular and plural. Everything you need to know about the word Module:fi-dialects you have here. The definition of the word Module:fi-dialects will help you to be more precise and correct when speaking or writing your texts. Knowing the definition ofModule:fi-dialects, as well as those of other words, enriches your vocabulary and provides you with more and better linguistic resources.

Implements the basics of the Finnish dialectal data framework, including Group for dialect groups, Area for dialect areas, and Parish for parishes (pitäjä). Each area belongs to a group and each parish to an area, forming a tree structure.


local export = {}

local Group = {}

local function makeGroup(code, data)
	return data and setmetatable({ _code = code, _data = data }, Group)
end

function Group:getCode()
	return self._code
end

function Group:getFinnishName()
	return self._data.finnish or self._code
end

function Group:getEnglishName()
	return self._data.english or self._data.finnish or self._code
end

function Group:getBranch()
	return self._data.branch
end

function Group:getFormattedName()
	if self._data.english and self:getEnglishName() ~= self:getFinnishName() then
		return self:getEnglishName() .. " (" .. self:getFinnishName() .. ")"
	else
		return self:getFinnishName()
	end
end

function Group:getFormattedNameWithLink()
	if self._data.Wikipedia then
		if self._data.english then
			return "] (" .. self:getFinnishName() .. ")"
		else
			return "]"
		end
	else
		return self:getFormattedName()
	end
end

function Group:getWikipediaArticle()
	return self._data.Wikipedia
end

function Group:getWikidataItem()
	local item = self._data.wikidata
	if type(item) == "number" then
		return "Q" .. item
	else
		return item
	end
end

Group.__index = Group

function export.getGroup(code, nil_on_failure)
	local area_data = mw.loadData("Module:fi-dialects/data/area")
	return makeGroup(code, area_data.groups or (not nil_on_failure and error("Group not found by code: " .. code) or nil))
end

local function findAreaFrom(areas, code, original_code, root, nil_on_failure)
	local area = code
	local subarea = nil
	if code:find("/") then
		local slash = code:find("/")
		area = code:sub(1, slash - 1)
		subarea = code:sub(slash + 1)
	end
	local result = areas and areas
	if not result then
		if nil_on_failure then return nil end
		error("Area not found from data: " .. original_code)
	end
	if not root then
		root = result
	end
	if subarea then
		return root, findAreaFrom(result.subareas, subarea, original_code)
	end
	return root, result
end

local Area = {}

local function makeArea(code, root, data)
	return data and setmetatable({ _code = code, _root = root, _data = data }, Area)
end

function export.getArea(code, nil_on_failure)
	local area_data = mw.loadData("Module:fi-dialects/data/area")
	local subarea = nil
	if area_data.area_aliases then
		code = area_data.area_aliases
	end
	return makeArea(code, findAreaFrom(area_data.areas, code, code, nil, nil_on_failure))
end

function Area:getCode()
	return self._code
end

function Area:getFinnishName()
	return self._data.finnish or self._code
end

function Area:getEnglishName()
	return self._data.english or self._data.finnish or self._code
end

function Area:getFormattedName()
	if self._data.english and self:getEnglishName() ~= self:getFinnishName() then
		return self:getEnglishName() .. " (" .. self:getFinnishName() .. ")"
	else
		return self:getFinnishName()
	end
end

function Area:getFormattedNameWithLink()
	if self._data.Wikipedia then
		if self._data.english then
			return "] (" .. self:getFinnishName() .. ")"
		else
			return "]"
		end
	else
		return self:getFormattedName()
	end
end

function Area:getBranch()
	return self._root.branch
end

function Area:getGroupCode()
	return self._data.group or self._root.group
end

function Area:getGroup()
	return (self._data.group or self._root.group) and export.getGroup(self._data.group or self._root.group)
end

function Area:getWikipediaArticle()
	return (self._data.Wikipedia or self._root.Wikipedia)
end

function Area:getWikidataItem()
	local item = (self._data.wikidata or self._root.wikidata)
	if type(item) == "number" then
		return "Q" .. item
	else
		return item
	end
end

function Area:getSuperArea()
	if self == self._root then
		return nil
	end
	return export.getArea(mw.ustring.gsub(self._code, "/+$", ""))
end

function Area:getSubAreas()
	if self._data.subareas then
		local subareas = {}
		for key, subarea in pairs(self._data.subareas) do
			subareas = makeArea(self._code .. "/" .. key, self._root, subarea)
		end
		return subareas
	end
	return {}
end

Area.__index = Area

local Parish = {}

local function makeParish(code, canonical_code, data)
	return data and setmetatable({ _code = code, _canonical = canonical_code, _data = data }, Parish)
end

function export.getParish(code, nil_on_failure)
	local parish_data = mw.loadData("Module:fi-dialects/data/parish")
	local canonical_code = parish_data.parish_aliases or code
	return makeParish(code, canonical_code, parish_data.parishes or (not nil_on_failure and error("Parish not found by code: " .. code) or nil))
end

function Parish:getCode()
	return self._code
end

function Parish:getCanonicalCode()
	return self._canonical
end

function Parish:getFinnishName()
	return self._data.finnish or self._canonical
end

function Parish:getEnglishName()
	return self._data.english or self._data.finnish or self._canonical
end

function Parish:getFormattedName()
	if self._data.english and self:getEnglishName() ~= self:getFinnishName() then
		return self:getEnglishName() .. " (" .. self:getFinnishName() .. ")"
	else
		return self:getFinnishName()
	end
end

function Parish:getWikipediaArticle(cheap)
	if self._data.Wikipedia or cheap then return self._data.Wikipedia end
	local item = self:getWikidataItem()
	if not item then return nil end
	local entity = mw.wikibase.getEntity(item)
	if not entity then return nil end
	return entity:getSitelink("enwiki")
end

function Parish:getWikidataItem()
	local item = self._data.wikidata
	if type(item) == "number" then
		return "Q" .. item
	else
		return item
	end
end

function Parish:getAreaCode()
	return self._data.area
end

function Parish:getArea()
	return export.getArea(self._data.area)
end

function Parish:getCoordinates()
	if self._data.latitude == nil or self._data.longitude == nil then
		return nil
	end
	return self._data.latitude, self._data.longitude
end

Parish.__index = Parish

return export