SILUBS.ScriptureChecks.UnitTestTokenizer.CategorizeTokens C# (CSharp) Method

CategorizeTokens() private method

private CategorizeTokens ( List tokens ) : void
tokens List
return void
		private void CategorizeTokens(List<UnitTestUSFMTextToken> tokens)
		{
			List<string> noteEndMarkers = new List<string>();

			bool inNote = false;
			bool inPublishable = false;
			bool paragraphStyleIsVerseText = false;
			bool characterStyleIsVerseText = false;

			foreach (UnitTestUSFMTextToken tok in tokens)
			{
				if (tok.ParaStyleName == "")
				{
					// This is the second token created form splitting the verse number from \v N abc...
					characterStyleIsVerseText = true;
					paragraphStyleIsVerseText = true;
					inPublishable = true;
					inNote = false;
				}

				else if (tok.IsChapter || tok.IsVerse)
				{
					if (tok.IsChapter)
						paragraphStyleIsVerseText = false;
					characterStyleIsVerseText = false;
					inPublishable = true;
					inNote = false;
				}

				else if (tok.IsParagraphStart)
				{
					inPublishable = tok.IsPublishable;
					paragraphStyleIsVerseText = tok.IsVerseTextStyle;
					characterStyleIsVerseText = paragraphStyleIsVerseText;
					inNote = false;
				}

				else if (tok.IsNoteStart)
				{
					inNote = true;

					// We have to build a list of note end markers. Otherwise there
					// is no way to distinguish between character end markers and
					// note ending markers. Sigh.
					if (!noteEndMarkers.Contains("f*"))
						noteEndMarkers.Add("f*");
					if (!noteEndMarkers.Contains("x*"))
						noteEndMarkers.Add("x*");
				}

				else if (tok.IsEndStyle)
				{
					if (noteEndMarkers.Contains(tok.CharStyleName))
						inNote = false;

					characterStyleIsVerseText = paragraphStyleIsVerseText;
					tok.ParaStyleName = "";
				}

				else if (tok.IsCharacterStyle)
				{
					characterStyleIsVerseText = tok.IsVerseTextStyle;
				}

				else { Debug.Assert(false); }

				tok.IsNoteText = inNote;
				tok.IsPublishableText = inPublishable;
				tok.IsVerseText = !inNote && characterStyleIsVerseText && paragraphStyleIsVerseText;
			}
		}