Module:RootFinder: Difference between revisions
From The Seven Sages of Rome
No edit summary Tag: Reverted |
No edit summary Tag: Manual revert |
||
| Line 7: | Line 7: | ||
if not languageName then | if not languageName then | ||
return "No language name provided" | return "No language name provided" | ||
end | end | ||
-- Function to trace the language to its root | -- Function to trace the language to its root | ||
local function findRootLanguage(lang) | local function findRootLanguage(lang) | ||
local currentLang = | local currentLang = lang | ||
local visited = {} | local visited = {} | ||
| Line 31: | Line 22: | ||
-- Query for 'Is Variety Of' property | -- Query for 'Is Variety Of' property | ||
local rootQuery = | local rootQuery = string.format('[[%s]]|?Is Variety Of', currentLang) | ||
local varietyResult = mw.smw.ask(rootQuery) | local varietyResult = mw.smw.ask(rootQuery) | ||
| Line 42: | Line 30: | ||
end | end | ||
-- Update current language to its parent | -- Update current language to its parent | ||
currentLang = | currentLang = varietyResult[1]['Is Variety Of'] | ||
end | end | ||
end | end | ||
Revision as of 14:21, 25 March 2025
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 trace the language to its root
local function findRootLanguage(lang)
local currentLang = 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]]|?Is Variety Of', currentLang)
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
currentLang = 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