<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://sualex.cenzontle.org/index.php?action=history&amp;feed=atom&amp;title=Module%3Aetymology</id>
	<title>Module:etymology - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://sualex.cenzontle.org/index.php?action=history&amp;feed=atom&amp;title=Module%3Aetymology"/>
	<link rel="alternate" type="text/html" href="https://sualex.cenzontle.org/index.php?title=Module:etymology&amp;action=history"/>
	<updated>2026-04-20T01:41:34Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://sualex.cenzontle.org/index.php?title=Module:etymology&amp;diff=1213&amp;oldid=prev</id>
		<title>Jawad: Created page with &quot;-- Module:etymology  local utilities = require(&quot;Module:utilities&quot;) local lexicon   = require(&quot;Module:lexicon&quot;) local format    = require(&quot;Module:format&quot;)  local etymology = {}  local function get_ancestor_relations(lang, item, homonym, options)     local rels = {}     for _, et in ipairs(lexicon.get_sources(lang, item, homonym, options) or {}) do         local rel_type = et.descendant_type or &quot;&quot;         local rel_unc  = et.uncertainty == true or false         for _, it i...&quot;</title>
		<link rel="alternate" type="text/html" href="https://sualex.cenzontle.org/index.php?title=Module:etymology&amp;diff=1213&amp;oldid=prev"/>
		<updated>2026-01-29T14:29:48Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;-- Module:etymology  local utilities = require(&amp;quot;Module:utilities&amp;quot;) local lexicon   = require(&amp;quot;Module:lexicon&amp;quot;) local format    = require(&amp;quot;Module:format&amp;quot;)  local etymology = {}  local function get_ancestor_relations(lang, item, homonym, options)     local rels = {}     for _, et in ipairs(lexicon.get_sources(lang, item, homonym, options) or {}) do         local rel_type = et.descendant_type or &amp;quot;&amp;quot;         local rel_unc  = et.uncertainty == true or false         for _, it i...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Module:etymology&lt;br /&gt;
