Module:User:Huhu9001/000

local export = {}

local ruby = require('Module:ja-ruby').ruby_auto local romaji = require('Module:ja-translit').kana_to_romaji

function export.show(frame) local args = frame:getParent.args local data_common = { ['lemma'] = nil, ['ind'] = { 'lemma' }, ['inf'] = { 'ind' }, ['adn'] = { 'ind' }, ['subj'] = { 'ind' }, ['imp'] = { 'ind' }, ['inf_a'] = { 'inf' }, ['inf_neg'] = { 'inf_a' }, ['inf_ta'] = { 'inf', 'た' }, ['inf_te'] = { 'inf', 'て' }, ['pol_aff'] = { 'inf', 'ま' }, ['pol_neg'] = { 'inf', 'ま' }, ['ger'] = { 'inf' }, ['caus'] = { 'inf_a', 'せる' }, ['pass'] = { 'inf_a', 'れる' }, ['potn'] = { 'pass' }, ['root'] = { 'lemma' }, ['nomzn'] = { 'root', 'さ' }, ['ind_pres_aff_pred'] = { 'ind' }, ['ind_pres_aff_attr'] = { 'adn' }, ['ind_pres_neg'] = { 'inf_neg', 'ない' }, ['ind_pret_aff'] = { 'inf_ta' }, ['ind_pret_neg'] = { 'inf_neg', 'なかった' }, ['subj_pres_aff'] = { 'subj', 'ば' }, ['subj_pres_neg'] = { 'inf_neg', 'なければ' }, ['subj_pret_aff'] = { 'inf_ta', 'ら' }, ['subj_pret_neg'] = { 'inf_neg', 'なかったら' }, ['voli_pres_aff'] = { 'inf_a', 'よう' }, ['voli_pres_neg'] = { 'inf_neg', 'なかろう' }, ['voli_pret_aff'] = { 'inf_ta', 'ろう' }, ['voli_pret_neg'] = { 'inf_neg', 'なかったろう' }, ['imp_aff'] = { 'imp' }, ['imp_neg'] = { 'adn', ' な' }, ['inf_pres_aff'] = { 'inf' }, ['inf_pres_neg'] = { 'inf_neg', 'なく' }, ['inf_pret_aff'] = { 'inf_te' }, ['inf_pret_neg'] = { 'inf_neg', 'なくて' }, ['ind_pres_aff_pol'] = { 'pol_aff', 'す' }, ['ind_pres_neg_pol'] = { 'pol_neg', 'せん' }, ['ind_pret_aff_pol'] = { 'pol_aff', 'した' }, ['ind_pret_neg_pol'] = { 'pol_neg', 'せん でした' }, ['voli_pres_aff_pol'] = { 'pol_aff', 'しょう' }, ['inf_pres_aff_pol'] = { 'pol_aff', 'して' }, notes = { ['voli_pres_aff'] = , ['voli_pres_neg'] = , ['voli_pret_aff'] = , ['voli_pret_neg'] = , ['voli_pres_aff_pol'] = , ['inf_pres_aff_pol'] = , },	}	--[==[	local pagename = 'ためらう' local data_inflsp = { pos = 'v', ['lemma'] = { 'う' }, ['inf'] = { 'い' }, ['subj'] = { 'え' }, ['imp'] = { 'え' }, ['inf_a'] = { 'わ' }, ['inf_ta'] = { 'った' }, ['inf_te'] = { 'って' }, ['potn'] = { 'える' }, ['voli_pres_aff'] = { 'おう' }, }--]==]	--[==[	local pagename = '泳ぐ' local kana = 'およぐ' local data_inflsp = { pos = 'v', ['lemma'] = { 'ぐ' }, ['inf'] = { 'ぎ' }, ['subj'] = { 'げ' }, ['imp'] = { 'げ' }, ['inf_a'] = { 'が' }, ['inf_ta'] = { 'んだ' }, ['inf_te'] = { 'んで' }, ['potn'] = { 'げる' }, ['voli_pres_aff'] = { 'ごう' }, }--]==]	--[==[	local pagename = '来る' local kana = 'くる' local data_inflsp = { pos = 'v', ['lemma'] = { 'くる' }, ['inf'] = { 'き' }, ['subj'] = { 'くれ' }, ['imp'] = { 'こい' }, ['inf_a'] = { 'こ' }, ['inf_ta'] = { 'きた' }, ['inf_te'] = { 'きて' }, ['caus'] = { 'こさせる' }, ['pass'] = { 'こられる' }, }--]==]	--[==[	local pagename = 'まっとう' local data_inflsp = { pos = 'v', ['lemma'] = { '' }, ['ind'] = { ' する' }, ['inf'] = { ' し' }, ['subj'] = { ' すれ' }, ['imp'] = { ' しろ', ' せよ' }, ['inf_a'] = { ' さ' }, ['inf_neg'] = { ' し' }, ['ger'] = {''}, ['potn'] = { ' できる' }, ['voli_pres_aff'] = { ' しよう' }, notes = { ['imp_aff'] = { nil, { 'Formal imperative.' } }, }   }--]==]	--[==[	local pagename = '関する' local kana = 'かんする' local data_inflsp = { pos = 'v', ['lemma'] = { 'する' }, ['ind'] = { 'する' }, ['inf'] = { 'し' }, ['subj'] = { 'すれ' }, ['imp'] = { 'しろ', 'せよ' }, ['inf_a'] = { 'さ' }, ['inf_neg'] = { 'し' }, ['ger'] = {''}, ['potn'] = { 'できる' }, ['voli_pres_aff'] = { 'しよう' }, notes = { ['imp_aff'] = { nil, { 'Formal imperative.' } }, }   }--]==]	--[==	local pagename = 'ずさん' local data_inflsp = { pos = 'a', ['lemma'] = { '' }, ['ind'] = { ' だ' }, ['inf'] = { ' に' }, ['adn'] = { ' な' }, ['subj'] = { ' なら' }, ['imp'] = {}, ['inf_a'] = {}, ['inf_neg'] = { ' で ' }, ['inf_ta'] = { ' だった' }, ['inf_te'] = { ' で' }, ['pol_aff'] = { ' で' }, ['pol_neg'] = { ' で は ありま' }, ['ind_pres_aff_pred'] = { ' だ', ' な' }, ['subj_pres_aff'] = { ' なら' }, ['voli_pres_aff'] = { ' だろう' }, notes = { ['ind_pres_aff_pred'] = { { 'Predicative.' }, { 'Attributive.' } }, ['voli_pres_aff'] = {}, ['voli_pres_neg'] = {}, ['voli_pret_aff'] = {}, ['voli_pret_neg'] = {}, ['voli_pres_aff_pol'] = {}, }   }--]==]    --local data_inflsp = mw.loadData('Module:ja-infl/verb/' .. frame.args[1]) local function d(name, suffix) suffix = suffix or '' if data_inflsp[name] then local r = {} for _, form in ipairs(data_inflsp[name]) do table.insert(r, form .. suffix) end r.notes = data_inflsp.notes and data_inflsp.notes[name] or data_common.notes[name] mw.logObject(r) return r		elseif data_common[name] then local r = d(data_common[name][1], (data_common[name][2] or '') .. suffix) r.notes = data_inflsp.notes and data_inflsp.notes[name] or data_common.notes[name] return r		else return {} end end --local pagename = args['pagename'] or mw.title.getCurrentTitle.text --local kana = args[1] local stem_kana, stem_kanji, stem_kana_in_kanji local lemma_suffix = d('lemma')[1] if kana then if kana:gsub('[-^ %.%%]+', '') == pagename then stem_kana = kana:sub(1, -(lemma_suffix:len + 1)) else local len_lemma_suffix = mw.ustring.len(lemma_suffix) stem_kana = mw.ustring.sub(kana, 1, -(len_lemma_suffix + 1)) stem_kanji, stem_kana_in_kanji = pagename, 0 for i = len_lemma_suffix, 1, -1 do				if mw.ustring.sub(pagename, -i) == mw.ustring.sub(lemma_suffix, -i) then stem_kanji, stem_kana_in_kanji = mw.ustring.sub(pagename, 1, -(i + 1)), len_lemma_suffix - i					break end end end else stem_kana = pagename:sub(1, -(lemma_suffix:len + 1)) end local phrase_like = stem_kana:match' ' local notes, notes_ref = {}, {} local function add_note(note) if notes_ref[note] then return notes_ref[note] else local nth = #notes + 1 notes_ref[note] = nth table.insert(notes,  .. nth .. .. note) return nth end end local function grid(name) local r_form, r_tr = {}, {} if args[name] then for form in args[name]:gmatch'(..-)%f[%z;];?' do				local f, n = form:match'^(.-)%f[%z?]%??(.*)$' local f_kanji, f_kana = f:match'^(.-)%f[%z:]:?(.*)$' if f_kana == '' then f_kanji, f_kana = nil, f_kanji end local my_notes = {} for note in n:gmtach'(..-)%f[%z?]%??' do					table.insert(my_notes, add_note(note)) end my_notes = #my_notes > 0 and '' .. table.concat(my_notes, ', ') ..  or  table.insert(r_form, ' ' .. (f_kanji and ruby{ term = f_kanji, kana = f_kana, } or f_kana:gsub('[-^ %%%.]+', '')) .. ' ' .. my_notes) table.insert(r_tr, ' ' .. romaji(f_kana) .. ' ') end else local data = d(name) for i_datum, datum in ipairs(data) do				local my_notes = {} if data.notes and data.notes[i_datum] then for _, note in ipairs(data.notes[i_datum]) do						table.insert(my_notes, add_note(note)) end end my_notes = #my_notes > 0 and '' .. table.concat(my_notes, ', ') ..  or  table.insert(r_form, ' ' .. (stem_kanji and ruby{ term = stem_kanji .. mw.ustring.sub(datum, stem_kana_in_kanji + 1), kana = stem_kana .. datum, } or (stem_kana .. datum):gsub('[-^ %%%.]+', '')) .. ' ' .. my_notes) table.insert(r_tr, ' ' .. romaji(stem_kana .. datum) .. ' ') end end if #r_form > 0 then return table.concat(r_form, ' / ') .. ' ' .. table.concat(r_tr, ' / ') else return ' - ' end end

