Module:User:Kiril kovachev/ja-conj-bungo

local export = {}

local m_ja = require('Module:ja')

function export.japanese_classical_conjugation(frame) local args = frame:getParent.args

local function _i(t, i)		if type(t) == 'table' then return t[i] else return t end end

local function behead(s) return mw.ustring.gsub(s, '[ぁ-ゖァ-ヶ]', '', 1) end

local function _l(s) return ' ' .. _i(s, 2) ..' ' end

local t = { ['4-k'] = { 'か', 'き', 'く', 'く', 'け', 'け', ['t_percon'] = { 'けり', 'きたり' } },		['4-g'] = { 'が', 'ぎ', 'ぐ', 'ぐ', 'げ', 'げ', ['t_percon'] = { 'げり', 'ぎたり' } },		['4-s'] = { 'さ', 'し', 'す', 'す', 'せ', 'せ', ['t_percon'] = { 'せり', 'したり' } },		['4-t'] = { 'た', 'ち', 'つ', 'つ', 'て', 'て', ['t_percon'] = { 'てり', 'ちたり' } },		['4-p'] = { 'は', 'ひ', 'ふ', 'ふ', 'へ', 'へ', ['t_percon'] = { 'へり', 'ひたり' } },		['4-b'] = { 'ば', 'び', 'ぶ', 'ぶ', 'べ', 'べ', ['t_percon'] = { 'べり', 'びたり' } },		['4-m'] = { 'ま', 'み', 'む', 'む', 'め', 'め', ['t_percon'] = { 'めり', 'みたり' } },		['4-r'] = { 'ら', 'り', 'る', 'る', 'れ', 'れ', ['t_percon'] = { 'れり', 'りたり' } },		['2u-k'] = { 'き', 'き', 'く', 'くる', 'くれ', 'き.よ' }, ['2u-g'] = { 'ぎ', 'ぎ', 'ぐ', 'ぐる', 'ぐれ', 'ぎ.よ' }, ['2u-z'] = { 'じ', 'じ', 'ず', 'ずる', 'ずれ', 'じ.よ' }, ['2u-t'] = { 'ち', 'ち', 'つ', 'つる', 'つれ', 'ち.よ' }, ['2u-d'] = { 'ぢ', 'ぢ', 'づ', 'づる', 'づれ', 'ぢ.よ' }, ['2u-p'] = { 'ひ', 'ひ', 'ふ', 'ふる', 'ふれ', 'ひ.よ' }, ['2u-b'] = { 'び', 'び', 'ぶ', 'ぶる', 'ぶれ', 'び.よ' }, ['2u-m'] = { 'み', 'み', 'む', 'むる', 'むれ', 'み.よ' }, ['2u-y'] = { '.い', '.い', '.ゆ', '.ゆる', '.ゆれ', '.い.よ' }, ['2u-r'] = { 'り', 'り', 'る', 'るる', 'るれ', 'り.よ' }, ['2d-a'] = { '.え', '.え', '.う', '.うる', '.うれ', '.えよ' }, ['2d-k'] = { 'け', 'け', 'く', 'くる', 'くれ', 'けよ' }, ['2d-g'] = { 'げ', 'げ', 'ぐ', 'ぐる', 'ぐれ', 'げよ' }, ['2d-s'] = { 'せ', 'せ', 'す', 'する', 'すれ', 'せよ' }, ['2d-z'] = { 'ぜ', 'ぜ', 'ず', 'ずる', 'ずれ', 'ぜよ' }, ['2d-t'] = { 'て', 'て', 'つ', 'つる', 'つれ', 'てよ' }, ['2d-d'] = { 'で', 'で', 'づ', 'づる', 'づれ', 'でよ' }, ['2d-n'] = { 'ね', 'ね', 'ぬ', 'ぬる', 'ぬれ', 'ねよ' }, ['2d-p'] = { 'へ', 'へ', 'ふ', 'ふる', 'ふれ', 'へよ' }, ['2d-b'] = { 'べ', 'べ', 'ぶ', 'ぶる', 'ぶれ', 'べよ' }, ['2d-m'] = { 'め', 'め', 'む', 'むる', 'むれ', 'めよ' }, ['2d-y'] = { '.え', '.え', '.ゆ', '.ゆる', '.ゆれ', '.えよ' }, ['2d-y-ye'] = { '.𛀁', '.𛀁', '.ゆ', '.ゆる', '.ゆれ', '.𛀁よ' }, ['2d-r'] = { 'れ', 'れ', 'る', 'るる', 'るれ', 'れよ' }, ['2d-w'] = { 'ゑ', 'ゑ', '.う', '.うる', '.うれ', 'ゑよ' }, ['1u-k'] = { 'き', 'き', 'きる', 'きる', 'きれ', 'き.よ' }, ['1u-n'] = { 'に', 'に', 'にる', 'にる', 'にれ', 'に.よ' }, ['1u-p'] = { 'ひ', 'ひ', 'ひる', 'ひる', 'ひれ', 'ひ.よ' }, ['1u-m'] = { 'み', 'み', 'みる', 'みる', 'みれ', 'み.よ' }, ['1u-y'] = { '.い', '.い', '.いる', '.いる', '.いれ', '.い.よ' }, ['1u-w'] = { 'ゐ', 'ゐ', 'ゐる', 'ゐる', 'ゐれ', 'ゐ.よ' }, ['1d-k'] = { 'け', 'け', 'ける', 'ける', 'けれ', 'けよ' }, ['1d-kw'] = { 'くゑ', 'くゑ', 'くゑる', 'くゑる', 'くゑれ', 'くゑよ' }, ['irreg-k'] = { 'こ', 'き', 'く', 'くる', 'くれ', { 'こ', 'こよ' }, ['t_pas_ki'] = { 'こし', 'きし' } },		['irreg-s'] = { 'せ', 'し', 'す', 'する', 'すれ', 'せよ', ['t_percon'] = { 'せり', 'したり' } },		['irreg-s-z'] = { 'ぜ', 'じ', 'ず', 'ずる', 'ずれ', 'ぜよ', ['t_percon'] = { 'ぜり', 'じたり' } },		['irreg-n'] = { 'な', 'に', 'ぬ', 'ぬる', 'ぬれ', 'ね' }, ['irreg-r'] = { 'ら', 'り', 'り', 'る', 'れ', 'れ' },

['adj-ku'] = { { 'く', 'から' }, { 'く', 'かり' }, 'し', { 'き', 'かる' }, 'けれ', 'かれ', ['irr_1'] = 'く', ['irr_2'] = 'から', ['adv_1'] = 'く', ['adv_2'] = 'かり', },		['adj-shiku'] = { { 'しく', 'しから' }, { 'しく', 'しかり' }, 'し', { 'しき', 'しかる' }, 'しけれ', 'しかれ', ['irr_1'] = 'しく', ['irr_2'] = 'しから', ['adv_1'] = 'しく', ['adv_2'] = 'しかり', },		['adj-shiku-z'] = { { 'じく', 'じから' }, { 'じく', 'じかり' }, 'じ', { 'じき', 'じかる' }, 'じけれ', 'じかれ', ['irr_1'] = 'じく', ['irr_2'] = 'じから', ['adv_1'] = 'じく', ['adv_2'] = 'じかり', },		['adj-nar'] = { 'なら', { 'に', 'なり' }, 'なり', 'なる', 'なれ', 'なれ', ['adv_1'] = 'に', ['adv_2'] = 'なり' },		['adj-tar'] = { 'たら', { 'と', 'たり' }, 'たり', 'たる', 'たれ', 'たれ', ['adv_1'] = 'と', ['adv_2'] = 'たり', },	}

