Module:tln-conj: Difference between revisions

From Linguifex
Jump to navigation Jump to search
Nehster9 (talk | contribs)
mNo edit summary
Nehster9 (talk | contribs)
mNo edit summary
 
(9 intermediate revisions by the same user not shown)
Line 7: Line 7:
local endings = {
local endings = {
     are = {
     are = {
         pres_1s = "§1S_ARE§",
         pres_1s = "",
         pres_2s = "§2S_ARE§",
         pres_2s = "ᠠᠰ",
         pres_3s = "§3S_ARE§",
         pres_3s = "ᠠᠲ",
         pres_1p = "§1P_ARE§",
         pres_1p = "ᠠᠨᠤᠰ",
         pres_2p = "§2P_ARE§",
         pres_2p = "ᠠᠵᠢᠰ",
         pres_3p = "§3P_ARE§",
         pres_3p = "ᠠᠨ",


         imperfect_1s = "§I1S_ARE§",
         imperf_1s = "ᠠᠨ",
         imperfect_2s = "§I2S_ARE§",
         imperf_2s = "ᠠᠰ",
         imperfect_3s = "§I3S_ARE§",
         imperf_3s = "ᠠᠲ",
         imperfect_1p = "§I1P_ARE§",
         imperf_1p = "ᠠᠨᠤᠰ",
         imperfect_2p = "§I2P_ARE§",
         imperf_2p = "ᠠᠵᠢᠰ",
         imperfect_3p = "§I3P_ARE§",
         imperf_3p = "ᠠᠨ",


         past_1s = "§P1S_ARE§",
         past_1s = "ᠠᠢ",
         past_2s = "§P2S_ARE§",
         past_2s = "ᠠᠢᠰᠲᠢ",
         past_3s = "§P3S_ARE§",
         past_3s = "ᠠᠢᠲ",
         past_1p = "§P1P_ARE§",
         past_1p = "ᠠᠢᠨᠤᠰ",
         past_2p = "§P2P_ARE§",
         past_2p = "ᠠᠢᠰᠲᠢᠰ",
         past_3p = "§P3P_ARE§"
         past_3p = "ᠡᠷᠤᠨ",
       
        fut_1s = "ᠠᠷᠢᠣ",
        fut_2s = "ᠠᠷᠡᠰ",
        fut_3s = "ᠠᠷᠡᠲ",
        fut_1p = "ᠠᠷᠡᠨᠤᠰ",
        fut_2p = "ᠠᠷᠡᠵᠢᠰ",
        fut_3p = "ᠠᠷᠡᠨ"
          
          
     },
     },
Line 35: Line 42:
         pres_3s = "ᠡᠲ",
         pres_3s = "ᠡᠲ",
         pres_1p = "ᠡᠨᠤᠰ",
         pres_1p = "ᠡᠨᠤᠰ",
         pres_2p = "ᠡᠴᠢᠰ",
         pres_2p = "ᠡᠵᠢᠰ",
         pres_3p = "ᠡᠨ",
         pres_3p = "ᠡᠨ",


         imperfect_1s = "ᠡᠸᠠᠨ",
         imperf_1s = "ᠠᠨ",
         imperfect_2s = "ᠡᠸᠠᠰ",
         imperf_2s = "ᠠᠰ",
         imperfect_3s = "ᠡᠸᠠᠲ",
         imperf_3s = "ᠠᠲ",
         imperfect_1p = "ᠡᠸᠠᠨᠤ",
         imperf_1p = "ᠠᠨᠤᠰ",
         imperfect_2p = "ᠡᠸᠠᠵᠢᠰ",
         imperf_2p = "ᠠᠵᠢᠰ",
         imperfect_3p = "ᠡᠸᠠᠨ",
         imperf_3p = "ᠠᠨ",


         past_1s = "ᠢ",
         past_1s = "ᠢ",
Line 50: Line 57:
         past_1p = "ᠢᠨᠤᠰ",
         past_1p = "ᠢᠨᠤᠰ",
         past_2p = "ᠢᠰᠲᠢᠰ",
         past_2p = "ᠢᠰᠲᠢᠰ",
         past_3p = "ᠡᠷᠤᠨ"
         past_3p = "ᠡᠷᠤᠨ",
       
        fut_1s = "ᠡᠷᠢᠣ",
        fut_2s = "ᠡᠷᠡᠰ",
        fut_3s = "ᠡᠷᠡᠲ",
        fut_1p = "ᠡᠷᠡᠨᠤᠰ",
        fut_2p = "ᠡᠷᠡᠵᠢᠰ",
        fut_3p = "ᠡᠷᠡᠨ"
     },
     },


     ire = {
     ire = {
         pres_1s = "§1S_IRE§",
         pres_1s = "",
         pres_2s = "§2S_IRE§",
         pres_2s = "ᠢᠰ",
         pres_3s = "§3S_IRE§",
         pres_3s = "ᠢᠲ",
         pres_1p = "§1P_IRE§",
         pres_1p = "ᠢᠨᠤᠰ",
         pres_2p = "§2P_IRE§",
         pres_2p = "ᠢᠵᠢᠰ",
         pres_3p = "§3P_IRE§",
         pres_3p = "ᠢᠤᠨ",
          
          
         imperfect_1s = "§I1S_IRE§",
         imperf_1s = "ᠢᠠᠨ",
         imperfect_2s = "§I2S_IRE§",
         imperf_2s = "ᠢᠠᠰ",
         imperfect_3s = "§I3S_IRE§",
         imperf_3s = "ᠢᠠᠲ",
         imperfect_1p = "§I1P_IRE§",
         imperf_1p = "ᠢᠠᠨᠤᠰ",
         imperfect_2p = "§I2P_IRE§",
         imperf_2p = "ᠢᠠᠵᠢᠰ",
         imperfect_3p = "§I3P_IRE§",
         imperf_3p = "ᠢᠠᠨ",


         past_1s = "§P1S_IRE§",
         past_1s = "",
         past_2s = "§P2S_IRE§",
         past_2s = "ᠢᠰᠲᠢ",
         past_3s = "§P3S_IRE§",
         past_3s = "ᠢᠲ",
         past_1p = "§P1P_IRE§",
         past_1p = "ᠢᠨᠤᠰ",
         past_2p = "§P2P_IRE§",
         past_2p = "ᠢᠰᠲᠢᠰ",
         past_3p = "§P3P_IRE§"
         past_3p = "ᠢᠡᠷᠤᠨ",
       
        fut_1s = "ᠢᠷᠢᠣ",
        fut_2s = "ᠢᠷᠡᠰ",
        fut_3s = "ᠢᠷᠡᠲ",
        fut_1p = "ᠢᠷᠡᠨᠤᠰ",
        fut_2p = "ᠢᠷᠡᠵᠢᠰ",
        fut_3p = "ᠢᠷᠡᠨ"
     }
     }
}
}
Line 119: Line 140:
     ["ᠲ"] = "t",
     ["ᠲ"] = "t",
     ["ᠨ"] = "n",
     ["ᠨ"] = "n",
     ["ᠴ"] = "č"
     ["ᠴ"] = "č",
    ["ᠶ"] = "y",
    ["ᠳ"] = "d"
}
}


