Module:User:Benwing2/category tree/data

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


local labels = {}
local raw_categories = {}
local handlers = {}
local raw_handlers = {}

local subpages = {
	"affixes and compounds",
	"characters",
	"entry maintenance",
	"etymology",
	"families",
	"figures of speech",
	"grammatical classes",
	"lang-specific-raw",
	"languages",
	"lects",
	"lemmas",
	"lexical properties",
	"miscellaneous",
	"modules",
	"names",
	"non-lemma forms",
	"phrases",
	"pragmatic properties",
	"rhymes",
	"scripts",
	"semantic classes",
	"shortenings",
	"speech acts",
	"symbols",
	"templates",
	"terms by script",
	"topic",
	"transliterations",
	"unicode",
	"wiktionary maintenance",
	"wiktionary users",
	"word of the day",
}

-- Import subpages
for _, subpage in ipairs(subpages) do
	local datamodule
	if subpage == "topic" then
		datamodule = "Module:User:Benwing2/category tree/" .. subpage
	else
		datamodule = "Module:category tree/" .. subpage
	end
	local retval = require(datamodule)
	if retval then
		for label, data in pairs(retval) do
			if labels and not retval then
				error("Label " .. label .. " defined in both [["
					.. datamodule .. "]] and .module .. "]].")
			end
			data.module = datamodule
			labels = data
		end
	end
	if retval then
		for category, data in pairs(retval) do
			if raw_categories and not retval then
				error("Raw category " .. category .. " defined in both [["
					.. datamodule .. "]] and .module .. "]].")
			end
			data.module = datamodule
			raw_categories = data
		end
	end
	if retval then
		for _, handler in ipairs(retval) do
			table.insert(handlers, { module = datamodule, handler = handler })
		end
	end
	if retval then
		for _, handler in ipairs(retval) do
			table.insert(raw_handlers, { module = datamodule, handler = handler })
		end
	end
end

-- Add child categories to their parents
local function add_children_to_parents(hierarchy, raw)
	for key, data in pairs(hierarchy) do
		local parents = data.parents
		if parents then
			if type(parents) ~= "table" then
				parents = {parents}
			end
			if parents.name or parents.module then
				parents = {parents}
			end
			for _, parent in ipairs(parents) do
				if type(parent) ~= "table" or not parent.name and not parent.module then
					parent = {name = parent}
				end
				if parent.name and not parent.module and type(parent.name) == "string" and not parent.name:find("^Category:") then
					local parent_is_raw
					if raw then
						parent_is_raw = not parent.is_label
					else
						parent_is_raw = parent.raw
					end
					-- Don't do anything if the child is raw and the parent is lang-specific, otherwise e.g.
					-- "Lemmas subcategories by language" will be listed as a child of every "LANG lemmas" category.
					-- FIXME: We need to rethink this mechanism.
					if not raw or parent_is_raw then
						local child_hierarchy = parent_is_raw and raw_categories or labels
						if child_hierarchy then
							local child = {name = key, sort = parent.sort, raw = raw}
							if child_hierarchy.children then
								table.insert(child_hierarchy.children, child)
							else
								child_hierarchy.children = {child}
							end
						end
					end
				end
			end
		end
	end
end

add_children_to_parents(labels)
add_children_to_parents(raw_categories, true)

return {
	LABELS = labels, RAW_CATEGORIES = raw_categories,
	HANDLERS = handlers, RAW_HANDLERS = raw_handlers
}