local t_note = { ['irreg-k'] = { ['t_pas_ki'] = 'Attributive form, as the terminal form (lemma) does not exist for this construction in this conjugation.' },

['irreg-r'] = { ['t_percon'] = 'Often proscribed due to a redundancy of having 2 '.._l('あり')..'.' },

['adj-ku'] = { { 'Without auxiliary verb.', 'With auxiliary verb.' }, { 'Without auxiliary verb.', 'With auxiliary verb.' } }, ['adj-shiku'] = { { 'Without auxiliary verb.', 'With auxiliary verb.' }, { 'Without auxiliary verb.', 'With auxiliary verb.' } }, ['adj-shiku-z'] = { { 'Without auxiliary verb.', 'With auxiliary verb.' }, { 'Without auxiliary verb.', 'With auxiliary verb.' } }, ['adj-nar'] = { nil, { 'Without auxiliary verb.', 'With auxiliary verb.' } }, ['adj-tar'] = { nil, { 'Without auxiliary verb.', 'With auxiliary verb.' } }, }

local conj_name = { ['4-k'] = { '四段活用', 'カ行四段活用' }, ['4-g'] = { '四段活用', 'ガ行四段活用' }, ['4-s'] = { '四段活用', 'サ行四段活用' }, ['4-t'] = { '四段活用', 'タ行四段活用' }, ['4-p'] = { '四段活用', 'ハ行四段活用' }, ['4-b'] = { '四段活用', 'バ行四段活用' }, ['4-m'] = { '四段活用', 'マ行四段活用' }, ['4-r'] = { '四段活用', 'ラ行四段活用' }, ['2u-k'] = { '上二段活用', 'カ行上二段活用' }, ['2u-g'] = { '上二段活用', 'ガ行上二段活用' }, ['2u-z'] = { '上二段活用', 'ザ行上二段活用' }, ['2u-t'] = { '上二段活用', 'タ行上二段活用' }, ['2u-d'] = { '上二段活用', 'ダ行上二段活用' }, ['2u-p'] = { '上二段活用', 'ハ行上二段活用' }, ['2u-b'] = { '上二段活用', 'バ行上二段活用' }, ['2u-m'] = { '上二段活用', 'マ行上二段活用' }, ['2u-y'] = { '上二段活用', 'ヤ行上二段活用' }, ['2u-r'] = { '上二段活用', 'ラ行上二段活用' }, ['2d-a'] = { '下二段活用', 'ア行下二段活用' }, ['2d-k'] = { '下二段活用', 'カ行下二段活用' }, ['2d-g'] = { '下二段活用', 'ガ行下二段活用' }, ['2d-s'] = { '下二段活用', 'サ行下二段活用' }, ['2d-z'] = { '下二段活用', 'ザ行下二段活用' }, ['2d-t'] = { '下二段活用', 'タ行下二段活用' }, ['2d-d'] = { '下二段活用', 'ダ行下二段活用' }, ['2d-n'] = { '下二段活用', 'ナ行下二段活用' }, ['2d-p'] = { '下二段活用', 'ハ行下二段活用' }, ['2d-b'] = { '下二段活用', 'バ行下二段活用' }, ['2d-m'] = { '下二段活用', 'マ行下二段活用' }, ['2d-y'] = { '下二段活用', 'ヤ行下二段活用' }, ['2d-y-ye'] = { '下二段活用', 'ヤ行下二段活用' }, ['2d-r'] = { '下二段活用', 'ラ行下二段活用' }, ['2d-w'] = { '下二段活用', 'ワ行下二段活用' }, ['1u-k'] = { '上一段活用', 'カ行上一段活用' }, ['1u-n'] = { '上一段活用', 'ナ行上一段活用' }, ['1u-p'] = { '上一段活用', 'ハ行上一段活用' }, ['1u-m'] = { '上一段活用', 'マ行上一段活用' }, ['1u-y'] = { '上一段活用', 'ヤ行上一段活用' }, ['1u-w'] = { '上一段活用', 'ワ行上一段活用' }, ['1d-k'] = { '下一段活用', 'カ行下一段活用' }, ['1d-kw'] = { '下一段活用', 'カ行下一段活用' }, ['irreg-k'] = 'カ行変格活用', ['irreg-s'] = 'サ行変格活用', ['irreg-s-z'] = 'サ行変格活用', ['irreg-n'] = 'ナ行変格活用', ['irreg-r'] = 'ラ行変格活用',

['adj-ku'] = 'ク活用', ['adj-shiku'] = 'シク活用', ['adj-shiku-z'] = 'シク活用', ['adj-nar'] = 'ナリ活用', ['adj-tar'] = 'タリ活用', }

