private void FillWordFormMorphologies_StartsWithUpperLetter_Core (char *wordPart, List <WordFormMorphology_t> result) { if (!HasEndings()) { return; } pair[] pairs; if (_Endings.TryGetValue((IntPtr)wordPart, out pairs)) { for (int i = 0, len = pairs.Length; i < len; i++) { var p = pairs[i]; var baseMorphoForm = p.BaseMorphoForm; var first_char = *baseMorphoForm.Base; if ((first_char != '\0') && _UPPER_INVARIANT_MAP[first_char] != first_char) { continue; } var wfmi = new WordFormMorphology_t(baseMorphoForm, p.MorphoAttribute); result.Add(wfmi); } } }
public static bool Equals(ref WordFormMorphology_t x, ref WordFormMorphology_t y) { return((x.MorphoAttribute == y.MorphoAttribute) && (x.PartOfSpeech == y.PartOfSpeech) && (x._Base == y._Base) && (x._Ending == y._Ending) && (string.CompareOrdinal(x._NormalForm, y._NormalForm) == 0) ); }
/// поиск слова в слоте /// wordPart - оставшаяся часть слова /// result - коллекция форм слова private void FillWordFormMorphologies_Core(char *wordPart, List <WordFormMorphology_t> result) { if (!HasEndings()) { return; } pair[] pairs; if (_Endings.TryGetValue((IntPtr)wordPart, out pairs)) { for (int i = 0, len = pairs.Length; i < len; i++) { var p = pairs[i]; var wfmi = new WordFormMorphology_t(p.BaseMorphoForm, p.MorphoAttribute); result.Add(wfmi); } } }
/// поиск слова в слоте /// wordPart - оставшаяся часть слова /// pSlot - слот /// letterIndex - индекс буквы unsafe private void FillWordFormMorphologies_Core(char *wordPart, ICollection <WordFormMorphology_t> result, WordFormMorphologyModeEnum wordFormMorphologyMode) { if (_EndingDictionary == null) { return; } var ending = new string( wordPart ); if (_EndingDictionary.TryGetValue(ending, out var pairs)) { switch (wordFormMorphologyMode) { case WordFormMorphologyModeEnum.Default: #region foreach (var p in pairs) { var wfmi = new WordFormMorphology_t(p.BaseMorphoForm, p.MorphoAttribute); result.Add(wfmi); } #endregion break; case WordFormMorphologyModeEnum.StartsWithLowerLetter: #region foreach (var p in pairs) { var baseMorphoForm = p.BaseMorphoForm; fixed(char *normalForm_ptr = baseMorphoForm.NormalForm) { var first_char = *normalForm_ptr; if ((first_char != '\0') && *(xlat_Unsafe.Inst._UPPER_INVARIANT_MAP + first_char) == first_char) { continue; } } var wfmi = new WordFormMorphology_t(baseMorphoForm, p.MorphoAttribute); result.Add(wfmi); } #endregion break; case WordFormMorphologyModeEnum.StartsWithUpperLetter: #region foreach (var p in pairs) { var baseMorphoForm = p.BaseMorphoForm; fixed(char *normalForm_ptr = baseMorphoForm.NormalForm) { var first_char = *normalForm_ptr; if ((first_char != '\0') && *(xlat_Unsafe.Inst._UPPER_INVARIANT_MAP + first_char) != first_char) { continue; } } var wfmi = new WordFormMorphology_t(baseMorphoForm, p.MorphoAttribute); result.Add(wfmi); } #endregion break; case WordFormMorphologyModeEnum.FirstStartsWithUpperAfterLowerLetter: #region throw new NotImplementedException(); /* * var findWithUpper = false; * foreach ( var p in pairs ) * { * var baseMorphoForm = p.BaseMorphoForm; * fixed ( char* normalForm_ptr = baseMorphoForm.NormalForm ) * { * var first_char = *normalForm_ptr; * if ( (first_char != '\0') && *(xlat_Unsafe.Inst._UPPER_INVARIANT_MAP + first_char) != first_char ) * { * continue; * } * } * * findWithUpper = true; * var wfmi = new WordFormMorphology_t( baseMorphoForm, p.MorphoAttribute ); * result.Add( wfmi ); * } * if ( !findWithUpper ) * { * goto case WordFormMorphologyModeEnum.Default; * } */ #endregion break; case WordFormMorphologyModeEnum.FirstStartsWithLowerAfterUpperLetter: #region throw new NotImplementedException(); /* * var findWithLower = false; * foreach ( var p in pairs ) * { * var baseMorphoForm = p.BaseMorphoForm; * fixed ( char* normalForm_ptr = baseMorphoForm.NormalForm ) * { * var first_char = *normalForm_ptr; * if ( (first_char != '\0') && *(xlat_Unsafe.Inst._UPPER_INVARIANT_MAP + first_char) == first_char ) * { * continue; * } * } * * findWithLower = true; * var wfmi = new WordFormMorphology_t( baseMorphoForm, p.MorphoAttribute ); * result.Add( wfmi ); * } * if ( !findWithLower ) * { * goto case WordFormMorphologyModeEnum.Default; * } */ #endregion break; } } }
/// поиск слова в слоте /// wordPart - оставшаяся часть слова /// pSlot - слот /// letterIndex - индекс буквы unsafe private void FillWordFormMorphologies_Core(char *wordPart, int wordPartLength, int fullWordLength , List <WordFormMorphology_t> result, WordFormMorphologyModeEnum wordFormMorphologyMode) { if (_BaseMorphoForms == null) { return; } foreach (var baseMorphoForm in _BaseMorphoForms) { int baseLength = baseMorphoForm.Base.Length; if ((fullWordLength < baseLength) || (baseLength + baseMorphoForm.MorphoType.MaxEndingLength < fullWordLength) ) { continue; } foreach (var morphoForm in baseMorphoForm.MorphoType.MorphoForms) { var endingLength = morphoForm.EndingUpper.Length; if (baseLength + endingLength != fullWordLength) { continue; } if (endingLength != wordPartLength) { continue; } if (wordPartLength == 0) { ; } else if (!StringsHelper.IsEqual(morphoForm.EndingUpper, wordPart, wordPartLength)) { continue; } #region commented /* * if ( baseLength == letterIndex ) * { * if ( !StringsHelper.IsEqual( morphoForm.EndingUpper, wordPart, wordPartLength ) ) * continue; * } * else * { * var wordForm = baseMorphoForm.Base + morphoForm.EndingUpper; * if ( !StringsHelper.IsEqual( wordForm, letterIndex, wordPart, wordPartLength ) ) * continue; * } */ #endregion switch (wordFormMorphologyMode) { case WordFormMorphologyModeEnum.Default: { var wfmi = new WordFormMorphology_t(baseMorphoForm, MorphoAttributePair.GetMorphoAttribute(baseMorphoForm, morphoForm)); result.Add(wfmi); } break; case WordFormMorphologyModeEnum.StartsWithLowerLetter: { fixed(char *normalForm_ptr = baseMorphoForm.NormalForm) { var first_char = *normalForm_ptr; if ((first_char != '\0') && *(xlat_Unsafe.Inst._UPPER_INVARIANT_MAP + first_char) == first_char) { continue; } } var wfmi = new WordFormMorphology_t(baseMorphoForm, MorphoAttributePair.GetMorphoAttribute(baseMorphoForm, morphoForm)); result.Add(wfmi); } break; case WordFormMorphologyModeEnum.StartsWithUpperLetter: { fixed(char *normalForm_ptr = baseMorphoForm.NormalForm) { var first_char = *normalForm_ptr; if ((first_char != '\0') && *(xlat_Unsafe.Inst._UPPER_INVARIANT_MAP + first_char) != first_char) { continue; } } var wfmi = new WordFormMorphology_t(baseMorphoForm, MorphoAttributePair.GetMorphoAttribute(baseMorphoForm, morphoForm)); result.Add(wfmi); } break; case WordFormMorphologyModeEnum.FirstStartsWithUpperAfterLowerLetter: case WordFormMorphologyModeEnum.FirstStartsWithLowerAfterUpperLetter: { throw new NotImplementedException(); } } } } }
public static bool Equals(WordFormMorphology_t x, WordFormMorphology_t y) { return(Equals(ref x, ref y)); }