/// <summary>
        /// Internal method that works on a single option in the
        /// pattern
        /// </summary>
        /// <param name="c">The option specifier.</param>
        protected void FinalizeConverter(char c)
        {
            PatternConverter pc = null;

            switch (c)
            {
            case 'a':
                pc = new BasicPatternConverter(m_formattingInfo, APPDOMAIN_CONVERTER);
                m_currentLiteral.Length = 0;
                break;

            case 'c':
                pc = new LoggerPatternConverter(m_formattingInfo, ExtractPrecisionOption());
                m_currentLiteral.Length = 0;
                break;

            case 'C':
                pc = new ClassNamePatternConverter(m_formattingInfo, ExtractPrecisionOption());
                m_currentLiteral.Length = 0;
                break;

            case 'd':
                string         dateFormatStr = AbsoluteTimeDateFormatter.ISO8601_DATE_FORMAT;
                IDateFormatter df;
                string         dOpt = ExtractOption();
                if (dOpt != null)
                {
                    dateFormatStr = dOpt;
                }

                if (string.Compare(dateFormatStr, AbsoluteTimeDateFormatter.ISO8601_DATE_FORMAT, true, System.Globalization.CultureInfo.InvariantCulture) == 0)
                {
                    df = new ISO8601DateFormatter();
                }
                else if (string.Compare(dateFormatStr, AbsoluteTimeDateFormatter.ABS_TIME_DATE_FORMAT, true, System.Globalization.CultureInfo.InvariantCulture) == 0)
                {
                    df = new AbsoluteTimeDateFormatter();
                }
                else if (string.Compare(dateFormatStr, AbsoluteTimeDateFormatter.DATE_AND_TIME_DATE_FORMAT, true, System.Globalization.CultureInfo.InvariantCulture) == 0)
                {
                    df = new DateTimeDateFormatter();
                }
                else
                {
                    try
                    {
                        df = new SimpleDateFormatter(dateFormatStr);
                    }
                    catch (Exception e)
                    {
                        LogLog.Error("PatternParser: Could not instantiate SimpleDateFormatter with [" + dateFormatStr + "]", e);
                        df = new ISO8601DateFormatter();
                    }
                }
                pc = new DatePatternConverter(m_formattingInfo, df);
                m_currentLiteral.Length = 0;
                break;

            case 'F':
                pc = new LocationPatternConverter(m_formattingInfo, FILE_LOCATION_CONVERTER);
                m_currentLiteral.Length = 0;
                break;

            case 'l':
                pc = new LocationPatternConverter(m_formattingInfo, FULL_LOCATION_CONVERTER);
                m_currentLiteral.Length = 0;
                break;

            case 'L':
                pc = new LocationPatternConverter(m_formattingInfo, LINE_LOCATION_CONVERTER);
                m_currentLiteral.Length = 0;
                break;

            case 'm':
                pc = new BasicPatternConverter(m_formattingInfo, MESSAGE_CONVERTER);
                m_currentLiteral.Length = 0;
                break;

            case 'M':
                pc = new LocationPatternConverter(m_formattingInfo, METHOD_LOCATION_CONVERTER);
                m_currentLiteral.Length = 0;
                break;

            case 'p':
                pc = new BasicPatternConverter(m_formattingInfo, LEVEL_CONVERTER);
                m_currentLiteral.Length = 0;
                break;

            case 'P':
                pc = new PropertyPatternConverter(m_formattingInfo, this.ExtractOption());
                m_currentLiteral.Length = 0;
                break;

            case 'r':
                pc = new BasicPatternConverter(m_formattingInfo, RELATIVE_TIME_CONVERTER);
                m_currentLiteral.Length = 0;
                break;

            case 't':
                pc = new BasicPatternConverter(m_formattingInfo, THREAD_CONVERTER);
                m_currentLiteral.Length = 0;
                break;

            case 'u':
                pc = new BasicPatternConverter(m_formattingInfo, IDENTITY_CONVERTER);
                m_currentLiteral.Length = 0;
                break;

            case 'W':
                pc = new BasicPatternConverter(m_formattingInfo, USERNAME_CONVERTER);
                m_currentLiteral.Length = 0;
                break;

            case 'x':
                pc = new BasicPatternConverter(m_formattingInfo, NDC_CONVERTER);
                m_currentLiteral.Length = 0;
                break;

            case 'X':
                pc = new MDCPatternConverter(m_formattingInfo, this.ExtractOption());
                m_currentLiteral.Length = 0;
                break;

            default:
                LogLog.Error("PatternParser: Unexpected char [" + c + "] at position [" + m_index + "] in conversion pattern.");
                pc = new LiteralPatternConverter(m_currentLiteral.ToString());
                m_currentLiteral.Length = 0;
                break;
            }
            AddConverter(pc);
        }
		/// <summary>
		/// Internal method that works on a single option in the
		/// pattern
		/// </summary>
		/// <param name="c">The option specifier.</param>
		protected void FinalizeConverter(char c) 
		{
			PatternConverter pc = null;
			switch(c) 
			{
				case 'a':
					pc = new BasicPatternConverter(m_formattingInfo, APPDOMAIN_CONVERTER);
					m_currentLiteral.Length = 0;
					break;

				case 'c':
					pc = new LoggerPatternConverter(m_formattingInfo, ExtractPrecisionOption());	
					m_currentLiteral.Length = 0;
					break;	 

				case 'C':
					pc = new ClassNamePatternConverter(m_formattingInfo, ExtractPrecisionOption());
					m_currentLiteral.Length = 0;
					break;

				case 'd':
					string dateFormatStr = AbsoluteTimeDateFormatter.ISO8601_DATE_FORMAT;
					IDateFormatter df;
					string dOpt = ExtractOption();
					if (dOpt != null)
					{
						dateFormatStr = dOpt;
					}
	  
					if (string.Compare(dateFormatStr, AbsoluteTimeDateFormatter.ISO8601_DATE_FORMAT, true, System.Globalization.CultureInfo.InvariantCulture) == 0) 
					{
						df = new ISO8601DateFormatter();
					}
					else if (string.Compare(dateFormatStr, AbsoluteTimeDateFormatter.ABS_TIME_DATE_FORMAT, true, System.Globalization.CultureInfo.InvariantCulture) == 0)
					{
						df = new AbsoluteTimeDateFormatter();
					}
					else if (string.Compare(dateFormatStr, AbsoluteTimeDateFormatter.DATE_AND_TIME_DATE_FORMAT, true, System.Globalization.CultureInfo.InvariantCulture) == 0)
					{
						df = new DateTimeDateFormatter();
					}
					else 
					{
						try 
						{
							df = new SimpleDateFormatter(dateFormatStr);
						}
						catch (Exception e) 
						{
							LogLog.Error("PatternParser: Could not instantiate SimpleDateFormatter with ["+dateFormatStr+"]", e);
							df = new ISO8601DateFormatter();
						}	
					}
					pc = new DatePatternConverter(m_formattingInfo, df);
					m_currentLiteral.Length = 0;
					break;

				case 'F':
					pc = new LocationPatternConverter(m_formattingInfo, FILE_LOCATION_CONVERTER);
					m_currentLiteral.Length = 0;
					break;

				case 'l':
					pc = new LocationPatternConverter(m_formattingInfo, FULL_LOCATION_CONVERTER);
					m_currentLiteral.Length = 0;
					break;

				case 'L':
					pc = new LocationPatternConverter(m_formattingInfo, LINE_LOCATION_CONVERTER);
					m_currentLiteral.Length = 0;
					break;

				case 'm':
					pc = new BasicPatternConverter(m_formattingInfo, MESSAGE_CONVERTER);
					m_currentLiteral.Length = 0;
					break;

				case 'M':
					pc = new LocationPatternConverter(m_formattingInfo, METHOD_LOCATION_CONVERTER);
					m_currentLiteral.Length = 0;
					break;

				case 'p':
					pc = new BasicPatternConverter(m_formattingInfo, LEVEL_CONVERTER);
					m_currentLiteral.Length = 0;
					break;

				case 'P':
					pc = new PropertyPatternConverter(m_formattingInfo, this.ExtractOption());
					m_currentLiteral.Length = 0;
					break;

				case 'r':
					pc = new BasicPatternConverter(m_formattingInfo, RELATIVE_TIME_CONVERTER);
					m_currentLiteral.Length = 0;
					break;

				case 't':
					pc = new BasicPatternConverter(m_formattingInfo, THREAD_CONVERTER);
					m_currentLiteral.Length = 0;
					break;

				case 'u':
					pc = new BasicPatternConverter(m_formattingInfo, IDENTITY_CONVERTER);
					m_currentLiteral.Length = 0;
					break;

				case 'W':
					pc = new BasicPatternConverter(m_formattingInfo, USERNAME_CONVERTER);
					m_currentLiteral.Length = 0;
					break;

				case 'x':
					pc = new BasicPatternConverter(m_formattingInfo, NDC_CONVERTER);
					m_currentLiteral.Length = 0;
					break;

				case 'X':
					pc = new MDCPatternConverter(m_formattingInfo, this.ExtractOption());
					m_currentLiteral.Length = 0;
					break;

				default:
					LogLog.Error("PatternParser: Unexpected char ["+c+"] at position ["+m_index+"] in conversion pattern.");
					pc = new LiteralPatternConverter(m_currentLiteral.ToString());
					m_currentLiteral.Length = 0;
					break;
			}
			AddConverter(pc);
		}