Line 136: Line 159:
local function make_cell(form)
local function make_cell(form)
     return "<div style='text-align:center;'>"
     return "<div style='text-align:center;'>"
         .. "[[" .. form .. "]]"
         .. "[[Contionary:" .. form .. "|" .. form .. "]]"
         .. "<br /><span style='color:#777777; font-size:90%;'>"
         .. "<br /><span style='color:#777777; font-size:90%;'>"
         .. romanize(form)
         .. romanize(form)
         .. "</span></div>"
         .. "</span></div>"
end
local function combine(stem, ending)
    if mw.ustring.match(stem, "ᠶ$") and
      mw.ustring.match(ending, "^ᠢ") then
        ending = mw.ustring.gsub(ending, "^ᠢ", "ᠡ")
    end
    return stem .. ending
end
end


Line 164: Line 198:
             forms[slot] = args[slot]
             forms[slot] = args[slot]
         else
         else
             forms[slot] = stem .. ending
             forms[slot] = combine(stem, ending)
         end
         end
     end
     end
Line 170: Line 204:
     local text =
     local text =
         '{| class="wikitable mw-collapsible mw-collapsed"\n'
         '{| class="wikitable mw-collapsible mw-collapsed"\n'
         .. '|+ Conjugation of [[' .. title .. ']] (<span style="color:#777777;">' .. romanize(title) .. '</span>)\n'
         .. '|+ Conjugation of [[Contionary:' .. title .. '|' .. title .. ']] (<span style="color:#777777;">' .. romanize(title) .. '</span>)\n'


         ----------------------------------------------------------------
         ----------------------------------------------------------------
