Module:User:Benwing2/category tree/poscatboiler/data
- This module sandbox lacks a documentation subpage. You may create it.
- Useful links: root page • root page’s subpages • links • transclusions • testcases • user page • user talk page • userspace
This is a private module sandbox of Benwing2, for their own experimentation. Items in this module may be added and removed at Benwing2's discretion; do not rely on this module's stability.
local labels = {}
local raw_categories = {}
local handlers = {}
local raw_handlers = {}
local subpages = {
"characters",
"entry maintenance",
"families",
"figures of speech",
"lang-specific",
"languages",
"lemmas",
"miscellaneous",
"names",
"non-lemma forms",
"phrases",
"rhymes",
"scripts",
"shortenings",
"symbols",
"templates",
"terms by etymology",
"terms by grammatical category",
"terms by lexical property",
"terms by semantic function",
"terms by script",
"terms by usage",
"transliterations",
"unicode",
"word of the day",
"words by number of syllables",
}
-- Import subpages
for _, subpage in ipairs(subpages) do
local datamodule
if subpage == "terms by etymology" or subpage == "names" or subpage == "entry maintenance" or
subpage == "transliterations" or subpage == "phrases" or subpage == "lang-specific" or
subpage == "miscellaneous" or subpage == "characters" or subpage == "scripts" or
subpage == "languages" then
datamodule = "Module:User:Benwing2/category tree/poscatboiler/data/" .. subpage
else
datamodule = "Module:category tree/poscatboiler/data/" .. subpage
end
local retval = require(datamodule)
if retval["LABELS"] then
for label, data in pairs(retval["LABELS"]) do
if labels[label] and not retval["IGNOREDUP"] then
error("Label " .. label .. " defined in both [["
.. datamodule .. "]] and [[" .. labels[label].module .. "]].")
end
data.module = datamodule
labels[label] = data
end
end
if retval["RAW_CATEGORIES"] then
for category, data in pairs(retval["RAW_CATEGORIES"]) do
if raw_categories[category] and not retval["IGNOREDUP"] then
error("Raw category " .. category .. " defined in both [["
.. datamodule .. "]] and [[" .. raw_categories[category].module .. "]].")
end
data.module = datamodule
raw_categories[category] = data
end
end
if retval["HANDLERS"] then
for _, handler in ipairs(retval["HANDLERS"]) do
table.insert(handlers, { module = datamodule, handler = handler })
end
end
if retval["RAW_HANDLERS"] then
for _, handler in ipairs(retval["RAW_HANDLERS"]) 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 child_is_raw
if raw then
child_is_raw = not parent.is_label
else
child_is_raw = parent.raw
end
local child_hierarchy = child_is_raw and raw_categories or labels
if child_hierarchy[parent.name] then
local child = {name = key, sort = parent.sort, raw = raw}
if child_hierarchy[parent.name].children then
table.insert(child_hierarchy[parent.name].children, child)
else
child_hierarchy[parent.name].children = {child}
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
}