local t_assumed_pagename_ending = { ['4-k'] = 'く', ['4-g'] = 'ぐ', ['4-s'] = 'す', ['4-t'] = 'つ', ['4-p'] = { 'ふ', 'う' }, ['4-b'] = 'ぶ', ['4-m'] = 'む', ['4-r'] = 'る', ['2u-k'] = { 'く', 'きる' }, ['2u-g'] = { 'ぐ', 'ぎる' }, ['2u-z'] = { 'ず', 'じる' }, ['2u-t'] = { 'つ', 'ちる' }, ['2u-d'] = { 'づ', 'ぢる', 'じる' }, ['2u-p'] = { 'ふ', 'いる', 'ひる' }, ['2u-b'] = { 'ぶ', 'びる' }, ['2u-m'] = { 'む', 'みる' }, ['2u-y'] = { 'ゆ', 'いる' }, ['2u-r'] = { 'りる', 'る' }, ['2d-a'] = { 'う', 'える' }, ['2d-k'] = { 'く', 'ける' }, ['2d-g'] = { 'ぐ', 'げる' }, ['2d-s'] = { 'す', 'せる' }, ['2d-z'] = { 'ず', 'ぜる' }, ['2d-t'] = { 'つ', 'てる' }, ['2d-d'] = { 'づ', 'でる' }, ['2d-n'] = { 'ぬ', 'ねる' }, ['2d-p'] = { 'ふ', 'える', 'へる' }, ['2d-b'] = { 'ぶ', 'べる' }, ['2d-m'] = { 'む', 'める' }, ['2d-y'] = { 'ゆ', 'える' }, ['2d-y-ye'] = { 'ゆ', 'える', '𛀁る'}, ['2d-r'] = { 'れる', 'る' }, ['2d-w'] = { 'う', 'える', 'ゑる' }, ['1u-k'] = 'きる', ['1u-n'] = 'にる', ['1u-p'] = { 'ひる', 'いる' }, ['1u-m'] = 'みる', ['1u-y'] = 'いる', ['1u-w'] = { 'ゐる', 'いる' }, ['1d-k'] = 'ける', ['1d-kw'] = 'くゑる', ['irreg-k'] = { 'く', 'くる' }, ['irreg-s'] = { 'す', 'する' }, ['irreg-s-z'] = { 'ず', 'ずる', 'じる' }, ['irreg-n'] = 'ぬ', ['irreg-r'] = { 'り', 'る' },

['adj-ku'] = { 'し', 'い' }, ['adj-shiku'] = { 'し', 'しい' }, ['adj-shiku-z'] = { 'じ', 'じい' }, ['adj-nar'] = { 'なり', 'な' }, ['adj-tar'] = { 'たり', 'と' }, }

