Module:RootFinder: Difference between revisions
From The Seven Sages of Rome
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
local function findRootLanguage(frame, languageName, visited) | |||
local function | -- Prevent infinite loops in case of circular references | ||
visited = visited or {} | |||
if visited[languageName] then | |||
return nil, "Circular reference detected: " .. languageName | |||
end | |||
visited[languageName] = true | |||
local query = "[[Is Variety Of::" .. languageName .. "]]" | |||
local results = frame:preprocess('{{#ask:' .. query .. '|limit=1}}') | |||
-- Handle no results | |||
if results == "" then | |||
return languageName, nil | |||
end | |||
-- Extract the next language | |||
local nextLanguage = mw.text.trim(results) | |||
-- Recursively find the root | |||
return findRootLanguage(frame, nextLanguage, visited) | |||
end | end | ||
function p.main(frame) | |||
function p. | local languageName = frame.args[1] | ||
if not languageName then | |||
return "Error: Language name not provided." | |||
end | |||
local rootLanguage, errorMessage = findRootLanguage(frame, languageName) | |||
if errorMessage then | |||
return errorMessage | |||
end | |||
return rootLanguage | |||
end | end | ||
return p | return p | ||
Revision as of 11:47, 25 March 2025
Documentation for this module may be created at Module:RootFinder/doc
local p = {}
local function findRootLanguage(frame, languageName, visited)
-- Prevent infinite loops in case of circular references
visited = visited or {}
if visited[languageName] then
return nil, "Circular reference detected: " .. languageName
end
visited[languageName] = true
local query = "[[Is Variety Of::" .. languageName .. "]]"
local results = frame:preprocess('{{#ask:' .. query .. '|limit=1}}')
-- Handle no results
if results == "" then
return languageName, nil
end
-- Extract the next language
local nextLanguage = mw.text.trim(results)
-- Recursively find the root
return findRootLanguage(frame, nextLanguage, visited)
end
function p.main(frame)
local languageName = frame.args[1]
if not languageName then
return "Error: Language name not provided."
end
local rootLanguage, errorMessage = findRootLanguage(frame, languageName)
if errorMessage then
return errorMessage
end
return rootLanguage
end
return p