Full conjugation table specification for verb and i-adjective entries. Covers JSON structure, form categories, and generation rules for all verb classes and i-adjectives.
Every verb entry includes a conjugation field containing the full set of conjugated forms, hard-coded directly in the JSON. This makes the data self-contained and usable without any generation logic.
"conjugation": {
"type": "godan",
"forms": [
{"label": "Present", "affirmative": "{読|よ}む", "negative": "{読|よ}まない"},
{"label": "Present polite", "affirmative": "{読|よ}みます", "negative": "{読|よ}みません"},
{"label": "Past", "affirmative": "{読|よ}んだ", "negative": "{読|よ}まなかった"},
...
]
}
type: One of godan, ichidan, suru, kuru, aruforms: Array of objects, each with label, affirmative, and negative (null for forms without a negative, like volitional)The standard conjugation table includes these forms in order:
| # | Label | Example (godan む) |
|---|---|---|
| 1 | Present | {読 |
| 2 | Present polite | {読 |
| 3 | Past | {読 |
| 4 | Past polite | {読 |
| 5 | て form | {読 |
| 6 | ている present | {読 |
| 7 | ている polite | {読 |
| 8 | ている past | {読 |
| 9 | ている past polite | {読 |
| 10 | Conditional ば | {読 |
| 11 | Conditional たら | {読 |
| 12 | Volitional | {読 |
| 13 | Volitional polite | {読 |
| 14 | Potential | {読 |
| 15 | Passive | {読 |
| 16 | Causative | {読 |
| 17 | Imperative | {読 |
Exceptions:
ある has only 7 forms (Present through Conditional たら — no potential, passive, causative, etc.)| Ending | a-dan | i-dan | e-dan | o-dan | て/た |
|---|---|---|---|---|---|
| う | わ | い | え | お | って/った |
| く | か | き | け | こ | いて/いた |
| ぐ | が | ぎ | げ | ご | いで/いだ |
| す | さ | し | せ | そ | して/した |
| つ | た | ち | て | と | って/った |
| ぬ | な | に | ね | の | んで/んだ |
| ぶ | ば | び | べ | ぼ | んで/んだ |
| む | ま | み | め | も | んで/んだ |
| る | ら | り | れ | ろ | って/った |
Special case: 行く conjugates て form as 行って (not 行いて).
Stem = headword minus final る. All suffixes attach directly to stem.
Prefix = everything before する (e.g., {勉強|べんきょう} for {勉強|べんきょう}する). If headword doesn't include する (e.g., がっかり), the entire headword is the prefix.
The kanji 来 takes different readings in different forms:
When creating a new verb entry, include the full conjugation field with all forms.
You can use build/add_conjugations.py to generate conjugation data automatically:
# After creating the entry without conjugation:
python3 build/add_conjugations.py --start <id_number> --end <id_number>
Or include the conjugation field directly when writing the entry JSON, following the patterns above.
To add conjugation to all verbs that don't have it yet:
python3 build/add_conjugations.py # Process all verbs
python3 build/add_conjugations.py --dry-run # Preview without writing
python3 build/add_conjugations.py --force # Overwrite existing conjugation data
I-adjectives also use the same conjugation JSON structure with 6 forms (Present, Past, て form, Adverbial, Conditional ば, Conditional たら). Type values are i-adjective (regular) or ii (いい and its compounds, which conjugate with よ- stem).
python3 build/add_adjective_conjugations.py # Process all i-adjectives
python3 build/add_adjective_conjugations.py --dry-run # Preview without writing
python3 build/add_adjective_conjugations.py --force # Overwrite existing