import 'package:collection/collection.dart'; import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; enum GrammarCopyPOS { sconj, num, verb, affix, part, adj, cconj, punct, adv, aux, space, sym, det, pron, adp, propn, noun, intj, x, } extension GrammarCopyPOSExtension on GrammarCopyPOS { /// Convert enum to string String toShortString() { return toString().split('.').last.toLowerCase(); } GrammarCopyPOS? fromString(String categoryName) { final pos = GrammarCopyPOS.values.firstWhereOrNull( (pos) => pos.toShortString() == categoryName.toLowerCase(), ); if (pos == null) { ErrorHandler.logError( e: "Missing part of speech", s: StackTrace.current, data: {"category": categoryName}, ); } return pos; } String getDisplayCopy(BuildContext context) { switch (this) { case GrammarCopyPOS.sconj: return L10n.of(context)!.grammarCopyPOSsconj; case GrammarCopyPOS.num: return L10n.of(context)!.grammarCopyPOSnum; case GrammarCopyPOS.verb: return L10n.of(context)!.grammarCopyPOSverb; case GrammarCopyPOS.affix: return L10n.of(context)!.grammarCopyPOSaffix; case GrammarCopyPOS.part: return L10n.of(context)!.grammarCopyPOSpart; case GrammarCopyPOS.adj: return L10n.of(context)!.grammarCopyPOSadj; case GrammarCopyPOS.cconj: return L10n.of(context)!.grammarCopyPOScconj; case GrammarCopyPOS.punct: return L10n.of(context)!.grammarCopyPOSpunct; case GrammarCopyPOS.adv: return L10n.of(context)!.grammarCopyPOSadv; case GrammarCopyPOS.aux: return L10n.of(context)!.grammarCopyPOSaux; case GrammarCopyPOS.space: return L10n.of(context)!.grammarCopyPOSspace; case GrammarCopyPOS.sym: return L10n.of(context)!.grammarCopyPOSsym; case GrammarCopyPOS.det: return L10n.of(context)!.grammarCopyPOSdet; case GrammarCopyPOS.pron: return L10n.of(context)!.grammarCopyPOSpron; case GrammarCopyPOS.adp: return L10n.of(context)!.grammarCopyPOSadp; case GrammarCopyPOS.propn: return L10n.of(context)!.grammarCopyPOSpropn; case GrammarCopyPOS.noun: return L10n.of(context)!.grammarCopyPOSnoun; case GrammarCopyPOS.intj: return L10n.of(context)!.grammarCopyPOSintj; case GrammarCopyPOS.x: return L10n.of(context)!.grammarCopyPOSx; } } } String? getVocabCategoryName(String category, BuildContext context) { return GrammarCopyPOS.values .firstWhereOrNull((pos) => pos.toShortString() == category.toLowerCase()) ?.getDisplayCopy(context); }