/// ------------------------------------------------------------------------------------
/// <summary>
/// Gets a list if TextTokenSubstrings containing the references and character offsets
/// where quotation problems occur.
/// </summary>
/// <param name="tokens">The tokens (from the data source) to check for quotation problems.</param>
/// <param name="desiredKey">empty string.</param>
/// ------------------------------------------------------------------------------------
public List<TextTokenSubstring> GetReferences(IEnumerable<ITextToken> tokens, string desiredKey)
{
m_charCategorizer = m_chkDataSource.CharacterCategorizer;
ValidItems = m_chkDataSource.GetParameterValue(m_validItemsParameter);
InvalidItems = m_chkDataSource.GetParameterValue(m_invalidItemsParameter);
QuotationMarkCategorizer qmCategorizer = new QuotationMarkCategorizer(m_chkDataSource);
m_qmProblems = new List<TextTokenSubstring>();
QTokenProcessor bodyProcessor = new QTokenProcessor(m_chkDataSource,
m_charCategorizer, qmCategorizer, desiredKey, m_qmProblems);
QTokenProcessor noteProcessor = new QTokenProcessor(m_chkDataSource,
m_charCategorizer, qmCategorizer, desiredKey, m_qmProblems);
VerseTextToken scrToken = new VerseTextToken();
foreach (ITextToken tok in tokens)
{
if (tok.TextType == TextType.Note)
{
// If a new note is starting finalize any sequences from the previous note.
if (tok.IsNoteStart)
noteProcessor.FinalizeResult();
noteProcessor.ProcessToken(tok, null);
}
else if (tok.TextType == TextType.Verse || tok.TextType == TextType.Other ||
tok.IsParagraphStart)
{
scrToken.Token = tok;
// body text: finalize any note that was in progress and continue with body text
noteProcessor.FinalizeResult();
bodyProcessor.ProcessToken(tok, scrToken);
}
}
noteProcessor.FinalizeResult();
bodyProcessor.FinalizeResult();
return m_qmProblems;
}