local pagename = args['pagename'] or mw.title.getCurrentTitle.text

local stem = args['stem'] or args[1] or args['s'] or '' local ctype = args['ctype'] or args[2] or args['c'] or ''

local kanji = args['kanji'] or args[3] or args['k'] local suffix_in_kanji = args['suffix_in_kanji'] or args['sik'] local lemma = args['lemma'] or args['l']

local function guess_kanji_from_pagename local suf if type(t_assumed_pagename_ending[ctype]) == 'table' then suf = t_assumed_pagename_ending[ctype] else suf = { t_assumed_pagename_ending[ctype] } end local lemma_ending

if suffix_in_kanji then for _, v in ipairs(suf) do				lemma_ending = behead(v) if lemma_ending ~= '' and string.sub(pagename, - string.len(lemma_ending)) == lemma_ending then kanji = kanji or string.sub(pagename, 1, - (string.len(lemma_ending) + 1)) break end end kanji = kanji or pagename lemma = lemma or kanji .. behead(_i(t[ctype][3], 1)) else for _, v in ipairs(suf) do				lemma_ending = v				if string.sub(pagename, - string.len(lemma_ending)) == lemma_ending then kanji = kanji or string.sub(pagename, 1, - (string.len(lemma_ending) + 1)) break end end kanji = kanji or pagename lemma = lemma or kanji .. _i(t[ctype][3], 1) end

