This commit is contained in:
Rene Kievits
2025-10-27 18:52:16 +01:00
commit ba82e662f6
140 changed files with 6443 additions and 0 deletions

View File

@@ -0,0 +1,62 @@
class KanjiItem {
final int id;
final String characters;
final List<String> meanings;
final List<String> onyomi;
final List<String> kunyomi;
KanjiItem({
required this.id,
required this.characters,
required this.meanings,
required this.onyomi,
required this.kunyomi,
});
factory KanjiItem.fromSubject(Map<String, dynamic> subj) {
final int id = subj['id'] as int;
final data = subj['data'] as Map<String, dynamic>;
final String characters = (data['characters'] ?? '') as String;
final List<String> meanings = <String>[];
final List<String> onyomi = <String>[];
final List<String> kunyomi = <String>[];
if (data['meanings'] != null) {
for (final m in data['meanings'] as List) {
meanings.add((m['meaning'] as String).toLowerCase());
}
}
if (data['readings'] != null) {
for (final r in data['readings'] as List) {
final typ = r['type'] as String? ?? '';
final reading = r['reading'] as String? ?? '';
if (typ == 'onyomi') {
onyomi.add(_katakanaToHiragana(reading));
} else if (typ == 'kunyomi') {
kunyomi.add(reading);
}
}
}
return KanjiItem(
id: id,
characters: characters,
meanings: meanings,
onyomi: onyomi,
kunyomi: kunyomi,
);
}
}
String _katakanaToHiragana(String input) {
final buf = StringBuffer();
for (final r in input.runes) {
if (r >= 0x30A1 && r <= 0x30FA) {
buf.writeCharCode(r - 0x60);
} else {
buf.writeCharCode(r);
}
}
return buf.toString();
}