Line 187: Line 221:


         .. '|-\n'
         .. '|-\n'
         .. '! rowspan="3" | Indicative\n'
         .. '! rowspan="4" | Indicative\n'
         .. '! Present\n'
         .. '! Present\n'
         .. '| ' .. make_cell(forms.pres_1s)
         .. '| ' .. make_cell(forms.pres_1s)
Line 203: Line 237:
         .. '|-\n'
         .. '|-\n'
         .. '! Imperfect\n'
         .. '! Imperfect\n'
         .. '| ' .. make_cell(forms.imperfect_1s)
         .. '| ' .. make_cell(forms.imperf_1s)
         .. ' || ' .. make_cell(forms.imperfect_2s)
         .. ' || ' .. make_cell(forms.imperf_2s)
         .. ' || ' .. make_cell(forms.imperfect_3s)
         .. ' || ' .. make_cell(forms.imperf_3s)
         .. ' || ' .. make_cell(forms.imperfect_1p)
         .. ' || ' .. make_cell(forms.imperf_1p)
         .. ' || ' .. make_cell(forms.imperfect_2p)
         .. ' || ' .. make_cell(forms.imperf_2p)
         .. ' || ' .. make_cell(forms.imperfect_3p)
         .. ' || ' .. make_cell(forms.imperf_3p)
         .. '\n'
         .. '\n'


Line 223: Line 257:
         .. ' || ' .. make_cell(forms.past_2p)
         .. ' || ' .. make_cell(forms.past_2p)
         .. ' || ' .. make_cell(forms.past_3p)
         .. ' || ' .. make_cell(forms.past_3p)
        .. '\n'
       
        ----------------------------------------------------------------
        -- FUTURE
        ----------------------------------------------------------------
        .. '|-\n'
        .. '! Future\n'
        .. '| ' .. make_cell(forms.fut_1s)
        .. ' || ' .. make_cell(forms.fut_2s)
        .. ' || ' .. make_cell(forms.fut_3s)
        .. ' || ' .. make_cell(forms.fut_1p)
        .. ' || ' .. make_cell(forms.fut_2p)
        .. ' || ' .. make_cell(forms.fut_3p)
         .. '\n'
         .. '\n'



Latest revision as of 17:16, 20 June 2026



local p = {}

----------------------------------------------------------------
-- ENDINGS
----------------------------------------------------------------