return

end

if conj_name[ctype] == nil then kanji = kanji or pagename lemma = lemma or pagename else guess_kanji_from_pagename end

local f_irr = args['f_irr'] or args['f1'] local f_adv = args['f_adv'] or args['f2'] local f_ter = args['f_ter'] or args['f3'] local f_adn = args['f_adn'] or args['f4'] local f_rea = args['f_rea'] or args['f5'] local f_imp = args['f_imp'] or args['f6']

local f_neg = args['f_neg'] or args['f7'] local f_conj_contr = args['f_conj_contr'] or args['f8'] local f_conj_caus = args['f_conj_caus'] or args['f9'] local f_conj_cond = args['f_conj_cond'] or args['f10'] local f_t_pas_ki = args['f_t_pas_ki'] or args['f11'] local f_t_pas_ker = args['f_t_pas_ker'] or args['f12'] local f_t_per_t = args['f_t_per_t'] or args['f13'] local f_t_per_n = args['f_t_per_n'] or args['f14'] local f_t_percon = args['f_t_percon'] or args['f15'] local f_adverb = args['f_adverb'] or args['f16'] local f_volit = args['f_volit'] or args['f17']

local f_irr__p = args['f_irr+'] local f_adv__p = args['f_adv+'] local f_ter__p = args['f_ter+'] local f_adn__p = args['f_adn+'] local f_rea__p = args['f_rea+'] local f_imp__p = args['f_imp+']

local f_neg__p = args['f_neg+'] local f_conj_contr__p = args['f_conj_contr+'] local f_conj_caus__p = args['f_conj_caus+'] local f_conj_cond__p = args['f_conj_cond+'] local f_t_pas_ki__p = args['f_t_pas_ki+'] local f_t_pas_ker__p = args['f_t_pas_ker+'] local f_t_per_t__p = args['f_t_per_t+'] local f_t_per_n__p = args['f_t_per_n+'] local f_t_percon__p = args['f_t_percon+'] local f_adverb__p = args['f_adverb+'] local f_volit__p = args['f_volit+']

local hide_key_constructions = args['hide_key_constructions'] or args['hkc']

local notes = {} local notes_rev ={} local note_num = 0

local function insert_note(note) local note_id note_id = notes_rev[note] if note_id == nil then note_num = note_num + 1 notes[note_num] = note notes_rev[note] = note_num note_id = note_num end return note_id end

local function japanese_conj_row_classical_manual(form)

local r1, r2, r3 = {}, {}, {} local form_no_note, kanji, kana, note

local forms = {}

local p1, p2		local identical_kanji_kana = true

string.gsub(form, '[^;]+', function(w) table.insert(forms, w) end)

for _, form_single in ipairs(forms) do			p1 = string.find(form_single, '?') if p1 then note = string.sub(form_single, p1 + 1) form_no_note = string.sub(form_single, 1, p1 - 1) else note = nil form_no_note = form_single end p2 = string.find(form_no_note, ':') if p2 then kanji = string.sub(form_no_note, 1, p2 - 1) kana = string.sub(form_no_note, p2 + 1) else kanji = form_no_note kana = form_no_note end

identical_kanji_kana = identical_kanji_kana and kanji == kana

if note then table.insert(r1,					' '					.. m_ja.rm_spaces_hyphens(kanji)					.. ' ['					.. insert_note(note)					.. '] ') else table.insert(r1,					' '					.. m_ja.rm_spaces_hyphens(kanji)					.. ' ') end table.insert(r2,				' '				.. m_ja.rm_spaces_hyphens(kana)				.. ' ') table.insert(r3,				' '				.. m_ja.kana_to_romaji(kana, {['hist'] = true})				.. ' ') end