&lt;br /&gt;
local utilities = require(&amp;quot;Module:utilities&amp;quot;)&lt;br /&gt;
local lexicon   = require(&amp;quot;Module:lexicon&amp;quot;)&lt;br /&gt;
local format    = require(&amp;quot;Module:format&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local etymology = {}&lt;br /&gt;
&lt;br /&gt;
local function get_ancestor_relations(lang, item, homonym, options)&lt;br /&gt;
    local rels = {}&lt;br /&gt;
    for _, et in ipairs(lexicon.get_sources(lang, item, homonym, options) or {}) do&lt;br /&gt;
        local rel_type = et.descendant_type or &amp;quot;&amp;quot;&lt;br /&gt;
        local rel_unc  = et.uncertainty == true or false&lt;br /&gt;
        for _, it in ipairs(et.items or {}) do&lt;br /&gt;
            table.insert(rels, {&lt;br /&gt;
                type = rel_type,&lt;br /&gt;
                uncertainty = rel_unc,&lt;br /&gt;
                source_etym = et,&lt;br /&gt;
                from = { lang = lang, item = item, homonym = homonym },&lt;br /&gt;
                to   = { lang = it.lang_code, item = it.etymon_item, homonym = it.homonym, display = it.display_form }&lt;br /&gt;
            })&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return rels&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_descendant_relations(lang, item, homonym, options)&lt;br /&gt;
    local rels = {}&lt;br /&gt;
    for _, d in ipairs(lexicon.get_descendants(lang, item, homonym, options) or {}) do&lt;br /&gt;
        local et = d.matching_etym&lt;br /&gt;
        if et then&lt;br /&gt;
            local rel_type = et.descendant_type or &amp;quot;&amp;quot;&lt;br /&gt;
            local rel_unc  = et.uncertainty == true or false&lt;br /&gt;
            local term = d.entry and d.entry.term and d.entry.term[1] or nil&lt;br /&gt;
            if term then&lt;br /&gt;
                table.insert(rels, {&lt;br /&gt;
                    type = rel_type,&lt;br /&gt;
                    uncertainty = rel_unc,&lt;br /&gt;
                    source_etym = et,&lt;br /&gt;
                    from = { lang = lang, item = item, homonym = homonym },&lt;br /&gt;
                    to   = { lang = d.lang, item = term.term_item, homonym = term.homonym, display = term.display_form }&lt;br /&gt;
                })&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return rels&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function walk(relations_fn, origin, options, level, out)&lt;br /&gt;
    out = out or {}&lt;br /&gt;
    for _, rel in ipairs(relations_fn(origin.lang, origin.item, origin.homonym, options)) do&lt;br /&gt;
        local node = {&lt;br /&gt;
            indent = string.rep(&amp;quot;:&amp;quot;, level + 1),&lt;br /&gt;
            type = rel.type,&lt;br /&gt;
            uncertainty = rel.uncertainty,&lt;br /&gt;
            lang = rel.to.lang,&lt;br /&gt;
            term_item = rel.to.item,&lt;br /&gt;
            homonym = rel.to.homonym,&lt;br /&gt;
            display_form = rel.to.display,&lt;br /&gt;
            matching_etym = rel.source_etym&lt;br /&gt;
        }&lt;br /&gt;
        table.insert(out, node)&lt;br /&gt;
        walk(&lt;br /&gt;
            relations_fn,&lt;br /&gt;
            { lang = rel.to.lang, item = rel.to.item, homonym = rel.to.homonym },&lt;br /&gt;
            options,&lt;br /&gt;
            level + 1,&lt;br /&gt;
            out&lt;br /&gt;
        )&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function etymology.build_ancestor_tree(lang, item, homonym, options, level)&lt;br /&gt;
    return walk(get_ancestor_relations, { lang = lang, item = item, homonym = homonym }, options, level or 0, {})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function etymology.build_descendant_tree(lang, item, homonym, options, level)&lt;br /&gt;
    return walk(get_descendant_relations, { lang = lang, item = item, homonym = homonym }, options, level or 0, {})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function etymology.render_etymon(desc_type, items, global_uncertainty, gloss_pref)&lt;br /&gt;
    gloss_pref = gloss_pref or &amp;quot;en&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    local langs = {}&lt;br /&gt;
    for _, i in ipairs(items or {}) do langs[i.lang_code] = true end&lt;br /&gt;
    local all_same = (utilities.table_keys_count(langs) == 1)&lt;br /&gt;
    local rendered = {}&lt;br /&gt;
&lt;br /&gt;
    for _, i in ipairs(items or {}) do&lt;br /&gt;
        local term = format.render_term(i.lang_code, i.etymon_item, i.homonym, i.display_form, nil, i.sup, gloss_pref)&lt;br /&gt;
        if all_same then&lt;br /&gt;
            table.insert(rendered, term)&lt;br /&gt;
        else&lt;br /&gt;
            table.insert(rendered, format.language_name(i.lang_code) .. &amp;quot; &amp;quot; .. term)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local joined = utilities.join_strings(rendered, &amp;quot; + &amp;quot;)&lt;br /&gt;
    local global_sup = global_uncertainty and format.sup(&amp;quot;?&amp;quot;, true) or &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if all_same and #items &amp;gt; 0 then&lt;br /&gt;
        return format.language_name(items[1].lang_code) .. &amp;quot; &amp;quot; .. joined .. global_sup&lt;br /&gt;
    else&lt;br /&gt;
        return joined .. global_sup&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function etymology.render_node(node, mode)&lt;br /&gt;
    local rel_type = node.type&lt;br /&gt;
    local prefix = &amp;quot;&amp;quot;&lt;br /&gt;
    if rel_type == &amp;quot;bor&amp;quot; then&lt;br /&gt;
        prefix = (mode == &amp;quot;ancestor&amp;quot;) and &amp;quot;&amp;lt; &amp;quot; or &amp;quot;&amp;gt; &amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local lang_label = format.language_name(node.lang)&lt;br /&gt;
    local term_link = format.render_term(&lt;br /&gt;
        node.lang,&lt;br /&gt;
        node.term_item,&lt;br /&gt;
        node.homonym,&lt;br /&gt;
        node.display_form,&lt;br /&gt;
        nil,&lt;br /&gt;
        nil,&lt;br /&gt;
        &amp;quot;en&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    if node.uncertainty then&lt;br /&gt;
        term_link = term_link .. format.sup(&amp;quot;?&amp;quot;, true)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return prefix .. lang_label .. &amp;quot; &amp;quot; .. term_link&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return etymology&lt;/div&gt;</summary>
		<author><name>Jawad</name></author>
	</entry>
</feed>