Module:RootFinder

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

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

local p = {}

-- Function to get the root language by traversing up the hierarchy
local function get_root_language(language)
    local parent_prop = "Is Variety Of"

    -- Loop upwards to find the root language
    while true do
        local query = "[[" .. language .. "]]|?" .. parent_prop
        local result = mw.smw.ask{ query }

        -- If no parent is found, we've reached the root
        if not result or not result[language] or not result[language][parent_prop] then
            break
        end

        -- Move up the hierarchy
        language = result[language][parent_prop]
    end

    return language
end

-- Main function to print the full tree for the current language
function p.tree(frame)
    local current_language = mw.title.getCurrentTitle().text
    local root_language = get_root_language(current_language)

    -- Ensure the root language is not the current language, otherwise show nothing
    if root_language == current_language then
        return "No root language found."
    end

    -- Construct the query with the root parameter
    local query = string.format(
        '[[Category:Language]] |format=tree |parent=Is Variety Of |limit=5000|root=%s',
        root_language
    )

    -- Return the processed result
    return frame:preprocess('{{#ask:' .. query .. '}}')
end

return p