if identical_kanji_kana then return '| colspan ="2" |' .. table.concat(r1, ' ') .. '||'					.. table.concat(r3, ' ') else return '||' .. table.concat(r1, ' ') .. '||'					.. table.concat(r2, ' ') .. '||'					.. table.concat(r3, ' ') end

end

local function japanese_conj_row_classical_auto(_stem, _kanji, _suffix, _suffix_in_kanji, _note, _tail) local result = {} if type(_suffix) ~= 'table' then if type(_suffix) == 'string' then _suffix = { _suffix } else return '-' end end _tail = _tail or ''

if _suffix_in_kanji then if type(_note) == 'table' then for i, suf in ipairs(_suffix) do					if _note[i] then table.insert(result, _kanji .. behead(suf) .. _tail .. ':' .. _stem .. suf .. _tail .. '?' .. _note[i]) else table.insert(result, _kanji .. behead(suf) .. _tail .. ':' .. _stem .. suf .. _tail) end end elseif type(_note) == 'string' then for _, suf in ipairs(_suffix) do table.insert(result, _kanji .. behead(suf) .. _tail .. ':' .. _stem .. suf .. _tail .. '?' .. _note) end else for _, suf in ipairs(_suffix) do table.insert(result, _kanji .. behead(suf) .. _tail .. ':' .. _stem .. suf .. _tail) end end else if type(_note) == 'table' then for i, suf in ipairs(_suffix) do					if _note[i] then table.insert(result, _kanji .. suf .. _tail .. ':' .. _stem .. suf .. _tail .. '?' .. _note[i]) else table.insert(result, _kanji .. suf .. _tail .. ':' .. _stem .. suf .. _tail) end end elseif type(_note) == 'string' then for _, suf in ipairs(_suffix) do table.insert(result, _kanji .. suf .. _tail .. ':' .. _stem .. suf .. _tail .. '?' .. _note) end else for _, suf in ipairs(_suffix) do table.insert(result, _kanji .. suf .. _tail .. ':' .. _stem .. suf .. _tail) end end end

return table.concat(result, ';') end

f_irr = f_irr or japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 1), suffix_in_kanji, _i(t_note[ctype], 1)) f_adv = f_adv or japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 2), suffix_in_kanji, _i(t_note[ctype], 2)) f_ter = f_ter or japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 3), suffix_in_kanji, _i(t_note[ctype], 3)) f_adn = f_adn or japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 4), suffix_in_kanji, _i(t_note[ctype], 4)) f_rea = f_rea or japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 5), suffix_in_kanji, _i(t_note[ctype], 5)) f_imp = f_imp or japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 6), suffix_in_kanji, _i(t_note[ctype], 6))

