Actions

Module

Module:entry list

From SUALEX

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

-- Module:entry_list
local p = {}

function p.invoke(frame)
    local lexicon    = require("Module:lexicon")
    local utilities  = require("Module:utilities")
    local format     = require("Module:format")
    local parameters = require("Module:parameters")
    local etymology  = require("Module:etymology")

    local args = frame.args or {}
    local lang_code = args[1] or ""
    local entries = lexicon.load_lexicon(lang_code)

    local rows = {}
    table.insert(rows, '{| class="wikitable searchable sortable"\n! Term !! Original !! English !! Spanish !! Source !! Etymon !! Notes')

    for _, entry in ipairs(entries) do
        local cols = {}

        -- anchor span for each term
        local terms = {}
        for _, t in ipairs(entry.term or {}) do
            local anchor_id = (t.term_item or "") .. (t.homonym and (":" .. t.homonym) or "")
            local anchor_span = '<span id="' .. anchor_id .. '"></span>'
            -- show gloss_en by default
            local rendered = format.render_term(entry.lang_code, t.term_item, t.homonym, t.display_form, true, nil, "no")
            table.insert(terms, anchor_span .. rendered)
        end
        table.insert(cols, utilities.join_strings(terms, parameters.value_display_separator))

        local spells = {}
        for _, s in ipairs(entry.spelling or {}) do
            table.insert(spells, (s.spelling_item or "") .. (s.orthography and (" (" .. s.orthography .. ")") or ""))
        end
        table.insert(cols, utilities.join_strings(spells, parameters.value_display_separator))

        -- gloss_en and gloss_es columns (raw gloss text)
        local gloss_en = {}
        for _, g in ipairs(entry.gloss_en or {}) do
            table.insert(gloss_en, format.gloss_text(g.gloss_item, g.sup))
        end
        table.insert(cols, utilities.join_strings(gloss_en, parameters.value_display_separator))

        local gloss_es = {}
        for _, g in ipairs(entry.gloss_es or {}) do
            table.insert(gloss_es, format.gloss_text(g.gloss_item, g.sup))
        end
        table.insert(cols, utilities.join_strings(gloss_es, parameters.value_display_separator))

        local refs = {}
        for _, r in ipairs(entry.reference or {}) do
            table.insert(refs, format.reference(r.author, r.year, r.page))
        end
        table.insert(cols, utilities.join_strings(refs, parameters.value_display_separator))

        -- render etymons from structured object (gloss_en default)
        local etyms = {}
        for _, e in ipairs(entry.etymon or {}) do
            table.insert(etyms, etymology.render_etymon(e.descendant_type, e.items, e.uncertainty, "en"))
        end
        table.insert(cols, utilities.join_strings(etyms, parameters.value_display_separator))

        local notes = {}
        for _, n in ipairs(entry.notes or {}) do table.insert(notes, n.raw or "") end

        local notes_wikitext = utilities.join_strings(notes, parameters.value_display_separator)
        table.insert(cols, frame:preprocess(notes_wikitext))

        table.insert(rows, "|-\n| " .. utilities.join_strings(cols, " || "))
    end

    table.insert(rows, "|}")
    return utilities.join_strings(rows, "\n")
end

return p