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 = {}


-- Function to recursively find the root language
function p._findRoot(language)
function p.findRootLanguage(language)
     local current = language
     -- Query to get the "Is Variety Of" value for the given language
    while true do
    local query = string.format('[[%s]]|?Is Variety Of', language)
        -- Query for the 'Is Variety Of' property of the current language
    -- Execute the query using mw.smw.ask
        local results = mw.smw.ask({
    local result = mw.smw.ask(query)
            '[[Category:Language]]',
   
            '[[' .. current .. ']]',
    -- If there's a result (i.e., the language has a "Is Variety Of" value)
            '?Is Variety Of'
    if result and result[1] and result[1].values and result[1].values["Is Variety Of"] then
        })
         -- Recursively call the function with the parent language
       
         return p.findRootLanguage(result[1].values["Is Variety Of"])
        -- Exit if no results or invalid response
    else
        if not results or #results == 0 then break end
         -- Return the current language if it doesn't have a "Is Variety Of" value
       
         return language
        -- Extract parent data from the first result
        local parentData = results[1]['Is Variety Of']
       
         -- Exit if no parent found
         if not parentData or #parentData == 0 then break end
       
         -- Move to the parent language (using fulltext for page name)
         current = parentData[1].fulltext
     end
     end
    return current
end
function p.main(frame)
    local language = frame.args[1]  -- Get input language from template
    return p._findRoot(language)
end
end


return p
return p

Revision as of 13:23, 25 March 2025

Documentation for this module may be created at Module:RootFinder/doc

local p = {}

function p._findRoot(language)
    local current = language
    while true do
        -- Query for the 'Is Variety Of' property of the current language
        local results = mw.smw.ask({
            '[[Category:Language]]',
            '[[' .. current .. ']]',
            '?Is Variety Of'
        })
        
        -- Exit if no results or invalid response
        if not results or #results == 0 then break end
        
        -- Extract parent data from the first result
        local parentData = results[1]['Is Variety Of']
        
        -- Exit if no parent found
        if not parentData or #parentData == 0 then break end
        
        -- Move to the parent language (using fulltext for page name)
        current = parentData[1].fulltext
    end
    return current
end

function p.main(frame)
    local language = frame.args[1]  -- Get input language from template
    return p._findRoot(language)
end

return p