-
Notifications
You must be signed in to change notification settings - Fork 5
/
rules.js
164 lines (152 loc) · 5.05 KB
/
rules.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
// FIRST
// たべる -> VERB
// たべられる -> VERB
// たべさせる -> VERB
// たべさせられる -> VERB
// たべられる -> VERB
// たべて -> TEFORM
// たべなさい
// たべそう
// たべるそう
// たべよう
// たべましょう
// たべな -> VERBNAI
// VERB
// たべる
// たべた
// たべない
// たべなかった
// たべます
// たべました
// たべません
// たべませんでした
// TEFORM
// たべてください
// VERBNAI
// たべないでください
// たべなくて
// たべなければ
// たべなさそう
// たべないそう
// base te ba seems hearsay kudasai past neg past pol cause pass poten iru vol polvol negba negte neghearsay negseems neghearsay
function Modifier(flag, modFunc, desc, nextMod) {
this.flag = flag;
this.modFunc = modFunc;
this.desc = desc;
this.nextMod = nextMod;
}
function Term(word, ruby, def) {
this.word = word;
this.ruby = ruby;
this.def = def;
}
var NAIFORM = [
new Modifier('kudasai', function(w) {
return w + 'いでください';
}, ['Negative', 'Please ~ください'], null),
new Modifier('negte', function(w) {
return w + 'くて';
}, ['Negative', 'て form'], null),
new Modifier('negba', function(w) {
return w + 'ければ';
}, ['Negative', 'Conditional ~ば'], null),
new Modifier('negseems', function(w) {
return w + 'さそう';
}, ['Negative', 'Seems ~そう'], null),
new Modifier('neghearsay', function(w) {
return w + 'いそう';
}, ['Negative', 'Hearsay ~そう'], null),
]
var TEFORM = [
new Modifier('base', function(w) {
return w;
}, ['て form'], null),
new Modifier('kudasai', function(w) {
return w + 'ください';
}, ['Please ~ください'], null),
]
var ICHIVERB = [
new Modifier('base', function(w) {
return w;
}, [], null),
new Modifier('past', function(w) {
return trimLast(w) + 'た';
}, ['Past'], null),
new Modifier('neg', function(w) {
return trimLast(w) + 'ない';
}, ['Negative'], null),
new Modifier('neg past', function(w) {
return trimLast(w) + 'なかった';
}, ['Negative', 'Past'], null),
new Modifier('pol', function(w) {
return trimLast(w) + 'ます';
}, ['Polite'], null),
new Modifier('pol past', function(w) {
return trimLast(w) + 'ました';
}, ['Polite', 'Past'], null),
new Modifier('pol neg', function(w) {
return trimLast(w) + 'ません';
}, ['Polite', 'Negative'], null),
new Modifier('pol neg past', function(w) {
return trimLast(w) + 'ませんでした';
}, ['Polite', 'Negative', 'Past'], null),
new Modifier('negpolvol', function(w) {
return trimLast(w) + 'ますまい';
}, ['Polite', 'Volitional', 'Negative'], null),
]
var ICHIDAN = [
new Modifier('base', function(w) {
return w;
}, [], ICHIVERB),
new Modifier('te', function(w) {
return trimLast(w) + 'て';
}, [], TEFORM),
new Modifier('neg', function(w) {
return trimLast(w) + 'な';
}, [], NAIFORM),
new Modifier('poten', function(w) {
return trimLast(w) + 'られる';
}, ['Potential'], ICHIVERB),
new Modifier('pass', function(w) {
return trimLast(w) + 'られる';
}, ['Passive'], ICHIVERB),
new Modifier('cause', function(w) {
return trimLast(w) + 'させる';
}, ['Causitive'], ICHIVERB),
new Modifier('pass cause', function(w) {
return trimLast(w) + 'させられる';
}, ['Causitive', 'Passive'], ICHIVERB),
new Modifier('te iru', function(w) {
return trimLast(w) + 'ている';
}, ['Enduring ~ている'], ICHIVERB),
new Modifier('nasai', function(w) {
return trimLast(w) + 'なさい';
}, ['Request ~なさい'], null),
new Modifier('hearsay', function(w) {
return w + 'そう';
}, ['Hearsay ~そう'], null),
new Modifier('seems', function(w) {
return trimLast(w) + 'そう';
}, ['Seems like ~そう'], null),
new Modifier('negvol', function(w) {
return w + 'まい';
}, ['Volitional', 'Negative'], null),
new Modifier('vol', function(w) {
return trimLast(w) + 'ましょう';
}, ['Volitional'], null),
new Modifier('polvol', function(w) {
return trimLast(w) + 'ましょう';
}, ['Polite', 'Volitional'], null),
new Modifier('ba', function(w) {
return trimLast(w) + 'れば';
}, ['Conditional ~ば'], null),
]
var ichidan = [
new Term('たべる', '<ruby>食<rt>た</rt></ruby>べる</span>', 'to eat'),
new Term('ねる', '<ruby>寝<rt>ね</rt></ruby>る', 'to sleep; to lie down'),
new Term('しんじる', '<ruby>信<rt>しん</rt></ruby>じる', 'to believe'),
new Term('おきる', '<ruby>起<rt>お</rt></ruby>きる', 'to wake up; to occur'),
new Term('きる', '<ruby>着<rt>き</rt></ruby>る', 'to wear'),
new Term('でる', '<ruby>出<rt>で</rt></ruby>る', 'to leave; to come out'),
new Term('かける', '<ruby>掛<rt>か</rt></ruby>ける', 'to hang'),
]