Пример #1
0
        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)
            );
 }
Пример #3
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);
                }
            }
        }
Пример #4
0
        /// поиск слова в слоте
        /// 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;
                }
            }
        }
Пример #5
0
        /// поиск слова в слоте
        /// 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));
 }