diff options
| -rw-r--r-- | ext/js/language/ja/japanese-transforms.js | 99 | ||||
| -rw-r--r-- | test/language/japanese-transforms.test.js | 49 | 
2 files changed, 138 insertions, 10 deletions
| diff --git a/ext/js/language/ja/japanese-transforms.js b/ext/js/language/ja/japanese-transforms.js index f789d007..2d688ce5 100644 --- a/ext/js/language/ja/japanese-transforms.js +++ b/ext/js/language/ja/japanese-transforms.js @@ -117,6 +117,10 @@ export const japaneseTransforms = {              name: 'Intermediate -te endings for progressive or perfect tense',              isDictionaryForm: false          }, +        '-ba': { +            name: 'Intermediate -ba endings for conditional contraction', +            isDictionaryForm: false +        },          'adv': {              name: 'Intermediate -ku endings for adverbs',              isDictionaryForm: false @@ -138,16 +142,70 @@ export const japaneseTransforms = {                  }              ],              rules: [ -                suffixInflection('ければ', 'い', [], ['adj-i']), -                suffixInflection('えば', 'う', [], ['v5']), -                suffixInflection('けば', 'く', [], ['v5']), -                suffixInflection('げば', 'ぐ', [], ['v5']), -                suffixInflection('せば', 'す', [], ['v5']), -                suffixInflection('てば', 'つ', [], ['v5']), -                suffixInflection('ねば', 'ぬ', [], ['v5']), -                suffixInflection('べば', 'ぶ', [], ['v5']), -                suffixInflection('めば', 'む', [], ['v5']), -                suffixInflection('れば', 'る', [], ['v1', 'v5', 'vk', 'vs', 'vz']) +                suffixInflection('ければ', 'い', ['-ba'], ['adj-i']), +                suffixInflection('えば', 'う', ['-ba'], ['v5']), +                suffixInflection('けば', 'く', ['-ba'], ['v5']), +                suffixInflection('げば', 'ぐ', ['-ba'], ['v5']), +                suffixInflection('せば', 'す', ['-ba'], ['v5']), +                suffixInflection('てば', 'つ', ['-ba'], ['v5']), +                suffixInflection('ねば', 'ぬ', ['-ba'], ['v5']), +                suffixInflection('べば', 'ぶ', ['-ba'], ['v5']), +                suffixInflection('めば', 'む', ['-ba'], ['v5']), +                suffixInflection('れば', 'る', ['-ba'], ['v1', 'v5', 'vk', 'vs', 'vz']) +            ] +        }, +        { +            name: '-ya', +            description: 'Conditional (Contraction)', +            i18n: [ +                { +                    language: 'ja', +                    name: '~ゃ', +                    description: '仮定形の縮約系' +                } +            ], +            rules: [ +                suffixInflection('けりゃ', 'ければ', [], ['-ba']), +                suffixInflection('きゃ', 'ければ', [], ['-ba']), +                suffixInflection('や', 'えば', [], ['-ba']), +                suffixInflection('きゃ', 'けば', [], ['-ba']), +                suffixInflection('ぎゃ', 'げば', [], ['-ba']), +                suffixInflection('しゃ', 'せば', [], ['-ba']), +                suffixInflection('ちゃ', 'てば', [], ['-ba']), +                suffixInflection('にゃ', 'ねば', [], ['-ba']), +                suffixInflection('びゃ', 'べば', [], ['-ba']), +                suffixInflection('みゃ', 'めば', [], ['-ba']), +                suffixInflection('りゃ', 'れば', [], ['-ba']) +            ] +        }, +        { +            name: '-cha', +            description: 'Contraction of -teha', +            i18n: [ +                { +                    language: 'ja', +                    name: '~ちゃ', +                    description: '「~テハ」の縮約系' +                } +            ], +            rules: [ +                suffixInflection('ちゃ', 'る', ['v5'], ['v1']), +                suffixInflection('いじゃ', 'ぐ', ['v5'], ['v5']), +                suffixInflection('いちゃ', 'く', ['v5'], ['v5']), +                suffixInflection('しちゃ', 'す', ['v5'], ['v5']), +                suffixInflection('っちゃ', 'う', ['v5'], ['v5']), +                suffixInflection('っちゃ', 'く', ['v5'], ['v5']), +                suffixInflection('っちゃ', 'つ', ['v5'], ['v5']), +                suffixInflection('っちゃ', 'る', ['v5'], ['v5']), +                suffixInflection('んじゃ', 'ぬ', ['v5'], ['v5']), +                suffixInflection('んじゃ', 'ぶ', ['v5'], ['v5']), +                suffixInflection('んじゃ', 'む', ['v5'], ['v5']), +                suffixInflection('じちゃ', 'ずる', ['v5'], ['vz']), +                suffixInflection('しちゃ', 'する', ['v5'], ['vs']), +                suffixInflection('為ちゃ', '為る', ['v5'], ['vs']), +                suffixInflection('きちゃ', 'くる', ['v5'], ['vk']), +                suffixInflection('来ちゃ', '来る', ['v5'], ['vk']), +                suffixInflection('來ちゃ', '來る', ['v5'], ['vk'])              ]          },          { @@ -451,6 +509,27 @@ export const japaneseTransforms = {              ]          },          { +            name: '-n', +            rules: [ +                suffixInflection('ん', 'る', [], ['v1']), +                suffixInflection('かん', 'く', [], ['v5']), +                suffixInflection('がん', 'ぐ', [], ['v5']), +                suffixInflection('さん', 'す', [], ['v5']), +                suffixInflection('たん', 'つ', [], ['v5']), +                suffixInflection('なん', 'ぬ', [], ['v5']), +                suffixInflection('ばん', 'ぶ', [], ['v5']), +                suffixInflection('まん', 'む', [], ['v5']), +                suffixInflection('らん', 'る', [], ['v5']), +                suffixInflection('わん', 'う', [], ['v5']), +                suffixInflection('ぜん', 'ずる', [], ['vz']), +                suffixInflection('せん', 'する', [], ['vs']), +                suffixInflection('為ん', '為る', [], ['vs']), +                suffixInflection('こん', 'くる', [], ['vk']), +                suffixInflection('来ん', '来る', [], ['vk']), +                suffixInflection('來ん', '來る', [], ['vk']) +            ] +        }, +        {              name: '-mu',              rules: [                  suffixInflection('む', 'る', [], ['v1']), diff --git a/test/language/japanese-transforms.test.js b/test/language/japanese-transforms.test.js index 567cd239..45697a19 100644 --- a/test/language/japanese-transforms.test.js +++ b/test/language/japanese-transforms.test.js @@ -69,6 +69,8 @@ const tests = [              {term: '食べる', source: '食べまして',        rule: 'v1', reasons: ['polite', '-te']},              {term: '食べる', source: '食べれば',         rule: 'v1', reasons: ['-ba']}, +            {term: '食べる', source: '食べりゃ',         rule: 'v1', reasons: ['-ba', '-ya']}, +            {term: '食べる', source: '食べちゃ',         rule: 'v1', reasons: ['-cha']},              {term: '食べる', source: '食べちゃう',       rule: 'v1', reasons: ['-chau']},              {term: '食べる', source: '食べちまう',       rule: 'v1', reasons: ['-chimau']},              {term: '食べる', source: '食べなさい',       rule: 'v1', reasons: ['-nasai']}, @@ -79,6 +81,7 @@ const tests = [              {term: '食べる', source: '食べたり',         rule: 'v1', reasons: ['-tari']},              {term: '食べる', source: '食べず',           rule: 'v1', reasons: ['-zu']},              {term: '食べる', source: '食べぬ',           rule: 'v1', reasons: ['-nu']}, +            {term: '食べる', source: '食べん',           rule: 'v1', reasons: ['-n']},              {term: '食べる', source: '食べざる',           rule: 'v1', reasons: ['-zaru']},              {term: '食べる', source: '食べねば',           rule: 'v1', reasons: ['-neba']},              {term: '食べる', source: '食べ',             rule: 'v1d', reasons: ['masu stem']}, @@ -120,6 +123,8 @@ const tests = [              {term: '買う', source: '買いまして',     rule: 'v5', reasons: ['polite', '-te']},              {term: '買う', source: '買えば',           rule: 'v5', reasons: ['-ba']}, +            {term: '買う', source: '買や',           rule: 'v5', reasons: ['-ba', '-ya']}, +            {term: '買う', source: '買っちゃ',       rule: 'v5', reasons: ['-cha']},              {term: '買う', source: '買っちゃう',       rule: 'v5', reasons: ['-chau']},              {term: '買う', source: '買っちまう',       rule: 'v5', reasons: ['-chimau']},              {term: '買う', source: '買いなさい',       rule: 'v5', reasons: ['-nasai']}, @@ -130,6 +135,7 @@ const tests = [              {term: '買う', source: '買ったり',         rule: 'v5', reasons: ['-tari']},              {term: '買う', source: '買わず',           rule: 'v5', reasons: ['-zu']},              {term: '買う', source: '買わぬ',           rule: 'v5', reasons: ['-nu']}, +            {term: '買う', source: '買わん',           rule: 'v5', reasons: ['-n']},              {term: '買う', source: '買わざる',           rule: 'v5', reasons: ['-zaru']},              {term: '買う', source: '買わねば',           rule: 'v5', reasons: ['-neba']},              {term: '買う', source: '買い',             rule: 'v5', reasons: ['masu stem']}, @@ -171,6 +177,8 @@ const tests = [              {term: '行く', source: '行きまして',     rule: 'v5', reasons: ['polite', '-te']},              {term: '行く', source: '行けば',           rule: 'v5', reasons: ['-ba']}, +            {term: '行く', source: '行きゃ',           rule: 'v5', reasons: ['-ba', '-ya']}, +            {term: '行く', source: '行っちゃ',       rule: 'v5', reasons: ['-cha']},              {term: '行く', source: '行っちゃう',       rule: 'v5', reasons: ['-chau']},              {term: '行く', source: '行っちまう',       rule: 'v5', reasons: ['-chimau']},              {term: '行く', source: '行きなさい',       rule: 'v5', reasons: ['-nasai']}, @@ -181,6 +189,7 @@ const tests = [              {term: '行く', source: '行いたり',         rule: 'v5', reasons: ['-tari']},              {term: '行く', source: '行かず',           rule: 'v5', reasons: ['-zu']},              {term: '行く', source: '行かぬ',           rule: 'v5', reasons: ['-nu']}, +            {term: '行く', source: '行かん',           rule: 'v5', reasons: ['-n']},              {term: '行く', source: '行かざる',           rule: 'v5', reasons: ['-zaru']},              {term: '行く', source: '行かねば',           rule: 'v5', reasons: ['-neba']},              {term: '行く', source: '行き',             rule: 'v5', reasons: ['masu stem']}, @@ -222,6 +231,8 @@ const tests = [              {term: '泳ぐ', source: '泳ぎまして',     rule: 'v5', reasons: ['polite', '-te']},              {term: '泳ぐ', source: '泳げば',           rule: 'v5', reasons: ['-ba']}, +            {term: '泳ぐ', source: '泳ぎゃ',           rule: 'v5', reasons: ['-ba', '-ya']}, +            {term: '泳ぐ', source: '泳いじゃ',       rule: 'v5', reasons: ['-cha']},              {term: '泳ぐ', source: '泳いじゃう',       rule: 'v5', reasons: ['-chau']},              {term: '泳ぐ', source: '泳いじまう',       rule: 'v5', reasons: ['-chimau']},              {term: '泳ぐ', source: '泳ぎなさい',       rule: 'v5', reasons: ['-nasai']}, @@ -232,6 +243,7 @@ const tests = [              {term: '泳ぐ', source: '泳いだり',         rule: 'v5', reasons: ['-tari']},              {term: '泳ぐ', source: '泳がず',           rule: 'v5', reasons: ['-zu']},              {term: '泳ぐ', source: '泳がぬ',           rule: 'v5', reasons: ['-nu']}, +            {term: '泳ぐ', source: '泳がん',           rule: 'v5', reasons: ['-n']},              {term: '泳ぐ', source: '泳がざる',           rule: 'v5', reasons: ['-zaru']},              {term: '泳ぐ', source: '泳がねば',           rule: 'v5', reasons: ['-neba']},              {term: '泳ぐ', source: '泳ぎ',             rule: 'v5', reasons: ['masu stem']}, @@ -272,6 +284,8 @@ const tests = [              {term: '話す', source: '話しまして',     rule: 'v5', reasons: ['polite', '-te']},              {term: '話す', source: '話せば',           rule: 'v5', reasons: ['-ba']}, +            {term: '話す', source: '話しゃ',           rule: 'v5', reasons: ['-ba', '-ya']}, +            {term: '話す', source: '話しちゃ',       rule: 'v5', reasons: ['-cha']},              {term: '話す', source: '話しちゃう',       rule: 'v5', reasons: ['-chau']},              {term: '話す', source: '話しちまう',       rule: 'v5', reasons: ['-chimau']},              {term: '話す', source: '話しなさい',       rule: 'v5', reasons: ['-nasai']}, @@ -282,6 +296,7 @@ const tests = [              {term: '話す', source: '話したり',         rule: 'v5', reasons: ['-tari']},              {term: '話す', source: '話さず',           rule: 'v5', reasons: ['-zu']},              {term: '話す', source: '話さぬ',           rule: 'v5', reasons: ['-nu']}, +            {term: '話す', source: '話さん',           rule: 'v5', reasons: ['-n']},              {term: '話す', source: '話さざる',           rule: 'v5', reasons: ['-zaru']},              {term: '話す', source: '話さねば',           rule: 'v5', reasons: ['-neba']},              {term: '話す', source: '話し',             rule: 'v5', reasons: ['masu stem']}, @@ -323,6 +338,8 @@ const tests = [              {term: '待つ', source: '待ちまして',     rule: 'v5', reasons: ['polite', '-te']},              {term: '待つ', source: '待てば',           rule: 'v5', reasons: ['-ba']}, +            {term: '待つ', source: '待ちゃ',           rule: 'v5', reasons: ['-ba', '-ya']}, +            {term: '待つ', source: '待っちゃ',       rule: 'v5', reasons: ['-cha']},              {term: '待つ', source: '待っちゃう',       rule: 'v5', reasons: ['-chau']},              {term: '待つ', source: '待っちまう',       rule: 'v5', reasons: ['-chimau']},              {term: '待つ', source: '待ちなさい',       rule: 'v5', reasons: ['-nasai']}, @@ -333,6 +350,7 @@ const tests = [              {term: '待つ', source: '待ったり',         rule: 'v5', reasons: ['-tari']},              {term: '待つ', source: '待たず',           rule: 'v5', reasons: ['-zu']},              {term: '待つ', source: '待たぬ',           rule: 'v5', reasons: ['-nu']}, +            {term: '待つ', source: '待たん',           rule: 'v5', reasons: ['-n']},              {term: '待つ', source: '待たざる',           rule: 'v5', reasons: ['-zaru']},              {term: '待つ', source: '待たねば',           rule: 'v5', reasons: ['-neba']},              {term: '待つ', source: '待ち',             rule: 'v5', reasons: ['masu stem']}, @@ -374,6 +392,8 @@ const tests = [              {term: '死ぬ', source: '死にまして',     rule: 'v5', reasons: ['polite', '-te']},              {term: '死ぬ', source: '死ねば',           rule: 'v5', reasons: ['-ba']}, +            {term: '死ぬ', source: '死にゃ',           rule: 'v5', reasons: ['-ba', '-ya']}, +            {term: '死ぬ', source: '死んじゃ',       rule: 'v5', reasons: ['-cha']},              {term: '死ぬ', source: '死んじゃう',       rule: 'v5', reasons: ['-chau']},              {term: '死ぬ', source: '死んじまう',       rule: 'v5', reasons: ['-chimau']},              {term: '死ぬ', source: '死になさい',       rule: 'v5', reasons: ['-nasai']}, @@ -384,6 +404,7 @@ const tests = [              {term: '死ぬ', source: '死んだり',         rule: 'v5', reasons: ['-tari']},              {term: '死ぬ', source: '死なず',           rule: 'v5', reasons: ['-zu']},              {term: '死ぬ', source: '死なぬ',           rule: 'v5', reasons: ['-nu']}, +            {term: '死ぬ', source: '死なん',           rule: 'v5', reasons: ['-n']},              {term: '死ぬ', source: '死なざる',           rule: 'v5', reasons: ['-zaru']},              {term: '死ぬ', source: '死なねば',           rule: 'v5', reasons: ['-neba']},              {term: '死ぬ', source: '死に',             rule: 'v5', reasons: ['masu stem']}, @@ -424,6 +445,8 @@ const tests = [              {term: '遊ぶ', source: '遊びまして',     rule: 'v5', reasons: ['polite', '-te']},              {term: '遊ぶ', source: '遊べば',           rule: 'v5', reasons: ['-ba']}, +            {term: '遊ぶ', source: '遊びゃ',           rule: 'v5', reasons: ['-ba', '-ya']}, +            {term: '遊ぶ', source: '遊んじゃ',       rule: 'v5', reasons: ['-cha']},              {term: '遊ぶ', source: '遊んじゃう',       rule: 'v5', reasons: ['-chau']},              {term: '遊ぶ', source: '遊んじまう',       rule: 'v5', reasons: ['-chimau']},              {term: '遊ぶ', source: '遊びなさい',       rule: 'v5', reasons: ['-nasai']}, @@ -434,6 +457,7 @@ const tests = [              {term: '遊ぶ', source: '遊んだり',         rule: 'v5', reasons: ['-tari']},              {term: '遊ぶ', source: '遊ばず',           rule: 'v5', reasons: ['-zu']},              {term: '遊ぶ', source: '遊ばぬ',           rule: 'v5', reasons: ['-nu']}, +            {term: '遊ぶ', source: '遊ばん',           rule: 'v5', reasons: ['-n']},              {term: '遊ぶ', source: '遊ばざる',           rule: 'v5', reasons: ['-zaru']},              {term: '遊ぶ', source: '遊ばねば',           rule: 'v5', reasons: ['-neba']},              {term: '遊ぶ', source: '遊び',             rule: 'v5', reasons: ['masu stem']}, @@ -474,6 +498,8 @@ const tests = [              {term: '飲む', source: '飲みまして',     rule: 'v5', reasons: ['polite', '-te']},              {term: '飲む', source: '飲めば',           rule: 'v5', reasons: ['-ba']}, +            {term: '飲む', source: '飲みゃ',           rule: 'v5', reasons: ['-ba', '-ya']}, +            {term: '飲む', source: '飲んじゃ',       rule: 'v5', reasons: ['-cha']},              {term: '飲む', source: '飲んじゃう',       rule: 'v5', reasons: ['-chau']},              {term: '飲む', source: '飲んじまう',       rule: 'v5', reasons: ['-chimau']},              {term: '飲む', source: '飲みなさい',       rule: 'v5', reasons: ['-nasai']}, @@ -484,6 +510,7 @@ const tests = [              {term: '飲む', source: '飲んだり',         rule: 'v5', reasons: ['-tari']},              {term: '飲む', source: '飲まず',           rule: 'v5', reasons: ['-zu']},              {term: '飲む', source: '飲まぬ',           rule: 'v5', reasons: ['-nu']}, +            {term: '飲む', source: '飲まん',           rule: 'v5', reasons: ['-n']},              {term: '飲む', source: '飲まざる',           rule: 'v5', reasons: ['-zaru']},              {term: '飲む', source: '飲まねば',           rule: 'v5', reasons: ['-neba']},              {term: '飲む', source: '飲み',             rule: 'v5', reasons: ['masu stem']}, @@ -524,6 +551,8 @@ const tests = [              {term: '作る', source: '作りまして',     rule: 'v5', reasons: ['polite', '-te']},              {term: '作る', source: '作れば',           rule: 'v5', reasons: ['-ba']}, +            {term: '作る', source: '作りゃ',           rule: 'v5', reasons: ['-ba', '-ya']}, +            {term: '作る', source: '作っちゃ',       rule: 'v5', reasons: ['-cha']},              {term: '作る', source: '作っちゃう',       rule: 'v5', reasons: ['-chau']},              {term: '作る', source: '作っちまう',       rule: 'v5', reasons: ['-chimau']},              {term: '作る', source: '作りなさい',       rule: 'v5', reasons: ['-nasai']}, @@ -534,6 +563,7 @@ const tests = [              {term: '作る', source: '作ったり',         rule: 'v5', reasons: ['-tari']},              {term: '作る', source: '作らず',           rule: 'v5', reasons: ['-zu']},              {term: '作る', source: '作らぬ',           rule: 'v5', reasons: ['-nu']}, +            {term: '作る', source: '作らん',           rule: 'v5', reasons: ['-n']},              {term: '作る', source: '作らざる',           rule: 'v5', reasons: ['-zaru']},              {term: '作る', source: '作らねば',           rule: 'v5', reasons: ['-neba']},              {term: '作る', source: '作り',             rule: 'v5', reasons: ['masu stem']}, @@ -579,6 +609,8 @@ const tests = [              {term: '為る', source: '為まして',     rule: 'vs', reasons: ['polite', '-te']},              {term: '為る', source: '為れば',         rule: 'vs', reasons: ['-ba']}, +            {term: '為る', source: '為りゃ',         rule: 'vs', reasons: ['-ba', '-ya']}, +            {term: '為る', source: '為ちゃ',       rule: 'vs', reasons: ['-cha']},              {term: '為る', source: '為ちゃう',       rule: 'vs', reasons: ['-chau']},              {term: '為る', source: '為ちまう',       rule: 'vs', reasons: ['-chimau']},              {term: '為る', source: '為なさい',       rule: 'vs', reasons: ['-nasai']}, @@ -589,6 +621,7 @@ const tests = [              {term: '為る', source: '為たり',         rule: 'vs', reasons: ['-tari']},              {term: '為る', source: '為ず',           rule: 'vs', reasons: ['-zu']},              {term: '為る', source: '為ぬ',           rule: 'vs', reasons: ['-nu']}, +            {term: '為る', source: '為ん',           rule: 'vs', reasons: ['-n']},              {term: '為る', source: '為ざる',           rule: 'vs', reasons: ['-zaru']},              {term: '為る', source: '為ねば',           rule: 'vs', reasons: ['-neba']},              // ['masu stem'] @@ -631,6 +664,8 @@ const tests = [              {term: 'する', source: 'しまして',     rule: 'vs', reasons: ['polite', '-te']},              {term: 'する', source: 'すれば',         rule: 'vs', reasons: ['-ba']}, +            {term: 'する', source: 'すりゃ',         rule: 'vs', reasons: ['-ba', '-ya']}, +            {term: 'する', source: 'しちゃ',       rule: 'vs', reasons: ['-cha']},              {term: 'する', source: 'しちゃう',       rule: 'vs', reasons: ['-chau']},              {term: 'する', source: 'しちまう',       rule: 'vs', reasons: ['-chimau']},              {term: 'する', source: 'しなさい',       rule: 'vs', reasons: ['-nasai']}, @@ -641,11 +676,13 @@ const tests = [              {term: 'する', source: 'したり',         rule: 'vs', reasons: ['-tari']},              {term: 'する', source: 'せず',           rule: 'vs', reasons: ['-zu']},              {term: 'する', source: 'せぬ',           rule: 'vs', reasons: ['-nu']}, +            {term: 'する', source: 'せん',           rule: 'vs', reasons: ['-n']},              {term: 'する', source: 'せざる',           rule: 'vs', reasons: ['-zaru']},              {term: 'する', source: 'せねば',           rule: 'vs', reasons: ['-neba']},              {term: 'する', source: 'し',             rule: 'vs', reasons: ['masu stem']},              {term: 'する', source: 'しましょう',     rule: 'vs', reasons: ['polite', 'volitional']},              {term: 'する', source: 'しよう',         rule: 'vs', reasons: ['volitional']}, +            {term: 'する', source: 'しなきゃ',        rule: 'vs', reasons: ['negative', '-ba', '-ya']},              // ['causative passive']              {term: 'する', source: 'しとく',         rule: 'vs', reasons: ['-toku']},              {term: 'する', source: 'している',       rule: 'vs', reasons: ['-te', 'progressive or perfect']}, @@ -677,6 +714,8 @@ const tests = [              {term: '来る', source: '来まして',     rule: 'vk', reasons: ['polite', '-te']},              {term: '来る', source: '来れば',         rule: 'vk', reasons: ['-ba']}, +            {term: '来る', source: '来りゃ',         rule: 'vk', reasons: ['-ba', '-ya']}, +            {term: '来る', source: '来ちゃ',       rule: 'vk', reasons: ['-cha']},              {term: '来る', source: '来ちゃう',       rule: 'vk', reasons: ['-chau']},              {term: '来る', source: '来ちまう',       rule: 'vk', reasons: ['-chimau']},              {term: '来る', source: '来なさい',       rule: 'vk', reasons: ['-nasai']}, @@ -687,6 +726,7 @@ const tests = [              {term: '来る', source: '来たり',         rule: 'vk', reasons: ['-tari']},              {term: '来る', source: '来ず',           rule: 'vk', reasons: ['-zu']},              {term: '来る', source: '来ぬ',           rule: 'vk', reasons: ['-nu']}, +            {term: '来る', source: '来ん',           rule: 'vk', reasons: ['-n']},              {term: '来る', source: '来ざる',           rule: 'vk', reasons: ['-zaru']},              {term: '来る', source: '来ねば',           rule: 'vk', reasons: ['-neba']},              {term: '来る', source: '来',             rule: 'vk', reasons: ['masu stem']}, @@ -723,6 +763,8 @@ const tests = [              {term: '來る', source: '來まして',     rule: 'vk', reasons: ['polite', '-te']},              {term: '來る', source: '來れば',         rule: 'vk', reasons: ['-ba']}, +            {term: '來る', source: '來りゃ',         rule: 'vk', reasons: ['-ba', '-ya']}, +            {term: '來る', source: '來ちゃ',       rule: 'vk', reasons: ['-cha']},              {term: '來る', source: '來ちゃう',       rule: 'vk', reasons: ['-chau']},              {term: '來る', source: '來ちまう',       rule: 'vk', reasons: ['-chimau']},              {term: '來る', source: '來なさい',       rule: 'vk', reasons: ['-nasai']}, @@ -733,6 +775,7 @@ const tests = [              {term: '來る', source: '來たり',         rule: 'vk', reasons: ['-tari']},              {term: '來る', source: '來ず',           rule: 'vk', reasons: ['-zu']},              {term: '來る', source: '來ぬ',           rule: 'vk', reasons: ['-nu']}, +            {term: '來る', source: '來ん',           rule: 'vk', reasons: ['-n']},              {term: '來る', source: '來ざる',           rule: 'vk', reasons: ['-zaru']},              {term: '來る', source: '來ねば',           rule: 'vk', reasons: ['-neba']},              {term: '來る', source: '來',             rule: 'vk', reasons: ['masu stem']}, @@ -769,6 +812,8 @@ const tests = [              {term: 'くる', source: 'きまして',     rule: 'vk', reasons: ['polite', '-te']},              {term: 'くる', source: 'くれば',         rule: 'vk', reasons: ['-ba']}, +            {term: 'くる', source: 'くりゃ',         rule: 'vk', reasons: ['-ba', '-ya']}, +            {term: 'くる', source: 'きちゃ',       rule: 'vk', reasons: ['-cha']},              {term: 'くる', source: 'きちゃう',       rule: 'vk', reasons: ['-chau']},              {term: 'くる', source: 'きちまう',       rule: 'vk', reasons: ['-chimau']},              {term: 'くる', source: 'きなさい',       rule: 'vk', reasons: ['-nasai']}, @@ -779,6 +824,7 @@ const tests = [              {term: 'くる', source: 'きたり',         rule: 'vk', reasons: ['-tari']},              {term: 'くる', source: 'こず',           rule: 'vk', reasons: ['-zu']},              {term: 'くる', source: 'こぬ',           rule: 'vk', reasons: ['-nu']}, +            {term: 'くる', source: 'こん',           rule: 'vk', reasons: ['-n']},              {term: 'くる', source: 'こざる',           rule: 'vk', reasons: ['-zaru']},              {term: 'くる', source: 'こねば',           rule: 'vk', reasons: ['-neba']},              {term: 'くる', source: 'き',             rule: 'vk', reasons: ['masu stem']}, @@ -827,6 +873,8 @@ const tests = [              {term: '論ずる', source: '論じまして',     rule: 'vz', reasons: ['polite', '-te']},              {term: '論ずる', source: '論ずれば',         rule: 'vz', reasons: ['-ba']}, +            {term: '論ずる', source: '論ずりゃ',         rule: 'vz', reasons: ['-ba', '-ya']}, +            {term: '論ずる', source: '論じちゃ',       rule: 'vz', reasons: ['-cha']},              {term: '論ずる', source: '論じちゃう',       rule: 'vz', reasons: ['-chau']},              {term: '論ずる', source: '論じちまう',       rule: 'vz', reasons: ['-chimau']},              {term: '論ずる', source: '論じなさい',       rule: 'vz', reasons: ['-nasai']}, @@ -837,6 +885,7 @@ const tests = [              {term: '論ずる', source: '論じたり',         rule: 'vz', reasons: ['-tari']},              {term: '論ずる', source: '論ぜず',           rule: 'vz', reasons: ['-zu']},              {term: '論ずる', source: '論ぜぬ',           rule: 'vz', reasons: ['-nu']}, +            {term: '論ずる', source: '論ぜん',           rule: 'vz', reasons: ['-n']},              {term: '論ずる', source: '論ぜざる',           rule: 'vz', reasons: ['-zaru']},              {term: '論ずる', source: '論ぜねば',           rule: 'vz', reasons: ['-neba']},              // ['masu stem'] |