Beispiel #1
0
        /// ------------------------------------------------------------------------------------
        /// <summary>
        ///
        /// </summary>
        /// ------------------------------------------------------------------------------------
        public List <TextTokenSubstring> GetReferences(IEnumerable <ITextToken> tokens, string desiredKey)
        {
#if DEBUG
            List <ITextToken> AllTokens = new List <ITextToken>(tokens);
            if (AllTokens.Count == 0)
            {
                // Keep the compiler from complaining about assigning to a variable, but not using it.
            }
#endif
//			m_characterCategorizer = m_checksDataSource.CharacterCategorizer;
            ValidItems   = m_checksDataSource.GetParameterValue(kValidItemsParameter);
            InvalidItems = m_checksDataSource.GetParameterValue(kInvalidItemsParameter);

            string preferredLocale =
                m_checksDataSource.GetParameterValue("PreferredLocale") ?? string.Empty;

            string poeticStyles =
                m_checksDataSource.GetParameterValue("PoeticStyles");

            string introductionOutlineStyles =
                m_checksDataSource.GetParameterValue("IntroductionOutlineStyles");

            MatchedPairList pairList =
                MatchedPairList.Load(m_checksDataSource.GetParameterValue("MatchedPairs"),
                                     m_checksDataSource.GetParameterValue("DefaultWritingSystemName"));

            StyleCategorizer styleCategorizer =
                new StyleCategorizer(poeticStyles, introductionOutlineStyles);

            ProcessMatchedPairTokens bodyProcessor = new ProcessMatchedPairTokens(
                m_checksDataSource, pairList, styleCategorizer);

            ProcessMatchedPairTokens noteProcessor = new ProcessMatchedPairTokens(
                m_checksDataSource, pairList, styleCategorizer);

            m_unmatchedPairs = new List <TextTokenSubstring>();

            foreach (ITextToken tok in tokens)
            {
                if (tok.Text == null || (tok.Locale ?? string.Empty) != preferredLocale)
                {
                    continue;
                }

                if (tok.TextType == TextType.Note)
                {
                    // if a new note is starting finalize any sequences from the previous note
                    if (tok.IsNoteStart)
                    {
                        noteProcessor.FinalizeResult(desiredKey, m_unmatchedPairs);
                    }
                    noteProcessor.ProcessToken(tok, desiredKey, m_unmatchedPairs);
                }
                else if (tok.TextType == TextType.Verse || tok.TextType == TextType.Other || tok.IsParagraphStart)
                {
                    // body text: finalize any note that was in progress and continue with body text
                    noteProcessor.FinalizeResult(desiredKey, m_unmatchedPairs);
                    bodyProcessor.ProcessToken(tok, desiredKey, m_unmatchedPairs);
                }
            }

            noteProcessor.FinalizeResult(desiredKey, m_unmatchedPairs);
            bodyProcessor.FinalizeResult(desiredKey, m_unmatchedPairs);

            return(m_unmatchedPairs);
        }
		/// ------------------------------------------------------------------------------------
		/// <summary>
		///
		/// </summary>
		/// ------------------------------------------------------------------------------------
		public List<TextTokenSubstring> GetReferences(IEnumerable<ITextToken> tokens, string desiredKey)
		{
#if DEBUG
			List<ITextToken> AllTokens = new List<ITextToken>(tokens);
			if (AllTokens.Count == 0)
			{
				// Keep the compiler from complaining about assigning to a variable, but not using it.
			}
#endif
//			m_characterCategorizer = m_checksDataSource.CharacterCategorizer;
			ValidItems = m_checksDataSource.GetParameterValue(kValidItemsParameter);
			InvalidItems = m_checksDataSource.GetParameterValue(kInvalidItemsParameter);

			string preferredLocale =
				m_checksDataSource.GetParameterValue("PreferredLocale") ?? string.Empty;

			string poeticStyles =
				m_checksDataSource.GetParameterValue("PoeticStyles");

			string introductionOutlineStyles =
				m_checksDataSource.GetParameterValue("IntroductionOutlineStyles");

			MatchedPairList pairList =
				MatchedPairList.Load(m_checksDataSource.GetParameterValue("MatchedPairs"),
				m_checksDataSource.GetParameterValue("DefaultWritingSystemName"));

			StyleCategorizer styleCategorizer =
				new StyleCategorizer(poeticStyles, introductionOutlineStyles);

			ProcessMatchedPairTokens bodyProcessor = new ProcessMatchedPairTokens(
				m_checksDataSource, pairList, styleCategorizer);

			ProcessMatchedPairTokens noteProcessor = new ProcessMatchedPairTokens(
				m_checksDataSource, pairList, styleCategorizer);

			m_unmatchedPairs = new List<TextTokenSubstring>();

			foreach (ITextToken tok in tokens)
			{
				if (tok.Text == null || (tok.Locale ?? string.Empty) != preferredLocale)
					continue;

				if (tok.TextType == TextType.Note)
				{
					// if a new note is starting finalize any sequences from the previous note
					if (tok.IsNoteStart)
						noteProcessor.FinalizeResult(desiredKey, m_unmatchedPairs);
					noteProcessor.ProcessToken(tok, desiredKey, m_unmatchedPairs);
				}
				else if (tok.TextType == TextType.Verse || tok.TextType == TextType.Other || tok.IsParagraphStart)
				{
					// body text: finalize any note that was in progress and continue with body text
					noteProcessor.FinalizeResult(desiredKey, m_unmatchedPairs);
					bodyProcessor.ProcessToken(tok, desiredKey, m_unmatchedPairs);
				}
			}

			noteProcessor.FinalizeResult(desiredKey, m_unmatchedPairs);
			bodyProcessor.FinalizeResult(desiredKey, m_unmatchedPairs);

			return m_unmatchedPairs;
		}