local endings = {
    are = {
        pres_1s = "ᠣ",
        pres_2s = "ᠠᠰ",
        pres_3s = "ᠠᠲ",
        pres_1p = "ᠠᠨᠤᠰ",
        pres_2p = "ᠠᠵᠢᠰ",
        pres_3p = "ᠠᠨ",

        imperf_1s = "ᠠᠨ",
        imperf_2s = "ᠠᠰ",
        imperf_3s = "ᠠᠲ",
        imperf_1p = "ᠠᠨᠤᠰ",
        imperf_2p = "ᠠᠵᠢᠰ",
        imperf_3p = "ᠠᠨ",

        past_1s = "ᠠᠢ",
        past_2s = "ᠠᠢᠰᠲᠢ",
        past_3s = "ᠠᠢᠲ",
        past_1p = "ᠠᠢᠨᠤᠰ",
        past_2p = "ᠠᠢᠰᠲᠢᠰ",
        past_3p = "ᠡᠷᠤᠨ",
        
        fut_1s = "ᠠᠷᠢᠣ",
        fut_2s = "ᠠᠷᠡᠰ",
        fut_3s = "ᠠᠷᠡᠲ",
        fut_1p = "ᠠᠷᠡᠨᠤᠰ",
        fut_2p = "ᠠᠷᠡᠵᠢᠰ",
        fut_3p = "ᠠᠷᠡᠨ"
        
    },

    ere = {
        pres_1s = "ᠣ",
        pres_2s = "ᠡᠰ",
        pres_3s = "ᠡᠲ",
        pres_1p = "ᠡᠨᠤᠰ",
        pres_2p = "ᠡᠵᠢᠰ",
        pres_3p = "ᠡᠨ",

        imperf_1s = "ᠠᠨ",
        imperf_2s = "ᠠᠰ",
        imperf_3s = "ᠠᠲ",
        imperf_1p = "ᠠᠨᠤᠰ",
        imperf_2p = "ᠠᠵᠢᠰ",
        imperf_3p = "ᠠᠨ",

        past_1s = "ᠢ",
        past_2s = "ᠢᠰᠲᠢ",
        past_3s = "ᠢᠲ",
        past_1p = "ᠢᠨᠤᠰ",
        past_2p = "ᠢᠰᠲᠢᠰ",
        past_3p = "ᠡᠷᠤᠨ",
        
        fut_1s = "ᠡᠷᠢᠣ",
        fut_2s = "ᠡᠷᠡᠰ",
        fut_3s = "ᠡᠷᠡᠲ",
        fut_1p = "ᠡᠷᠡᠨᠤᠰ",
        fut_2p = "ᠡᠷᠡᠵᠢᠰ",
        fut_3p = "ᠡᠷᠡᠨ"
    },

    ire = {
        pres_1s = "ᠣ",
        pres_2s = "ᠢᠰ",
        pres_3s = "ᠢᠲ",
        pres_1p = "ᠢᠨᠤᠰ",
        pres_2p = "ᠢᠵᠢᠰ",
        pres_3p = "ᠢᠤᠨ",
        
        imperf_1s = "ᠢᠠᠨ",
        imperf_2s = "ᠢᠠᠰ",
        imperf_3s = "ᠢᠠᠲ",
        imperf_1p = "ᠢᠠᠨᠤᠰ",
        imperf_2p = "ᠢᠠᠵᠢᠰ",
        imperf_3p = "ᠢᠠᠨ",

        past_1s = "ᠢ",
        past_2s = "ᠢᠰᠲᠢ",
        past_3s = "ᠢᠲ",
        past_1p = "ᠢᠨᠤᠰ",
        past_2p = "ᠢᠰᠲᠢᠰ",
        past_3p = "ᠢᠡᠷᠤᠨ",
        
        fut_1s = "ᠢᠷᠢᠣ",
        fut_2s = "ᠢᠷᠡᠰ",
        fut_3s = "ᠢᠷᠡᠲ",
        fut_1p = "ᠢᠷᠡᠨᠤᠰ",
        fut_2p = "ᠢᠷᠡᠵᠢᠰ",
        fut_3p = "ᠢᠷᠡᠨ"
    }
}

----------------------------------------------------------------
-- CLASS DETECTION
----------------------------------------------------------------

local function detect_class(title)
    if mw.ustring.match(title, "ᠠᠷᠡ$") then
        return "are"
    elseif mw.ustring.match(title, "ᠡᠷᠡ$") then
        return "ere"
    elseif mw.ustring.match(title, "ᠢᠷᠡ$") then
        return "ire"
    end
    return nil
end

local function get_stem(title, class)
    if class == "are" then
        return mw.ustring.gsub(title, "ᠠᠷᠡ$", "")
    elseif class == "ere" then
        return mw.ustring.gsub(title, "ᠡᠷᠡ$", "")
    elseif class == "ire" then
        return mw.ustring.gsub(title, "ᠢᠷᠡ$", "")
    end
    return title
end

----------------------------------------------------------------
-- TRANSLITERATION
----------------------------------------------------------------

local translit = {
    ["ᠠ"] = "a",
    ["ᠡ"] = "e",
    ["ᠢ"] = "i",
    ["ᠣ"] = "o",
    ["ᠤ"] = "u",
    ["ᠷ"] = "r",
    ["ᠸ"] = "v",
    ["ᠵ"] = "z",
    ["ᠰ"] = "s",
    ["ᠲ"] = "t",
    ["ᠨ"] = "n",
    ["ᠴ"] = "č",
    ["ᠶ"] = "y",
    ["ᠳ"] = "d"
}

