use super::ParsedRuleGroup;
use crate::affix::{CompoundPattern, CompoundSyllable, Conversion, Encoding, FlagType, Phonetic};
#[non_exhaustive]
#[derive(Debug, PartialEq, Eq)]
pub enum AffixNode {
Encoding(Encoding),
FlagType(FlagType),
ComplexPrefixes,
Language(String),
IgnoreChars(Vec<char>),
AffixAlias(Vec<String>),
MorphAlias(Vec<String>),
NeighborKeys(Vec<String>),
TryCharacters(String),
NoSuggestFlag(String),
CompoundSugMax(u16),
NGramSugMax(u16),
NGramDiffMax(u8),
NGramLimitToDiffMax,
NoSplitSuggestions,
KeepTermDots,
Replacement(Vec<Conversion>),
Mapping(Vec<(char, char)>),
Phonetic(Vec<Phonetic>),
WarnRareFlag(String),
ForbidWarnWords,
BreakSeparator(Vec<String>),
#[allow(dead_code)]
CompoundRule(Vec<String>),
CompoundMinLen(u16),
CompoundFlag(String),
CompoundBeginFlag(String),
CompoundEndFlag(String),
CompoundMiddleFlag(String),
CompoundOnlyFlag(String),
CompoundPermitFlag(String),
CompoundForbidFlag(String),
CompoundMoreSuffixes,
CompoundRootFlag(String),
CompoundWordMax(u16),
CompoundForbidDup,
CompoundForbidRepeat,
CompoundCheckCase,
CompoundCheckTriple,
CompoundSimplifyTriple,
CompoundForbidPats(Vec<CompoundPattern>),
CompoundForceUpFlag(String),
CompoundSyllable(CompoundSyllable),
SyllableNum(String),
Prefix(ParsedRuleGroup),
Suffix(ParsedRuleGroup),
AfxCircumfixFlag(String),
ForbiddenWordFlag(String),
AfxFullStrip,
AfxKeepCaseFlag(String),
AfxInputConversion(Vec<Conversion>),
AfxOutputConversion(Vec<Conversion>),
AfxLemmaPresentFlag(String),
AfxNeededFlag(String),
AfxPseudoRootFlag(String),
AfxSubstandardFlag(String),
AfxWordChars(String),
AfxCheckSharps,
Comment,
Name(String),
HomePage(String),
Version(String),
}
impl AffixNode {
pub const fn name_str(&self) -> &'static str {
match self {
AffixNode::Encoding(_) => "SET",
AffixNode::FlagType(_) => "FLAG",
AffixNode::ComplexPrefixes => "COMPLEXPREFIXES",
AffixNode::Language(_) => "LANG",
AffixNode::IgnoreChars(_) => "IGNORE",
AffixNode::AffixAlias(_) => "AF",
AffixNode::MorphAlias(_) => "AM",
AffixNode::NeighborKeys(_) => "KEY",
AffixNode::TryCharacters(_) => "TRY",
AffixNode::NoSuggestFlag(_) => "NOSUGGEST",
AffixNode::CompoundSugMax(_) => "MAXCPDSUGS",
AffixNode::NGramSugMax(_) => "MAXNGRAMSUGS",
AffixNode::NGramDiffMax(_) => "MAXDIFF",
AffixNode::NGramLimitToDiffMax => "ONLYMAXDIFF",
AffixNode::NoSplitSuggestions => "NOSPLITSUGS",
AffixNode::KeepTermDots => "SUGSWITHDOTS",
AffixNode::Replacement(_) => "REP",
AffixNode::Mapping(_) => "MAP",
AffixNode::Phonetic(_) => "PHONE",
AffixNode::WarnRareFlag(_) => "WARN",
AffixNode::ForbidWarnWords => "FORBIDWARN",
AffixNode::BreakSeparator(_) => "BREAK",
AffixNode::CompoundRule(_) => "COMPOUNDRULE",
AffixNode::CompoundMinLen(_) => "COMPOUNDMIN",
AffixNode::CompoundFlag(_) => "COMPOUNDFLAG",
AffixNode::CompoundBeginFlag(_) => "COMPOUNDBEGIN",
AffixNode::CompoundEndFlag(_) => "COMPOUNDLAST",
AffixNode::CompoundMiddleFlag(_) => "COMPOUNDMIDDLE",
AffixNode::CompoundOnlyFlag(_) => "ONLYINCOMPOUND",
AffixNode::CompoundPermitFlag(_) => "COMPOUNDPERMITFLAG",
AffixNode::CompoundForbidFlag(_) => "COMPOUNDFORBIDFLAG",
AffixNode::CompoundMoreSuffixes => "COMPOUNDMORESUFFIXES",
AffixNode::CompoundRootFlag(_) => "COMPOUNDROOT",
AffixNode::CompoundWordMax(_) => "COMPOUNDWORDMAX",
AffixNode::CompoundForbidDup => "CHECKCOMPOUNDDUP",
AffixNode::CompoundForbidRepeat => "CHECKCOMPOUNDREP",
AffixNode::CompoundCheckCase => "CHECKCOMPOUNDCASE",
AffixNode::CompoundCheckTriple => "CHECKCOMPOUNDTRIPLE",
AffixNode::CompoundSimplifyTriple => "SIMPLIFIEDTRIPLE",
AffixNode::CompoundForbidPats(_) => "CHECKCOMPOUNDPATTERN",
AffixNode::CompoundForceUpFlag(_) => "FORCEUCASE",
AffixNode::CompoundSyllable(_) => "COMPOUNDSYLLABLE",
AffixNode::SyllableNum(_) => "SYLLABLENUM",
AffixNode::Prefix(_) => "PFX",
AffixNode::Suffix(_) => "SFX",
AffixNode::AfxCircumfixFlag(_) => "CIRCUMFIX",
AffixNode::ForbiddenWordFlag(_) => "FORBIDDENWORD",
AffixNode::AfxFullStrip => "FULLSTRIP",
AffixNode::AfxKeepCaseFlag(_) => "KEEPCASE",
AffixNode::AfxInputConversion(_) => "ICONV",
AffixNode::AfxOutputConversion(_) => "OCONV",
AffixNode::AfxLemmaPresentFlag(_) => "LEMMA_PRESENT",
AffixNode::AfxNeededFlag(_) => "NEEDAFFIX",
AffixNode::AfxPseudoRootFlag(_) => "PSEUDOROOT",
AffixNode::AfxSubstandardFlag(_) => "SUBSTANDARD",
AffixNode::AfxWordChars(_) => "WORDCHARS",
AffixNode::AfxCheckSharps => "CHECKSHARPS",
AffixNode::Comment => "#",
AffixNode::Name(_) => "NAME",
AffixNode::HomePage(_) => "HOME",
AffixNode::Version(_) => "VERSION",
}
}
}