Module:RootFinder

From The Seven Sages of Rome
Revision as of 14:21, 25 March 2025 by Noeth (talk | contribs)

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