Wiktionary
siwiktionary
https://si.wiktionary.org/wiki/%E0%B7%80%E0%B7%92%E0%B6%9A%E0%B7%8A%E0%B7%82%E0%B6%B1%E0%B6%BB%E0%B7%92:%E0%B6%B8%E0%B7%94%E0%B6%BD%E0%B7%8A_%E0%B6%B4%E0%B7%92%E0%B6%A7%E0%B7%94%E0%B7%80
MediaWiki 1.47.0-wmf.18
case-sensitive
මාධ්යය
විශේෂ
සාකච්ඡාව
පරිශීලක
පරිශීලක සාකච්ඡාව
වික්ෂනරි
වික්ෂනරි සාකච්ඡාව
ගොනුව
ගොනුව සාකච්ඡාව
මාධ්යවිකි
මාධ්යවිකි සාකච්ඡාව
සැකිල්ල
සැකිලි සාකච්ඡාව
උදවු
උදවු සාකච්ඡාව
ප්රවර්ගය
ප්රවර්ග සාකච්ඡාව
TimedText
TimedText talk
Module
Module talk
Event
Event talk
Module:grc-conj
828
122221
237180
199909
2026-07-13T19:08:36Z
en>Theknightwho
0
Add FIXME comments.
237180
Scribunto
text/plain
local export = {}
local grc_accent_module = 'Module:grc-accent'
local data = require('Module:grc-conj/data')
local concat = table.concat
local find = string.find
local gsub = string.gsub
local insert = table.insert
local ipairs = ipairs
local match = string.match
local pairs = pairs
local sort = table.sort
local toNFC = mw.ustring.toNFC
local toNFD = mw.ustring.toNFD
local ugsub = mw.ustring.gsub
local umatch = mw.ustring.match
local upper = string.upper
local usub = mw.ustring.sub
local function keys_to_list(...)
keys_to_list = require('Module:table/keysToList')
return keys_to_list(...)
end
local function list_to_set(...)
list_to_set = require('Module:table/listToSet')
return list_to_set(...)
end
local function trim(...)
trim = require('Module:string utilities').trim
return trim(...)
end
-- Functions from [[Module:grc-accent]]
local function antepenult(...)
antepenult = require(grc_accent_module).antepenult
return antepenult(...)
end
local function circ(...)
circ = require(grc_accent_module).circ
return circ(...)
end
local function pencirc(...)
pencirc = require(grc_accent_module).pencirc
return pencirc(...)
end
local function penult(...)
penult = require(grc_accent_module).penult
return penult(...)
end
local function strip_accent(...)
strip_accent = require(grc_accent_module).strip_accent
return strip_accent(...)
end
local function strip_tone(...)
strip_tone = require(grc_accent_module).strip_tone
return strip_tone(...)
end
local function ult(...)
ult = require(grc_accent_module).ult
return ult(...)
end
local word_chars = mw.loadData('Module:grc-utilities/data').word_characters .. "%-"
local word_char = "[" .. word_chars .. "]"
local word_char_with_paren = "[" .. word_chars .. "%(%)]"
--[[
Abbreviations:
- ctable, pctable: conjugation table, passive conjugation table
- pstem: passive stem
]]
local conjugations = {}
local args = {}
local tense, conjtype -- e.g. pres, pres-con-a respectively
local stem1, stem2, stem3, stem4, pstem, pstem2 -- stem2 is for non-indicative (non-augmented) aorist
local ctable, pctable
local categories = ''
-- declarations of variables that would otherwise need to be global
local code, contractnote, lang, stem
local makeconj, swapargs, dialform, dialforms_generic, dialforms_thematic,
dialforms_thematic_passive, dialforms_contracted, dialforms_aorpass,
make_table, get_title, link_form, link, make_num_header, make_rows,
make_voice_header, make_nonfin_forms, make_notes
local con_conj_vowels = {
a = 'ᾰ',
e = 'ε',
o = 'ο'
}
local contraction_symbols =
"Ê Ē É Ĵ Ĥ Ḥ Ô Ō Ó Û Ú Ŵ Ẃ Î Ī Í"
-- These symbols correspond to the following vowels:
-- ε ε έ ει η ῃ ο ο ό ου ού ω ώ οι οι οί
local contr = {
['a'] = "ᾶ ᾱ ᾱ́ ᾷ ᾶ ᾷ ῶ ω ώ ῶ ώ ῶ ώ ῷ ῳ ῴ",
['eta'] = "ῆ η ή ῇ ῆ ῇ ῶ ω ώ ῶ ώ ῶ ώ ῷ ῳ ῴ",
['e'] = "εῖ ει εί εῖ ῆ ῇ οῦ ου ού οῦ ού ῶ ώ οῖ οι οί",
['o'] = "οῦ ου ού οῖ ῶ οῖ οῦ ου ού οῦ ού ῶ ώ οῖ οι οί",
['omega'] = "ῶ ω ώ ῷ ῶ ῷ ῶ ω ώ ῶ ῶ ῶ ώ ῷ ῳ ῷ",
['e-epiion'] = "εῖ ει εί εῖ ῆ ῇ εῦ ευ εύ εῦ εύ έω εώ έοι εοι εοί",
['e-nonatt'] = "εῖ ει εί εῖ ῆ ῇ έο εο εό έου εού έω εώ έοι εοι εοί",
['e-severe'] = "ῆ η ή εῖ ῆ ῇ έο εο εό έου εού έω εώ έοι εοι εοί",
['e-severe9'] = "ῆ η ή εῖ ῆ ῇ ῐ́ο ῐο ῐό ῐ́ου ῐού ῐ́ω ῐώ ῐ́οι ῐοι ῐοί",
['e-boi'] = "εῖ ει εί εῖ εῖ εῖ ῐ́ο ῐο ῐό ῐ́ου ῐού ῐ́ω ῐώ ῐ́οι ῐοι ῐοί",
['e-mono'] = "εῖ εῖ εί εῖ έη έῃ έο εο εό έου εού έω εώ έοι εοι εοί",
}
-- Use metatable to generate a lookup table when contraction_types is indexed.
local contraction_types = setmetatable({}, {
__index = function (contraction_types, code)
local contraction_vowels = contr[code]
if not contraction_vowels then
return
end
local contraction_lookup = {}
contraction_types[code] = contraction_lookup
local get_next_contraction_symbol = mw.text.gsplit(contraction_symbols, "%s+")
for contraction_result in mw.text.gsplit(contraction_vowels, "%s+") do
contraction_lookup[get_next_contraction_symbol()] = contraction_result
end
return contraction_lookup
end
})
local perf_euph = {
{'μ[πβφ]', 'μμ','μψ','μπτ','μφθ'},
{'γ[κγχ]', 'γμ','γξ','γκτ','γχθ'},
{'[πβφ]', 'μμ','ψ', 'πτ', 'φθ'},
{'[ζτδθσ]','σμ','σ', 'στ', 'σθ'}, -- θμ is retained in perfect mediopassive of κορύσσω.
{'[κγχ]', 'γμ','ξ', 'κτ', 'χθ'},
{'ν', 'σμ','νσ','ντ', 'νθ'}, -- TODO: this is also problematic because νμ > μμ sometimes
{'λ', 'λμ','λσ','λτ', 'λθ'},
{'ρ', 'ρμ','ρσ','ρτ', 'ρθ'},
{'V', 'μ', 'σ', 'τ', 'σθ'},
}
local function get_label_display(dial)
local _get_label_info = require("Module:labels").get_label_info
lang = lang or require('Module:languages').getByCode('grc')
function get_label_display(dial)
return _get_label_info{ label = dial, lang = lang, nocat = true }.label
end
return get_label_display(dial)
end
function export.show(frame)
for k, v in pairs(frame:getParent().args) do
args[k] = trim(v)
end
-- check that the input is not malformed
for i = 2, 5 do
if args[i] then
args[i] = toNFD(args[i])
end
end
if not args[1] or args[1] == '' then
error('Parameter 1 (tense) is required. See [[Template:grc-conj/documentation]].')
elseif not find(args[1], 'irreg') then
local malformed
for i = 2, 5 do
if args[i] and args[i] ~= strip_tone(args[i]) then
malformed = malformed or {}
insert(malformed, i)
end
end
if malformed then
local plural = #malformed > 1
error('Malformed input in parameter' .. (plural and 's ' or ' ')
.. mw.text.listToText(malformed) .. ' (contains extra accents)')
end
end
conjtype = args[1]
if conjtype == 'fut-ln' then conjtype = 'fut-con-e' end
tense = conjtype:sub(1, (find(conjtype, '-') or conjtype:len()+1)-1)
stem1 = args[2] or ''
stem2 = args[3] or '' -- augment or passive
stem3 = args[4] or '' -- passive
stem4 = args[5] or '' -- augmented passive
if find(stem1, '˘') then
require('Module:debug').track('grc-conj/manual-breve')
end
if args['dial1'] then require('Module:debug').track('grc-conj/dial1') end
if args['titleapp'] then require('Module:debug').track('grc-conj/title') end
if args['titleapp'] then require('Module:debug').track('grc-conj/titleapp') end
if args['prefix'] then
require('Module:debug').track('grc-conj/prefix')
args['prefix'] = toNFD(args['prefix'])
end
if args.form then
local valid_words = list_to_set{
'con', 'open', 'act', 'mid', 'pass', 'am', 'ap', 'mp', 'full'
}
local invalid_words = require('Module:fun').filter(function(word)
return not valid_words[word]
end, mw.text.split(args.form, '%A+'), true)
if #invalid_words > 0 then
valid_words = keys_to_list(valid_words)
sort(valid_words)
error('Invalid words in |form= parameter: '
.. concat(invalid_words, ', ') .. '. Choose from '
.. concat(valid_words, ', ') .. '.')
end
else
-- Determine which voices will be displayed based on the number of stems
-- supplied and the tense.
-- The argument is named 'form' for obsolete reasons.
if tense == 'futp' then
args.form = 'mp'
elseif tense == 'fut' then
if stem2 == '' then -- passive stem missing
args.form = 'am'
elseif stem1 == '' then -- active stem missing
args.form = 'pass'
end
elseif tense == 'aor' then
if stem3 == '' then -- passive indicative stem missing
args.form = 'am'
elseif stem1 == '' then -- active indicative stem missing
args.form = 'pass'
end
elseif tense == 'perf' or tense == 'plup' then
if stem2 == '' then -- passive stem missing
args.form = 'act'
elseif stem1 == '' then -- active stem missing
args.form = 'mp'
end
end
-- default
if not args.form then
args.form = 'full'
end
end
if find(conjtype, 'con') then
local dial, out = args.dial
if (
(dial == 'att' or dial == 'koi' or dial == 'byz' or dial == 'gkm' or dial == 'epi' or dial == 'ion' or not dial) and
not find(args.form, 'con')
)then
local vowel = match(conjtype, 'con%-([aehow])%f[%z%-]')
if vowel then -- eta is too unpredictable
swapargs(1)
if dial then
args.titleapp = args.titleapp or '(' .. get_label_display(dial) .. ', uncontracted)'
else
args.titleapp = args.titleapp1 or '(Uncontracted)'
end
out = makeconj(tense, stem1 .. con_conj_vowels[vowel], stem2)
end
end
if not find(args.form, 'open') then
swapargs(2)
if dial then
args.titleapp = args.titleapp2 or '(' .. get_label_display(dial) .. ', [[Appendix:Ancient Greek contraction|contracted]])'
else
args.titleapp = args.titleapp2 or '([[Appendix:Ancient Greek contraction|Contracted]])'
end
out = (out or '') .. makeconj(conjtype, stem1, stem2)
end
return out or ''
else
return makeconj(conjtype, stem1, stem2)
end
end
local function check_conjtype(conjtype)
if not conjugations[conjtype] then
local tense_names = {
aor = 'aorist', imperf = 'imperfect', pres = 'present',
fut = 'future', perf = 'perfect', plup = 'pluperfect',
futp = 'future perfect',
}
local tense_code = match(conjtype, '^%l+')
if tense_code then
if tense_names[tense_code] then
local valid_conjugations_for_tense = require('Module:fun').filter(function(conjugation)
return match(conjugation, '^%l+') == tense_code
end, keys_to_list(conjugations), true)
sort(valid_conjugations_for_tense)
error('No such conjugation for ' .. tense_code
.. ' (' .. tense_names[tense_code]
.. ' tense); choose between '
.. concat(valid_conjugations_for_tense, ', ') .. '.')
else
tense_names = require('Module:fun').map(function(tense_code)
return tense_code .. ' (' .. tense_names[tense_code] .. ')'
end, keys_to_list(tense_names), true)
error('No such tense: ' .. tense_code .. '; choose between '
.. concat(tense_names, ', ')
.. ', optionally with a suffix (see [[Template:grc-conj/documentation]] for a full list).')
end
else
if not match(conjtype, '^%l[%l%d-]+%l$') then
error('Invalid characters in inflection: ' .. conjtype)
else
error('No such inflection: ' .. conjtype)
end
end
end
end
function makeconj(conjtype, root, root2)
check_conjtype(conjtype)
stem = root
stem2 = root2
conjugations[conjtype]()
return make_table()
end
function swapargs(suffix)
--swaps the args so that functions returning multiple tables can have any form customized
--This function has undefined behaviour if both <arg> and <arg><suffix> are
--specified; use e.g. <arg>1 and <arg>2 instead.
local args_ = args
args = {}
for code, value in pairs(args_) do
args[ugsub(code, '(.+)' .. suffix .. '$', '%1')] = value
end
end
local person_number_table = {'1S', '2S', '3S', '2D', '3D', '1P', '2P', '3P'}
local function iter_person_number()
local iter, person_number_table, i = ipairs(person_number_table)
local person_number
return function ()
i, person_number = iter(person_number_table, i)
return person_number
end
end
local dialgroups = {
['ark'] = list_to_set{'ara', 'kyp', 'ark'},
['severe'] = list_to_set{'ara', 'kyp', 'ark', 'ele', 'lak', 'her', 'kre', 'les'}, -- lesbian was omitted from §25 — by mistake?
['buck9'] = list_to_set{'boi', 'kyp', 'lak', 'her', 'kre'},
['northwest'] = list_to_set{'pho', 'del', 'lok', 'ele'},
['doric'] = list_to_set{'lak', 'her', 'meg', 'kor', 'ker', 'arg', 'rho', 'pam', 'koa', 'thr', 'kre', 'dor'},
['west'] = list_to_set{'pho', 'del', 'lok', 'ele',
'lak', 'her', 'meg', 'kor', 'ker', 'arg', 'rho', 'pam', 'koa', 'thr', 'kre', 'dor'},
['nonIA'] = list_to_set{'ara', 'kyp', 'ark',
'les', 'the', 'boi',
'pho', 'del', 'lok', 'ele',
'lak', 'her', 'meg', 'kor', 'ker', 'arg', 'rho', 'pam', 'koa', 'thr', 'kre', 'dor'},
}
-- Koine is basically the same as Attic, right?
local function not_attic(dial)
return dial and not (dial == 'att' or dial == 'koi' or dial == 'byz' or dial == 'gkm')
end
function dialform(form_code, suffix, dialect, dialect2)
if args.dial and (args.dial == dialect or
args.dial == dialect2 or
(dialgroups[dialect] and dialgroups[dialect][args.dial] ) ) then
local forms = (form_code:sub(1, 1) == 'P') and pctable or ctable
forms[form_code] = suffix
end
end
function dialforms_generic(form_code, word)
local dial = args.dial
if not word then
return word
end
-- Epic forms (not in Buck)
if dial == 'epi' and word then
word = gsub(word, 'μεθᾰ$', 'με(σ)θᾰ')
word = gsub(word, 'μεθᾰ([^ά-ώ])', 'με(σ)θᾰ%1')
-- possibly also in passive aorist (not attested)
if find(form_code, 'AS1S') then
word = gsub(word, word_char_with_paren .. '+', function(form)
return form:find('(', 1, true) and
(form .. 'μῐ / ' .. form) or
form .. '(μῐ)'
end)
elseif find(form_code, 'A[SO]2S') then
word = gsub(word, '(' .. word_char_with_paren .. '-)ς', function(form)
return form:find('(', 1, true) and
(form .. 'ς / ' .. form .. 'σθᾰ') or
form .. 'σ(θᾰ)'
end)
elseif find(form_code, 'AS3S') then
word = gsub(word, word_char_with_paren .. '+', function(form)
return form .. 'σῐ(ν) / ' .. form
end)
end
end
-- 102
if dialgroups['nonIA'][dial] then
word = gsub(word, '(σῐ)%(ν%)', '%1')
end
-- 138.1 - data unclear
-- 138.2
if match(form_code, '..3S') and dialgroups['west'][dial] then
word = gsub(word, 'σῐ', 'τῐ')
end
-- 138.3
if match(form_code, '..1P') and dialgroups['west'][dial] then
word = gsub(word, 'μεν$', 'μες')
end
-- 138.4 - can't be automated
if dial == 'boi' or dial == 'the' then
-- this is really 139.2 but it's easier to put here
word = gsub(word, 'νται$', 'νθαι')
word = gsub(word, 'ντο$', 'νθο')
end
-- 138.5 - can't be automated
-- 138.6 (or 8)
if dialgroups['nonIA'][dial] then
word = gsub(word, 'την$', 'τᾱν')
word = gsub(word, 'μην$', 'μᾱν')
word = gsub(word, 'σθην$', 'σθᾱν')
word = gsub(word, 'μένη$', 'μένᾱ')
word = gsub(word, 'Mην$', 'Mᾱν')
word = gsub(word, 'Hν$', 'Hᾱν')
word = gsub(word, 'Mένη$', 'Mένᾱ')
end
-- 139.1
if dial == 'boi' then
word = gsub(word, 'αι$', 'η')
word = gsub(word, 'αι,', 'η,')
-- elseif dial == 'the' then -- this only happened at Larissa
-- word = gsub(word, 'αι$', 'ει')
-- word = gsub(word, 'αι,', 'ει,')
elseif dial == 'ara' and match(form_code, '[MP][IS]..') then
word = gsub(word, 'αι$', 'οι')
word = gsub(word, 'αι,', 'οι,')
end
if dialgroups['ark'][dial] then
word = gsub(word, 'ο$', 'ῠ')
end
-- 139.2
if match(form_code, '[MP]O3P') and (dial == 'ion' or dial == 'epi') then
local new_word = gsub(word, 'ντο$', 'ᾰτο')
-- If the substitution occurred, there is now an extra syllable.
-- So fix accent: ἀγγελθησοίᾰτο, not ἀγγελθήσοιᾰτο.
if word ~= new_word then
word = antepenult(strip_tone(new_word))
end
end
-- ion athematic -ᾰτ-: can't be automated
-- boi -ᾰτ-: data unclear?
-- boi / the -θ-: see under 138.4.
-- 140
if form_code == 'AC3P' then
if dialgroups['ark'][dial] or (dialgroups['doric'][dial] and dial ~= 'kre') then
word = gsub(word, 'ντων$', 'ντω')
elseif dial == 'boi' then
word = gsub(word, 'ντων$', 'νθω')
elseif dial == 'the' then
word = gsub(word, 'ντων$', 'νθου')
elseif dial == 'les' or dial == 'pam' then
word = gsub(word, 'ντων$', 'ντον')
-- FIXME: όντων > ετωσᾰν etc.
-- Order ντων/ωσᾰν in Attic, but ωσᾰν/ντων in Koine.
-- elseif dial == 'late' then
-- word = gsub(word, 'ντων$', 'ντωσᾰν')
end
elseif form_code == 'MC3P' then
if dial == 'ker' or dial == 'koa' then
word = gsub(word, 'ων$', 'ω')
elseif dial == 'epd' or dial == 'lak' then
-- thematic -οσθω for -εσθων must be dealt with separately. this also apples to ato and ele
word = gsub(word, 'ων$', 'ω')
--not going to bother with corcyrian
elseif dial == 'les' or dial == 'pam' then
word = gsub(word, 'ων$', 'ον')
-- FIXME: see active form.
-- elseif dial == 'late' then
-- word = gsub(word, 'ων$', 'ωσᾰν')
end
end
-- 151: data unclear
-- 154: has to be done manually, as Attic has -ναι and -εναι; also Lesbian -ν and -μεναι
-- 160: data unclear
-- 221: I think it's probably best to fix things at around 400 BC, so CιV and ι=ει, η=αι, ει=η but υ=υ, οι=οι.
-- 60.1
if dial == 'ele' then
word = gsub(word, 'ς', 'ρ')
end
-- 66
if dial == 'pam' then
word = gsub(word, 'νται$', 'δαι')
word = gsub(word, 'ντο$', 'δο')
word = gsub(word, 'ντῐ$', 'δῐ')
end
return word
end
function dialforms_thematic()
local ult_stem = ult(stem)
if ult_stem ~= circ(stem) then
--verb ends in a long vowel
dialform('AI', 'ειν / έμεν(αι) / μεναι', 'epi')
elseif ult_stem ~= stem then
--verb ends in a [short] vowel
dialform('AI', 'ειν / έμεν(αι) / μεν(αι)', 'epi')
else
dialform('AI', 'ειν / έμεν(αι)', 'epi')
end
if not_attic(args.dial) then
ctable['MI2S'] = 'εαι'
ctable['MS2S'] = 'ηαι'
ctable['MC2S'] = 'εο'
end
dialform('MC2S', 'ῐο', 'buck9') -- 9
dialform('AS2D', 'ειτον', 'boi', 'the') -- 14
dialform('AS3D', 'ειτον', 'boi', 'the')
dialform('AS2P', 'ειτε', 'boi', 'the')
dialform('MS2S', 'είαι', 'boi', 'the')
dialform('MS3S', 'είται', 'boi', 'the')
dialform('MS2D', 'εισθον', 'boi', 'the')
dialform('MS3D', 'εισθον', 'boi', 'the')
dialform('MS2P', 'εισθε', 'boi', 'the')
dialform('AI2S', 'ῑς', 'boi') -- 28
dialform('AI3S', 'ῑ', 'boi')
dialform('AS2S', 'ῑς', 'boi') -- this is a conjecture
dialform('AS3S', 'ῑ', 'boi')
dialform('MI2S', 'εαι / ῃ', 'epi', 'ion')
dialform('MS2S', 'ηαι / ῃ', 'epi', 'ion')
dialform('MC2S', 'εο, ευ', 'epi', 'ion') -- 42.5 says ευ, but εο more common (even in Ionic)
dialform('APF', 'ῶσᾰ', 'severe', 'boi') -- 77.3
dialform('APF', 'όνσᾰ', 'kre', 'arg')
dialform('APF', 'όνσᾰ', 'the', 'ark')
dialform('APF', 'οισᾰ', 'les')
dialform('AI3P', 'οντῐ', 'west') -- 138.4
dialform('AS3P', 'ωντῐ', 'west')
dialform('AI3P', 'ονσῐ', 'ara')
dialform('AS3P', 'ωνσῐ', 'ara')
dialform('AI3P', 'ωσῐ', 'kyp')
dialform('AS3P', 'ωσῐ', 'kyp')
dialform('AI3P', 'ονθῐ', 'boi', 'the')
dialform('AS3P', 'ωνθῐ', 'boi', 'the')
dialform('AI3P', 'οισῐ', 'les')
dialform('AS3P', 'ῳσῐ', 'les')
dialform('MC3P', 'όσθω', 'epd', 'lak') -- 140
dialform('MC3P', 'ούσθω', 'ker')
dialform('MC3P', 'όσθων', 'ato', 'ele')
dialform('AS3S', 'η', 'ark') -- 149
dialform('AI', 'ην', 'les') -- 153
dialform('AI', 'εν', 'ark', 'del')
dialform('AI', 'εν', 'doric')
dialform('AI', 'ειν', 'kor', 'rho') -- exceptions to doric -εν
dialform('AI', 'ην', 'ele', 'lak')
dialform('AI', 'έμεν', 'boi', 'the') -- 155
end
function dialforms_thematic_passive()
if not_attic(args.dial) then
pctable['PI2S'] = 'ησεαι'
pctable['PS2S'] = 'ησηαι'
pctable['PC2S'] = 'ησεο'
end
dialform('PC2S', 'ησῐο', 'buck9') -- 9
dialform('PS2S', 'είαι', 'boi', 'the') -- 14
dialform('PS3S', 'είται', 'boi', 'the')
dialform('PS2D', 'εισθον', 'boi', 'the')
dialform('PS3D', 'εισθον', 'boi', 'the')
dialform('PS2P', 'εισθε', 'boi', 'the')
dialform('PI2S', 'ησεαι / ησῃ', 'epi', 'ion')
dialform('PS2S', 'ησηαι / ησῃ', 'epi', 'ion')
dialform('PC2S', 'ησεο / ησευ', 'epi', 'ion') -- 42.5 says ευ, but εο more common (even in Ionic)
dialform('PC3P', 'όσθω', 'epd', 'lak') -- 140
dialform('PC3P', 'ούσθω', 'ker')
dialform('PC3P', 'όσθων', 'ato', 'ele')
end
conjugations['pres'] = function()
ctable = data.pres
dialforms_thematic()
end
conjugations['imperf'] = function()
ctable = data.imperf
dialform('MI2S', 'εο, ευ', 'epi', 'ion')
end
function dialforms_contracted()
if not_attic(args.dial) then
-- ctable['MI2S'] = 'Êαι'
-- ctable['MS2S'] = 'Ĥαι'
-- ctable['MC2S'] = 'Êο'
ctable['AO1S'] = 'Îμῐ'
ctable['AO2S'] = 'Îς'
ctable['AO3S'] = 'Î'
ctable['AO2D'] = 'Îτον'
ctable['AO3D'] = 'Íτην'
ctable['AO1P'] = 'Îμεν'
ctable['AO2P'] = 'Îτε'
ctable['AO3P'] = 'Îεν'
end
dialform('APF', 'Ŵσᾰ', 'severe') -- 77.3
dialform('APF', 'Ôνσᾰ', 'kre', 'arg')
dialform('APF', 'Ôνσᾰ', 'the', 'ark')
-- dialform('APF', 'Îσᾰ', 'les')
dialform('AI3P', 'Ôντῐ', 'west') -- 138.4
dialform('AS3P', 'Ŵντῐ', 'west')
dialform('AI3P', 'Ôνσῐ', 'ara')
dialform('AS3P', 'Ŵνσῐ', 'ara')
dialform('AI3P', 'Ŵσῐ', 'kyp')
dialform('AS3P', 'Ŵσῐ', 'kyp')
dialform('AI3P', 'Ôνθῐ', 'boi', 'the')
dialform('AS3P', 'Ŵνθῐ', 'boi', 'the')
-- dialform('AI3P', 'Îσῐ', 'les')
-- dialform('AS3P', 'Yσῐ', 'les')
dialform('MC3P', 'Óσθω', 'epd', 'lak') -- 140
dialform('MC3P', 'Úσθω', 'ker')
dialform('MC3P', 'Óσθων', 'ato', 'ele')
dialform('AS3S', 'Ĥ', 'ark') -- 149
dialform('AI', 'Éμεν', 'boi', 'the') -- 155
end
conjugations['pres-con-a'] = function()
ctable = data.pres_contr
dialforms_contracted()
dialform('AI', 'ᾶν / ήμεναι', 'epi')
end
conjugations['imperf-con-a'] = function()
ctable = data.imperf_contr
end
conjugations['pres-con-e'] = function()
--The 'two-syllable' rule in Smyth 397 does not seem to be consistent
--(does η / ηι / οι count?), and it's unclear to what degree it applied to
--other dialects.
ctable = data.pres_contr
dialforms_contracted()
dialform('AI', 'Êν / ήμεναι / ῆναι', 'epi')
if not not_attic(args.dial) then
ctable['MI2S'] = 'Ĵ / Ḥ'
end
dialform('MI2S', 'έαι / Ĵ', 'epi', 'ion')
dialform('MC2S', 'έο / Û', 'epi', 'ion')
dialform('MPM', 'είμενος', 'northwest', 'boi')
dialform('MPF', 'ειμένᾱ', 'northwest', 'boi')
dialform('MPN', 'είμενον', 'northwest', 'boi')
end
conjugations['imperf-con-e'] = function()
ctable = data.imperf_contr
dialform('MI2S', 'έο / Û', 'epi', 'ion')
end
conjugations['pres-con-e-mono'] = function()
ctable = data.pres_contr
dialforms_contracted()
end
conjugations['imperf-con-e-mono'] = function()
ctable = data.imperf_contr
end
conjugations['pres-con-o'] = function()
ctable = data.pres_contr
dialforms_contracted()
dialform('AI', 'οῦν / ώμεναι', 'epi')
end
conjugations['imperf-con-o'] = function()
ctable = data.imperf_contr
end
conjugations['pres-con-eta'] = function()
ctable = data.pres_contr
dialforms_contracted()
end
conjugations['imperf-con-eta'] = function()
ctable = data.imperf_contr
end
conjugations['pres-con-omega'] = function()
ctable = data.pres_contr
dialforms_contracted()
end
conjugations['imperf-con-omega'] = function()
ctable = data.imperf_contr
end
conjugations['pres-irreg'] = function()
ctable = {}
local i = 2
for _, tense in ipairs{'A', 'M'} do
for _, mood in ipairs{'I', 'S', 'O', 'C'} do
for person_number in iter_person_number() do
local arg = tense .. mood .. person_number
args[arg] = args[arg] or args[i]
i = i + 1
end
end
for _, nonfinite in ipairs{'I', 'PM', 'PF', 'PN'} do
local arg = tense .. nonfinite
args[arg] = args[arg] or args[i]
i = i + 1
end
end
end
conjugations['imperf-irreg'] = function()
ctable = {}
local i = 2
for _, tense in ipairs{'A', 'M'} do
for person_number in iter_person_number() do
local arg = tense .. 'I' .. person_number
args[arg] = args[arg] or args[i]
i = i + 1
end
end
end
conjugations['fut-irreg'] = function()
ctable, pctable = {}, {}
local i = 2
for _, tense in ipairs{'A', 'M', 'P'} do
for _, mood in ipairs{'I', 'O'} do
for person_number in iter_person_number() do
local arg = tense .. mood .. person_number
args[arg] = args[arg] or args[i]
i = i + 1
end
end
for _, nonfinite in ipairs{'I', 'PM', 'PF', 'PN'} do
local arg = tense .. nonfinite
args[arg] = args[arg] or args[i]
i = i + 1
end
end
end
conjugations['pres-ami'] = function()
ctable = data.pres_ami
if not_attic(args.dial) then
-- this is never mentioned by Buck, but judging from Pharr the optative dual/plural with η is Attic only
ctable['AO2D'] = 'αῖτον'
ctable['AO3D'] = 'αίτην'
ctable['AO1P'] = 'αῖμεν'
ctable['AO2P'] = 'αῖτε'
ctable['AO3P'] = 'αῖεν'
end
dialform('AI3S', 'ησῐ(ν) / ῆ', 'epi')
dialform('AC2S', 'η / ᾰ', 'epi') -- η is contracted from αε
dialform('AI', 'ᾰ́μεν(αι)', 'epi')
dialform('MC2S', 'ᾰσο', 'nonIA')
dialform('MC2S', 'ᾰσο / ᾰο / ω', 'epi', 'ion')
-- FIXME: MC2S shouldn't contract to ω if monosyllabic, as it's the same as AS1S ῶ (e.g. φημί)
-- subjunctive seems to surprisingly end up just as Attic
dialform('APM', 'αις', 'les') -- 77.3
dialform('APF', 'αισᾰ', 'les')
dialform('APF', 'ᾰ́νσᾰ', 'kre', 'arg')
dialform('APF', 'ᾰ́νσᾰ', 'the', 'ark')
dialform('AI3P', 'ᾰντῐ', 'west') -- 138.4
dialform('AS3P', 'ῶντῐ', 'west')
dialform('AI3P', 'ᾰνσῐ', 'ara')
dialform('AS3P', 'ῶνσῐ', 'ara')
dialform('AI3P', 'ᾱσῐ', 'kyp')
dialform('AS3P', 'ῶσῐ', 'kyp')
dialform('AI3P', 'ᾰνθῐ', 'boi', 'the')
dialform('AS3P', 'ῶνθῐ', 'boi', 'the')
dialform('AI3P', 'αισῐ', 'les')
dialform('AS3P', 'ῷσῐ', 'les')
dialform('AI1S', 'ᾱμῐ', 'nonIA') -- 138.6
dialform('AI2S', 'ᾱς', 'nonIA') -- also -θα?
dialform('AI3S', 'ᾱσῐ', 'nonIA')
dialform('AI', 'ᾱν', 'les') -- 154, 155.3
dialform('AI', 'ᾰ́μεν', 'the', 'boi')
dialform('AI', 'ᾰ́μεν', 'west')
dialform('AI', 'ᾰ́μην, ᾰ́μεν', 'kre')
dialform('AI', 'ᾰ́μειν', 'rho')
dialform('AC2S', 'ᾱ', 'nonIA') -- 160 - apparently smyth says that aeolic has ᾱ
end
conjugations['imperf-ami'] = function()
ctable = data.imperf_ami
dialform('AI3P', 'ᾰν', 'nonIA') -- 138.5
dialform('AI1S', 'ᾱν', 'nonIA') -- 138.6
dialform('AI2S', 'ᾱς', 'nonIA')
dialform('AI3S', 'ᾱ', 'nonIA')
end
conjugations['pres-emi'] = function()
ctable = data.pres_emi
if not_attic(args.dial) then
-- this is never mentioned by Buck, but judging from Pharr the optative dual/plural with η is Attic only
ctable['AO2D'] = 'εῖτον'
ctable['AO3D'] = 'είτην'
ctable['AO1P'] = 'εῖμεν'
ctable['AO2P'] = 'εῖτε'
ctable['AO3P'] = 'εῖεν'
end
dialform('AI3S', 'ησῐ(ν) / εῖ', 'epi')
dialform('AI3P', 'εῖσῐ(ν)', 'epi')
dialform('AI', 'έμεν(αι)', 'epi')
dialform('MC2S', 'εσο', 'nonIA')
dialform('MC2S', 'εσο / εο / ευ', 'epi', 'ion')
dialform('AS1S', 'εω', 'nonIA')
dialform('AS2S', 'ηαι', 'nonIA')
dialform('AS1P', 'εωμεν', 'nonIA')
dialform('MS1S', 'εωμαι', 'nonIA')
dialform('MS1P', 'εωμεν', 'nonIA')
dialform('MS3P', 'εωνται', 'nonIA')
dialform('AS1S', 'ῐω', 'buck9')
dialform('AS1P', 'ῐωμεν', 'buck9')
dialform('MS1S', 'ῐωμαι', 'buck9')
dialform('MS1P', 'ῐωμεν', 'buck9')
dialform('MS3P', 'ῐωνται', 'buck9')
dialform('MO3S', 'εῖτο', 'nonIA')
dialform('MO2D', 'εῖσθον', 'nonIA')
dialform('MO3D', 'είσθην', 'nonIA')
dialform('MO1P', 'είμεθᾰ', 'nonIA')
dialform('MO2P', 'εῖσθε', 'nonIA')
dialform('MO3P', 'εῖντο', 'nonIA')
dialform('APF', 'ῆσᾰ', 'severe') -- 77.3
dialform('APF', 'ένσᾰ', 'kre', 'arg')
dialform('APF', 'ένσᾰ', 'the', 'ark')
dialform('AI3P', 'εντῐ', 'west') -- 138.4
dialform('AS3P', 'εωντῐ', 'west')
dialform('AI3P', 'ενσῐ', 'ara')
dialform('AS3P', 'εωνσῐ', 'ara')
dialform('AI3P', 'ησῐ', 'kyp')
dialform('AS3P', 'ῐωσῐ', 'kyp')
dialform('AI3P', 'ενθῐ', 'boi', 'the')
dialform('AS3P', 'ῐωνθῐ', 'boi')
dialform('AS3P', 'εωνθῐ', 'the')
dialform('AI3P', 'εισῐ', 'les')
dialform('AS3P', 'εῳσῐ', 'les')
dialform('AI', 'ην', 'les') -- 154, 155.3
dialform('AI', 'έμεν', 'the', 'boi')
dialform('AI', 'έμεν', 'west')
dialform('AI', 'έμην, έμεν', 'kre')
dialform('AI', 'έμειν', 'rho')
end
conjugations['imperf-emi'] = function()
ctable = data.imperf_emi
dialform('AI3P', 'εν', 'nonIA') -- 138.5
dialform('AI3P', 'εᾰν', 'boi', 'kyp')
dialform('AI1S', 'ην', 'nonIA') -- 160
dialform('AI2S', 'ης', 'nonIA')
dialform('AI3S', 'η', 'nonIA')
end
conjugations['pres-omi'] = function()
ctable = data.pres_omi
if not_attic(args.dial) then
-- this is never mentioned by Buck, but judging from Pharr the optative dual/plural with η is Attic only
ctable['AO2D'] = 'οῖτον'
ctable['AO3D'] = 'οίτην'
ctable['AO1P'] = 'οῖμεν'
ctable['AO2P'] = 'οῖτε'
ctable['AO3P'] = 'οῖεν'
end
dialform('AI3S', 'ωσῐ(ν) / οῖ', 'epi')
dialform('AI3P', 'οῦσῐ(ν)', 'epi')
dialform('AI', 'όμεν(αι)', 'epi')
dialform('MC2S', 'οσο', 'nonIA')
dialform('MC2S', 'οσο / οο / ου', 'epi', 'ion')
dialform('APF', 'ῶσᾰ', 'severe', 'boi') -- 77.3
dialform('APF', 'όνσᾰ', 'kre', 'arg')
dialform('APF', 'όνσᾰ', 'the', 'ark')
dialform('APM', 'οις', 'les')
dialform('APF', 'οισᾰ', 'les')
dialform('AI3P', 'οντῐ', 'west') -- 138.4
dialform('AS3P', 'ῶντῐ', 'west')
dialform('AI3P', 'ονσῐ', 'ara')
dialform('AS3P', 'ῶνσῐ', 'ara')
dialform('AI3P', 'ωσῐ', 'kyp')
dialform('AS3P', 'ῶσῐ', 'kyp')
dialform('AI3P', 'ονθῐ', 'boi', 'the')
dialform('AS3P', 'ῶνθῐ', 'boi', 'the')
dialform('AI3P', 'οισῐ', 'les')
dialform('AS3P', 'ῳσῐ', 'les')
dialform('AI', 'ων', 'les') -- 154, 155.3
dialform('AI', 'όμεν', 'the', 'boi')
dialform('AI', 'όμεν', 'west')
dialform('AI', 'όμην, όμεν', 'kre')
dialform('AI', 'όμειν', 'rho')
-- dialform('AI2S', 'οις', 'les') -- also -θα?
end
conjugations['imperf-omi'] = function()
ctable = data.imperf_omi
dialform('AI3P', 'ον', 'nonIA') -- 138.5
dialform('AI3P', 'οᾰν', 'boi', 'kyp')
dialform('AI1S', 'ων', 'nonIA') -- 160
dialform('AI2S', 'ως', 'nonIA')
dialform('AI3S', 'ω', 'nonIA')
end
local function pres_umi(init)
dialform('APF', init .. 'υισᾰ', 'les') -- 77.3
dialform('APF', init .. 'ῠ́νσᾰ', 'kre', 'arg')
dialform('APF', init .. 'ῠ́νσᾰ', 'the', 'ark')
dialform('AI3P', init .. 'ῠντῐ', 'west') -- 138.4
dialform('AI3P', init .. 'ῠνσῐ', 'ara')
dialform('AI3P', init .. 'ῡσῐ', 'kyp')
dialform('AI3P', init .. 'ῠνθῐ', 'boi', 'the')
dialform('AI3P', init .. 'υισῐ', 'les')
dialform('AS3P', init .. 'ῠωντῐ', 'west')
dialform('AS3P', init .. 'ῠωνσῐ', 'ara')
dialform('AS3P', init .. 'ῠωσῐ', 'kyp')
dialform('AS3P', init .. 'ῠωνθῐ', 'boi', 'the')
dialform('AS3P', init .. 'ῠῳσῐ', 'les')
dialform('AI', init .. 'ῡν', 'les') -- 154, 155.3
dialform('AI', init .. 'ῠ́μεν', 'the', 'boi')
dialform('AI', init .. 'ῠ́μεν', 'west')
dialform('AI', init .. 'ῠ́μην/' .. init .. 'ῠ́μεν', 'kre')
dialform('AI', init .. 'ῠ́μειν', 'rho')
end
conjugations['pres-numi'] = function()
ctable = data.pres_numi
pres_umi('ν')
end
conjugations['pres-lumi'] = function()
ctable = data.pres_lumi
pres_umi('λ')
end
local function imperf_umi(init)
dialform('AI1S', init .. 'ῠον/' .. init .. 'ῡν', 'epi', 'ion')
dialform('AI2S', init .. 'ῠες/' .. init .. 'ῡς', 'epi', 'ion')
dialform('AI3S', init .. 'ῠε/' .. init .. 'ῡ', 'epi', 'ion')
dialform('AI3P', init .. 'ῠν', 'nonIA') -- 138.5
dialform('AI3P', init .. 'ῠᾰν', 'boi', 'kyp')
end
conjugations['imperf-numi'] = function()
ctable = data.imperf_numi
imperf_umi('ν')
end
conjugations['imperf-lumi'] = function()
ctable = data.imperf_lumi
imperf_umi('λ')
end
conjugations['fut'] = function()
ctable = data.pres
pctable = data.fut_pass
pstem = stem2
dialforms_thematic()
dialforms_thematic_passive()
end
conjugations['fut-con-a'] = function()
ctable = data.pres_contr
pctable = data.fut_pass
pstem = stem2
dialforms_contracted()
dialform('AI', 'ᾶν / ήμεναι', 'epi')
end
conjugations['fut-con-e'] = function()
ctable = data.pres_contr
pctable = data.fut_pass
pstem = stem2
dialforms_contracted()
dialform('AI', 'Êν / ήμεναι / ῆναι', 'epi')
if not not_attic(args.dial) then
ctable['MI2S'] = 'Ĵ / Ḥ'
end
dialform('MI2S', 'έαι / Ĵ', 'epi', 'ion')
dialform('MC2S', 'έο / Û', 'epi', 'ion')
dialform('MPM', 'είμενος', 'northwest', 'boi')
dialform('MPF', 'ειμένᾱ', 'northwest', 'boi')
dialform('MPN', 'είμενον', 'northwest', 'boi')
end
conjugations['futp'] = function()
ctable = data.pres
dialforms_thematic()
end
function dialforms_aorpass()
if usub(pstem, -1) == 'θ' then
pctable['PC2S'] = 'ητῐ'
end
if not_attic(args.dial) then
-- this is never mentioned by Buck, but judging from Pharr the optative dual/plural with η is Attic only
pctable['PO2D'] = 'εῖτον'
pctable['PO3D'] = 'είτην'
pctable['PO1P'] = 'εῖμεν'
pctable['PO2P'] = 'εῖτε'
pctable['PO3P'] = 'εῖεν'
end
dialform('PI3P', 'ησᾰν, εν', 'epi')
dialform('PI', 'ῆναι / ήμεναι', 'epi')
dialform('PPF', 'ῆσᾰ', 'severe') -- 77.3
dialform('PPF', 'ένσᾰ', 'kre', 'arg')
dialform('PPF', 'ένσᾰ', 'the', 'ark')
dialform('PPF', 'εισᾰ', 'les')
dialform('PS3P', 'εωντῐ', 'west') -- 138.4
dialform('PS3P', 'εωνσῐ', 'ara')
dialform('PS3P', 'ῐωσῐ', 'kyp')
dialform('PS3P', 'ῐωνθῐ', 'boi')
dialform('PS3P', 'εωνθῐ', 'the')
dialform('PS3P', 'εῳσῐ', 'les')
dialform('PI3P', 'εν', 'nonIA') -- 138.5
dialform('PI', 'ην', 'les') -- 154, 155.3
dialform('PI', 'ῆμεν', 'the', 'boi')
dialform('PI', 'ῆμεν', 'west')
dialform('PI', 'ήμην, ῆμεν', 'kre')
dialform('PI', 'ήμειν', 'rho')
end
conjugations['aor-1'] = function()
ctable = data.aor_1
pctable = data.aor_pass
pstem = stem3
pstem2 = stem4
if not_attic(args.dial) then
ctable['MS2S'] = 'ηαι'
end
dialform('AO2S', 'αις / ειᾰς', 'epi')
dialform('AI', 'αι / ᾰμεν(αι)', 'epi')
dialform('MO3P', 'αίᾰτο', 'epi')
dialform('MI2S', 'ᾰο', 'epi')
-- short-vowel subjunctives for Epic; no doubt Homer originally had -ονται and -εσθε here,
-- but this was 'corrected' to Attic forms (not making a difference metrically), see Chantraine's Grammaire homérique I.454
dialform('AS2D', 'ητον / ετον', 'epi')
dialform('AS3D', 'ητον / ετον', 'epi')
dialform('AS1P', 'ωμεν / ομεν', 'epi')
dialform('AS2P', 'ητε / ετε', 'epi')
dialform('MS1S', 'ωμαι / ομαι', 'epi')
dialform('MS2S', 'εαι / ῃ', 'epi')
dialform('MS3S', 'ηται / εται', 'epi')
dialform('MS1P', 'ώμεθᾰ / όμεθᾰ', 'epi')
dialform('APM', 'αις', 'les') -- 77.3
dialform('APF', 'αισᾰ', 'les')
dialform('APF', 'ᾰ́νσᾰ', 'kre', 'arg')
dialform('APF', 'ᾰ́νσᾰ', 'the', 'ark')
dialform('AS3P', 'ωντῐ', 'west') -- 138.4
dialform('AS3P', 'ωνσῐ', 'ara')
dialform('AS3P', 'ωσῐ', 'kyp')
dialform('AS3P', 'ωνθῐ', 'boi', 'the')
dialform('AS2S', 'εις', 'les', 'kre') -- 150 (this is also East Ionic, which we don't have a code for)
dialform('AS3S', 'ει', 'les', 'kre')
dialform('AS2D', 'ετον', 'les', 'kre')
dialform('AS3D', 'ετον', 'les', 'kre')
dialform('AS1P', 'ομεν', 'les', 'kre')
dialform('AS2P', 'ετε', 'les', 'kre')
dialform('AS3P', 'οισῐ', 'les')
dialform('AS3P', 'οντῐ', 'kre')
dialform('MS1S', 'ομαι', 'les', 'kre')
dialform('MS2S', 'εαι', 'les', 'kre')
dialform('MS3S', 'εται', 'les', 'kre')
dialform('MS2D', 'εσθον', 'les', 'kre')
dialform('MS3D', 'εσθον', 'les', 'kre')
dialform('MS1P', 'ομεθᾰ', 'les', 'kre')
dialform('MS2P', 'εσθε', 'les', 'kre')
dialform('MS3P', 'ονται', 'les', 'kre')
dialform('AO2S', 'αις', 'nonIA') -- 152.4
dialform('AO3S', 'αι', 'nonIA')
dialform('AO3P', 'αιεν', 'nonIA')
-- dialform('AI', 'ειν', 'the') -- 156 - marked with (Larissa)
dialforms_aorpass()
end
conjugations['aor-2'] = function()
ctable = data.aor_2
pctable = data.aor_pass
pstem = stem3
pstem2 = stem4
-- not used:
-- local mono = (ult(stem2) == stem2)
if not_attic(args.dial) then
ctable['MI2S'] = 'εο'
ctable['MS2S'] = 'ηαι'
ctable['MC2S'] = 'εο' -- assuming from 426c that perispomenon only applies when contracted
end
dialform('AI', 'έεν/εῖν/έειν/έμεν(αι)', 'epi')
dialform('MO3P', 'οίᾰτο', 'epi')
dialform('MI2S', 'ῐο', 'buck9') -- 9
dialform('MC2S', 'ῐο', 'buck9')
dialform('AS2D', 'ειτον', 'boi', 'the') -- 14
dialform('AS3D', 'ειτον', 'boi', 'the')
dialform('AS2P', 'ειτε', 'boi', 'the')
dialform('MS2S', 'είαι', 'boi', 'the')
dialform('MS3S', 'είται', 'boi', 'the')
dialform('MS2D', 'εισθον', 'boi', 'the')
dialform('MS3D', 'εισθον', 'boi', 'the')
dialform('MS2P', 'εισθε', 'boi', 'the')
dialform('AI2S', 'ῑς', 'boi') -- 28
dialform('AI3S', 'ῑ', 'boi')
dialform('AS2S', 'ῑς', 'boi') -- this is a conjecture
dialform('AS3S', 'ῑ', 'boi')
dialform('MI2S', 'εο / ευ', 'epi', 'ion') -- 42.5
dialform('MC2S', 'εο / ευ', 'epi', 'ion')
dialform('APF', 'ῶσᾰ', 'severe', 'boi') -- 77.3
dialform('APF', 'όνσᾰ', 'kre', 'arg')
dialform('APF', 'όνσᾰ', 'the', 'ark')
dialform('APF', 'οισᾰ', 'les')
dialform('AS3P', 'ωντῐ', 'west') -- 138.4
dialform('AS3P', 'ωνσῐ', 'ara')
dialform('AS3P', 'ωσῐ', 'kyp')
dialform('AS3P', 'ωνθῐ', 'boi', 'the')
dialform('AS3P', 'ῳσῐ', 'les')
dialform('MC3P', 'όσθω', 'epd', 'lak') -- 140
dialform('MC3P', 'ούσθω', 'ker')
dialform('MC3P', 'όσθων', 'ato', 'ele')
dialform('AS3S', 'η', 'ark') -- 149
dialform('AI', 'ην', 'les') -- 153
dialform('AI', 'εν', 'ark', 'del')
dialform('AI', 'εν', 'doric')
dialform('AI', 'ειν', 'kor', 'rho') -- exceptions to doric -εν
dialform('AI', 'ην', 'ele', 'lak')
dialform('AI', 'έμεν', 'boi', 'the') -- 155
dialforms_aorpass()
end
conjugations['aor-emi'] = function()
ctable = data.aor_emi
pctable = data.aor_pass
pstem = stem3
pstem2 = stem4
if not_attic(args.dial) then
-- this is never mentioned by Buck, but judging from Pharr the optative dual/plural with η is Attic only
ctable['AO2D'] = 'εῖτον'
ctable['AO3D'] = 'είτην'
ctable['AO1P'] = 'εῖμεν'
ctable['AO2P'] = 'εῖτε'
ctable['AO3P'] = 'εῖεν'
end
dialform('AI', 'έμεν(αι)', 'epi')
dialform('AS1S', 'εω', 'nonIA')
dialform('AS2S', 'ηαι', 'nonIA')
dialform('AS1P', 'εωμεν', 'nonIA')
dialform('MS1S', 'εωμαι', 'nonIA')
dialform('MS1P', 'εωμεν', 'nonIA')
dialform('MS3P', 'εωνται', 'nonIA')
dialform('AS1S', 'ῐω', 'buck9')
dialform('AS1P', 'ῐωμεν', 'buck9')
dialform('MS1S', 'ῐωμαι', 'buck9')
dialform('MS1P', 'ῐωμεν', 'buck9')
dialform('MS3P', 'ῐωνται', 'buck9')
dialform('MO3S', 'εῖτο', 'nonIA')
dialform('MO2D', 'εῖσθον', 'nonIA')
dialform('MO3D', 'είσθην', 'nonIA')
dialform('MO1P', 'είμεθᾰ', 'nonIA')
dialform('MO2P', 'εῖσθε', 'nonIA')
dialform('MO3P', 'εῖντο', 'nonIA')
dialform('APF', 'ῆσᾰ', 'severe') -- 77.3
dialform('APF', 'ένσᾰ', 'kre', 'arg')
dialform('APF', 'ένσᾰ', 'the', 'ark')
dialform('AS3P', 'εωντῐ', 'west') -- 138.4
dialform('AS3P', 'εωνσῐ', 'ara')
dialform('AS3P', 'ῐωσῐ', 'kyp')
dialform('AS3P', 'ῐωνθῐ', 'boi')
dialform('AS3P', 'εωνθῐ', 'the')
dialform('AS3P', 'εῳσῐ', 'les')
dialform('AI3P', 'εν', 'nonIA') -- 138.5
dialform('AI', 'έμεναι', 'les') -- 154
dialform('AI', 'έμεν', 'the', 'boi')
dialform('AI', 'έμεν', 'west')
dialform('AI', 'έμην, έμεν', 'kre')
dialform('AI', 'έμειν', 'rho')
end
conjugations['aor-omi'] = function()
ctable = data.aor_omi
pctable = data.aor_pass
pstem = stem3
pstem2 = stem4
if not_attic(args.dial) then
-- this is never mentioned by Buck, but judging from Pharr the optative dual/plural with η is Attic only
ctable['AO2D'] = 'οῖτον'
ctable['AO3D'] = 'οίτην'
ctable['AO1P'] = 'οῖμεν'
ctable['AO2P'] = 'οῖτε'
ctable['AO3P'] = 'οῖεν'
end
dialform('AI', 'όμεν(αι)', 'epi')
dialform('APF', 'ῶσᾰ', 'severe', 'boi') -- 77.3
dialform('APF', 'όνσᾰ', 'kre', 'arg')
dialform('APF', 'όνσᾰ', 'the', 'ark')
dialform('APM', 'οις', 'les')
dialform('APF', 'οισᾰ', 'les')
dialform('AS3P', 'ῶντῐ', 'west') -- 138.4
dialform('AS3P', 'ῶνσῐ', 'ara')
dialform('AS3P', 'ῶσῐ', 'kyp')
dialform('AS3P', 'ῶνθῐ', 'boi', 'the')
dialform('AS3P', 'ῳσῐ', 'les')
dialform('AI3P', 'ον', 'nonIA') -- 138.5
dialform('AI', 'όμεναι', 'les') -- 154
dialform('AI', 'όμεν', 'the', 'boi')
dialform('AI', 'όμεν', 'west')
dialform('AI', 'όμην, όμεν', 'kre')
dialform('AI', 'όμειν', 'rho')
end
conjugations['aor-amiw'] = function()
require('Module:debug').track('grc-conj/aor-amiw')
ctable = data.aor_amiw
pctable = data.aor_pass
pstem = stem3
pstem2 = stem4
if not_attic(args.dial) then
-- this is never mentioned by Buck, but judging from Pharr the optative dual/plural with η is Attic only
ctable['AO2D'] = 'αῖτον'
ctable['AO3D'] = 'αίτην'
ctable['AO1P'] = 'αῖμεν'
ctable['AO2P'] = 'αῖτε'
ctable['AO3P'] = 'αῖεν'
end
dialform('APF', 'ᾰ́νσᾰ', 'kre', 'arg') -- 77.3
dialform('APF', 'ᾰ́νσᾰ', 'the', 'ark')
dialform('APM', 'αις', 'les')
dialform('APF', 'αισᾰ', 'les')
dialform('AS3P', 'ῶντῐ', 'west') -- 138.4
dialform('AS3P', 'ῶνσῐ', 'ara')
dialform('AS3P', 'ῶσῐ', 'kyp')
dialform('AS3P', 'ῶνθῐ', 'boi', 'the')
dialform('AS3P', 'ῳσῐ', 'les')
dialform('AI3P', 'ᾰν', 'nonIA') -- 138.5
dialform('AI', 'ᾰ́μεναι', 'les') -- 154
dialform('AI', 'ᾰ́μεν', 'the', 'boi')
dialform('AI', 'ᾰ́μεν', 'west')
dialform('AI', 'ᾰ́μην, ᾰ́μεν', 'kre')
dialform('AI', 'ᾰ́μειν', 'rho')
end
conjugations['aor-ami'] = function()
require('Module:debug').track('grc-conj/aor-ami')
ctable = data.aor_ami
pctable = data.aor_pass
pstem = stem3
pstem2 = stem4
if not_attic(args.dial) then
-- this is never mentioned by Buck, but judging from Pharr the optative dual/plural with η is Attic only
ctable['AO2D'] = 'αῖτον'
ctable['AO3D'] = 'αίτην'
ctable['AO1P'] = 'αῖμεν'
ctable['AO2P'] = 'αῖτε'
ctable['AO3P'] = 'αῖεν'
end
dialform('AI', 'ᾰ́μεν(αι)', 'epi')
end
conjugations['aor-hmi'] = function()
require('Module:debug').track('grc-conj/aor-hmi')
ctable = data.aor_hmi
pctable = data.aor_pass
pstem = stem3
pstem2 = stem4
end
conjugations['aor-wmi'] = function()
ctable = data.aor_wmi
pctable = data.aor_pass
pstem = stem3
pstem2 = stem4
if not_attic(args.dial) then
-- this is never mentioned by Buck, but judging from Pharr the optative dual/plural with η is Attic only
ctable['AO2D'] = 'οῖτον'
ctable['AO3D'] = 'οίτην'
ctable['AO1P'] = 'οῖμεν'
ctable['AO2P'] = 'οῖτε'
ctable['AO3P'] = 'οῖεν'
end
dialform('AI', 'ῶμεν / ώμεναι', 'epi')
dialform('APF', 'ῶσᾰ', 'severe', 'boi') -- 77.3
dialform('APF', 'όνσᾰ', 'kre', 'arg')
dialform('APF', 'όνσᾰ', 'the', 'ark')
dialform('APM', 'οις', 'les')
dialform('APF', 'οισᾰ', 'les')
dialform('AS3P', 'ῶντῐ', 'west') -- 138.4
dialform('AS3P', 'ῶνσῐ', 'ara')
dialform('AS3P', 'ῶσῐ', 'kyp')
dialform('AS3P', 'ῶνθῐ', 'boi', 'the')
dialform('AS3P', 'ῳσῐ', 'les')
dialform('AI3P', 'ον', 'nonIA') -- 138.5
dialform('AI', 'ώμεναι', 'les') -- 154
dialform('AI', 'ῶμεν', 'the', 'boi')
dialform('AI', 'ῶμεν', 'west')
dialform('AI', 'ώμην, ῶμεν', 'kre')
dialform('AI', 'ώμειν', 'rho')
end
conjugations['aor-numi'] = function()
ctable = data.aor_numi
pctable = data.aor_pass
pstem = stem3
pstem2 = stem4
end
conjugations['aor-hiemi-comp'] = function()
ctable = data.aor_hiemic
pctable = data.aor_pass
pstem = stem3
pstem2 = stem4
end
conjugations['aor-irreg'] = function()
ctable = {}
-- no aor-irregs have passive forms so we should be fine
local i = 2
for _, mood in ipairs({'I', 'S', 'O', 'C'}) do
for person_number in iter_person_number() do
args['A' .. mood .. person_number] = args['A' .. mood .. person_number] or args[i]
i = i + 1
end
end
args['AI'] = args['AI'] or args[34]
args['APM'] = args['APM'] or args[35]
args['APF'] = args['APF'] or args[36]
args['APN'] = args['APN'] or args[37]
end
conjugations['perf'] = function()
ctable = data.perf
pstem = stem2
if umatch(strip_accent(pstem), '[αεηιουω]$') then
pstem = pstem .. 'V'
ctable['MI3P'] = 'νται'
end
-- FIXME: In the dual and plural, the second form (εἶμεν for instance)
-- is Attic and shouldn't be displayed in Ionic or Epic tables.
local to_be_forms = {
['S1S']='ὦ',
['S2S']='ᾖς',
['S3S']='ᾖ',
['S2D']='ἦτον',
['S3D']='ἦτον',
['S1P']='ὦμεν',
['S2P']='ἦτε',
['S3P']='ὦσῐ(ν)',
['O1S']='εἴην',
['O2S']='εἴης',
['O3S']='εἴη',
['O2D']='εἴητον / εἶτον',
['O3D']='εἰήτην / εἴτην',
['O1P']='εἴημεν / εἶμεν',
['O2P']='εἴητε / εἶτε',
['O3P']='εἴησᾰν / εἶεν',
}
local mediopassive_participle = args['MPM'] and '*' .. args['MPM'] or ctable['MPM']
local mediopassive_participle_stem = gsub(mediopassive_participle, 'ος$', '')
if args['MPM'] then
ctable['MPM'] = mediopassive_participle
end
ctable['MPF'] = mediopassive_participle_stem .. 'η'
ctable['MPN'] = mediopassive_participle_stem .. 'ον'
args['MPM'], args['MPF'], args['MPN'] = nil, nil, nil
for code, form in pairs(to_be_forms) do
local number = code:sub(-1)
local ending = number == 'S' and 'ος'
or number == 'D' and 'ω'
or 'οι'
-- No accent modification needed in the dual
-- because the perfect passive participle has a non-recessive accent,
-- on the penult.
-- Add * to suppress addition of stem.
local to_be_form = ugsub(
form,
'(()' .. word_char .. '+)',
function(all, pos)
-- Avoid adding * before ν in ὦσῐ(ν).
local prec = pos - 1
local preceding = usub(form, prec, prec)
if preceding == '(' or match(preceding, '%a') then
return all
end
return '*' .. all
end)
ctable['M' .. code] = mediopassive_participle_stem .. ending .. ' ' .. to_be_form
end
--active not found in Homer
dialform('AI3P', 'ᾰτῐ, ᾰντῐ', 'west') -- 138.4, but no clear distinction?
dialform('AI3P', 'ᾰσῐ', 'ark')
dialform('AI3P', 'ᾰνθῐ', 'boi', 'the')
dialform('AS3P', 'ωντῐ', 'west') -- 138.4
dialform('AS3P', 'ωνσῐ', 'ara')
dialform('AS3P', 'ωσῐ', 'kyp')
dialform('AS3P', 'ωνθῐ', 'boi', 'the')
dialform('AS3P', 'ῳσῐ', 'les')
dialform('AI', 'ην', 'les') -- 147.2
dialform('AI', 'εν', 'del', 'kre')
dialform('AI', 'ειν', 'rho', 'epd')
dialform('APM', 'ων', 'aio') -- 147.3
dialform('APF', 'οισᾰ', 'les')
dialform('APF', 'ονσᾰ', 'the')
dialform('APF', 'ωσᾰ', 'boi')
dialform('APN', 'ον', 'aio')
end
conjugations['plup'] = function()
ctable = data.plup
pstem = stem2
if umatch(strip_accent(pstem), '[αεηιουω]$') then
pstem = pstem .. 'V'
ctable['MI3P'] = 'ντο'
end
dialform('AI1S', 'εεν/ειν/εᾰ', 'epi', 'ion')
dialform('AI2S', 'εες/εις/εᾰς/ης', 'epi')
dialform('AI2S', 'εες/εις/εᾰς', 'ion')
dialform('AI3S', 'εε(ν)/ει(ν)', 'epi')
dialform('AI3S', 'εε/ει', 'ion')
dialform('AI3S', 'εν', 'nonIA')
dialform('AI1P', 'εμεν/ειμεν', 'koi')
dialform('AI2P', 'ετε/ειτε', 'koi')
dialform('AI3P', 'εσᾰν/εν', 'epi')
dialform('AI3P', 'εσᾰν/εισᾰν', 'koi')
dialform('AI3P', 'εσᾰν', 'nonIA')
end
conjugations['perf-ami'] = function()
ctable = data.perf_ami
if not_attic(args.dial) then
-- this is never mentioned by Buck, but judging from Pharr the optative dual/plural with η is Attic only
ctable['AO2D'] = 'αῖτον'
ctable['AO3D'] = 'αίτην'
ctable['AO1P'] = 'αῖμεν'
ctable['AO2P'] = 'αῖτε'
ctable['AO3P'] = 'αῖεν'
end
dialform('AI', 'ᾰ́μεν(αι)', 'epi')
dialform('APM', 'ᾰώς', 'epi')
dialform('APF', 'ᾰϋῖᾰ', 'epi') -- pharr and smyth disagree here
dialform('APN', 'ᾰός', 'epi')
end
conjugations['plup-ami'] = function()
ctable = data.plup_ami
end
conjugations['perf-irreg'] = function()
ctable = {}
-- no perf-irregs have passive forms so we should be fine
local i = 2
for _, mood in ipairs({'I', 'S', 'O', 'C'}) do
for person_number in iter_person_number() do
args['A' .. mood .. person_number] = args['A' .. mood .. person_number] or args[i]
i = i + 1
end
end
args['AI'] = args['AI'] or args[34]
args['APM'] = args['APM'] or args[35]
args['APF'] = args['APF'] or args[36]
args['APN'] = args['APN'] or args[37]
end
conjugations['plup-irreg'] = function()
ctable = {}
local i = 2
for person_number in iter_person_number() do
args['AI' .. person_number] = args['AI' .. person_number] or args[i]
i = i + 1
end
end
-- Functions for generating the inflection table
local aliases = {
['pres'] = 'Present',
['imperf'] = 'Imperfect',
['fut'] = 'Future',
['aor'] = 'Aorist',
['perf'] = 'Perfect',
['plup'] = 'Pluperfect',
['futp'] = 'Future perfect',
['active'] = 'A',
['middle'] = 'M',
['passive'] = 'P',
['middle/<wbr>passive'] = 'M',
['I'] = 'indicative',
['S'] = 'subjunctive',
['O'] = 'optative',
['C'] = 'imperative',
}
local moods = {
['pres'] = {'I', 'S', 'O', 'C'},
['imperf'] = {'I'},
['fut'] = {'I', 'O'},
['aor'] = {'I', 'S', 'O', 'C'},
['perf'] = {'I', 'S', 'O', 'C'},
['plup'] = {'I'},
['futp'] = {'I', 'O'},
}
local voices
local full_tense_name = {
pres = 'present',
imperf = 'imperfect',
fut = 'future',
aor = 'aorist',
perf = 'perfect',
plup = 'pluperfect',
futp = 'future-perfect',
}
local function get_tense_class(tense)
return 'grc-conj-' .. full_tense_name[tense]
end
-- Make the table
function make_table()
local form = args.form
voices = {'active', 'middle/<wbr>passive'}
if find(form, 'act') then
voices = {'active'}
elseif find(form, 'mid') then
voices = {'middle'}
elseif find(form, 'pass') then
voices = {'passive'}
elseif find(form, 'am') then
voices = {'active', 'middle'}
elseif find(form, 'ap') then
voices = {'active', 'passive'}
elseif tense == 'fut' or tense == 'aor' then
if find(form, 'mp') then
voices = {'middle', 'passive'}
else
voices = {'active', 'middle', 'passive'}
end
elseif find(form, 'mp') then
voices = {'middle/<wbr>passive'}
end
if tense ~= 'fut' and tense ~= 'aor' then
aliases['passive'] = 'M'
end
local dial, dialtitle = args.dial
if dial then
dialtitle = "(" .. get_label_display(args.dial) .. ")"
end
return require('Module:TemplateStyles')('Module:grc-conj/style.css')
.. [=[<div class="NavFrame">
<div class="NavHead"> ]=] .. aliases[tense] .. ': '
.. get_title(args.title) .. ' ' .. (args['titleapp'] or dialtitle or '') .. [=[</div>
<div class="NavContent">
<div class="center">
{| class="grc-conj ]=] .. get_tense_class(tense) .. [=["
|-
! colspan="2" class="grc-conj-number" | number
! colspan="3" class="grc-conj-number" | singular
! colspan="2" class="grc-conj-number" | dual
! colspan="3" class="grc-conj-number" | plural
]=] .. make_num_header() .. make_rows() .. make_voice_header() .. make_nonfin_forms() .. make_notes() .. [=[
|}
</div></div></div>]=] .. categories
end
function get_title(title_spec)
if title_spec ~= nil then
return title_spec
end
local title = {}
if conjtype == 'aor-emi' or conjtype == 'aor-omi' or conjtype == 'perf-ami' or conjtype == 'plup-ami' then
insert(title, link_form('AI2D', 'true'))
end
for _, voice in ipairs(voices) do
insert(title, link_form(aliases[voice] .. 'I1S', true) )
end
return concat(title, ", ")
end
local function full_link(term, alt, accel)
local _full_link = require('Module:links').full_link
lang = lang or require('Module:languages').getByCode('grc')
function full_link(term, alt, accel)
return _full_link{ lang = lang, term = term, alt = alt, tr = '-', accel = accel }
end
return full_link(term, alt, accel)
end
local target = nil
local get_contraction_map = require("Module:memoize")(function (conjugation_code)
if find(conjugation_code, 'con') then
local dial = args.dial
local vowel = match(conjugation_code, 'con%-(%a+)')
local contraction_type
if vowel == 'a' then
if dial == 'boi' or dialgroups['west'][dial] then
contraction_type = 'eta'
else
contraction_type = 'a'
end
elseif vowel == 'e' then
if not not_attic(dial) then
contraction_type = 'e'
elseif dial == 'epi' or dial == 'ion' then
contraction_type = 'e-epiion'
elseif dial == 'boi' then
contraction_type = 'e-boi'
elseif dialgroups['buck9'][dial] then
contraction_type = 'e-severe9'
elseif dialgroups['severe'][args.dial] then
contraction_type = 'e-severe'
else
contraction_type = 'e-nonatt'
end
else
contraction_type = match(conjugation_code, 'con%-(.+)')
end
local contraction_map = contraction_types[contraction_type]
if not contraction_map then
error('Invalid contraction type: ' .. tostring(contraction_type))
end
return contraction_map
end
return false
end)
function link_form(form_code, istitle)
local voice_code = form_code:sub(1, 1)
local forms = (voice_code == 'P') and pctable or ctable
local accel
-- check that it's a valid voice
local valid_voice
for _, voice in ipairs(voices) do
if aliases[voice] == voice_code then
valid_voice = true
break
end
end
if not valid_voice then
return nil
end
-- Get the form
local form = forms[form_code]
if (args[form_code] == nil) and (form == nil or form == '') then return nil end
-- Apply contraction
local contraction_map = get_contraction_map(conjtype)
if contraction_map then
form = ugsub(form, '[ÊĒÉĴĤḤÔŌÓÛÚŴẂÎĪÍ]', contraction_map)
end
form = dialforms_generic(form_code, form)
-- Get the stem
local stem = (voice_code == 'P') and pstem or stem
if (tense == 'perf' or tense == 'plup') and voice_code == 'M' then stem = pstem end
if tense == 'aor' and not match(form_code, '.I..') then
stem = (voice_code == 'P') and pstem2 or stem2
end
if args[form_code] then
form = args[form_code]
require('Module:debug').track('grc-conj/form-override')
if form == '' or form == '-' then
return nil
end
end
if (tense == 'perf' or tense == 'plup') and match(form, '[MSTH]') then
for _, replacements in pairs(perf_euph) do
local pattern = replacements[1] .. '$'
if umatch(stem, pattern) then
stem = ugsub(stem, pattern, '')
for i, letter in ipairs({'M', 'S', 'T', 'H'}) do
form = gsub(form, letter, replacements[i + 1])
end
break
end
end
end
stem = gsub(stem, 'V', '')
form = gsub(form, ' *[,/;] *', ',<br>')
-- Link the form
link = function(alt)
local parenflag = false
local char1 = usub(alt, 1, 1)
if char1 == '(' then
parenflag = true
end
if parenflag then
alt = usub(alt, 2)
elseif char1 == '*' then
alt = usub(alt, 2)
return full_link(target, alt, accel)
elseif not args[form_code] then
alt = stem .. alt
end
--accentuate
if not parenflag then
if args.dial == 'les' then
alt = antepenult(alt)
elseif form_code == 'APN' or form_code == 'AI' or (form_code == 'MI' and tense == 'perf') then
alt = pencirc(alt)
elseif form_code == 'AO3S' and match(alt, 'ι$') then
alt = penult(alt)
-- if prefix has been provided and this is not a present or future or aorist non-indicative form
elseif args['prefix'] and not (tense == 'pres' or tense == 'fut' or
(tense == 'aor' and not find(form_code, '.I..'))) then
if alt:sub(1, #args['prefix']) ~= args['prefix'] then
-- Safe to error here?
mw.log('Beginning of stem ' .. alt .. " doesn't match prefix "
.. args['prefix'] .. '.')
end
alt = args['prefix'] .. antepenult(alt:sub(#args['prefix'] + 1))
else
alt = antepenult(alt)
end
end
--deal with parentheses
if parenflag then
target = target .. alt
else
target = alt
end
-- Fix sigma.
target = ugsub(target, '[σς](.?)',
function (after)
if after == '' then
return 'ς' .. after
end
return 'σ' .. after
end)
return (parenflag and '(' or '') .. full_link(target, alt, accel)
end
if match(form, 'με%(σ%)θᾰ$') then
if match(form, ',') then -- for 2 forms
local form1, form2 = match(form, "([^,]+),<br>([^,]+)$")
if not args[form_code] then
form1 = stem .. form1
form2 = stem .. form2
end
form1 = toNFC(antepenult(form1))
form2 = toNFC(antepenult(form2))
local me1 = gsub(form1, '%b().+', '')
local stha1 = gsub(form1, '[()]', '')
local tha1 = gsub(form1, '%b()', '')
local me2 = gsub(form2, '%b().+', '')
local stha2 = gsub(form2, '[()]', '')
local tha2 = gsub(form2, '%b()', '')
form1 = full_link('[[' .. tha1 .. '|' .. me1 .. ']]([[' .. stha1 .. '|σ]])[['
.. tha1 .. '|θᾰ]]', nil, accel)
form2 = full_link('[[' .. tha2 .. '|' .. me2 .. ']]([[' .. stha2 .. '|σ]])[['
.. tha2 .. '|θᾰ]]', nil, accel)
form = form1 .. ",<br>" .. form2
else
if not args[form_code] then
form = stem .. form
end
form = toNFC(antepenult(form))
local me = gsub(form, '%b().+', '') -- Remove parentheses, their contents, and everything after.
local stha = gsub(form, '[()]', '') -- Remove parentheses.
local tha = gsub(form, '%b()', '') -- Remove parentheses and their contents.
form = full_link('[[' .. tha .. '|' .. me .. ']]([[' .. stha .. '|σ]])[['
.. tha .. '|θᾰ]]', nil, accel)
end
else
form = ugsub(form, '(%(?' .. word_char .. '+)', link)
end
if istitle then
form = match(form, '[^,]+') -- capture up to comma
form = ugsub(form, '%s+$', '') -- strip final whitespace
end
return form
end
function make_num_header()
local header = '|-\n! colspan="2" |\n'
for _, person in ipairs{'first', 'second', 'third', 'second', 'third', 'first', 'second', 'third'} do
header = header .. '! class="grc-conj-person" |' .. person .. '\n'
end
return header
end
function make_rows()
local rows = ''
local lmoods = args['indonly'] and {'I'} or moods[tense]
for _, voice in pairs(voices) do
rows = rows .. '|-\n! rowspan="' .. #lmoods .. '" | ' .. voice .. '\n\n'
for i, mood in ipairs(lmoods) do
if i ~= 1 then rows = rows .. '|-\n' end
rows = rows .. '! ' .. aliases[mood] .. '\n'
for person_number in iter_person_number() do
if aliases[voice] == nil then error(voice) end
code = aliases[voice] .. mood .. person_number
rows = rows .. '| class="grc-conj-finite-form" | ' .. (link_form(code) or ' ') .. '\n'
end
end
end
contractnote = find(rows, '†')
return rows
end
function make_voice_header()
local header = ''
if tense == 'imperf' or tense == 'plup' or args['indonly'] then
return header
end
header = '|-\n! colspan="2" |'
if tense == 'fut' or tense == 'aor' then
header = header .. '\n! colspan="3" | '
if voices[1] == 'active' then header = header .. 'active' end
header = header .. '\n! colspan="2" | '
if voices[2] == 'middle' or voices[1] == 'middle' then header = header .. 'middle' end
header = header .. '\n! colspan="3" | '
if voices[1] == 'passive' or voices[2] == 'passive' or voices[3] == 'passive' then header = header .. 'passive' end
else
header = header .. '\n! colspan="4" | '
if voices[1] == 'active' then header = header .. 'active' end
header = header .. '\n! colspan="4" | '
if voices[1] == 'middle/<wbr>passive' or voices[2] == 'middle/<wbr>passive' then header = header .. 'middle/<wbr>passive' end
end
header = header .. '\n'
return header
end
function make_nonfin_forms()
if tense == 'imperf' or tense == 'plup' or args['indonly'] then
return ''
end
local output = '|-\n! colspan="2" | infinitive\n'
local flag = (tense == 'fut' or tense == 'aor')
output = output .. '| colspan="' .. (flag and 3 or 4) .. '" class="grc-conj-nonfinite-form" | ' .. (link_form('AI') or '') .. '\n'
output = output .. '| colspan="' .. (flag and 2 or 4) .. '" class="grc-conj-nonfinite-form" | ' .. (link_form('MI') or '') .. '\n'
if flag then
output = output .. '| colspan="3" class="grc-conj-nonfinite-form" | ' .. (link_form('PI') or '') .. '\n'
end
output = output .. '|-\n! rowspan="3" class="grc-conj-nonfinite-form" | participle\n'
for _, gender in ipairs{'m', 'f', 'n'} do
local gender_upper = upper(gender)
if gender ~= 'm' then
output = output .. '|-\n'
end
output = output .. '! ' .. gender .. '\n'
output = output .. '| colspan="' .. (flag and 3 or 4) .. '" class="grc-conj-nonfinite-form" | ' .. (link_form('AP' .. gender_upper ) or '') .. '\n'
output = output .. '| colspan="' .. (flag and 2 or 4) .. '" class="grc-conj-nonfinite-form" | ' .. (link_form('MP' .. gender_upper ) or '') .. '\n'
if flag then
output = output .. '| colspan="3" class="grc-conj-nonfinite-form" | ' .. (link_form('PP' .. gender_upper ) or '') .. '\n'
end
end
return output
end
function make_notes()
local notes = args.notes or ''
if notes ~= '' then
notes = '\n' .. notes
end
if contractnote then
notes = '† [[Appendix:Ancient Greek contraction|contracted]]' .. notes -- should go first
end
local dial = args.dial
if dial == 'att' or not dial then
notes = 'This table gives Attic inflectional endings. '
.. 'For conjugation in dialects other than Attic, see '
.. '[[Appendix:Ancient Greek dialectal conjugation]].' .. notes
elseif not (dial == 'koi' or dial == 'byz' or dial == 'gkm') then
notes = 'Dialects other than Attic are not well attested. '
.. 'Some forms are based on conjecture. Use with caution. '
.. 'For more details, see [[Appendix:Ancient Greek dialectal conjugation]].' .. notes
end
if notes == '' then
return ''
end
return [[
|-
! class="grc-conj-notes-header | Notes:
| class="grc-conj-notes" colspan="13" | ]] .. [[<div class="use-with-mention">]] .. notes .. [[</div>]]
end
return export
bsrwqm31w298r8govk8ely952rcp0cb
237181
237180
2026-09-07T07:25:57Z
Lee
19
[[:en:Module:grc-conj]] වෙතින් එක් සංශෝධනයක්
237180
Scribunto
text/plain
local export = {}
local grc_accent_module = 'Module:grc-accent'
local data = require('Module:grc-conj/data')
local concat = table.concat
local find = string.find
local gsub = string.gsub
local insert = table.insert
local ipairs = ipairs
local match = string.match
local pairs = pairs
local sort = table.sort
local toNFC = mw.ustring.toNFC
local toNFD = mw.ustring.toNFD
local ugsub = mw.ustring.gsub
local umatch = mw.ustring.match
local upper = string.upper
local usub = mw.ustring.sub
local function keys_to_list(...)
keys_to_list = require('Module:table/keysToList')
return keys_to_list(...)
end
local function list_to_set(...)
list_to_set = require('Module:table/listToSet')
return list_to_set(...)
end
local function trim(...)
trim = require('Module:string utilities').trim
return trim(...)
end
-- Functions from [[Module:grc-accent]]
local function antepenult(...)
antepenult = require(grc_accent_module).antepenult
return antepenult(...)
end
local function circ(...)
circ = require(grc_accent_module).circ
return circ(...)
end
local function pencirc(...)
pencirc = require(grc_accent_module).pencirc
return pencirc(...)
end
local function penult(...)
penult = require(grc_accent_module).penult
return penult(...)
end
local function strip_accent(...)
strip_accent = require(grc_accent_module).strip_accent
return strip_accent(...)
end
local function strip_tone(...)
strip_tone = require(grc_accent_module).strip_tone
return strip_tone(...)
end
local function ult(...)
ult = require(grc_accent_module).ult
return ult(...)
end
local word_chars = mw.loadData('Module:grc-utilities/data').word_characters .. "%-"
local word_char = "[" .. word_chars .. "]"
local word_char_with_paren = "[" .. word_chars .. "%(%)]"
--[[
Abbreviations:
- ctable, pctable: conjugation table, passive conjugation table
- pstem: passive stem
]]
local conjugations = {}
local args = {}
local tense, conjtype -- e.g. pres, pres-con-a respectively
local stem1, stem2, stem3, stem4, pstem, pstem2 -- stem2 is for non-indicative (non-augmented) aorist
local ctable, pctable
local categories = ''
-- declarations of variables that would otherwise need to be global
local code, contractnote, lang, stem
local makeconj, swapargs, dialform, dialforms_generic, dialforms_thematic,
dialforms_thematic_passive, dialforms_contracted, dialforms_aorpass,
make_table, get_title, link_form, link, make_num_header, make_rows,
make_voice_header, make_nonfin_forms, make_notes
local con_conj_vowels = {
a = 'ᾰ',
e = 'ε',
o = 'ο'
}
local contraction_symbols =
"Ê Ē É Ĵ Ĥ Ḥ Ô Ō Ó Û Ú Ŵ Ẃ Î Ī Í"
-- These symbols correspond to the following vowels:
-- ε ε έ ει η ῃ ο ο ό ου ού ω ώ οι οι οί
local contr = {
['a'] = "ᾶ ᾱ ᾱ́ ᾷ ᾶ ᾷ ῶ ω ώ ῶ ώ ῶ ώ ῷ ῳ ῴ",
['eta'] = "ῆ η ή ῇ ῆ ῇ ῶ ω ώ ῶ ώ ῶ ώ ῷ ῳ ῴ",
['e'] = "εῖ ει εί εῖ ῆ ῇ οῦ ου ού οῦ ού ῶ ώ οῖ οι οί",
['o'] = "οῦ ου ού οῖ ῶ οῖ οῦ ου ού οῦ ού ῶ ώ οῖ οι οί",
['omega'] = "ῶ ω ώ ῷ ῶ ῷ ῶ ω ώ ῶ ῶ ῶ ώ ῷ ῳ ῷ",
['e-epiion'] = "εῖ ει εί εῖ ῆ ῇ εῦ ευ εύ εῦ εύ έω εώ έοι εοι εοί",
['e-nonatt'] = "εῖ ει εί εῖ ῆ ῇ έο εο εό έου εού έω εώ έοι εοι εοί",
['e-severe'] = "ῆ η ή εῖ ῆ ῇ έο εο εό έου εού έω εώ έοι εοι εοί",
['e-severe9'] = "ῆ η ή εῖ ῆ ῇ ῐ́ο ῐο ῐό ῐ́ου ῐού ῐ́ω ῐώ ῐ́οι ῐοι ῐοί",
['e-boi'] = "εῖ ει εί εῖ εῖ εῖ ῐ́ο ῐο ῐό ῐ́ου ῐού ῐ́ω ῐώ ῐ́οι ῐοι ῐοί",
['e-mono'] = "εῖ εῖ εί εῖ έη έῃ έο εο εό έου εού έω εώ έοι εοι εοί",
}
-- Use metatable to generate a lookup table when contraction_types is indexed.
local contraction_types = setmetatable({}, {
__index = function (contraction_types, code)
local contraction_vowels = contr[code]
if not contraction_vowels then
return
end
local contraction_lookup = {}
contraction_types[code] = contraction_lookup
local get_next_contraction_symbol = mw.text.gsplit(contraction_symbols, "%s+")
for contraction_result in mw.text.gsplit(contraction_vowels, "%s+") do
contraction_lookup[get_next_contraction_symbol()] = contraction_result
end
return contraction_lookup
end
})
local perf_euph = {
{'μ[πβφ]', 'μμ','μψ','μπτ','μφθ'},
{'γ[κγχ]', 'γμ','γξ','γκτ','γχθ'},
{'[πβφ]', 'μμ','ψ', 'πτ', 'φθ'},
{'[ζτδθσ]','σμ','σ', 'στ', 'σθ'}, -- θμ is retained in perfect mediopassive of κορύσσω.
{'[κγχ]', 'γμ','ξ', 'κτ', 'χθ'},
{'ν', 'σμ','νσ','ντ', 'νθ'}, -- TODO: this is also problematic because νμ > μμ sometimes
{'λ', 'λμ','λσ','λτ', 'λθ'},
{'ρ', 'ρμ','ρσ','ρτ', 'ρθ'},
{'V', 'μ', 'σ', 'τ', 'σθ'},
}
local function get_label_display(dial)
local _get_label_info = require("Module:labels").get_label_info
lang = lang or require('Module:languages').getByCode('grc')
function get_label_display(dial)
return _get_label_info{ label = dial, lang = lang, nocat = true }.label
end
return get_label_display(dial)
end
function export.show(frame)
for k, v in pairs(frame:getParent().args) do
args[k] = trim(v)
end
-- check that the input is not malformed
for i = 2, 5 do
if args[i] then
args[i] = toNFD(args[i])
end
end
if not args[1] or args[1] == '' then
error('Parameter 1 (tense) is required. See [[Template:grc-conj/documentation]].')
elseif not find(args[1], 'irreg') then
local malformed
for i = 2, 5 do
if args[i] and args[i] ~= strip_tone(args[i]) then
malformed = malformed or {}
insert(malformed, i)
end
end
if malformed then
local plural = #malformed > 1
error('Malformed input in parameter' .. (plural and 's ' or ' ')
.. mw.text.listToText(malformed) .. ' (contains extra accents)')
end
end
conjtype = args[1]
if conjtype == 'fut-ln' then conjtype = 'fut-con-e' end
tense = conjtype:sub(1, (find(conjtype, '-') or conjtype:len()+1)-1)
stem1 = args[2] or ''
stem2 = args[3] or '' -- augment or passive
stem3 = args[4] or '' -- passive
stem4 = args[5] or '' -- augmented passive
if find(stem1, '˘') then
require('Module:debug').track('grc-conj/manual-breve')
end
if args['dial1'] then require('Module:debug').track('grc-conj/dial1') end
if args['titleapp'] then require('Module:debug').track('grc-conj/title') end
if args['titleapp'] then require('Module:debug').track('grc-conj/titleapp') end
if args['prefix'] then
require('Module:debug').track('grc-conj/prefix')
args['prefix'] = toNFD(args['prefix'])
end
if args.form then
local valid_words = list_to_set{
'con', 'open', 'act', 'mid', 'pass', 'am', 'ap', 'mp', 'full'
}
local invalid_words = require('Module:fun').filter(function(word)
return not valid_words[word]
end, mw.text.split(args.form, '%A+'), true)
if #invalid_words > 0 then
valid_words = keys_to_list(valid_words)
sort(valid_words)
error('Invalid words in |form= parameter: '
.. concat(invalid_words, ', ') .. '. Choose from '
.. concat(valid_words, ', ') .. '.')
end
else
-- Determine which voices will be displayed based on the number of stems
-- supplied and the tense.
-- The argument is named 'form' for obsolete reasons.
if tense == 'futp' then
args.form = 'mp'
elseif tense == 'fut' then
if stem2 == '' then -- passive stem missing
args.form = 'am'
elseif stem1 == '' then -- active stem missing
args.form = 'pass'
end
elseif tense == 'aor' then
if stem3 == '' then -- passive indicative stem missing
args.form = 'am'
elseif stem1 == '' then -- active indicative stem missing
args.form = 'pass'
end
elseif tense == 'perf' or tense == 'plup' then
if stem2 == '' then -- passive stem missing
args.form = 'act'
elseif stem1 == '' then -- active stem missing
args.form = 'mp'
end
end
-- default
if not args.form then
args.form = 'full'
end
end
if find(conjtype, 'con') then
local dial, out = args.dial
if (
(dial == 'att' or dial == 'koi' or dial == 'byz' or dial == 'gkm' or dial == 'epi' or dial == 'ion' or not dial) and
not find(args.form, 'con')
)then
local vowel = match(conjtype, 'con%-([aehow])%f[%z%-]')
if vowel then -- eta is too unpredictable
swapargs(1)
if dial then
args.titleapp = args.titleapp or '(' .. get_label_display(dial) .. ', uncontracted)'
else
args.titleapp = args.titleapp1 or '(Uncontracted)'
end
out = makeconj(tense, stem1 .. con_conj_vowels[vowel], stem2)
end
end
if not find(args.form, 'open') then
swapargs(2)
if dial then
args.titleapp = args.titleapp2 or '(' .. get_label_display(dial) .. ', [[Appendix:Ancient Greek contraction|contracted]])'
else
args.titleapp = args.titleapp2 or '([[Appendix:Ancient Greek contraction|Contracted]])'
end
out = (out or '') .. makeconj(conjtype, stem1, stem2)
end
return out or ''
else
return makeconj(conjtype, stem1, stem2)
end
end
local function check_conjtype(conjtype)
if not conjugations[conjtype] then
local tense_names = {
aor = 'aorist', imperf = 'imperfect', pres = 'present',
fut = 'future', perf = 'perfect', plup = 'pluperfect',
futp = 'future perfect',
}
local tense_code = match(conjtype, '^%l+')
if tense_code then
if tense_names[tense_code] then
local valid_conjugations_for_tense = require('Module:fun').filter(function(conjugation)
return match(conjugation, '^%l+') == tense_code
end, keys_to_list(conjugations), true)
sort(valid_conjugations_for_tense)
error('No such conjugation for ' .. tense_code
.. ' (' .. tense_names[tense_code]
.. ' tense); choose between '
.. concat(valid_conjugations_for_tense, ', ') .. '.')
else
tense_names = require('Module:fun').map(function(tense_code)
return tense_code .. ' (' .. tense_names[tense_code] .. ')'
end, keys_to_list(tense_names), true)
error('No such tense: ' .. tense_code .. '; choose between '
.. concat(tense_names, ', ')
.. ', optionally with a suffix (see [[Template:grc-conj/documentation]] for a full list).')
end
else
if not match(conjtype, '^%l[%l%d-]+%l$') then
error('Invalid characters in inflection: ' .. conjtype)
else
error('No such inflection: ' .. conjtype)
end
end
end
end
function makeconj(conjtype, root, root2)
check_conjtype(conjtype)
stem = root
stem2 = root2
conjugations[conjtype]()
return make_table()
end
function swapargs(suffix)
--swaps the args so that functions returning multiple tables can have any form customized
--This function has undefined behaviour if both <arg> and <arg><suffix> are
--specified; use e.g. <arg>1 and <arg>2 instead.
local args_ = args
args = {}
for code, value in pairs(args_) do
args[ugsub(code, '(.+)' .. suffix .. '$', '%1')] = value
end
end
local person_number_table = {'1S', '2S', '3S', '2D', '3D', '1P', '2P', '3P'}
local function iter_person_number()
local iter, person_number_table, i = ipairs(person_number_table)
local person_number
return function ()
i, person_number = iter(person_number_table, i)
return person_number
end
end
local dialgroups = {
['ark'] = list_to_set{'ara', 'kyp', 'ark'},
['severe'] = list_to_set{'ara', 'kyp', 'ark', 'ele', 'lak', 'her', 'kre', 'les'}, -- lesbian was omitted from §25 — by mistake?
['buck9'] = list_to_set{'boi', 'kyp', 'lak', 'her', 'kre'},
['northwest'] = list_to_set{'pho', 'del', 'lok', 'ele'},
['doric'] = list_to_set{'lak', 'her', 'meg', 'kor', 'ker', 'arg', 'rho', 'pam', 'koa', 'thr', 'kre', 'dor'},
['west'] = list_to_set{'pho', 'del', 'lok', 'ele',
'lak', 'her', 'meg', 'kor', 'ker', 'arg', 'rho', 'pam', 'koa', 'thr', 'kre', 'dor'},
['nonIA'] = list_to_set{'ara', 'kyp', 'ark',
'les', 'the', 'boi',
'pho', 'del', 'lok', 'ele',
'lak', 'her', 'meg', 'kor', 'ker', 'arg', 'rho', 'pam', 'koa', 'thr', 'kre', 'dor'},
}
-- Koine is basically the same as Attic, right?
local function not_attic(dial)
return dial and not (dial == 'att' or dial == 'koi' or dial == 'byz' or dial == 'gkm')
end
function dialform(form_code, suffix, dialect, dialect2)
if args.dial and (args.dial == dialect or
args.dial == dialect2 or
(dialgroups[dialect] and dialgroups[dialect][args.dial] ) ) then
local forms = (form_code:sub(1, 1) == 'P') and pctable or ctable
forms[form_code] = suffix
end
end
function dialforms_generic(form_code, word)
local dial = args.dial
if not word then
return word
end
-- Epic forms (not in Buck)
if dial == 'epi' and word then
word = gsub(word, 'μεθᾰ$', 'με(σ)θᾰ')
word = gsub(word, 'μεθᾰ([^ά-ώ])', 'με(σ)θᾰ%1')
-- possibly also in passive aorist (not attested)
if find(form_code, 'AS1S') then
word = gsub(word, word_char_with_paren .. '+', function(form)
return form:find('(', 1, true) and
(form .. 'μῐ / ' .. form) or
form .. '(μῐ)'
end)
elseif find(form_code, 'A[SO]2S') then
word = gsub(word, '(' .. word_char_with_paren .. '-)ς', function(form)
return form:find('(', 1, true) and
(form .. 'ς / ' .. form .. 'σθᾰ') or
form .. 'σ(θᾰ)'
end)
elseif find(form_code, 'AS3S') then
word = gsub(word, word_char_with_paren .. '+', function(form)
return form .. 'σῐ(ν) / ' .. form
end)
end
end
-- 102
if dialgroups['nonIA'][dial] then
word = gsub(word, '(σῐ)%(ν%)', '%1')
end
-- 138.1 - data unclear
-- 138.2
if match(form_code, '..3S') and dialgroups['west'][dial] then
word = gsub(word, 'σῐ', 'τῐ')
end
-- 138.3
if match(form_code, '..1P') and dialgroups['west'][dial] then
word = gsub(word, 'μεν$', 'μες')
end
-- 138.4 - can't be automated
if dial == 'boi' or dial == 'the' then
-- this is really 139.2 but it's easier to put here
word = gsub(word, 'νται$', 'νθαι')
word = gsub(word, 'ντο$', 'νθο')
end
-- 138.5 - can't be automated
-- 138.6 (or 8)
if dialgroups['nonIA'][dial] then
word = gsub(word, 'την$', 'τᾱν')
word = gsub(word, 'μην$', 'μᾱν')
word = gsub(word, 'σθην$', 'σθᾱν')
word = gsub(word, 'μένη$', 'μένᾱ')
word = gsub(word, 'Mην$', 'Mᾱν')
word = gsub(word, 'Hν$', 'Hᾱν')
word = gsub(word, 'Mένη$', 'Mένᾱ')
end
-- 139.1
if dial == 'boi' then
word = gsub(word, 'αι$', 'η')
word = gsub(word, 'αι,', 'η,')
-- elseif dial == 'the' then -- this only happened at Larissa
-- word = gsub(word, 'αι$', 'ει')
-- word = gsub(word, 'αι,', 'ει,')
elseif dial == 'ara' and match(form_code, '[MP][IS]..') then
word = gsub(word, 'αι$', 'οι')
word = gsub(word, 'αι,', 'οι,')
end
if dialgroups['ark'][dial] then
word = gsub(word, 'ο$', 'ῠ')
end
-- 139.2
if match(form_code, '[MP]O3P') and (dial == 'ion' or dial == 'epi') then
local new_word = gsub(word, 'ντο$', 'ᾰτο')
-- If the substitution occurred, there is now an extra syllable.
-- So fix accent: ἀγγελθησοίᾰτο, not ἀγγελθήσοιᾰτο.
if word ~= new_word then
word = antepenult(strip_tone(new_word))
end
end
-- ion athematic -ᾰτ-: can't be automated
-- boi -ᾰτ-: data unclear?
-- boi / the -θ-: see under 138.4.
-- 140
if form_code == 'AC3P' then
if dialgroups['ark'][dial] or (dialgroups['doric'][dial] and dial ~= 'kre') then
word = gsub(word, 'ντων$', 'ντω')
elseif dial == 'boi' then
word = gsub(word, 'ντων$', 'νθω')
elseif dial == 'the' then
word = gsub(word, 'ντων$', 'νθου')
elseif dial == 'les' or dial == 'pam' then
word = gsub(word, 'ντων$', 'ντον')
-- FIXME: όντων > ετωσᾰν etc.
-- Order ντων/ωσᾰν in Attic, but ωσᾰν/ντων in Koine.
-- elseif dial == 'late' then
-- word = gsub(word, 'ντων$', 'ντωσᾰν')
end
elseif form_code == 'MC3P' then
if dial == 'ker' or dial == 'koa' then
word = gsub(word, 'ων$', 'ω')
elseif dial == 'epd' or dial == 'lak' then
-- thematic -οσθω for -εσθων must be dealt with separately. this also apples to ato and ele
word = gsub(word, 'ων$', 'ω')
--not going to bother with corcyrian
elseif dial == 'les' or dial == 'pam' then
word = gsub(word, 'ων$', 'ον')
-- FIXME: see active form.
-- elseif dial == 'late' then
-- word = gsub(word, 'ων$', 'ωσᾰν')
end
end
-- 151: data unclear
-- 154: has to be done manually, as Attic has -ναι and -εναι; also Lesbian -ν and -μεναι
-- 160: data unclear
-- 221: I think it's probably best to fix things at around 400 BC, so CιV and ι=ει, η=αι, ει=η but υ=υ, οι=οι.
-- 60.1
if dial == 'ele' then
word = gsub(word, 'ς', 'ρ')
end
-- 66
if dial == 'pam' then
word = gsub(word, 'νται$', 'δαι')
word = gsub(word, 'ντο$', 'δο')
word = gsub(word, 'ντῐ$', 'δῐ')
end
return word
end
function dialforms_thematic()
local ult_stem = ult(stem)
if ult_stem ~= circ(stem) then
--verb ends in a long vowel
dialform('AI', 'ειν / έμεν(αι) / μεναι', 'epi')
elseif ult_stem ~= stem then
--verb ends in a [short] vowel
dialform('AI', 'ειν / έμεν(αι) / μεν(αι)', 'epi')
else
dialform('AI', 'ειν / έμεν(αι)', 'epi')
end
if not_attic(args.dial) then
ctable['MI2S'] = 'εαι'
ctable['MS2S'] = 'ηαι'
ctable['MC2S'] = 'εο'
end
dialform('MC2S', 'ῐο', 'buck9') -- 9
dialform('AS2D', 'ειτον', 'boi', 'the') -- 14
dialform('AS3D', 'ειτον', 'boi', 'the')
dialform('AS2P', 'ειτε', 'boi', 'the')
dialform('MS2S', 'είαι', 'boi', 'the')
dialform('MS3S', 'είται', 'boi', 'the')
dialform('MS2D', 'εισθον', 'boi', 'the')
dialform('MS3D', 'εισθον', 'boi', 'the')
dialform('MS2P', 'εισθε', 'boi', 'the')
dialform('AI2S', 'ῑς', 'boi') -- 28
dialform('AI3S', 'ῑ', 'boi')
dialform('AS2S', 'ῑς', 'boi') -- this is a conjecture
dialform('AS3S', 'ῑ', 'boi')
dialform('MI2S', 'εαι / ῃ', 'epi', 'ion')
dialform('MS2S', 'ηαι / ῃ', 'epi', 'ion')
dialform('MC2S', 'εο, ευ', 'epi', 'ion') -- 42.5 says ευ, but εο more common (even in Ionic)
dialform('APF', 'ῶσᾰ', 'severe', 'boi') -- 77.3
dialform('APF', 'όνσᾰ', 'kre', 'arg')
dialform('APF', 'όνσᾰ', 'the', 'ark')
dialform('APF', 'οισᾰ', 'les')
dialform('AI3P', 'οντῐ', 'west') -- 138.4
dialform('AS3P', 'ωντῐ', 'west')
dialform('AI3P', 'ονσῐ', 'ara')
dialform('AS3P', 'ωνσῐ', 'ara')
dialform('AI3P', 'ωσῐ', 'kyp')
dialform('AS3P', 'ωσῐ', 'kyp')
dialform('AI3P', 'ονθῐ', 'boi', 'the')
dialform('AS3P', 'ωνθῐ', 'boi', 'the')
dialform('AI3P', 'οισῐ', 'les')
dialform('AS3P', 'ῳσῐ', 'les')
dialform('MC3P', 'όσθω', 'epd', 'lak') -- 140
dialform('MC3P', 'ούσθω', 'ker')
dialform('MC3P', 'όσθων', 'ato', 'ele')
dialform('AS3S', 'η', 'ark') -- 149
dialform('AI', 'ην', 'les') -- 153
dialform('AI', 'εν', 'ark', 'del')
dialform('AI', 'εν', 'doric')
dialform('AI', 'ειν', 'kor', 'rho') -- exceptions to doric -εν
dialform('AI', 'ην', 'ele', 'lak')
dialform('AI', 'έμεν', 'boi', 'the') -- 155
end
function dialforms_thematic_passive()
if not_attic(args.dial) then
pctable['PI2S'] = 'ησεαι'
pctable['PS2S'] = 'ησηαι'
pctable['PC2S'] = 'ησεο'
end
dialform('PC2S', 'ησῐο', 'buck9') -- 9
dialform('PS2S', 'είαι', 'boi', 'the') -- 14
dialform('PS3S', 'είται', 'boi', 'the')
dialform('PS2D', 'εισθον', 'boi', 'the')
dialform('PS3D', 'εισθον', 'boi', 'the')
dialform('PS2P', 'εισθε', 'boi', 'the')
dialform('PI2S', 'ησεαι / ησῃ', 'epi', 'ion')
dialform('PS2S', 'ησηαι / ησῃ', 'epi', 'ion')
dialform('PC2S', 'ησεο / ησευ', 'epi', 'ion') -- 42.5 says ευ, but εο more common (even in Ionic)
dialform('PC3P', 'όσθω', 'epd', 'lak') -- 140
dialform('PC3P', 'ούσθω', 'ker')
dialform('PC3P', 'όσθων', 'ato', 'ele')
end
conjugations['pres'] = function()
ctable = data.pres
dialforms_thematic()
end
conjugations['imperf'] = function()
ctable = data.imperf
dialform('MI2S', 'εο, ευ', 'epi', 'ion')
end
function dialforms_contracted()
if not_attic(args.dial) then
-- ctable['MI2S'] = 'Êαι'
-- ctable['MS2S'] = 'Ĥαι'
-- ctable['MC2S'] = 'Êο'
ctable['AO1S'] = 'Îμῐ'
ctable['AO2S'] = 'Îς'
ctable['AO3S'] = 'Î'
ctable['AO2D'] = 'Îτον'
ctable['AO3D'] = 'Íτην'
ctable['AO1P'] = 'Îμεν'
ctable['AO2P'] = 'Îτε'
ctable['AO3P'] = 'Îεν'
end
dialform('APF', 'Ŵσᾰ', 'severe') -- 77.3
dialform('APF', 'Ôνσᾰ', 'kre', 'arg')
dialform('APF', 'Ôνσᾰ', 'the', 'ark')
-- dialform('APF', 'Îσᾰ', 'les')
dialform('AI3P', 'Ôντῐ', 'west') -- 138.4
dialform('AS3P', 'Ŵντῐ', 'west')
dialform('AI3P', 'Ôνσῐ', 'ara')
dialform('AS3P', 'Ŵνσῐ', 'ara')
dialform('AI3P', 'Ŵσῐ', 'kyp')
dialform('AS3P', 'Ŵσῐ', 'kyp')
dialform('AI3P', 'Ôνθῐ', 'boi', 'the')
dialform('AS3P', 'Ŵνθῐ', 'boi', 'the')
-- dialform('AI3P', 'Îσῐ', 'les')
-- dialform('AS3P', 'Yσῐ', 'les')
dialform('MC3P', 'Óσθω', 'epd', 'lak') -- 140
dialform('MC3P', 'Úσθω', 'ker')
dialform('MC3P', 'Óσθων', 'ato', 'ele')
dialform('AS3S', 'Ĥ', 'ark') -- 149
dialform('AI', 'Éμεν', 'boi', 'the') -- 155
end
conjugations['pres-con-a'] = function()
ctable = data.pres_contr
dialforms_contracted()
dialform('AI', 'ᾶν / ήμεναι', 'epi')
end
conjugations['imperf-con-a'] = function()
ctable = data.imperf_contr
end
conjugations['pres-con-e'] = function()
--The 'two-syllable' rule in Smyth 397 does not seem to be consistent
--(does η / ηι / οι count?), and it's unclear to what degree it applied to
--other dialects.
ctable = data.pres_contr
dialforms_contracted()
dialform('AI', 'Êν / ήμεναι / ῆναι', 'epi')
if not not_attic(args.dial) then
ctable['MI2S'] = 'Ĵ / Ḥ'
end
dialform('MI2S', 'έαι / Ĵ', 'epi', 'ion')
dialform('MC2S', 'έο / Û', 'epi', 'ion')
dialform('MPM', 'είμενος', 'northwest', 'boi')
dialform('MPF', 'ειμένᾱ', 'northwest', 'boi')
dialform('MPN', 'είμενον', 'northwest', 'boi')
end
conjugations['imperf-con-e'] = function()
ctable = data.imperf_contr
dialform('MI2S', 'έο / Û', 'epi', 'ion')
end
conjugations['pres-con-e-mono'] = function()
ctable = data.pres_contr
dialforms_contracted()
end
conjugations['imperf-con-e-mono'] = function()
ctable = data.imperf_contr
end
conjugations['pres-con-o'] = function()
ctable = data.pres_contr
dialforms_contracted()
dialform('AI', 'οῦν / ώμεναι', 'epi')
end
conjugations['imperf-con-o'] = function()
ctable = data.imperf_contr
end
conjugations['pres-con-eta'] = function()
ctable = data.pres_contr
dialforms_contracted()
end
conjugations['imperf-con-eta'] = function()
ctable = data.imperf_contr
end
conjugations['pres-con-omega'] = function()
ctable = data.pres_contr
dialforms_contracted()
end
conjugations['imperf-con-omega'] = function()
ctable = data.imperf_contr
end
conjugations['pres-irreg'] = function()
ctable = {}
local i = 2
for _, tense in ipairs{'A', 'M'} do
for _, mood in ipairs{'I', 'S', 'O', 'C'} do
for person_number in iter_person_number() do
local arg = tense .. mood .. person_number
args[arg] = args[arg] or args[i]
i = i + 1
end
end
for _, nonfinite in ipairs{'I', 'PM', 'PF', 'PN'} do
local arg = tense .. nonfinite
args[arg] = args[arg] or args[i]
i = i + 1
end
end
end
conjugations['imperf-irreg'] = function()
ctable = {}
local i = 2
for _, tense in ipairs{'A', 'M'} do
for person_number in iter_person_number() do
local arg = tense .. 'I' .. person_number
args[arg] = args[arg] or args[i]
i = i + 1
end
end
end
conjugations['fut-irreg'] = function()
ctable, pctable = {}, {}
local i = 2
for _, tense in ipairs{'A', 'M', 'P'} do
for _, mood in ipairs{'I', 'O'} do
for person_number in iter_person_number() do
local arg = tense .. mood .. person_number
args[arg] = args[arg] or args[i]
i = i + 1
end
end
for _, nonfinite in ipairs{'I', 'PM', 'PF', 'PN'} do
local arg = tense .. nonfinite
args[arg] = args[arg] or args[i]
i = i + 1
end
end
end
conjugations['pres-ami'] = function()
ctable = data.pres_ami
if not_attic(args.dial) then
-- this is never mentioned by Buck, but judging from Pharr the optative dual/plural with η is Attic only
ctable['AO2D'] = 'αῖτον'
ctable['AO3D'] = 'αίτην'
ctable['AO1P'] = 'αῖμεν'
ctable['AO2P'] = 'αῖτε'
ctable['AO3P'] = 'αῖεν'
end
dialform('AI3S', 'ησῐ(ν) / ῆ', 'epi')
dialform('AC2S', 'η / ᾰ', 'epi') -- η is contracted from αε
dialform('AI', 'ᾰ́μεν(αι)', 'epi')
dialform('MC2S', 'ᾰσο', 'nonIA')
dialform('MC2S', 'ᾰσο / ᾰο / ω', 'epi', 'ion')
-- FIXME: MC2S shouldn't contract to ω if monosyllabic, as it's the same as AS1S ῶ (e.g. φημί)
-- subjunctive seems to surprisingly end up just as Attic
dialform('APM', 'αις', 'les') -- 77.3
dialform('APF', 'αισᾰ', 'les')
dialform('APF', 'ᾰ́νσᾰ', 'kre', 'arg')
dialform('APF', 'ᾰ́νσᾰ', 'the', 'ark')
dialform('AI3P', 'ᾰντῐ', 'west') -- 138.4
dialform('AS3P', 'ῶντῐ', 'west')
dialform('AI3P', 'ᾰνσῐ', 'ara')
dialform('AS3P', 'ῶνσῐ', 'ara')
dialform('AI3P', 'ᾱσῐ', 'kyp')
dialform('AS3P', 'ῶσῐ', 'kyp')
dialform('AI3P', 'ᾰνθῐ', 'boi', 'the')
dialform('AS3P', 'ῶνθῐ', 'boi', 'the')
dialform('AI3P', 'αισῐ', 'les')
dialform('AS3P', 'ῷσῐ', 'les')
dialform('AI1S', 'ᾱμῐ', 'nonIA') -- 138.6
dialform('AI2S', 'ᾱς', 'nonIA') -- also -θα?
dialform('AI3S', 'ᾱσῐ', 'nonIA')
dialform('AI', 'ᾱν', 'les') -- 154, 155.3
dialform('AI', 'ᾰ́μεν', 'the', 'boi')
dialform('AI', 'ᾰ́μεν', 'west')
dialform('AI', 'ᾰ́μην, ᾰ́μεν', 'kre')
dialform('AI', 'ᾰ́μειν', 'rho')
dialform('AC2S', 'ᾱ', 'nonIA') -- 160 - apparently smyth says that aeolic has ᾱ
end
conjugations['imperf-ami'] = function()
ctable = data.imperf_ami
dialform('AI3P', 'ᾰν', 'nonIA') -- 138.5
dialform('AI1S', 'ᾱν', 'nonIA') -- 138.6
dialform('AI2S', 'ᾱς', 'nonIA')
dialform('AI3S', 'ᾱ', 'nonIA')
end
conjugations['pres-emi'] = function()
ctable = data.pres_emi
if not_attic(args.dial) then
-- this is never mentioned by Buck, but judging from Pharr the optative dual/plural with η is Attic only
ctable['AO2D'] = 'εῖτον'
ctable['AO3D'] = 'είτην'
ctable['AO1P'] = 'εῖμεν'
ctable['AO2P'] = 'εῖτε'
ctable['AO3P'] = 'εῖεν'
end
dialform('AI3S', 'ησῐ(ν) / εῖ', 'epi')
dialform('AI3P', 'εῖσῐ(ν)', 'epi')
dialform('AI', 'έμεν(αι)', 'epi')
dialform('MC2S', 'εσο', 'nonIA')
dialform('MC2S', 'εσο / εο / ευ', 'epi', 'ion')
dialform('AS1S', 'εω', 'nonIA')
dialform('AS2S', 'ηαι', 'nonIA')
dialform('AS1P', 'εωμεν', 'nonIA')
dialform('MS1S', 'εωμαι', 'nonIA')
dialform('MS1P', 'εωμεν', 'nonIA')
dialform('MS3P', 'εωνται', 'nonIA')
dialform('AS1S', 'ῐω', 'buck9')
dialform('AS1P', 'ῐωμεν', 'buck9')
dialform('MS1S', 'ῐωμαι', 'buck9')
dialform('MS1P', 'ῐωμεν', 'buck9')
dialform('MS3P', 'ῐωνται', 'buck9')
dialform('MO3S', 'εῖτο', 'nonIA')
dialform('MO2D', 'εῖσθον', 'nonIA')
dialform('MO3D', 'είσθην', 'nonIA')
dialform('MO1P', 'είμεθᾰ', 'nonIA')
dialform('MO2P', 'εῖσθε', 'nonIA')
dialform('MO3P', 'εῖντο', 'nonIA')
dialform('APF', 'ῆσᾰ', 'severe') -- 77.3
dialform('APF', 'ένσᾰ', 'kre', 'arg')
dialform('APF', 'ένσᾰ', 'the', 'ark')
dialform('AI3P', 'εντῐ', 'west') -- 138.4
dialform('AS3P', 'εωντῐ', 'west')
dialform('AI3P', 'ενσῐ', 'ara')
dialform('AS3P', 'εωνσῐ', 'ara')
dialform('AI3P', 'ησῐ', 'kyp')
dialform('AS3P', 'ῐωσῐ', 'kyp')
dialform('AI3P', 'ενθῐ', 'boi', 'the')
dialform('AS3P', 'ῐωνθῐ', 'boi')
dialform('AS3P', 'εωνθῐ', 'the')
dialform('AI3P', 'εισῐ', 'les')
dialform('AS3P', 'εῳσῐ', 'les')
dialform('AI', 'ην', 'les') -- 154, 155.3
dialform('AI', 'έμεν', 'the', 'boi')
dialform('AI', 'έμεν', 'west')
dialform('AI', 'έμην, έμεν', 'kre')
dialform('AI', 'έμειν', 'rho')
end
conjugations['imperf-emi'] = function()
ctable = data.imperf_emi
dialform('AI3P', 'εν', 'nonIA') -- 138.5
dialform('AI3P', 'εᾰν', 'boi', 'kyp')
dialform('AI1S', 'ην', 'nonIA') -- 160
dialform('AI2S', 'ης', 'nonIA')
dialform('AI3S', 'η', 'nonIA')
end
conjugations['pres-omi'] = function()
ctable = data.pres_omi
if not_attic(args.dial) then
-- this is never mentioned by Buck, but judging from Pharr the optative dual/plural with η is Attic only
ctable['AO2D'] = 'οῖτον'
ctable['AO3D'] = 'οίτην'
ctable['AO1P'] = 'οῖμεν'
ctable['AO2P'] = 'οῖτε'
ctable['AO3P'] = 'οῖεν'
end
dialform('AI3S', 'ωσῐ(ν) / οῖ', 'epi')
dialform('AI3P', 'οῦσῐ(ν)', 'epi')
dialform('AI', 'όμεν(αι)', 'epi')
dialform('MC2S', 'οσο', 'nonIA')
dialform('MC2S', 'οσο / οο / ου', 'epi', 'ion')
dialform('APF', 'ῶσᾰ', 'severe', 'boi') -- 77.3
dialform('APF', 'όνσᾰ', 'kre', 'arg')
dialform('APF', 'όνσᾰ', 'the', 'ark')
dialform('APM', 'οις', 'les')
dialform('APF', 'οισᾰ', 'les')
dialform('AI3P', 'οντῐ', 'west') -- 138.4
dialform('AS3P', 'ῶντῐ', 'west')
dialform('AI3P', 'ονσῐ', 'ara')
dialform('AS3P', 'ῶνσῐ', 'ara')
dialform('AI3P', 'ωσῐ', 'kyp')
dialform('AS3P', 'ῶσῐ', 'kyp')
dialform('AI3P', 'ονθῐ', 'boi', 'the')
dialform('AS3P', 'ῶνθῐ', 'boi', 'the')
dialform('AI3P', 'οισῐ', 'les')
dialform('AS3P', 'ῳσῐ', 'les')
dialform('AI', 'ων', 'les') -- 154, 155.3
dialform('AI', 'όμεν', 'the', 'boi')
dialform('AI', 'όμεν', 'west')
dialform('AI', 'όμην, όμεν', 'kre')
dialform('AI', 'όμειν', 'rho')
-- dialform('AI2S', 'οις', 'les') -- also -θα?
end
conjugations['imperf-omi'] = function()
ctable = data.imperf_omi
dialform('AI3P', 'ον', 'nonIA') -- 138.5
dialform('AI3P', 'οᾰν', 'boi', 'kyp')
dialform('AI1S', 'ων', 'nonIA') -- 160
dialform('AI2S', 'ως', 'nonIA')
dialform('AI3S', 'ω', 'nonIA')
end
local function pres_umi(init)
dialform('APF', init .. 'υισᾰ', 'les') -- 77.3
dialform('APF', init .. 'ῠ́νσᾰ', 'kre', 'arg')
dialform('APF', init .. 'ῠ́νσᾰ', 'the', 'ark')
dialform('AI3P', init .. 'ῠντῐ', 'west') -- 138.4
dialform('AI3P', init .. 'ῠνσῐ', 'ara')
dialform('AI3P', init .. 'ῡσῐ', 'kyp')
dialform('AI3P', init .. 'ῠνθῐ', 'boi', 'the')
dialform('AI3P', init .. 'υισῐ', 'les')
dialform('AS3P', init .. 'ῠωντῐ', 'west')
dialform('AS3P', init .. 'ῠωνσῐ', 'ara')
dialform('AS3P', init .. 'ῠωσῐ', 'kyp')
dialform('AS3P', init .. 'ῠωνθῐ', 'boi', 'the')
dialform('AS3P', init .. 'ῠῳσῐ', 'les')
dialform('AI', init .. 'ῡν', 'les') -- 154, 155.3
dialform('AI', init .. 'ῠ́μεν', 'the', 'boi')
dialform('AI', init .. 'ῠ́μεν', 'west')
dialform('AI', init .. 'ῠ́μην/' .. init .. 'ῠ́μεν', 'kre')
dialform('AI', init .. 'ῠ́μειν', 'rho')
end
conjugations['pres-numi'] = function()
ctable = data.pres_numi
pres_umi('ν')
end
conjugations['pres-lumi'] = function()
ctable = data.pres_lumi
pres_umi('λ')
end
local function imperf_umi(init)
dialform('AI1S', init .. 'ῠον/' .. init .. 'ῡν', 'epi', 'ion')
dialform('AI2S', init .. 'ῠες/' .. init .. 'ῡς', 'epi', 'ion')
dialform('AI3S', init .. 'ῠε/' .. init .. 'ῡ', 'epi', 'ion')
dialform('AI3P', init .. 'ῠν', 'nonIA') -- 138.5
dialform('AI3P', init .. 'ῠᾰν', 'boi', 'kyp')
end
conjugations['imperf-numi'] = function()
ctable = data.imperf_numi
imperf_umi('ν')
end
conjugations['imperf-lumi'] = function()
ctable = data.imperf_lumi
imperf_umi('λ')
end
conjugations['fut'] = function()
ctable = data.pres
pctable = data.fut_pass
pstem = stem2
dialforms_thematic()
dialforms_thematic_passive()
end
conjugations['fut-con-a'] = function()
ctable = data.pres_contr
pctable = data.fut_pass
pstem = stem2
dialforms_contracted()
dialform('AI', 'ᾶν / ήμεναι', 'epi')
end
conjugations['fut-con-e'] = function()
ctable = data.pres_contr
pctable = data.fut_pass
pstem = stem2
dialforms_contracted()
dialform('AI', 'Êν / ήμεναι / ῆναι', 'epi')
if not not_attic(args.dial) then
ctable['MI2S'] = 'Ĵ / Ḥ'
end
dialform('MI2S', 'έαι / Ĵ', 'epi', 'ion')
dialform('MC2S', 'έο / Û', 'epi', 'ion')
dialform('MPM', 'είμενος', 'northwest', 'boi')
dialform('MPF', 'ειμένᾱ', 'northwest', 'boi')
dialform('MPN', 'είμενον', 'northwest', 'boi')
end
conjugations['futp'] = function()
ctable = data.pres
dialforms_thematic()
end
function dialforms_aorpass()
if usub(pstem, -1) == 'θ' then
pctable['PC2S'] = 'ητῐ'
end
if not_attic(args.dial) then
-- this is never mentioned by Buck, but judging from Pharr the optative dual/plural with η is Attic only
pctable['PO2D'] = 'εῖτον'
pctable['PO3D'] = 'είτην'
pctable['PO1P'] = 'εῖμεν'
pctable['PO2P'] = 'εῖτε'
pctable['PO3P'] = 'εῖεν'
end
dialform('PI3P', 'ησᾰν, εν', 'epi')
dialform('PI', 'ῆναι / ήμεναι', 'epi')
dialform('PPF', 'ῆσᾰ', 'severe') -- 77.3
dialform('PPF', 'ένσᾰ', 'kre', 'arg')
dialform('PPF', 'ένσᾰ', 'the', 'ark')
dialform('PPF', 'εισᾰ', 'les')
dialform('PS3P', 'εωντῐ', 'west') -- 138.4
dialform('PS3P', 'εωνσῐ', 'ara')
dialform('PS3P', 'ῐωσῐ', 'kyp')
dialform('PS3P', 'ῐωνθῐ', 'boi')
dialform('PS3P', 'εωνθῐ', 'the')
dialform('PS3P', 'εῳσῐ', 'les')
dialform('PI3P', 'εν', 'nonIA') -- 138.5
dialform('PI', 'ην', 'les') -- 154, 155.3
dialform('PI', 'ῆμεν', 'the', 'boi')
dialform('PI', 'ῆμεν', 'west')
dialform('PI', 'ήμην, ῆμεν', 'kre')
dialform('PI', 'ήμειν', 'rho')
end
conjugations['aor-1'] = function()
ctable = data.aor_1
pctable = data.aor_pass
pstem = stem3
pstem2 = stem4
if not_attic(args.dial) then
ctable['MS2S'] = 'ηαι'
end
dialform('AO2S', 'αις / ειᾰς', 'epi')
dialform('AI', 'αι / ᾰμεν(αι)', 'epi')
dialform('MO3P', 'αίᾰτο', 'epi')
dialform('MI2S', 'ᾰο', 'epi')
-- short-vowel subjunctives for Epic; no doubt Homer originally had -ονται and -εσθε here,
-- but this was 'corrected' to Attic forms (not making a difference metrically), see Chantraine's Grammaire homérique I.454
dialform('AS2D', 'ητον / ετον', 'epi')
dialform('AS3D', 'ητον / ετον', 'epi')
dialform('AS1P', 'ωμεν / ομεν', 'epi')
dialform('AS2P', 'ητε / ετε', 'epi')
dialform('MS1S', 'ωμαι / ομαι', 'epi')
dialform('MS2S', 'εαι / ῃ', 'epi')
dialform('MS3S', 'ηται / εται', 'epi')
dialform('MS1P', 'ώμεθᾰ / όμεθᾰ', 'epi')
dialform('APM', 'αις', 'les') -- 77.3
dialform('APF', 'αισᾰ', 'les')
dialform('APF', 'ᾰ́νσᾰ', 'kre', 'arg')
dialform('APF', 'ᾰ́νσᾰ', 'the', 'ark')
dialform('AS3P', 'ωντῐ', 'west') -- 138.4
dialform('AS3P', 'ωνσῐ', 'ara')
dialform('AS3P', 'ωσῐ', 'kyp')
dialform('AS3P', 'ωνθῐ', 'boi', 'the')
dialform('AS2S', 'εις', 'les', 'kre') -- 150 (this is also East Ionic, which we don't have a code for)
dialform('AS3S', 'ει', 'les', 'kre')
dialform('AS2D', 'ετον', 'les', 'kre')
dialform('AS3D', 'ετον', 'les', 'kre')
dialform('AS1P', 'ομεν', 'les', 'kre')
dialform('AS2P', 'ετε', 'les', 'kre')
dialform('AS3P', 'οισῐ', 'les')
dialform('AS3P', 'οντῐ', 'kre')
dialform('MS1S', 'ομαι', 'les', 'kre')
dialform('MS2S', 'εαι', 'les', 'kre')
dialform('MS3S', 'εται', 'les', 'kre')
dialform('MS2D', 'εσθον', 'les', 'kre')
dialform('MS3D', 'εσθον', 'les', 'kre')
dialform('MS1P', 'ομεθᾰ', 'les', 'kre')
dialform('MS2P', 'εσθε', 'les', 'kre')
dialform('MS3P', 'ονται', 'les', 'kre')
dialform('AO2S', 'αις', 'nonIA') -- 152.4
dialform('AO3S', 'αι', 'nonIA')
dialform('AO3P', 'αιεν', 'nonIA')
-- dialform('AI', 'ειν', 'the') -- 156 - marked with (Larissa)
dialforms_aorpass()
end
conjugations['aor-2'] = function()
ctable = data.aor_2
pctable = data.aor_pass
pstem = stem3
pstem2 = stem4
-- not used:
-- local mono = (ult(stem2) == stem2)
if not_attic(args.dial) then
ctable['MI2S'] = 'εο'
ctable['MS2S'] = 'ηαι'
ctable['MC2S'] = 'εο' -- assuming from 426c that perispomenon only applies when contracted
end
dialform('AI', 'έεν/εῖν/έειν/έμεν(αι)', 'epi')
dialform('MO3P', 'οίᾰτο', 'epi')
dialform('MI2S', 'ῐο', 'buck9') -- 9
dialform('MC2S', 'ῐο', 'buck9')
dialform('AS2D', 'ειτον', 'boi', 'the') -- 14
dialform('AS3D', 'ειτον', 'boi', 'the')
dialform('AS2P', 'ειτε', 'boi', 'the')
dialform('MS2S', 'είαι', 'boi', 'the')
dialform('MS3S', 'είται', 'boi', 'the')
dialform('MS2D', 'εισθον', 'boi', 'the')
dialform('MS3D', 'εισθον', 'boi', 'the')
dialform('MS2P', 'εισθε', 'boi', 'the')
dialform('AI2S', 'ῑς', 'boi') -- 28
dialform('AI3S', 'ῑ', 'boi')
dialform('AS2S', 'ῑς', 'boi') -- this is a conjecture
dialform('AS3S', 'ῑ', 'boi')
dialform('MI2S', 'εο / ευ', 'epi', 'ion') -- 42.5
dialform('MC2S', 'εο / ευ', 'epi', 'ion')
dialform('APF', 'ῶσᾰ', 'severe', 'boi') -- 77.3
dialform('APF', 'όνσᾰ', 'kre', 'arg')
dialform('APF', 'όνσᾰ', 'the', 'ark')
dialform('APF', 'οισᾰ', 'les')
dialform('AS3P', 'ωντῐ', 'west') -- 138.4
dialform('AS3P', 'ωνσῐ', 'ara')
dialform('AS3P', 'ωσῐ', 'kyp')
dialform('AS3P', 'ωνθῐ', 'boi', 'the')
dialform('AS3P', 'ῳσῐ', 'les')
dialform('MC3P', 'όσθω', 'epd', 'lak') -- 140
dialform('MC3P', 'ούσθω', 'ker')
dialform('MC3P', 'όσθων', 'ato', 'ele')
dialform('AS3S', 'η', 'ark') -- 149
dialform('AI', 'ην', 'les') -- 153
dialform('AI', 'εν', 'ark', 'del')
dialform('AI', 'εν', 'doric')
dialform('AI', 'ειν', 'kor', 'rho') -- exceptions to doric -εν
dialform('AI', 'ην', 'ele', 'lak')
dialform('AI', 'έμεν', 'boi', 'the') -- 155
dialforms_aorpass()
end
conjugations['aor-emi'] = function()
ctable = data.aor_emi
pctable = data.aor_pass
pstem = stem3
pstem2 = stem4
if not_attic(args.dial) then
-- this is never mentioned by Buck, but judging from Pharr the optative dual/plural with η is Attic only
ctable['AO2D'] = 'εῖτον'
ctable['AO3D'] = 'είτην'
ctable['AO1P'] = 'εῖμεν'
ctable['AO2P'] = 'εῖτε'
ctable['AO3P'] = 'εῖεν'
end
dialform('AI', 'έμεν(αι)', 'epi')
dialform('AS1S', 'εω', 'nonIA')
dialform('AS2S', 'ηαι', 'nonIA')
dialform('AS1P', 'εωμεν', 'nonIA')
dialform('MS1S', 'εωμαι', 'nonIA')
dialform('MS1P', 'εωμεν', 'nonIA')
dialform('MS3P', 'εωνται', 'nonIA')
dialform('AS1S', 'ῐω', 'buck9')
dialform('AS1P', 'ῐωμεν', 'buck9')
dialform('MS1S', 'ῐωμαι', 'buck9')
dialform('MS1P', 'ῐωμεν', 'buck9')
dialform('MS3P', 'ῐωνται', 'buck9')
dialform('MO3S', 'εῖτο', 'nonIA')
dialform('MO2D', 'εῖσθον', 'nonIA')
dialform('MO3D', 'είσθην', 'nonIA')
dialform('MO1P', 'είμεθᾰ', 'nonIA')
dialform('MO2P', 'εῖσθε', 'nonIA')
dialform('MO3P', 'εῖντο', 'nonIA')
dialform('APF', 'ῆσᾰ', 'severe') -- 77.3
dialform('APF', 'ένσᾰ', 'kre', 'arg')
dialform('APF', 'ένσᾰ', 'the', 'ark')
dialform('AS3P', 'εωντῐ', 'west') -- 138.4
dialform('AS3P', 'εωνσῐ', 'ara')
dialform('AS3P', 'ῐωσῐ', 'kyp')
dialform('AS3P', 'ῐωνθῐ', 'boi')
dialform('AS3P', 'εωνθῐ', 'the')
dialform('AS3P', 'εῳσῐ', 'les')
dialform('AI3P', 'εν', 'nonIA') -- 138.5
dialform('AI', 'έμεναι', 'les') -- 154
dialform('AI', 'έμεν', 'the', 'boi')
dialform('AI', 'έμεν', 'west')
dialform('AI', 'έμην, έμεν', 'kre')
dialform('AI', 'έμειν', 'rho')
end
conjugations['aor-omi'] = function()
ctable = data.aor_omi
pctable = data.aor_pass
pstem = stem3
pstem2 = stem4
if not_attic(args.dial) then
-- this is never mentioned by Buck, but judging from Pharr the optative dual/plural with η is Attic only
ctable['AO2D'] = 'οῖτον'
ctable['AO3D'] = 'οίτην'
ctable['AO1P'] = 'οῖμεν'
ctable['AO2P'] = 'οῖτε'
ctable['AO3P'] = 'οῖεν'
end
dialform('AI', 'όμεν(αι)', 'epi')
dialform('APF', 'ῶσᾰ', 'severe', 'boi') -- 77.3
dialform('APF', 'όνσᾰ', 'kre', 'arg')
dialform('APF', 'όνσᾰ', 'the', 'ark')
dialform('APM', 'οις', 'les')
dialform('APF', 'οισᾰ', 'les')
dialform('AS3P', 'ῶντῐ', 'west') -- 138.4
dialform('AS3P', 'ῶνσῐ', 'ara')
dialform('AS3P', 'ῶσῐ', 'kyp')
dialform('AS3P', 'ῶνθῐ', 'boi', 'the')
dialform('AS3P', 'ῳσῐ', 'les')
dialform('AI3P', 'ον', 'nonIA') -- 138.5
dialform('AI', 'όμεναι', 'les') -- 154
dialform('AI', 'όμεν', 'the', 'boi')
dialform('AI', 'όμεν', 'west')
dialform('AI', 'όμην, όμεν', 'kre')
dialform('AI', 'όμειν', 'rho')
end
conjugations['aor-amiw'] = function()
require('Module:debug').track('grc-conj/aor-amiw')
ctable = data.aor_amiw
pctable = data.aor_pass
pstem = stem3
pstem2 = stem4
if not_attic(args.dial) then
-- this is never mentioned by Buck, but judging from Pharr the optative dual/plural with η is Attic only
ctable['AO2D'] = 'αῖτον'
ctable['AO3D'] = 'αίτην'
ctable['AO1P'] = 'αῖμεν'
ctable['AO2P'] = 'αῖτε'
ctable['AO3P'] = 'αῖεν'
end
dialform('APF', 'ᾰ́νσᾰ', 'kre', 'arg') -- 77.3
dialform('APF', 'ᾰ́νσᾰ', 'the', 'ark')
dialform('APM', 'αις', 'les')
dialform('APF', 'αισᾰ', 'les')
dialform('AS3P', 'ῶντῐ', 'west') -- 138.4
dialform('AS3P', 'ῶνσῐ', 'ara')
dialform('AS3P', 'ῶσῐ', 'kyp')
dialform('AS3P', 'ῶνθῐ', 'boi', 'the')
dialform('AS3P', 'ῳσῐ', 'les')
dialform('AI3P', 'ᾰν', 'nonIA') -- 138.5
dialform('AI', 'ᾰ́μεναι', 'les') -- 154
dialform('AI', 'ᾰ́μεν', 'the', 'boi')
dialform('AI', 'ᾰ́μεν', 'west')
dialform('AI', 'ᾰ́μην, ᾰ́μεν', 'kre')
dialform('AI', 'ᾰ́μειν', 'rho')
end
conjugations['aor-ami'] = function()
require('Module:debug').track('grc-conj/aor-ami')
ctable = data.aor_ami
pctable = data.aor_pass
pstem = stem3
pstem2 = stem4
if not_attic(args.dial) then
-- this is never mentioned by Buck, but judging from Pharr the optative dual/plural with η is Attic only
ctable['AO2D'] = 'αῖτον'
ctable['AO3D'] = 'αίτην'
ctable['AO1P'] = 'αῖμεν'
ctable['AO2P'] = 'αῖτε'
ctable['AO3P'] = 'αῖεν'
end
dialform('AI', 'ᾰ́μεν(αι)', 'epi')
end
conjugations['aor-hmi'] = function()
require('Module:debug').track('grc-conj/aor-hmi')
ctable = data.aor_hmi
pctable = data.aor_pass
pstem = stem3
pstem2 = stem4
end
conjugations['aor-wmi'] = function()
ctable = data.aor_wmi
pctable = data.aor_pass
pstem = stem3
pstem2 = stem4
if not_attic(args.dial) then
-- this is never mentioned by Buck, but judging from Pharr the optative dual/plural with η is Attic only
ctable['AO2D'] = 'οῖτον'
ctable['AO3D'] = 'οίτην'
ctable['AO1P'] = 'οῖμεν'
ctable['AO2P'] = 'οῖτε'
ctable['AO3P'] = 'οῖεν'
end
dialform('AI', 'ῶμεν / ώμεναι', 'epi')
dialform('APF', 'ῶσᾰ', 'severe', 'boi') -- 77.3
dialform('APF', 'όνσᾰ', 'kre', 'arg')
dialform('APF', 'όνσᾰ', 'the', 'ark')
dialform('APM', 'οις', 'les')
dialform('APF', 'οισᾰ', 'les')
dialform('AS3P', 'ῶντῐ', 'west') -- 138.4
dialform('AS3P', 'ῶνσῐ', 'ara')
dialform('AS3P', 'ῶσῐ', 'kyp')
dialform('AS3P', 'ῶνθῐ', 'boi', 'the')
dialform('AS3P', 'ῳσῐ', 'les')
dialform('AI3P', 'ον', 'nonIA') -- 138.5
dialform('AI', 'ώμεναι', 'les') -- 154
dialform('AI', 'ῶμεν', 'the', 'boi')
dialform('AI', 'ῶμεν', 'west')
dialform('AI', 'ώμην, ῶμεν', 'kre')
dialform('AI', 'ώμειν', 'rho')
end
conjugations['aor-numi'] = function()
ctable = data.aor_numi
pctable = data.aor_pass
pstem = stem3
pstem2 = stem4
end
conjugations['aor-hiemi-comp'] = function()
ctable = data.aor_hiemic
pctable = data.aor_pass
pstem = stem3
pstem2 = stem4
end
conjugations['aor-irreg'] = function()
ctable = {}
-- no aor-irregs have passive forms so we should be fine
local i = 2
for _, mood in ipairs({'I', 'S', 'O', 'C'}) do
for person_number in iter_person_number() do
args['A' .. mood .. person_number] = args['A' .. mood .. person_number] or args[i]
i = i + 1
end
end
args['AI'] = args['AI'] or args[34]
args['APM'] = args['APM'] or args[35]
args['APF'] = args['APF'] or args[36]
args['APN'] = args['APN'] or args[37]
end
conjugations['perf'] = function()
ctable = data.perf
pstem = stem2
if umatch(strip_accent(pstem), '[αεηιουω]$') then
pstem = pstem .. 'V'
ctable['MI3P'] = 'νται'
end
-- FIXME: In the dual and plural, the second form (εἶμεν for instance)
-- is Attic and shouldn't be displayed in Ionic or Epic tables.
local to_be_forms = {
['S1S']='ὦ',
['S2S']='ᾖς',
['S3S']='ᾖ',
['S2D']='ἦτον',
['S3D']='ἦτον',
['S1P']='ὦμεν',
['S2P']='ἦτε',
['S3P']='ὦσῐ(ν)',
['O1S']='εἴην',
['O2S']='εἴης',
['O3S']='εἴη',
['O2D']='εἴητον / εἶτον',
['O3D']='εἰήτην / εἴτην',
['O1P']='εἴημεν / εἶμεν',
['O2P']='εἴητε / εἶτε',
['O3P']='εἴησᾰν / εἶεν',
}
local mediopassive_participle = args['MPM'] and '*' .. args['MPM'] or ctable['MPM']
local mediopassive_participle_stem = gsub(mediopassive_participle, 'ος$', '')
if args['MPM'] then
ctable['MPM'] = mediopassive_participle
end
ctable['MPF'] = mediopassive_participle_stem .. 'η'
ctable['MPN'] = mediopassive_participle_stem .. 'ον'
args['MPM'], args['MPF'], args['MPN'] = nil, nil, nil
for code, form in pairs(to_be_forms) do
local number = code:sub(-1)
local ending = number == 'S' and 'ος'
or number == 'D' and 'ω'
or 'οι'
-- No accent modification needed in the dual
-- because the perfect passive participle has a non-recessive accent,
-- on the penult.
-- Add * to suppress addition of stem.
local to_be_form = ugsub(
form,
'(()' .. word_char .. '+)',
function(all, pos)
-- Avoid adding * before ν in ὦσῐ(ν).
local prec = pos - 1
local preceding = usub(form, prec, prec)
if preceding == '(' or match(preceding, '%a') then
return all
end
return '*' .. all
end)
ctable['M' .. code] = mediopassive_participle_stem .. ending .. ' ' .. to_be_form
end
--active not found in Homer
dialform('AI3P', 'ᾰτῐ, ᾰντῐ', 'west') -- 138.4, but no clear distinction?
dialform('AI3P', 'ᾰσῐ', 'ark')
dialform('AI3P', 'ᾰνθῐ', 'boi', 'the')
dialform('AS3P', 'ωντῐ', 'west') -- 138.4
dialform('AS3P', 'ωνσῐ', 'ara')
dialform('AS3P', 'ωσῐ', 'kyp')
dialform('AS3P', 'ωνθῐ', 'boi', 'the')
dialform('AS3P', 'ῳσῐ', 'les')
dialform('AI', 'ην', 'les') -- 147.2
dialform('AI', 'εν', 'del', 'kre')
dialform('AI', 'ειν', 'rho', 'epd')
dialform('APM', 'ων', 'aio') -- 147.3
dialform('APF', 'οισᾰ', 'les')
dialform('APF', 'ονσᾰ', 'the')
dialform('APF', 'ωσᾰ', 'boi')
dialform('APN', 'ον', 'aio')
end
conjugations['plup'] = function()
ctable = data.plup
pstem = stem2
if umatch(strip_accent(pstem), '[αεηιουω]$') then
pstem = pstem .. 'V'
ctable['MI3P'] = 'ντο'
end
dialform('AI1S', 'εεν/ειν/εᾰ', 'epi', 'ion')
dialform('AI2S', 'εες/εις/εᾰς/ης', 'epi')
dialform('AI2S', 'εες/εις/εᾰς', 'ion')
dialform('AI3S', 'εε(ν)/ει(ν)', 'epi')
dialform('AI3S', 'εε/ει', 'ion')
dialform('AI3S', 'εν', 'nonIA')
dialform('AI1P', 'εμεν/ειμεν', 'koi')
dialform('AI2P', 'ετε/ειτε', 'koi')
dialform('AI3P', 'εσᾰν/εν', 'epi')
dialform('AI3P', 'εσᾰν/εισᾰν', 'koi')
dialform('AI3P', 'εσᾰν', 'nonIA')
end
conjugations['perf-ami'] = function()
ctable = data.perf_ami
if not_attic(args.dial) then
-- this is never mentioned by Buck, but judging from Pharr the optative dual/plural with η is Attic only
ctable['AO2D'] = 'αῖτον'
ctable['AO3D'] = 'αίτην'
ctable['AO1P'] = 'αῖμεν'
ctable['AO2P'] = 'αῖτε'
ctable['AO3P'] = 'αῖεν'
end
dialform('AI', 'ᾰ́μεν(αι)', 'epi')
dialform('APM', 'ᾰώς', 'epi')
dialform('APF', 'ᾰϋῖᾰ', 'epi') -- pharr and smyth disagree here
dialform('APN', 'ᾰός', 'epi')
end
conjugations['plup-ami'] = function()
ctable = data.plup_ami
end
conjugations['perf-irreg'] = function()
ctable = {}
-- no perf-irregs have passive forms so we should be fine
local i = 2
for _, mood in ipairs({'I', 'S', 'O', 'C'}) do
for person_number in iter_person_number() do
args['A' .. mood .. person_number] = args['A' .. mood .. person_number] or args[i]
i = i + 1
end
end
args['AI'] = args['AI'] or args[34]
args['APM'] = args['APM'] or args[35]
args['APF'] = args['APF'] or args[36]
args['APN'] = args['APN'] or args[37]
end
conjugations['plup-irreg'] = function()
ctable = {}
local i = 2
for person_number in iter_person_number() do
args['AI' .. person_number] = args['AI' .. person_number] or args[i]
i = i + 1
end
end
-- Functions for generating the inflection table
local aliases = {
['pres'] = 'Present',
['imperf'] = 'Imperfect',
['fut'] = 'Future',
['aor'] = 'Aorist',
['perf'] = 'Perfect',
['plup'] = 'Pluperfect',
['futp'] = 'Future perfect',
['active'] = 'A',
['middle'] = 'M',
['passive'] = 'P',
['middle/<wbr>passive'] = 'M',
['I'] = 'indicative',
['S'] = 'subjunctive',
['O'] = 'optative',
['C'] = 'imperative',
}
local moods = {
['pres'] = {'I', 'S', 'O', 'C'},
['imperf'] = {'I'},
['fut'] = {'I', 'O'},
['aor'] = {'I', 'S', 'O', 'C'},
['perf'] = {'I', 'S', 'O', 'C'},
['plup'] = {'I'},
['futp'] = {'I', 'O'},
}
local voices
local full_tense_name = {
pres = 'present',
imperf = 'imperfect',
fut = 'future',
aor = 'aorist',
perf = 'perfect',
plup = 'pluperfect',
futp = 'future-perfect',
}
local function get_tense_class(tense)
return 'grc-conj-' .. full_tense_name[tense]
end
-- Make the table
function make_table()
local form = args.form
voices = {'active', 'middle/<wbr>passive'}
if find(form, 'act') then
voices = {'active'}
elseif find(form, 'mid') then
voices = {'middle'}
elseif find(form, 'pass') then
voices = {'passive'}
elseif find(form, 'am') then
voices = {'active', 'middle'}
elseif find(form, 'ap') then
voices = {'active', 'passive'}
elseif tense == 'fut' or tense == 'aor' then
if find(form, 'mp') then
voices = {'middle', 'passive'}
else
voices = {'active', 'middle', 'passive'}
end
elseif find(form, 'mp') then
voices = {'middle/<wbr>passive'}
end
if tense ~= 'fut' and tense ~= 'aor' then
aliases['passive'] = 'M'
end
local dial, dialtitle = args.dial
if dial then
dialtitle = "(" .. get_label_display(args.dial) .. ")"
end
return require('Module:TemplateStyles')('Module:grc-conj/style.css')
.. [=[<div class="NavFrame">
<div class="NavHead"> ]=] .. aliases[tense] .. ': '
.. get_title(args.title) .. ' ' .. (args['titleapp'] or dialtitle or '') .. [=[</div>
<div class="NavContent">
<div class="center">
{| class="grc-conj ]=] .. get_tense_class(tense) .. [=["
|-
! colspan="2" class="grc-conj-number" | number
! colspan="3" class="grc-conj-number" | singular
! colspan="2" class="grc-conj-number" | dual
! colspan="3" class="grc-conj-number" | plural
]=] .. make_num_header() .. make_rows() .. make_voice_header() .. make_nonfin_forms() .. make_notes() .. [=[
|}
</div></div></div>]=] .. categories
end
function get_title(title_spec)
if title_spec ~= nil then
return title_spec
end
local title = {}
if conjtype == 'aor-emi' or conjtype == 'aor-omi' or conjtype == 'perf-ami' or conjtype == 'plup-ami' then
insert(title, link_form('AI2D', 'true'))
end
for _, voice in ipairs(voices) do
insert(title, link_form(aliases[voice] .. 'I1S', true) )
end
return concat(title, ", ")
end
local function full_link(term, alt, accel)
local _full_link = require('Module:links').full_link
lang = lang or require('Module:languages').getByCode('grc')
function full_link(term, alt, accel)
return _full_link{ lang = lang, term = term, alt = alt, tr = '-', accel = accel }
end
return full_link(term, alt, accel)
end
local target = nil
local get_contraction_map = require("Module:memoize")(function (conjugation_code)
if find(conjugation_code, 'con') then
local dial = args.dial
local vowel = match(conjugation_code, 'con%-(%a+)')
local contraction_type
if vowel == 'a' then
if dial == 'boi' or dialgroups['west'][dial] then
contraction_type = 'eta'
else
contraction_type = 'a'
end
elseif vowel == 'e' then
if not not_attic(dial) then
contraction_type = 'e'
elseif dial == 'epi' or dial == 'ion' then
contraction_type = 'e-epiion'
elseif dial == 'boi' then
contraction_type = 'e-boi'
elseif dialgroups['buck9'][dial] then
contraction_type = 'e-severe9'
elseif dialgroups['severe'][args.dial] then
contraction_type = 'e-severe'
else
contraction_type = 'e-nonatt'
end
else
contraction_type = match(conjugation_code, 'con%-(.+)')
end
local contraction_map = contraction_types[contraction_type]
if not contraction_map then
error('Invalid contraction type: ' .. tostring(contraction_type))
end
return contraction_map
end
return false
end)
function link_form(form_code, istitle)
local voice_code = form_code:sub(1, 1)
local forms = (voice_code == 'P') and pctable or ctable
local accel
-- check that it's a valid voice
local valid_voice
for _, voice in ipairs(voices) do
if aliases[voice] == voice_code then
valid_voice = true
break
end
end
if not valid_voice then
return nil
end
-- Get the form
local form = forms[form_code]
if (args[form_code] == nil) and (form == nil or form == '') then return nil end
-- Apply contraction
local contraction_map = get_contraction_map(conjtype)
if contraction_map then
form = ugsub(form, '[ÊĒÉĴĤḤÔŌÓÛÚŴẂÎĪÍ]', contraction_map)
end
form = dialforms_generic(form_code, form)
-- Get the stem
local stem = (voice_code == 'P') and pstem or stem
if (tense == 'perf' or tense == 'plup') and voice_code == 'M' then stem = pstem end
if tense == 'aor' and not match(form_code, '.I..') then
stem = (voice_code == 'P') and pstem2 or stem2
end
if args[form_code] then
form = args[form_code]
require('Module:debug').track('grc-conj/form-override')
if form == '' or form == '-' then
return nil
end
end
if (tense == 'perf' or tense == 'plup') and match(form, '[MSTH]') then
for _, replacements in pairs(perf_euph) do
local pattern = replacements[1] .. '$'
if umatch(stem, pattern) then
stem = ugsub(stem, pattern, '')
for i, letter in ipairs({'M', 'S', 'T', 'H'}) do
form = gsub(form, letter, replacements[i + 1])
end
break
end
end
end
stem = gsub(stem, 'V', '')
form = gsub(form, ' *[,/;] *', ',<br>')
-- Link the form
link = function(alt)
local parenflag = false
local char1 = usub(alt, 1, 1)
if char1 == '(' then
parenflag = true
end
if parenflag then
alt = usub(alt, 2)
elseif char1 == '*' then
alt = usub(alt, 2)
return full_link(target, alt, accel)
elseif not args[form_code] then
alt = stem .. alt
end
--accentuate
if not parenflag then
if args.dial == 'les' then
alt = antepenult(alt)
elseif form_code == 'APN' or form_code == 'AI' or (form_code == 'MI' and tense == 'perf') then
alt = pencirc(alt)
elseif form_code == 'AO3S' and match(alt, 'ι$') then
alt = penult(alt)
-- if prefix has been provided and this is not a present or future or aorist non-indicative form
elseif args['prefix'] and not (tense == 'pres' or tense == 'fut' or
(tense == 'aor' and not find(form_code, '.I..'))) then
if alt:sub(1, #args['prefix']) ~= args['prefix'] then
-- Safe to error here?
mw.log('Beginning of stem ' .. alt .. " doesn't match prefix "
.. args['prefix'] .. '.')
end
alt = args['prefix'] .. antepenult(alt:sub(#args['prefix'] + 1))
else
alt = antepenult(alt)
end
end
--deal with parentheses
if parenflag then
target = target .. alt
else
target = alt
end
-- Fix sigma.
target = ugsub(target, '[σς](.?)',
function (after)
if after == '' then
return 'ς' .. after
end
return 'σ' .. after
end)
return (parenflag and '(' or '') .. full_link(target, alt, accel)
end
if match(form, 'με%(σ%)θᾰ$') then
if match(form, ',') then -- for 2 forms
local form1, form2 = match(form, "([^,]+),<br>([^,]+)$")
if not args[form_code] then
form1 = stem .. form1
form2 = stem .. form2
end
form1 = toNFC(antepenult(form1))
form2 = toNFC(antepenult(form2))
local me1 = gsub(form1, '%b().+', '')
local stha1 = gsub(form1, '[()]', '')
local tha1 = gsub(form1, '%b()', '')
local me2 = gsub(form2, '%b().+', '')
local stha2 = gsub(form2, '[()]', '')
local tha2 = gsub(form2, '%b()', '')
form1 = full_link('[[' .. tha1 .. '|' .. me1 .. ']]([[' .. stha1 .. '|σ]])[['
.. tha1 .. '|θᾰ]]', nil, accel)
form2 = full_link('[[' .. tha2 .. '|' .. me2 .. ']]([[' .. stha2 .. '|σ]])[['
.. tha2 .. '|θᾰ]]', nil, accel)
form = form1 .. ",<br>" .. form2
else
if not args[form_code] then
form = stem .. form
end
form = toNFC(antepenult(form))
local me = gsub(form, '%b().+', '') -- Remove parentheses, their contents, and everything after.
local stha = gsub(form, '[()]', '') -- Remove parentheses.
local tha = gsub(form, '%b()', '') -- Remove parentheses and their contents.
form = full_link('[[' .. tha .. '|' .. me .. ']]([[' .. stha .. '|σ]])[['
.. tha .. '|θᾰ]]', nil, accel)
end
else
form = ugsub(form, '(%(?' .. word_char .. '+)', link)
end
if istitle then
form = match(form, '[^,]+') -- capture up to comma
form = ugsub(form, '%s+$', '') -- strip final whitespace
end
return form
end
function make_num_header()
local header = '|-\n! colspan="2" |\n'
for _, person in ipairs{'first', 'second', 'third', 'second', 'third', 'first', 'second', 'third'} do
header = header .. '! class="grc-conj-person" |' .. person .. '\n'
end
return header
end
function make_rows()
local rows = ''
local lmoods = args['indonly'] and {'I'} or moods[tense]
for _, voice in pairs(voices) do
rows = rows .. '|-\n! rowspan="' .. #lmoods .. '" | ' .. voice .. '\n\n'
for i, mood in ipairs(lmoods) do
if i ~= 1 then rows = rows .. '|-\n' end
rows = rows .. '! ' .. aliases[mood] .. '\n'
for person_number in iter_person_number() do
if aliases[voice] == nil then error(voice) end
code = aliases[voice] .. mood .. person_number
rows = rows .. '| class="grc-conj-finite-form" | ' .. (link_form(code) or ' ') .. '\n'
end
end
end
contractnote = find(rows, '†')
return rows
end
function make_voice_header()
local header = ''
if tense == 'imperf' or tense == 'plup' or args['indonly'] then
return header
end
header = '|-\n! colspan="2" |'
if tense == 'fut' or tense == 'aor' then
header = header .. '\n! colspan="3" | '
if voices[1] == 'active' then header = header .. 'active' end
header = header .. '\n! colspan="2" | '
if voices[2] == 'middle' or voices[1] == 'middle' then header = header .. 'middle' end
header = header .. '\n! colspan="3" | '
if voices[1] == 'passive' or voices[2] == 'passive' or voices[3] == 'passive' then header = header .. 'passive' end
else
header = header .. '\n! colspan="4" | '
if voices[1] == 'active' then header = header .. 'active' end
header = header .. '\n! colspan="4" | '
if voices[1] == 'middle/<wbr>passive' or voices[2] == 'middle/<wbr>passive' then header = header .. 'middle/<wbr>passive' end
end
header = header .. '\n'
return header
end
function make_nonfin_forms()
if tense == 'imperf' or tense == 'plup' or args['indonly'] then
return ''
end
local output = '|-\n! colspan="2" | infinitive\n'
local flag = (tense == 'fut' or tense == 'aor')
output = output .. '| colspan="' .. (flag and 3 or 4) .. '" class="grc-conj-nonfinite-form" | ' .. (link_form('AI') or '') .. '\n'
output = output .. '| colspan="' .. (flag and 2 or 4) .. '" class="grc-conj-nonfinite-form" | ' .. (link_form('MI') or '') .. '\n'
if flag then
output = output .. '| colspan="3" class="grc-conj-nonfinite-form" | ' .. (link_form('PI') or '') .. '\n'
end
output = output .. '|-\n! rowspan="3" class="grc-conj-nonfinite-form" | participle\n'
for _, gender in ipairs{'m', 'f', 'n'} do
local gender_upper = upper(gender)
if gender ~= 'm' then
output = output .. '|-\n'
end
output = output .. '! ' .. gender .. '\n'
output = output .. '| colspan="' .. (flag and 3 or 4) .. '" class="grc-conj-nonfinite-form" | ' .. (link_form('AP' .. gender_upper ) or '') .. '\n'
output = output .. '| colspan="' .. (flag and 2 or 4) .. '" class="grc-conj-nonfinite-form" | ' .. (link_form('MP' .. gender_upper ) or '') .. '\n'
if flag then
output = output .. '| colspan="3" class="grc-conj-nonfinite-form" | ' .. (link_form('PP' .. gender_upper ) or '') .. '\n'
end
end
return output
end
function make_notes()
local notes = args.notes or ''
if notes ~= '' then
notes = '\n' .. notes
end
if contractnote then
notes = '† [[Appendix:Ancient Greek contraction|contracted]]' .. notes -- should go first
end
local dial = args.dial
if dial == 'att' or not dial then
notes = 'This table gives Attic inflectional endings. '
.. 'For conjugation in dialects other than Attic, see '
.. '[[Appendix:Ancient Greek dialectal conjugation]].' .. notes
elseif not (dial == 'koi' or dial == 'byz' or dial == 'gkm') then
notes = 'Dialects other than Attic are not well attested. '
.. 'Some forms are based on conjecture. Use with caution. '
.. 'For more details, see [[Appendix:Ancient Greek dialectal conjugation]].' .. notes
end
if notes == '' then
return ''
end
return [[
|-
! class="grc-conj-notes-header | Notes:
| class="grc-conj-notes" colspan="13" | ]] .. [[<div class="use-with-mention">]] .. notes .. [[</div>]]
end
return export
bsrwqm31w298r8govk8ely952rcp0cb
Module:grc-conj/documentation
828
122327
237182
188481
2025-04-05T19:45:02Z
en>Surjection
0
237182
wikitext
text/x-wiki
This module is the backend to [[Template:grc-conj]]; please see that page for documentation.
==Subpages==
{{Special:PrefixIndex/Module:grc-conj/}}
==To do==
* Get Ionic <code>pres-con-e</code> and <code>imperf-con-e</code> to show one table with both <code>εο</code> and <code>ευ</code> forms.
* Spell out forms with parentheses (<code>λέγουσι(ν)</code> to <code>λέγουσι, λέγουσιν</code>) so that they show up in search results even when they don't have entries.
* Several links in the perfect passive periphrases go to the wrong entries.
==Parameter census==
From 2019-10-20 dump:
{| class="wikitable sortable"
! parameter !! count
{{#invoke:string/templates|gsub|1=
1 5064
2 4682
3 2309
form 1780
dial 810
4 691
5 674
titleapp 221
prefix 95
indonly 73
dial1 41
MI3S 35
AC2S 31
MI2S 30
MPM 28
9 28
6 28
MI3P 28
MPN 26
8 26
MPF 25
7 25
MI 24
AI3P 24
MI1S 24
AI 22
MI1P 22
MI2P 20
APM 19
APN 18
MC2S 18
APF 16
MI3D 16
MI2D 16
AI3S 15
notes 15
35 14
17 14
36 14
34 14
19 13
15 13
25 13
20 13
10 13
33 13
12 13
32 13
30 13
22 13
27 13
28 13
37 13
24 13
29 13
16 13
11 13
23 13
18 13
21 13
14 12
13 12
AI1S 10
AI2S 10
AI1P 10
MS3S 9
MS1S 8
AI2P 7
AS3S 7
MC3S 7
MS2S 7
PC2S 7
MS2P 7
MC3P 6
MS2D 6
AS1P 6
AC3S 6
MS3P 6
AI3D 6
AC2P 6
MS3D 6
MC2P 6
MO3P 5
MO3S 5
MS1P 5
AC3D 4
AC2D 4
PI 4
MC2D 4
AS2S 4
MO2D 4
dial2 4
MO1S 4
PI3P 4
AI2D 4
MO2P 4
MC3D 4
MO2S 4
PI3S 3
MO3D 3
AO2P 3
PI1S 3
MO1P 3
AS1S 3
AS3D 2
PPM 2
31 2
PPN 2
AS3P 2
AS2P 2
PPF 2
AC3P 2
26 2
AS2D 2
title 2
PI2S 1
AO1P 1
from 1
fomr 1
PS2S 1
AO3P 1
PC2P 1
PC2D 1
AO2S 1
AO1S 1
AO2D 1
PS3S 1
PS2P 1
PO3P 1
PS1S 1
AI12 1
AO3S 1
|2=(%C+)%c(%d+)|3={{!}}-
{{!}} %1 {{!!}} %2}}
|}
<includeonly>
{{module cat}}
[[fr:Module:grc-conj]]
</includeonly>
pyfs9pkcco4pvxde7f74y1nk1oq1ehn
237183
237182
2026-09-07T07:26:27Z
Lee
19
[[:en:Module:grc-conj/documentation]] වෙතින් එක් සංශෝධනයක්
237182
wikitext
text/x-wiki
This module is the backend to [[Template:grc-conj]]; please see that page for documentation.
==Subpages==
{{Special:PrefixIndex/Module:grc-conj/}}
==To do==
* Get Ionic <code>pres-con-e</code> and <code>imperf-con-e</code> to show one table with both <code>εο</code> and <code>ευ</code> forms.
* Spell out forms with parentheses (<code>λέγουσι(ν)</code> to <code>λέγουσι, λέγουσιν</code>) so that they show up in search results even when they don't have entries.
* Several links in the perfect passive periphrases go to the wrong entries.
==Parameter census==
From 2019-10-20 dump:
{| class="wikitable sortable"
! parameter !! count
{{#invoke:string/templates|gsub|1=
1 5064
2 4682
3 2309
form 1780
dial 810
4 691
5 674
titleapp 221
prefix 95
indonly 73
dial1 41
MI3S 35
AC2S 31
MI2S 30
MPM 28
9 28
6 28
MI3P 28
MPN 26
8 26
MPF 25
7 25
MI 24
AI3P 24
MI1S 24
AI 22
MI1P 22
MI2P 20
APM 19
APN 18
MC2S 18
APF 16
MI3D 16
MI2D 16
AI3S 15
notes 15
35 14
17 14
36 14
34 14
19 13
15 13
25 13
20 13
10 13
33 13
12 13
32 13
30 13
22 13
27 13
28 13
37 13
24 13
29 13
16 13
11 13
23 13
18 13
21 13
14 12
13 12
AI1S 10
AI2S 10
AI1P 10
MS3S 9
MS1S 8
AI2P 7
AS3S 7
MC3S 7
MS2S 7
PC2S 7
MS2P 7
MC3P 6
MS2D 6
AS1P 6
AC3S 6
MS3P 6
AI3D 6
AC2P 6
MS3D 6
MC2P 6
MO3P 5
MO3S 5
MS1P 5
AC3D 4
AC2D 4
PI 4
MC2D 4
AS2S 4
MO2D 4
dial2 4
MO1S 4
PI3P 4
AI2D 4
MO2P 4
MC3D 4
MO2S 4
PI3S 3
MO3D 3
AO2P 3
PI1S 3
MO1P 3
AS1S 3
AS3D 2
PPM 2
31 2
PPN 2
AS3P 2
AS2P 2
PPF 2
AC3P 2
26 2
AS2D 2
title 2
PI2S 1
AO1P 1
from 1
fomr 1
PS2S 1
AO3P 1
PC2P 1
PC2D 1
AO2S 1
AO1S 1
AO2D 1
PS3S 1
PS2P 1
PO3P 1
PS1S 1
AI12 1
AO3S 1
|2=(%C+)%c(%d+)|3={{!}}-
{{!}} %1 {{!!}} %2}}
|}
<includeonly>
{{module cat}}
[[fr:Module:grc-conj]]
</includeonly>
pyfs9pkcco4pvxde7f74y1nk1oq1ehn
වික්ෂනරි:පරිපාලකවරු/විවාද/Lee 8
4
144890
237177
237167
2026-09-07T07:17:49Z
Lee
19
/* තීරණය */
237177
wikitext
text/x-wiki
===Lee===
ආයුබෝවන්!
මම [[:w:si:User:Lee|සිංහල විකිපීඩියාවේ]] පරිපාලකවරයෙක් ලෙස මේ වනවිටත් කටයුතු කරමින් සිටින්නෙක් වෙමි. එසේම [[:wikibooks:si:User:Lee|සිංහල විකිපොත්]] සහ මෙම ව්යාපෘතියේ තාවකාලික පරිපාලකවරයෙක් ලෙස දැනට ද කටයුතු කරමින් සිටිමි. මගේ මවුබස සිංහල වන නිසා, ගෝලීය පරිපාලකවරුන්ට වඩා නඩත්තු කටයුතු වල නිරත වීමට මට ඇති හැකියාව ඉහළ බව මගේ අදහසයි. වඩාත් සුදුසු අයෙක් මෙම කටයුත්ත බාරගන්නා තෙක් එම කාර්යය දිගටම කරගෙන යාම මාගේ අරමුණයි. --[[පරිශීලක:Lee|Lee]] ([[පරිශීලක සාකච්ඡාව:Lee|සාකච්ඡාව]]) 05:01, 29 ජූලි 2026 (යූටීසී)
{{collapse|title=Request in English|
Hi,
I'm [[User:Lee|Lee]]. My home wiki is Sinhala Wikipedia and I'm also an administrator on that project. I am a native speaker of Sinhala. So I might be a little better than global sysops in helping with maintenance tasks. I also held the temporary sysop flag on this site previously for some time and I hope to continue my work for this project until someone with more free time can take over. --[[පරිශීලක:Lee|Lee]] ([[පරිශීලක සාකච්ඡාව:Lee|සාකච්ඡාව]]) 05:01, 29 ජූලි 2026 (යූටීසී)
}}
* ඡන්දය ආරම්භය (Vote starts): 05:01, 29 ජූලි 2026 (යූටීසී)
* ඡන්දය අවසානය (Vote ends): 2026-08-31 23:59 UTC
==== සහාය පළකිරීම ====
<!-- Support -->
<!-- මෙම නාම යෝජනාවට සහාය පළකිරීම සඳහා දැනට ප්රකාශිත ඡන්ද වලට පසුව එන පේලියේ '# {{subst:support}}' යනුවෙන් ටයිප් කරන්න. -->
==== විරෝදය පළකිරීම ====
<!-- Oppose -->
<!-- මෙම නාම යෝජනාවට විරෝදය පළකිරීම සඳහා දැනට ප්රකාශිත ඡන්ද වලට පසුව එන පේලියේ '# {{subst:oppose}}' යනුවෙන් ටයිප් කරන්න. -->
==== ඡන්දය දීමෙන් වැළකී සිටීම ====
<!-- Abstain -->
<!-- මෙම නාම යෝජනාවට අදළව ඡන්දය දීමෙන් වැළකී සිටීම සටහන් කිරීම සඳහා, දැනට ප්රකාශිත ඡන්ද වලට පසුව එන පේලියේ '# {{subst:abstain}}' යනුවෙන් ටයිප් කරන්න. -->
==== තීරණය ====
<!-- Decision -->
* කිසිම ඡන්දයක් ප්රකාශයට පත් නොවී ඡන්ද විමසීම අවසන් විය. --[[පරිශීලක:Lee|Lee]] ([[පරිශීලක සාකච්ඡාව:Lee|සාකච්ඡාව]]) 03:02, 5 සැප්තැම්බර් 2026 (යූටීසී)
* Granted for 3 years to expire on 2029-09-06. ([https://meta.wikimedia.org/w/index.php?title=Steward_requests/Permissions&oldid=31015209#Lee@siwiktionary මෙටා ඉල්ලීම])
qf09oyqq4kqwaj0w2zzhs93w3n1g3bz
237178
237177
2026-09-07T07:19:30Z
Lee
19
237178
wikitext
text/x-wiki
{{ලේඛනගත-සංවාදය-ආරම්භය}}
----
===Lee===
ආයුබෝවන්!
මම [[:w:si:User:Lee|සිංහල විකිපීඩියාවේ]] පරිපාලකවරයෙක් ලෙස මේ වනවිටත් කටයුතු කරමින් සිටින්නෙක් වෙමි. එසේම [[:wikibooks:si:User:Lee|සිංහල විකිපොත්]] සහ මෙම ව්යාපෘතියේ තාවකාලික පරිපාලකවරයෙක් ලෙස දැනට ද කටයුතු කරමින් සිටිමි. මගේ මවුබස සිංහල වන නිසා, ගෝලීය පරිපාලකවරුන්ට වඩා නඩත්තු කටයුතු වල නිරත වීමට මට ඇති හැකියාව ඉහළ බව මගේ අදහසයි. වඩාත් සුදුසු අයෙක් මෙම කටයුත්ත බාරගන්නා තෙක් එම කාර්යය දිගටම කරගෙන යාම මාගේ අරමුණයි. --[[පරිශීලක:Lee|Lee]] ([[පරිශීලක සාකච්ඡාව:Lee|සාකච්ඡාව]]) 05:01, 29 ජූලි 2026 (යූටීසී)
{{collapse|title=Request in English|
Hi,
I'm [[User:Lee|Lee]]. My home wiki is Sinhala Wikipedia and I'm also an administrator on that project. I am a native speaker of Sinhala. So I might be a little better than global sysops in helping with maintenance tasks. I also held the temporary sysop flag on this site previously for some time and I hope to continue my work for this project until someone with more free time can take over. --[[පරිශීලක:Lee|Lee]] ([[පරිශීලක සාකච්ඡාව:Lee|සාකච්ඡාව]]) 05:01, 29 ජූලි 2026 (යූටීසී)
}}
* ඡන්දය ආරම්භය (Vote starts): 05:01, 29 ජූලි 2026 (යූටීසී)
* ඡන්දය අවසානය (Vote ends): 2026-08-31 23:59 UTC
==== සහාය පළකිරීම ====
<!-- Support -->
<!-- මෙම නාම යෝජනාවට සහාය පළකිරීම සඳහා දැනට ප්රකාශිත ඡන්ද වලට පසුව එන පේලියේ '# {{subst:support}}' යනුවෙන් ටයිප් කරන්න. -->
==== විරෝදය පළකිරීම ====
<!-- Oppose -->
<!-- මෙම නාම යෝජනාවට විරෝදය පළකිරීම සඳහා දැනට ප්රකාශිත ඡන්ද වලට පසුව එන පේලියේ '# {{subst:oppose}}' යනුවෙන් ටයිප් කරන්න. -->
==== ඡන්දය දීමෙන් වැළකී සිටීම ====
<!-- Abstain -->
<!-- මෙම නාම යෝජනාවට අදළව ඡන්දය දීමෙන් වැළකී සිටීම සටහන් කිරීම සඳහා, දැනට ප්රකාශිත ඡන්ද වලට පසුව එන පේලියේ '# {{subst:abstain}}' යනුවෙන් ටයිප් කරන්න. -->
==== තීරණය ====
<!-- Decision -->
* කිසිම ඡන්දයක් ප්රකාශයට පත් නොවී ඡන්ද විමසීම අවසන් විය. --[[පරිශීලක:Lee|Lee]] ([[පරිශීලක සාකච්ඡාව:Lee|සාකච්ඡාව]]) 03:02, 5 සැප්තැම්බර් 2026 (යූටීසී)
* Granted for 3 years to expire on 2029-09-06. ([https://meta.wikimedia.org/w/index.php?title=Steward_requests/Permissions&oldid=31015209#Lee@siwiktionary මෙටා ඉල්ලීම])
----
{{ලේඛනගත-සංවාදය-අවසානය}}
c23ekqzx4sowi6z9of5iwnf1zg6novo
237179
237178
2026-09-07T07:24:09Z
Lee
19
237179
wikitext
text/x-wiki
{{ලේඛනගත-සංවාදය-ආරම්භය}}
----
===Lee===
ආයුබෝවන්!
මම [[:w:si:User:Lee|සිංහල විකිපීඩියාවේ]] පරිපාලකවරයෙක් ලෙස මේ වනවිටත් කටයුතු කරමින් සිටින්නෙක් වෙමි. එසේම [[:wikibooks:si:User:Lee|සිංහල විකිපොත්]] සහ මෙම ව්යාපෘතියේ තාවකාලික පරිපාලකවරයෙක් ලෙස දැනට ද කටයුතු කරමින් සිටිමි. මගේ මවුබස සිංහල වන නිසා, ගෝලීය පරිපාලකවරුන්ට වඩා නඩත්තු කටයුතු වල නිරත වීමට මට ඇති හැකියාව ඉහළ බව මගේ අදහසයි. වඩාත් සුදුසු අයෙක් මෙම කටයුත්ත බාරගන්නා තෙක් එම කාර්යය දිගටම කරගෙන යාම මාගේ අරමුණයි. --[[පරිශීලක:Lee|Lee]] ([[පරිශීලක සාකච්ඡාව:Lee|සාකච්ඡාව]]) 05:01, 29 ජූලි 2026 (යූටීසී)
{{collapse|title=Request in English|
Hi,
I'm [[User:Lee|Lee]]. My home wiki is Sinhala Wikipedia and I'm also an administrator on that project. I am a native speaker of Sinhala. So I might be a little better than global sysops in helping with maintenance tasks. I also held the temporary sysop flag on this site previously for some time and I hope to continue my work for this project until someone with more free time can take over. --[[පරිශීලක:Lee|Lee]] ([[පරිශීලක සාකච්ඡාව:Lee|සාකච්ඡාව]]) 05:01, 29 ජූලි 2026 (යූටීසී)
}}
* ඡන්දය ආරම්භය (Vote starts): 05:01, 29 ජූලි 2026 (යූටීසී)
* ඡන්දය අවසානය (Vote ends): 2026-08-31 23:59 UTC
==== සහාය පළකිරීම ====
<!-- Support -->
<!-- මෙම නාම යෝජනාවට සහාය පළකිරීම සඳහා දැනට ප්රකාශිත ඡන්ද වලට පසුව එන පේලියේ '# {{subst:support}}' යනුවෙන් ටයිප් කරන්න. -->
==== විරෝදය පළකිරීම ====
<!-- Oppose -->
<!-- මෙම නාම යෝජනාවට විරෝදය පළකිරීම සඳහා දැනට ප්රකාශිත ඡන්ද වලට පසුව එන පේලියේ '# {{subst:oppose}}' යනුවෙන් ටයිප් කරන්න. -->
==== ඡන්දය දීමෙන් වැළකී සිටීම ====
<!-- Abstain -->
<!-- මෙම නාම යෝජනාවට අදළව ඡන්දය දීමෙන් වැළකී සිටීම සටහන් කිරීම සඳහා, දැනට ප්රකාශිත ඡන්ද වලට පසුව එන පේලියේ '# {{subst:abstain}}' යනුවෙන් ටයිප් කරන්න. -->
==== තීරණය ====
<!-- Decision -->
* කිසිම ඡන්දයක් ප්රකාශයට පත් නොවී ඡන්ද විමසීම අවසන් විය. --[[පරිශීලක:Lee|Lee]] ([[පරිශීලක සාකච්ඡාව:Lee|සාකච්ඡාව]]) 03:02, 5 සැප්තැම්බර් 2026 (යූටීසී)
* Granted for 3 years to expire on 2029-09-06. ([https://meta.wikimedia.org/w/index.php?title=Steward_requests/Permissions&oldid=31015209#Lee@siwiktionary මෙටා ඉල්ලීම]) --[[පරිශීලක:Lee|Lee]] ([[පරිශීලක සාකච්ඡාව:Lee|සාකච්ඡාව]]) 07:24, 7 සැප්තැම්බර් 2026 (යූටීසී)
----
{{ලේඛනගත-සංවාදය-අවසානය}}
dxu580syromeddzh5nbxq2ho9df3ksg
orbital plane
0
145010
237168
2026-09-07T05:57:25Z
Lee
19
ඉංග්රීසි ප්රවේශය ඒ ආකාරයෙන් ම ඇතුළත් කිරීම
237168
wikitext
text/x-wiki
==English==
===Noun===
{{en-noun}}
# {{lb|en|astronomy}} The [[surface]] ([[plane]]) that contains an [[orbit]].
#: {{ux|en|The plane of ecliptic is the '''orbital plane''' of the earth and the other planets in the solar system.}}
{{C|en|Orbits}}
5b1kaxs92s6ynbl2qozysy7jv7aiy0x
237171
237168
2026-09-07T05:59:29Z
Pinthura
2424
යොමු තොරතුරු පරිවර්තනය
237171
wikitext
text/x-wiki
== ඉංග්රීසි ==
=== නාම පදය ===
{{en-noun}}
# {{lb|en|astronomy}} The [[surface]] ([[plane]]) that contains an [[orbit]].
#: {{ux|en|The plane of ecliptic is the '''orbital plane''' of the earth and the other planets in the solar system.}}
{{C|en|Orbits}}
1x0o1yryyb168hl2mmkto3xm7e1pe9k
237172
237171
2026-09-07T06:02:21Z
Lee
19
237172
wikitext
text/x-wiki
== ඉංග්රීසි ==
=== නාම පදය ===
{{en-noun}}
# {{lb|en|astronomy}} [[කක්ෂිය තලය]] (The [[surface]] ([[plane]]) that contains an [[orbit]]).
#: {{ux|en|The plane of ecliptic is the '''orbital plane''' of the earth and the other planets in the solar system.}}
{{C|en|Orbits}}
ogi2srsk0ogd76lzyjwu7g1mc8utuve
orbital planes
0
145011
237169
2026-09-07T05:57:41Z
Lee
19
ඉංග්රීසි ප්රවේශය ඒ ආකාරයෙන් ම ඇතුළත් කිරීම
237169
wikitext
text/x-wiki
==English==
===Noun===
{{head|en|noun form}}
# {{plural of|en|orbital plane}}
mi4wp52zwusnglx5vm8v3mysjro63gw
237170
237169
2026-09-07T05:59:19Z
Pinthura
2424
යොමු තොරතුරු පරිවර්තනය
237170
wikitext
text/x-wiki
== ඉංග්රීසි ==
=== නාම පදය ===
{{head|en|noun form}}
# {{plural of|en|orbital plane}}
1hfsp9g9x7e6l58kq68ep67316uff0l
කක්ෂිය තලය
0
145012
237173
2026-09-07T06:03:13Z
Lee
19
'== සිංහල == === නිරුක්තිය === {{rfe|si}} === නාම පදය === {{si-noun}} # {{rfdef|si}} ==== පරිවර්තන ==== {{trans-top|පරිවර්තන}} * ඉංග්රීසි: {{t|en|orbital plane}} {{trans-bottom}} <!-- === අමතර අවධානයට === * {{l|si|<<ආශ්රිත පවතින වෙනත් වචන>>}} -->' යොදමින් නව පිටුවක් තනන ලදි
237173
wikitext
text/x-wiki
== සිංහල ==
=== නිරුක්තිය ===
{{rfe|si}}
=== නාම පදය ===
{{si-noun}}
# {{rfdef|si}}
==== පරිවර්තන ====
{{trans-top|පරිවර්තන}}
* ඉංග්රීසි: {{t|en|orbital plane}}
{{trans-bottom}}
<!--
=== අමතර අවධානයට ===
* {{l|si|<<ආශ්රිත පවතින වෙනත් වචන>>}}
-->
fwsf7uq5wyqpxeiv472mhv8og1l12cd
කක්ෂීය ආනතිය
0
145013
237174
2026-09-07T07:11:11Z
Lee
19
'== සිංහල == === නිරුක්තිය === {{rfe|si}} === නාම පදය === {{si-noun}} # {{rfdef|si}} <!-- ==== පරිවර්තන ==== {{trans-top|පරිවර්තන}} * ඉංග්රීසි: {{t|en|<<ඉංග්රීසි වචනය>>}} {{trans-bottom}} === අමතර අවධානයට === * {{l|si|<<ආශ්රිත පවතින වෙනත් ව...' යොදමින් නව පිටුවක් තනන ලදි
237174
wikitext
text/x-wiki
== සිංහල ==
=== නිරුක්තිය ===
{{rfe|si}}
=== නාම පදය ===
{{si-noun}}
# {{rfdef|si}}
<!--
==== පරිවර්තන ====
{{trans-top|පරිවර්තන}}
* ඉංග්රීසි: {{t|en|<<ඉංග්රීසි වචනය>>}}
{{trans-bottom}}
=== අමතර අවධානයට ===
* {{l|si|<<ආශ්රිත පවතින වෙනත් වචන>>}}
-->
37g9s13iio6w9i2yw7aw46v28viw7h4
කක්ෂීය වේගය
0
145014
237175
2026-09-07T07:11:29Z
Lee
19
'== සිංහල == === නිරුක්තිය === {{rfe|si}} === නාම පදය === {{si-noun}} # {{rfdef|si}} <!-- ==== පරිවර්තන ==== {{trans-top|පරිවර්තන}} * ඉංග්රීසි: {{t|en|<<ඉංග්රීසි වචනය>>}} {{trans-bottom}} === අමතර අවධානයට === * {{l|si|<<ආශ්රිත පවතින වෙනත් ව...' යොදමින් නව පිටුවක් තනන ලදි
237175
wikitext
text/x-wiki
== සිංහල ==
=== නිරුක්තිය ===
{{rfe|si}}
=== නාම පදය ===
{{si-noun}}
# {{rfdef|si}}
<!--
==== පරිවර්තන ====
{{trans-top|පරිවර්තන}}
* ඉංග්රීසි: {{t|en|<<ඉංග්රීසි වචනය>>}}
{{trans-bottom}}
=== අමතර අවධානයට ===
* {{l|si|<<ආශ්රිත පවතින වෙනත් වචන>>}}
-->
37g9s13iio6w9i2yw7aw46v28viw7h4
කක්ෂීය පරිභ්රමණය
0
145015
237176
2026-09-07T07:11:46Z
Lee
19
'== සිංහල == === නිරුක්තිය === {{rfe|si}} === නාම පදය === {{si-noun}} # {{rfdef|si}} <!-- ==== පරිවර්තන ==== {{trans-top|පරිවර්තන}} * ඉංග්රීසි: {{t|en|<<ඉංග්රීසි වචනය>>}} {{trans-bottom}} === අමතර අවධානයට === * {{l|si|<<ආශ්රිත පවතින වෙනත් ව...' යොදමින් නව පිටුවක් තනන ලදි
237176
wikitext
text/x-wiki
== සිංහල ==
=== නිරුක්තිය ===
{{rfe|si}}
=== නාම පදය ===
{{si-noun}}
# {{rfdef|si}}
<!--
==== පරිවර්තන ====
{{trans-top|පරිවර්තන}}
* ඉංග්රීසි: {{t|en|<<ඉංග්රීසි වචනය>>}}
{{trans-bottom}}
=== අමතර අවධානයට ===
* {{l|si|<<ආශ්රිත පවතින වෙනත් වචන>>}}
-->
37g9s13iio6w9i2yw7aw46v28viw7h4