qRead)
		{
			string sep = "";
			StringBuilder sb = new StringBuilder();
			int lineCount = 0;
			string lookingFor = null;
			while(qRead.Count > 0)
			{
				// Read a line at a time
				string str = qRead.Peek();
				if(lineCount == 0 && str.StartsWith(""))
				{
					lookingFor = "
";
					str = str.Replace("", "");
				}
				lineCount++;
				str = Regex.Replace(str, "<[^<>]+>", "").Trim(" \t".ToCharArray()).Replace(">", "");
				str = str.Replace('\x25CB', 'o').Replace("\u2022", "\\u9679?");
				//str = str.Replace('\x25CB', 'o').Replace("\u2022", "\\u7?");
				// If Text begins with number then
				if (lookingFor != null)
				{
					if (str.Contains(lookingFor))
					{
						sb.Append(sep + str.Replace(lookingFor, ""));
						return sb.ToString();
					}
				}
				else if (Regex.IsMatch(str, "[0-9].*") || str.StartsWith("
"))
					return sb.ToString();
				//append string
				if (sb.ToString() != "" && str != "")
					sep = "\r\n";
				sb.Append(sep + str);
				qRead.Dequeue();// Remove current line from queue
			}
			return sb.ToString();
		}
		private void ProcessChars(string str)
		{
			foreach (char c in str)
			{
				if (c < 0x20 || c > 0x7F)
					Console.WriteLine("{0:X4}", (int)c);
			}
		}
		public void ResetSpecial()
		{
			FoundSpecial = new List();
		}
		List FoundSpecial = new List();
		private void HasSpecialCharacters(string lineText)
		{
			StringBuilder sb = new StringBuilder();
			foreach (char c in lineText)
			{
				if ((c < 0x20 || c > 0x7F) && !FoundSpecial.Contains(c))
				{
					Console.WriteLine("*** Special Character {0:X4}", (int)c);
					FoundSpecial.Add(c);
				}
			}
		}
		private static string GetAnnotationText(string fileName)
		{
			return string.Format("FileName:{0}\r\nShortName:{1}\r\nFullName:{2}\r\nSystem:{3}\r\nPNSNo:{4}\r\nRelatedFunction:{5}" , 
				fileName,ShortName,FullName,ApSystem,PNSNo ,RelatedFunction);
		}
		private static string GetAnnotationText2(string lineText)
		{
			//return string.Format("LineText:{0}\r\nShortName:{1}\r\nFullName:{2}\r\nSystem:{3}\r\nPNSNo:{4}\r\nRelatedFunction:{5}",
			//	lineText, ShortName, FullName, apSystem, PNSNo, RelatedFunction);
			return string.Format("LineText:{0}",
				lineText);
		}
	}
	public class StepLookup : SortedDictionary
	{
		public StepInfo this[int i]
		{
			get
			{
				if (this.ContainsKey(i.ToString())) return base[i.ToString()];
				return null;
			}
			set
			{
				if (i > this.Count)
					throw new Exception("Gap in Stack");
				if (value == null)
					throw new Exception("Null StepInfo");
				//if (value.MyHLS.Ordinal==5 && (value.IsNote || value.IsCaution ))
				//	Volian.Base.Library.vlnStackTrace.ShowStackLocal(2,5,"=====> Adding Caution or Note on Step 5 {0}",value);
				if (this.ContainsKey(i.ToString()))
				{
					base[i.ToString()] = value;
					while (this.ContainsKey((i + 1).ToString()))
						base.Remove((base.Count - 1).ToString());
				}
				else base.Add(i.ToString(), value);
				//ListMySteps("Set ", this);
			}
		}
		public void AddOne(StepInfo previousStep)
		{
			this[this.Count] = previousStep;
		}
		private static void ListMySteps(string str, StepLookup mySteps)
		{
			int i = 0;
			foreach (string key in mySteps.Keys)
			{
				if (key != i.ToString())
					Console.WriteLine("{0} {1} {2} {3}", str, i, key, mySteps[key].DisplayText);
				i++;
			}
		}
	}
}