コード例 #1
0
        /// <summary>
        ///     Removes the affix suffix rule entry for the word if valid
        /// </summary>
        /// <param name="word" type="string">
        ///     <para>
        ///         The word to be modified
        ///     </para>
        /// </param>
        /// <param name="entry" type="GuruComponents.Netrix.SpellChecker.NetSpell.Dictionary.Affix.AffixEntry">
        ///     <para>
        ///         The affix rule entry to use
        ///     </para>
        /// </param>
        /// <returns>
        ///     The word after affix removed.  Will be the same word if affix could not be removed.
        /// </returns>
        /// <remarks>
        ///		This method does not verify that the returned word is a valid word, only that the affix can be removed
        /// </remarks>
        public static string RemoveSuffix(string word, AffixEntry entry)
        {
            int tempLength = word.Length - entry.AddCharacters.Length;

            if ((tempLength > 0) &&
                (tempLength + entry.StripCharacters.Length >= entry.ConditionCount) &&
                (word.EndsWith(entry.AddCharacters)))
            {
                // word with out affix
                string tempWord = word.Substring(0, tempLength);
                // add back strip chars
                tempWord += entry.StripCharacters;
                // check that this is valid
                int passCount = 0;
                for (int i = 0; i < entry.ConditionCount; i++)
                {
                    int charCode = (int)tempWord[tempWord.Length - (entry.ConditionCount - i)];
                    if (entry.Condition.Length > charCode && (entry.Condition[charCode] & (1 << i)) == (1 << i))
                    {
                        passCount++;
                    }
                }
                if (passCount == entry.ConditionCount)
                {
                    return(tempWord);
                }
            }
            return(word);
        }
コード例 #2
0
 /// <summary>
 ///     Adds a 'AffixEntry' item with the specified value to the 'AffixEntryCollection'
 /// </summary>
 /// <param name='value'>
 ///     The 'AffixEntry' to add.
 /// </param>
 /// <returns>
 ///     The index at which the new element was inserted.
 /// </returns>
 public int Add(AffixEntry value)
 {
     return(List.Add(value));
 }
コード例 #3
0
 /// <summary>
 ///     Removes a specific item from the 'AffixEntryCollection'.
 /// </summary>
 /// <param name='value'>
 ///     The item to remove from the 'AffixEntryCollection'.
 /// </param>
 public void Remove(AffixEntry value)
 {
     List.Remove(value);
 }
コード例 #4
0
 /// <summary>
 ///     Inserts an existing 'AffixEntry' into the collection at the specified index.
 /// </summary>
 /// <param name='index'>
 ///     The zero-based index where the new item should be inserted.
 /// </param>
 /// <param name='value'>
 ///     The item to insert.
 /// </param>
 public void Insert(int index, AffixEntry value)
 {
     List.Insert(index, value);
 }
コード例 #5
0
 /// <summary>
 ///     Returns the index of a 'AffixEntry' object in the collection.
 /// </summary>
 /// <param name='value'>
 ///     The 'AffixEntry' object whose index will be retrieved.
 /// </param>
 /// <returns>
 ///     If found, the index of the value; otherwise, -1.
 /// </returns>
 public int IndexOf(AffixEntry value)
 {
     return(List.IndexOf(value));
 }
コード例 #6
0
 /// <summary>
 ///     Gets a value indicating whether the 'AffixEntryCollection' contains the specified value.
 /// </summary>
 /// <param name='value'>
 ///     The item to locate.
 /// </param>
 /// <returns>
 ///     True if the item exists in the collection; false otherwise.
 /// </returns>
 public bool Contains(AffixEntry value)
 {
     return(List.Contains(value));
 }
コード例 #7
0
        /// <summary>
        ///     Generates the condition character array
        /// </summary>
        /// <param name="conditionText" type="string">
        ///     <para>
        ///         the text form of the conditions
        ///     </para>
        /// </param>
        /// <param name="entry" type="GuruComponents.Netrix.SpellChecker.NetSpell.Dictionary.Affix.AffixEntry">
        ///     <para>
        ///         The AffixEntry to add the condition array to
        ///     </para>
        /// </param>
        public static void EncodeConditions(string conditionText, AffixEntry entry)
        {
            // clear the conditions array
            for (int i = 0; i < entry.Condition.Length; i++)
            {
                entry.Condition[i] = 0;
            }

            // if no condition just return
            if (conditionText == ".")
            {
                entry.ConditionCount = 0;
                return;
            }

            bool neg   = false;         /* complement indicator */
            bool group = false;         /* group indicator */
            bool end   = false;         /* end condition indicator */
            int  num   = 0;             /* number of conditions */

            char [] memberChars = new char[200];
            int     numMember   = 0;         /* number of member in group */

            foreach (char cond in conditionText)
            {
                // parse member group
                if (cond == '[')
                {
                    group = true;                      // start a group
                }
                else if (cond == '^' && group)
                {
                    neg = true;                     // negative group
                }
                else if (cond == ']')
                {
                    end = true;                     // end of a group
                }
                else if (group)
                {
                    // add chars to group
                    memberChars[numMember] = cond;
                    numMember++;
                }
                else
                {
                    end = true;                      // no group
                }

                // set condition
                if (end)
                {
                    if (group)
                    {
                        if (neg)
                        {
                            // turn all chars on
                            for (int j = 0; j < entry.Condition.Length; j++)
                            {
                                entry.Condition[j] = entry.Condition[j] | (1 << num);
                            }
                            // turn off chars in member group
                            for (int j = 0; j < numMember; j++)
                            {
                                int charCode = (int)memberChars[j];
                                entry.Condition[charCode] = entry.Condition[charCode] & ~(1 << num);
                            }
                        }
                        else
                        {
                            // turn on chars in member group
                            for (int j = 0; j < numMember; j++)
                            {
                                int charCode = (int)memberChars[j];
                                entry.Condition[charCode] = entry.Condition[charCode] | (1 << num);
                            }
                        }
                        group     = false;
                        neg       = false;
                        numMember = 0;
                    }                     // if group
                    else
                    {
                        if (cond == '.')
                        {
                            // wild card character, turn all chars on
                            for (int j = 0; j < entry.Condition.Length; j++)
                            {
                                entry.Condition[j] = entry.Condition[j] | (1 << num);
                            }
                        }
                        else
                        {
                            // turn on char
                            int charCode = (int)cond;
                            entry.Condition[charCode] = entry.Condition[charCode] | (1 << num);
                        }
                    }                     // not group

                    end = false;
                    num++;
                }         // if end
            }             // foreach char

            entry.ConditionCount = num;
            return;
        }