return table.concat{ ' ',       'Inflection of " ',        pagename,        ' " (See Appendix:Japanese verbs.) ', ' \n', table.concat({           '{| class="wikitable" style="margin-top: 0; text-align: center; width: 100%; margin-bottom: 0;" rules="all"',            '! colspan = "6" | Principal parts',            '|-',            "! Mizen !! Ren'yō !! Shūshi !! Reitai !! Katei !! Meirei",            '|-',            '|' .. table.concat({grid('inf_a'), grid('inf'), grid('ind'), grid('adn'), grid('subj'), grid('imp')}, '||'),            '|}',            '{| class="wikitable" style="margin-top: 0; text-align: center; width: 100%; margin-bottom: 0;" rules="all"',            '! colspan = "4" | Inflected forms',            '|-',            '| style="width:20%;" colspan = "2" |',            '! Affirmative !! Negative',            '|-',            '! rowspan = "2" | Indicative',            '! Non-past',            '|' .. grid('ind_pres_aff_pred') .. '||' .. grid('ind_pres_neg'),            '|-', '! Past', '|' .. grid('ind_pret_aff') .. '||' .. grid('ind_pret_neg'), '|-',           '! rowspan = "2" | Subjunctive', "! (-ba)", '|' .. grid('subj_pres_aff') .. '||' .. grid('subj_pres_neg'), '|-',           "! (-tara)", '|' .. grid('subj_pret_aff') .. '||' .. grid('subj_pret_neg'), '|-',           '! rowspan = "2" | ' .. (data_inflsp.pos == 'v' and 'Volitional (Optative/Presumptive)' or 'Presumptive'), '! Non-past', '|' .. grid('voli_pres_aff') .. '||' .. grid('voli_pres_neg'), '|-',           '! Past', '|' .. grid('voli_pret_aff') .. '||' .. grid('voli_pret_neg'), '|-',           data_inflsp.pos == 'v' and table.concat({				'! Imperative',				'! Non-past',				'|' .. grid('imp_aff') .. '||' .. grid('imp_neg'),				'|-',			}, '\n') or '', '! rowspan = "2" | Adverbial', '! (bare)', '|' .. grid('inf_pres_aff') .. '||' .. grid('inf_pres_neg'), '|-',           "! (-te)", '|' .. grid('inf_pret_aff') .. '||' .. grid('inf_pret_neg'), '|-',           '! colspan = "4" | Inflected forms (polite)', '|-',           '| colspan = "2" |', '! Affirmative !! Negative', '|-',           '! rowspan = "2" | Indicative', '! Non-past', '|' .. grid('ind_pres_aff_pol') .. '||' .. grid('ind_pres_neg_pol'), '|-',           '! Past', '|' .. grid('ind_pret_aff_pol') .. '||' .. grid('ind_pret_neg_pol'), '|-',           '! ' .. (data_inflsp.pos == 'v' and 'Volitional (Optative/Presumptive)' or 'Presumptive'), '! Non-past', '|' .. grid('voli_pres_aff_pol') .. '||-',           '|-',            '! Adverbial', "! (-te)", '|' .. grid('inf_pres_aff_pol') .. '||-',           '|}',			data_inflsp.pos == 'v' and table.concat({				'{| class="wikitable" style="margin-top: 0; text-align: center; width: 100%; margin-bottom: 0;" rules="all"',				'! Gerund !! Potential !! Passive !! Causative',				'|-',				'|' .. table.concat({grid('ger'), grid('potn'), grid('pass'), grid('caus')}, '||'),				'|}',			}, '\n') or data_inflsp.pos == 'a' and table.concat({				'{| class="wikitable" style="margin-top: 0; text-align: center; width: 100%; margin-bottom: 0;" rules="all"',				'! Combining form !! Nominalization ("-ness")',				'|-',				'|' .. table.concat({grid('root'), grid('nomzn')}, '||'),				'|}',			}, '\n') or '', }, '\n'),       ' ',        table.concat(notes, ' '),        ' ',        '  ',    } end

return export