/// <summary> /// Forbid compoundings when there are special patterns at word bound. /// </summary> public bool Check(string word, int pos, WordEntry r1, WordEntry r2, bool affixed) { var wordAfterPos = word.Substring(pos); foreach (var patternEntry in items) { int len; if ( StringEx.IsSubset(patternEntry.Pattern2, wordAfterPos) && ( r1 == null || patternEntry.Condition.IsZero || r1.ContainsFlag(patternEntry.Condition) ) && ( r2 == null || patternEntry.Condition2.IsZero || r2.ContainsFlag(patternEntry.Condition2) ) && // zero length pattern => only TESTAFF // zero pattern (0/flag) => unmodified stem (zero affixes allowed) ( string.IsNullOrEmpty(patternEntry.Pattern) || ( ( patternEntry.Pattern.StartsWith('0') && r1.Word.Length <= pos && StringEx.EqualsOffset(word, pos - r1.Word.Length, r1.Word, 0, r1.Word.Length) ) || ( !patternEntry.Pattern.StartsWith('0') && ( ( len = patternEntry.Pattern.Length ) != 0 ) && StringEx.EqualsOffset(word, pos - len, patternEntry.Pattern, 0, len) ) ) ) ) { return(true); } } return(false); }
public bool EntryContainsRuleFlags(WordEntry rv) { foreach (var rule in items) { foreach (var flag in rule) { if (!flag.Equals('*') && !flag.Equals('?') && rv.ContainsFlag(flag)) { return(true); } } } return(false); }
private bool IsKeepCase(WordEntry rv) => rv.ContainsFlag(Affix.KeepCase);