Module:RootFinder
From The Seven Sages of Rome
Documentation for this module may be created at Module:RootFinder/doc
local p = {}
-- Function to sanitize page titles
local function sanitizeTitle(title)
-- Replace spaces with underscores
title = title:gsub(" ", "_")
-- Remove any problematic characters
title = title:gsub("[<>%[%]|{}]", "")
return title
end
-- Main function to generate the language tree
function p.languageTree(frame)
local languageName = frame.args[1]
if not languageName or languageName == "" then
return "No language name provided"
end
-- Sanitize the language name
local sanitizedName = sanitizeTitle(languageName)
-- First, try to find the root language
local rootLanguage = sanitizedName
local varietyProperty = "Is_Variety_Of"
local maxIterations = 10
local iterations = 0
while iterations < maxIterations do
-- Query to find parent language
local askQuery = string.format('{{#ask: [[%s]][[%s::+]] |?%s |limit=1 |format=list}}',
rootLanguage, varietyProperty, varietyProperty)
local parentLanguage = frame:preprocess(askQuery):match("^%s*(.-)%s*$")
-- If no parent language is found, we've reached the root
if parentLanguage == "" or parentLanguage == nil then
break
end
-- Update root language
rootLanguage = sanitizeTitle(parentLanguage)
iterations = iterations + 1
end
-- Construct the tree query
local treeQuery = string.format('[[Category:Language]] |format=tree |parent=Is_Variety_Of |limit=5000 |root=%s',
rootLanguage)
-- Return the tree using preprocessing
return frame:preprocess('{{#ask:' .. treeQuery .. '}}')
end
return p