Skip to content

Commit dede97d

Browse files
committed
Refactor Japanese ます, んかった form
* refactor masu form * normalize masu mai form * add tests * test false positives * remove maseba * change n past to n + ta <rikaitan.link>MzFlODFmZTJkZGNlYTY2ZDAxMTVkYmRiMWUxNjU3YzQ3YTc0ZWZjNgo=</rikaitan.link>
1 parent 473beb2 commit dede97d

File tree

3 files changed

+160
-93
lines changed

3 files changed

+160
-93
lines changed

benches/japanese-language-transformer.bench.js

+12
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,10 @@ describe('japanese language transformer', () => {
9090
'食べん',
9191
'食べんかった',
9292
'食べんばかり',
93+
'食べますまい',
94+
'食べましたら',
95+
'食べますれば',
96+
'食べませんかった',
9397
];
9498

9599
const inflectionCombinations = [
@@ -151,6 +155,10 @@ describe('japanese language transformer', () => {
151155
'こん',
152156
'こんかった',
153157
'こんばかり',
158+
'きますまい',
159+
'きましたら',
160+
'きますれば',
161+
'きませんかった',
154162
];
155163

156164
const suruInflections = [
@@ -210,6 +218,10 @@ describe('japanese language transformer', () => {
210218
'せん',
211219
'せんかった',
212220
'せんばかり',
221+
'しますまい',
222+
'しましたら',
223+
'しますれば',
224+
'しませんかった',
213225
];
214226

215227
const kansaibenInflections = [

ext/js/language/ja/japanese-transforms.js

+55-75
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ const conditions = {
7676
},
7777
],
7878
isDictionaryForm: true,
79-
subConditions: ['v5d', 'v5m', 'v5s'],
79+
subConditions: ['v5d', 'v5s'],
8080
},
8181
'v5d': {
8282
name: 'Godan verb, dictionary form',
@@ -88,10 +88,6 @@ const conditions = {
8888
],
8989
isDictionaryForm: false,
9090
},
91-
'v5m': {
92-
name: 'Godan verb, polite (masu) form',
93-
isDictionaryForm: false,
94-
},
9591
'v5s': {
9692
name: 'Godan verb, short causative form',
9793
isDictionaryForm: false,
@@ -136,6 +132,14 @@ const conditions = {
136132
],
137133
isDictionaryForm: true,
138134
},
135+
'-masu': {
136+
name: 'Polite -masu ending',
137+
isDictionaryForm: false,
138+
},
139+
'-masen': {
140+
name: 'Polite negative -masen ending',
141+
isDictionaryForm: false,
142+
},
139143
'-te': {
140144
name: 'Intermediate -te endings for progressive or perfect tense',
141145
isDictionaryForm: false,
@@ -152,6 +156,10 @@ const conditions = {
152156
name: '-ta past form ending',
153157
isDictionaryForm: false,
154158
},
159+
'-n': {
160+
name: '-n negative ending',
161+
isDictionaryForm: false,
162+
},
155163
'-na': {
156164
name: 'Intermediate -na ending (imperative negative)',
157165
isDictionaryForm: false,
@@ -194,6 +202,7 @@ export const japaneseTransforms = {
194202
suffixInflection('べば', 'ぶ', ['-ba'], ['v5']),
195203
suffixInflection('めば', 'む', ['-ba'], ['v5']),
196204
suffixInflection('れば', 'る', ['-ba'], ['v1', 'v5', 'vk', 'vs', 'vz']),
205+
suffixInflection('れば', '', ['-ba'], ['-masu']),
197206
],
198207
},
199208
'-ya': {
@@ -535,6 +544,7 @@ export const japaneseTransforms = {
535544
suffixInflection('副うたら', '副う', [], ['v5']),
536545
suffixInflection('厭うたら', '厭う', [], ['v5']),
537546
suffixInflection('のたもうたら', 'のたまう', [], ['v5']),
547+
suffixInflection('ましたら', 'ます', [], ['-masu']),
538548
],
539549
},
540550
'-tari': {
@@ -635,7 +645,7 @@ export const japaneseTransforms = {
635645
suffixInflection('副うて', '副う', ['-te'], ['v5']),
636646
suffixInflection('厭うて', '厭う', ['-te'], ['v5']),
637647
suffixInflection('のたもうて', 'のたまう', ['-te'], ['v5']),
638-
suffixInflection('まして', 'ます', [], ['v']),
648+
suffixInflection('まして', 'ます', [], ['-masu']),
639649
],
640650
},
641651
'-zu': {
@@ -712,54 +722,22 @@ export const japaneseTransforms = {
712722
},
713723
],
714724
rules: [
715-
suffixInflection('ん', 'る', [], ['v1']),
716-
suffixInflection('かん', 'く', [], ['v5']),
717-
suffixInflection('がん', 'ぐ', [], ['v5']),
718-
suffixInflection('さん', 'す', [], ['v5']),
719-
suffixInflection('たん', 'つ', [], ['v5']),
720-
suffixInflection('なん', 'ぬ', [], ['v5']),
721-
suffixInflection('ばん', 'ぶ', [], ['v5']),
722-
suffixInflection('まん', 'む', [], ['v5']),
723-
suffixInflection('らん', 'る', [], ['v5']),
724-
suffixInflection('わん', 'う', [], ['v5']),
725-
suffixInflection('ぜん', 'ずる', [], ['vz']),
726-
suffixInflection('せん', 'する', [], ['vs']),
727-
suffixInflection('為ん', '為る', [], ['vs']),
728-
suffixInflection('こん', 'くる', [], ['vk']),
729-
suffixInflection('来ん', '来る', [], ['vk']),
730-
suffixInflection('來ん', '來る', [], ['vk']),
731-
],
732-
},
733-
'-n past': {
734-
name: '-n',
735-
description: 'Past negative form of verbs; a sound change of ぬ.\n' +
736-
'Usage: Attach んかった to the irrealis form (mizenkei) of verbs.\n' +
737-
'する becomes せんかった',
738-
i18n: [
739-
{
740-
language: 'ja',
741-
name: '~んかった',
742-
description: '打消の過去を示す。なかった。',
743-
},
744-
],
745-
rules: [
746-
suffixInflection('んかった', 'る', [], ['v1']),
747-
suffixInflection('かんかった', 'く', [], ['v5']),
748-
suffixInflection('がんかった', 'ぐ', [], ['v5']),
749-
suffixInflection('さんかった', 'す', [], ['v5']),
750-
suffixInflection('たんかった', 'つ', [], ['v5']),
751-
suffixInflection('なんかった', 'ぬ', [], ['v5']),
752-
suffixInflection('ばんかった', 'ぶ', [], ['v5']),
753-
suffixInflection('まんかった', 'む', [], ['v5']),
754-
suffixInflection('らんかった', 'る', [], ['v5']),
755-
suffixInflection('わんかった', 'う', [], ['v5']),
756-
suffixInflection('ぜんかった', 'ずる', [], ['vz']),
757-
suffixInflection('せんかった', 'する', [], ['vs']),
758-
suffixInflection('為んかった', '為る', [], ['vs']),
759-
suffixInflection('こんかった', 'くる', [], ['vk']),
760-
suffixInflection('来んかった', '来る', [], ['vk']),
761-
suffixInflection('來んかった', '來る', [], ['vk']),
762-
suffixInflection('ませんかった', 'ません', [], ['v']),
725+
suffixInflection('ん', 'る', ['-n'], ['v1']),
726+
suffixInflection('かん', 'く', ['-n'], ['v5']),
727+
suffixInflection('がん', 'ぐ', ['-n'], ['v5']),
728+
suffixInflection('さん', 'す', ['-n'], ['v5']),
729+
suffixInflection('たん', 'つ', ['-n'], ['v5']),
730+
suffixInflection('なん', 'ぬ', ['-n'], ['v5']),
731+
suffixInflection('ばん', 'ぶ', ['-n'], ['v5']),
732+
suffixInflection('まん', 'む', ['-n'], ['v5']),
733+
suffixInflection('らん', 'る', ['-n'], ['v5']),
734+
suffixInflection('わん', 'う', ['-n'], ['v5']),
735+
suffixInflection('ぜん', 'ずる', ['-n'], ['vz']),
736+
suffixInflection('せん', 'する', ['-n'], ['vs']),
737+
suffixInflection('為ん', '為る', ['-n'], ['vs']),
738+
suffixInflection('こん', 'くる', ['-n'], ['vk']),
739+
suffixInflection('来ん', '来る', ['-n'], ['vk']),
740+
suffixInflection('來ん', '來る', ['-n'], ['vk']),
763741
],
764742
},
765743
'-nbakari': {
@@ -1090,7 +1068,7 @@ export const japaneseTransforms = {
10901068
suffixInflection('こない', 'くる', ['adj-i'], ['vk']),
10911069
suffixInflection('来ない', '来る', ['adj-i'], ['vk']),
10921070
suffixInflection('來ない', '來る', ['adj-i'], ['vk']),
1093-
suffixInflection('ません', 'ます', ['v'], ['v']),
1071+
suffixInflection('ません', 'ます', ['-masen'], ['-masu']),
10941072
],
10951073
},
10961074
'-sa': {
@@ -1188,8 +1166,9 @@ export const japaneseTransforms = {
11881166
suffixInflection('副うた', '副う', ['past'], ['v5']),
11891167
suffixInflection('厭うた', '厭う', ['past'], ['v5']),
11901168
suffixInflection('のたもうた', 'のたまう', ['past'], ['v5']),
1191-
suffixInflection('ました', 'ます', ['past'], ['v']),
1192-
suffixInflection('ませんでした', 'ません', ['past'], ['v']),
1169+
suffixInflection('ました', 'ます', ['past'], ['-masu']),
1170+
suffixInflection('でした', '', ['past'], ['-masen']),
1171+
suffixInflection('かった', '', ['past'], ['-masen', '-n']),
11931172
],
11941173
},
11951174
'-masu': {
@@ -1203,23 +1182,23 @@ export const japaneseTransforms = {
12031182
},
12041183
],
12051184
rules: [
1206-
suffixInflection('ます', 'る', ['v1'], ['v1']),
1207-
suffixInflection('います', 'う', ['v5m'], ['v5d', 'v5s']),
1208-
suffixInflection('きます', 'く', ['v5m'], ['v5d', 'v5s']),
1209-
suffixInflection('ぎます', 'ぐ', ['v5m'], ['v5d', 'v5s']),
1210-
suffixInflection('します', 'す', ['v5m'], ['v5d', 'v5s']),
1211-
suffixInflection('ちます', 'つ', ['v5m'], ['v5d', 'v5s']),
1212-
suffixInflection('にます', 'ぬ', ['v5m'], ['v5d', 'v5s']),
1213-
suffixInflection('びます', 'ぶ', ['v5m'], ['v5d', 'v5s']),
1214-
suffixInflection('みます', 'む', ['v5m'], ['v5d', 'v5s']),
1215-
suffixInflection('ります', 'る', ['v5m'], ['v5d', 'v5s']),
1216-
suffixInflection('じます', 'ずる', ['vz'], ['vz']),
1217-
suffixInflection('します', 'する', ['vs'], ['vs']),
1218-
suffixInflection('為ます', '為る', ['vs'], ['vs']),
1219-
suffixInflection('きます', 'くる', ['vk'], ['vk']),
1220-
suffixInflection('来ます', '来る', ['vk'], ['vk']),
1221-
suffixInflection('來ます', '來る', ['vk'], ['vk']),
1222-
suffixInflection('くあります', 'い', ['v'], ['adj-i']),
1185+
suffixInflection('ます', 'る', ['-masu'], ['v1']),
1186+
suffixInflection('います', 'う', ['-masu'], ['v5d', 'v5s']),
1187+
suffixInflection('きます', 'く', ['-masu'], ['v5d', 'v5s']),
1188+
suffixInflection('ぎます', 'ぐ', ['-masu'], ['v5d', 'v5s']),
1189+
suffixInflection('します', 'す', ['-masu'], ['v5d', 'v5s']),
1190+
suffixInflection('ちます', 'つ', ['-masu'], ['v5d', 'v5s']),
1191+
suffixInflection('にます', 'ぬ', ['-masu'], ['v5d', 'v5s']),
1192+
suffixInflection('びます', 'ぶ', ['-masu'], ['v5d', 'v5s']),
1193+
suffixInflection('みます', 'む', ['-masu'], ['v5d', 'v5s']),
1194+
suffixInflection('ります', 'る', ['-masu'], ['v5d', 'v5s']),
1195+
suffixInflection('じます', 'ずる', ['-masu'], ['vz']),
1196+
suffixInflection('します', 'する', ['-masu'], ['vs']),
1197+
suffixInflection('為ます', '為る', ['-masu'], ['vs']),
1198+
suffixInflection('きます', 'くる', ['-masu'], ['vk']),
1199+
suffixInflection('来ます', '来る', ['-masu'], ['vk']),
1200+
suffixInflection('來ます', '來る', ['-masu'], ['vk']),
1201+
suffixInflection('くあります', 'い', ['-masu'], ['adj-i']),
12231202
],
12241203
},
12251204
'potential': {
@@ -1307,7 +1286,7 @@ export const japaneseTransforms = {
13071286
suffixInflection('こよう', 'くる', [], ['vk']),
13081287
suffixInflection('来よう', '来る', [], ['vk']),
13091288
suffixInflection('來よう', '來る', [], ['vk']),
1310-
suffixInflection('ましょう', 'ます', [], ['v']),
1289+
suffixInflection('ましょう', 'ます', [], ['-masu']),
13111290
suffixInflection('かろう', 'い', [], ['adj-i']),
13121291
],
13131292
},
@@ -1336,6 +1315,7 @@ export const japaneseTransforms = {
13361315
suffixInflection('こまい', 'くる', [], ['vk']),
13371316
suffixInflection('来まい', '来る', [], ['vk']),
13381317
suffixInflection('來まい', '來る', [], ['vk']),
1318+
suffixInflection('まい', '', [], ['-masu']),
13391319
],
13401320
},
13411321
'causative-passive': {

0 commit comments

Comments
 (0)