if not hide_key_constructions and t[ctype] then f_neg = f_neg or			_i(t[ctype], 'neg') and japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 'neg'), suffix_in_kanji, _i(t_note[ctype], 'neg')) or			japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 'irr_2') or _i(t[ctype], 1), suffix_in_kanji, _i(t_note[ctype], 'neg'), 'ず') f_conj_contr = f_conj_contr or			_i(t[ctype], 'conj_contr') and japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 'conj_contr'), suffix_in_kanji, _i(t_note[ctype], 'conj_contr')) or			japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 5), suffix_in_kanji, _i(t_note[ctype], 'conj_contr'), 'ど') f_conj_caus = f_conj_caus or			_i(t[ctype], 'conj_caus') and japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 'conj_caus'), suffix_in_kanji, _i(t_note[ctype], 'conj_caus')) or			japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 5), suffix_in_kanji, _i(t_note[ctype], 'conj_caus'), 'ば') f_conj_cond = f_conj_cond or			_i(t[ctype], 'conj_cond') and japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 'conj_cond'), suffix_in_kanji, _i(t_note[ctype], 'conj_cond')) or			japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 'irr_1') or _i(t[ctype], 1), suffix_in_kanji, _i(t_note[ctype], 'conj_cond'), 'ば') f_t_pas_ki = f_t_pas_ki or			_i(t[ctype], 't_pas_ki') and japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 't_pas_ki'), suffix_in_kanji, _i(t_note[ctype], 't_pas_ki')) or			japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 'adv_2') or _i(t[ctype], 2), suffix_in_kanji, _i(t_note[ctype], 't_pas_ki'), 'き') f_t_pas_ker = f_t_pas_ker or			_i(t[ctype], 't_pas_ker') and japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 't_pas_ker'), suffix_in_kanji, _i(t_note[ctype], 't_pas_ker')) or			japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 'adv_2') or _i(t[ctype], 2), suffix_in_kanji, _i(t_note[ctype], 't_pas_ker'), 'けり') if string.sub(ctype, 1, 3) == 'adj' then f_adverb = f_adverb or				_i(t[ctype], 'adverb') and japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 'adverb'), suffix_in_kanji, _i(t_note[ctype], 'adverb')) or				japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 'adv_1') or _i(t[ctype], 2), suffix_in_kanji, _i(t_note[ctype], 'adverb')) else f_t_per_t = f_t_per_t or				_i(t[ctype], 't_per_t') and japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 't_per_t'), suffix_in_kanji, _i(t_note[ctype], 't_per_t')) or				japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 'adv_2') or _i(t[ctype], 2), suffix_in_kanji, _i(t_note[ctype], 't_per_t'), 'つ') f_t_per_n = f_t_per_n or				_i(t[ctype], 't_per_n') and japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 't_per_n'), suffix_in_kanji, _i(t_note[ctype], 't_per_n')) or				japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 'adv_2') or _i(t[ctype], 2), suffix_in_kanji, _i(t_note[ctype], 't_per_n'), 'ぬ') f_t_percon = f_t_percon or				_i(t[ctype], 't_percon') and japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 't_percon'), suffix_in_kanji, _i(t_note[ctype], 't_percon')) or				japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 'adv_2') or _i(t[ctype], 2), suffix_in_kanji, _i(t_note[ctype], 't_percon'), 'たり') f_volit = f_volit or				_i(t[ctype], 'volit') and japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 'volit'), suffix_in_kanji, _i(t_note[ctype], 'volit')) or				japanese_conj_row_classical_auto(stem, kanji, _i(t[ctype], 'irr_1') or _i(t[ctype], 1), suffix_in_kanji, _i(t_note[ctype], 'volit'), 'む') end end

f_irr = f_irr and f_irr__p and f_irr ..';'.. f_irr__p or f_irr or f_irr__p f_adv = f_adv and f_adv__p and f_adv ..';'.. f_adv__p or f_adv or f_adv__p f_ter = f_ter and f_ter__p and f_ter ..';'.. f_ter__p or f_ter or f_ter__p f_adn = f_adn and f_adn__p and f_adn ..';'.. f_adn__p or f_adn or f_adn__p f_rea = f_rea and f_rea__p and f_rea ..';'.. f_rea__p or f_rea or f_rea__p f_imp = f_imp and f_imp__p and f_imp ..';'.. f_imp__p or f_imp or f_imp__p f_neg = f_neg and f_neg__p and f_neg ..';'.. f_neg__p or f_neg or f_neg__p f_conj_contr = f_conj_contr and f_conj_contr__p and f_conj_contr ..';'.. f_conj_contr__p or f_conj_contr or f_conj_contr__p f_conj_caus = f_conj_caus and f_conj_caus__p and f_conj_caus ..';'.. f_conj_caus__p or f_conj_caus or f_conj_caus__p f_conj_cond = f_conj_cond and f_conj_cond__p and f_conj_cond ..';'.. f_conj_cond__p or f_conj_cond or f_conj_cond__p f_t_pas_ki = f_t_pas_ki and f_t_pas_ki__p and f_t_pas_ki ..';'.. f_t_pas_ki__p or f_t_pas_ki or f_t_pas_ki__p f_t_pas_ker = f_t_pas_ker and f_t_pas_ker__p and f_t_pas_ker ..';'.. f_t_pas_ker__p or f_t_pas_ker or f_t_pas_ker__p f_t_per_t = f_t_per_t and f_t_per_t__p and f_t_per_t ..';'.. f_t_per_t__p or f_t_per_t or f_t_per_t__p f_t_per_n = f_t_per_n and f_t_per_n__p and f_t_per_n ..';'.. f_t_per_n__p or f_t_per_n or f_t_per_n__p f_t_percon = f_t_percon and f_t_percon__p and f_t_percon ..';'.. f_t_percon__p or f_t_percon or f_t_percon__p

