/// <summary> /// Collects words information from a given statement. /// </summary> /// <param name="statement">An array of characters for the parsing.</param> /// <param name="collectVowelsInfo">Specifies needed in collection of latin vowels.</param> /// <param name="separators">Word separators.</param> /// <returns>Returs a list of WordInfo objects.</returns> /// <remarks> /// Informations about vowel positions in words always sorted by ascendant. /// </remarks> public static List<WordInfo> CollectWordsInfo( Char[] statement, Boolean collectVowelsInfo, params Char[] separators ) { var wordsInfo = new List<WordInfo>(); WordInfo tempInfo; Int32 begPosition = 0; Int32 endPosition = 0; while (true) { begPosition = findWordBeginPosition(statement, begPosition, separators); if (begPosition == -1) { break; }; endPosition = findWordEndPosition(statement, begPosition, separators); tempInfo = new WordInfo(begPosition, endPosition); if (collectVowelsInfo) { collectLatinVowelsInfo(statement, ref tempInfo); } wordsInfo.Add(tempInfo); begPosition = endPosition + 1; } return wordsInfo; }
/// <summary> /// Collects latin vowels postions of word in a statement. Word bounds info is contained in a wordInfo argument. /// </summary> /// <param name="statement">An array of characters for the parsing.</param> /// <param name="wordInfo">An instance of WordInfo class provided word bounds info and it's /// where latin vowels positions would be added. /// </param> private static void collectLatinVowelsInfo(Char[] statement, ref WordInfo wordInfo) { for (Int32 i = wordInfo.BeginPosition; i <= wordInfo.EndPosition; i++) { if (LatinVowels.Contains(statement[i])) { wordInfo.VowelPositions.Add(i); } } }