local function romanize(text)
    local result = text
    for bichig, latin in pairs(translit) do
        result = mw.ustring.gsub(result, bichig, latin)
    end
    return result
end

----------------------------------------------------------------
-- DISPLAY HELPERS
----------------------------------------------------------------

local function make_cell(form)
    return "<div style='text-align:center;'>"
        .. "[[Contionary:" .. form .. "|" .. form .. "]]"
        .. "<br /><span style='color:#777777; font-size:90%;'>"
        .. romanize(form)
        .. "</span></div>"
end

local function combine(stem, ending)

    if mw.ustring.match(stem, "ᠶ$") and
       mw.ustring.match(ending, "^ᠢ") then

        ending = mw.ustring.gsub(ending, "^ᠢ", "ᠡ")
    end

    return stem .. ending
end

----------------------------------------------------------------
-- MAIN FUNCTION
----------------------------------------------------------------

function p.show(frame)

    local args = frame:getParent().args
    local title = mw.title.getCurrentTitle().text

    local class = args.class or detect_class(title)
    if not class then
        return "Error: could not determine conjugation class."
    end

    local stem = get_stem(title, class)

    local forms = {}

    for slot, ending in pairs(endings[class]) do
        if args[slot] and args[slot] ~= "" then
            forms[slot] = args[slot]
        else
            forms[slot] = combine(stem, ending)
        end
    end

    local text =
        '{| class="wikitable mw-collapsible mw-collapsed"\n'
        .. '|+ Conjugation of [[Contionary:' .. title .. '|' .. title .. ']] (<span style="color:#777777;">' .. romanize(title) .. '</span>)\n'

        ----------------------------------------------------------------
        -- HEADER
        ----------------------------------------------------------------

        .. '|-\n'
        .. '! Mood !! Tense !! colspan="3" | Singular !! colspan="3" | Plural\n'

        .. '|-\n'
        .. '!  !!  !! 1st !! 2nd !! 3rd !! 1st !! 2nd !! 3rd\n'

        ----------------------------------------------------------------
        -- PRESENT
        ----------------------------------------------------------------

        .. '|-\n'
        .. '! rowspan="4" | Indicative\n'
        .. '! Present\n'
        .. '| ' .. make_cell(forms.pres_1s)
        .. ' || ' .. make_cell(forms.pres_2s)
        .. ' || ' .. make_cell(forms.pres_3s)
        .. ' || ' .. make_cell(forms.pres_1p)
        .. ' || ' .. make_cell(forms.pres_2p)
        .. ' || ' .. make_cell(forms.pres_3p)
        .. '\n'

        ----------------------------------------------------------------
        -- IMPERFECT
        ----------------------------------------------------------------

        .. '|-\n'
        .. '! Imperfect\n'
        .. '| ' .. make_cell(forms.imperf_1s)
        .. ' || ' .. make_cell(forms.imperf_2s)
        .. ' || ' .. make_cell(forms.imperf_3s)
        .. ' || ' .. make_cell(forms.imperf_1p)
        .. ' || ' .. make_cell(forms.imperf_2p)
        .. ' || ' .. make_cell(forms.imperf_3p)
        .. '\n'

        ----------------------------------------------------------------
        -- PAST
        ----------------------------------------------------------------

        .. '|-\n'
        .. '! Past\n'
        .. '| ' .. make_cell(forms.past_1s)
        .. ' || ' .. make_cell(forms.past_2s)
        .. ' || ' .. make_cell(forms.past_3s)
        .. ' || ' .. make_cell(forms.past_1p)
        .. ' || ' .. make_cell(forms.past_2p)
        .. ' || ' .. make_cell(forms.past_3p)
        .. '\n'
        
        ----------------------------------------------------------------
        -- FUTURE
        ----------------------------------------------------------------

        .. '|-\n'
        .. '! Future\n'
        .. '| ' .. make_cell(forms.fut_1s)
        .. ' || ' .. make_cell(forms.fut_2s)
        .. ' || ' .. make_cell(forms.fut_3s)
        .. ' || ' .. make_cell(forms.fut_1p)
        .. ' || ' .. make_cell(forms.fut_2p)
        .. ' || ' .. make_cell(forms.fut_3p)
        .. '\n'

        .. '|}'

    return text
end

return p