Module:RootFinder
From The Seven Sages of Rome
Documentation for this module may be created at Module:RootFinder/doc
local p = {}
function p.getLanguageTree(frame)
-- Get the language name from the first argument
local languageName = frame.args[1]
if not languageName then
return "No language name provided"
end
-- Function to escape special characters for wiki page titles
local function escapeTitle(title)
-- Replace spaces with underscores
title = title:gsub(" ", "_")
-- Capitalize first letter
title = title:sub(1,1):upper() .. title:sub(2)
return title
end
-- Function to trace the language to its root
local function findRootLanguage(lang)
local currentLang = escapeTitle(lang)
local visited = {}
while true do
-- Prevent infinite loops
if visited[currentLang] then
return currentLang
end
visited[currentLang] = true
-- Query for 'Is Variety Of' property
local rootQuery = {
string.format('[[%s]]', currentLang),
'?Is Variety Of'
}
local varietyResult = mw.smw.ask(rootQuery)
-- If no 'Is Variety Of' value found, we've reached the root
if not varietyResult or #varietyResult == 0 or not varietyResult[1]['Is Variety Of'] then
return currentLang
end
-- Update current language to its parent and escape it
currentLang = escapeTitle(varietyResult[1]['Is Variety Of'])
end
end
-- Find the root language
local rootLanguage = findRootLanguage(languageName)
-- Generate the tree query
local treeQuery = string.format('[[Category:Language]] |format=tree |parent=Is Variety Of |limit=5000|root=%s', rootLanguage)
-- Preprocess the query to render the tree
local treeResult = frame:preprocess('{{#ask:' .. treeQuery .. '}}')
return treeResult
end
return p