local result = ' ' .. '' .. 'Classical conjugation of " '..m_ja.rm_spaces_hyphens(lemma)..' " ' .. (conj_name[ctype] and '('.._l(conj_name[ctype])..', see Appendix:Japanese verbs.) ' or '(irregular) ') .. ' \n' .. '{| class="wikitable" style="margin-top: 0; text-align: center; width: 100%" rules="all"\n|-\n! colspan="4" | Stem forms\n|-\n! style="width:20%" |' .. 'Irrealis ('.._l('未然形')..')\n' .. japanese_conj_row_classical_manual(f_irr) .. '\n|-\n!Continuative ('.._l('連用形')..')\n' .. japanese_conj_row_classical_manual(f_adv) .. '\n|-\n!Terminal ('.._l('終止形')..')\n' .. japanese_conj_row_classical_manual(f_ter) .. '\n|-\n!Attributive ('.._l('連体形')..')\n' .. japanese_conj_row_classical_manual(f_adn) .. '\n|-\n!Realis ('.._l('已然形')..')\n' .. japanese_conj_row_classical_manual(f_rea) .. '\n|-\n!Imperative ('.._l('命令形')..')\n' .. japanese_conj_row_classical_manual(f_imp) .. (not hide_key_constructions and '\n|-\n! colspan="4" | Key constructions' or '')

.. (f_neg and '\n|-\n! Negative\n' .. japanese_conj_row_classical_manual(f_neg) or '') .. (f_conj_contr and '\n|-\n! Contrasting conjunction\n' .. japanese_conj_row_classical_manual(f_conj_contr) or '') .. (f_conj_caus and '\n|-\n! Causal conjunction\n' .. japanese_conj_row_classical_manual(f_conj_caus) or '') .. (f_conj_cond and '\n|-\n! Conditional conjunction\n' .. japanese_conj_row_classical_manual(f_conj_cond) or '') .. (f_t_pas_ki and '\n|-\n! Past tense (firsthand knowledge)\n' .. japanese_conj_row_classical_manual(f_t_pas_ki) or '') .. (f_t_pas_ker and '\n|-\n! Past tense (secondhand knowledge)\n' .. japanese_conj_row_classical_manual(f_t_pas_ker) or '') .. (f_t_per_t and '\n|-\n! Perfect tense (conscious action)\n' .. japanese_conj_row_classical_manual(f_t_per_t) or '') .. (f_t_per_n and '\n|-\n! Perfect tense (natural event)\n' .. japanese_conj_row_classical_manual(f_t_per_n) or '') .. (f_t_percon and '\n|-\n! Perfect-continuative tense\n' .. japanese_conj_row_classical_manual(f_t_percon) or '') .. (f_adverb and '\n|-\n! Adverbial\n' .. japanese_conj_row_classical_manual(f_adverb) or '') .. (f_volit and '\n|-\n! Volitional\n' .. japanese_conj_row_classical_manual(f_volit) or '')

if note_num > 0 then result = result .. '\n|-\n| style="text-align:left;" bgcolor="#FFFFFF" colspan="5" | ' for i, v in ipairs(notes) do result = result .. '[' .. i .. ']' .. v .. ' '		end result = result .. ' '	end

result = result .. '\n|} ' return result end

return export