Example #1
0
        /// <summary>
        /// Process a parsed converter pattern
        /// </summary>
        /// <param name="converterName">the name of the converter</param>
        /// <param name="option">the optional option for the converter</param>
        /// <param name="formattingInfo">the formatting info for the converter</param>
        private void ProcessConverter(string converterName, string option, FormattingInfo formattingInfo)
        {
            LogLog.Debug(declaringType, "Converter [" + converterName + "] Option [" + option + "] Format [min=" + formattingInfo.Min + ",max=" + formattingInfo.Max + ",leftAlign=" + formattingInfo.LeftAlign.ToString() + "]");
            ConverterInfo converterInfo = (ConverterInfo)m_patternConverters[converterName];

            if (converterInfo == null)
            {
                LogLog.Error(declaringType, "Unknown converter name [" + converterName + "] in conversion pattern.");
                return;
            }
            PatternConverter patternConverter = null;

            try
            {
                patternConverter = (PatternConverter)Activator.CreateInstance(converterInfo.Type);
            }
            catch (Exception ex)
            {
                LogLog.Error(declaringType, "Failed to create instance of Type [" + converterInfo.Type.FullName + "] using default constructor. Exception: " + ex.ToString());
            }
            patternConverter.FormattingInfo = formattingInfo;
            patternConverter.Option         = option;
            patternConverter.Properties     = converterInfo.Properties;
            (patternConverter as IOptionHandler)?.ActivateOptions();
            AddConverter(patternConverter);
        }
Example #2
0
        private void ProcessConverter(string converterName, string option, FormattingInfo formattingInfo)
        {
            object[] objArray1 = new object[11];
            objArray1[0]  = "Converter [";
            objArray1[1]  = converterName;
            objArray1[2]  = "] Option [";
            objArray1[3]  = option;
            objArray1[4]  = "] Format [min=";
            objArray1[5]  = formattingInfo.Min;
            objArray1[6]  = ",max=";
            objArray1[7]  = formattingInfo.Max;
            objArray1[8]  = ",leftAlign=";
            objArray1[9]  = formattingInfo.LeftAlign;
            objArray1[10] = "]";
            LogLog.Debug(declaringType, string.Concat(objArray1));
            ConverterInfo info = (ConverterInfo)this.m_patternConverters[converterName];

            if (info == null)
            {
                LogLog.Error(declaringType, "Unknown converter name [" + converterName + "] in conversion pattern.");
            }
            else
            {
                PatternConverter pc = null;
                try
                {
                    pc = (PatternConverter)Activator.CreateInstance(info.Type);
                }
                catch (Exception exception)
                {
                    LogLog.Error(declaringType, "Failed to create instance of Type [" + info.Type.FullName + "] using default constructor. Exception: " + exception.ToString());
                }
                pc.FormattingInfo = formattingInfo;
                pc.Option         = option;
                pc.Properties     = info.Properties;
                IOptionHandler handler = pc as IOptionHandler;
                if (handler != null)
                {
                    handler.ActivateOptions();
                }
                this.AddConverter(pc);
            }
        }
        /// <summary>
        /// Process a parsed converter pattern
        /// 处理已解析的转换器模式
        /// </summary>
        /// <param name="converterName">the name of the converter</param>
        /// <param name="option">the optional option for the converter</param>
        /// <param name="formattingInfo">the formatting info for the converter</param>
        private void ProcessConverter(string converterName, string option, FormattingInfo formattingInfo)
        {
            LogLog.Debug(declaringType, "Converter [" + converterName + "] Option [" + option + "] Format [min=" + formattingInfo.Min + ",max=" + formattingInfo.Max + ",leftAlign=" + formattingInfo.LeftAlign + "]");

            // Lookup the converter type
            ConverterInfo converterInfo = (ConverterInfo)m_patternConverters[converterName];

            if (converterInfo == null)
            {
                //未知的转换器
                LogLog.Error(declaringType, "Unknown converter name [" + converterName + "] in conversion pattern.");
            }
            else
            {
                // Create the pattern converter
                // 创建模式转换器
                PatternConverter pc = null;
                try
                {
                    pc = (PatternConverter)Activator.CreateInstance(converterInfo.Type);
                }
                catch (Exception createInstanceEx)
                {
                    LogLog.Error(declaringType, "Failed to create instance of Type [" + converterInfo.Type.FullName + "] using default constructor. Exception: " + createInstanceEx.ToString());
                }

                // formattingInfo variable is an instance variable, occasionally reset and used over and over again
                // formattingInfo变量是一个实例变量,偶尔会重新设置并反复使用

                pc.FormattingInfo = formattingInfo;
                pc.Option         = option;
                pc.Properties     = converterInfo.Properties;

                IOptionHandler optionHandler = pc as IOptionHandler;
                if (optionHandler != null)
                {
                    optionHandler.ActivateOptions();
                }

                AddConverter(pc);
            }
        }
Example #4
0
        /// <summary>
        /// Process a parsed converter pattern
        /// </summary>
        /// <param name="converterName">the name of the converter</param>
        /// <param name="option">the optional option for the converter</param>
        /// <param name="formattingInfo">the formatting info for the converter</param>
        void ProcessConverter(string converterName, string option, FormattingInfo formattingInfo)
        {
            LogLog.Debug("PatternParser: Converter [" + converterName + "] Option [" + option + "] Format [min=" +
                         formattingInfo.Min + ",max=" + formattingInfo.Max + ",leftAlign=" + formattingInfo.LeftAlign + "]");

            // Lookup the converter type
            var converterType = (Type)m_patternConverters[converterName];

            if (converterType == null)
            {
                LogLog.Error("PatternParser: Unknown converter name [" + converterName + "] in conversion pattern.");
            }
            else
            {
                // Create the pattern converter
                PatternConverter pc = null;
                try
                {
                    pc = (PatternConverter)Activator.CreateInstance(converterType);
                }
                catch (Exception createInstanceEx)
                {
                    LogLog.Error("PatternParser: Failed to create instance of Type [" + converterType.FullName +
                                 "] using default constructor. Exception: " + createInstanceEx);
                }

                // formattingInfo variable is an instance variable, occasionally reset
                // and used over and over again
                pc.FormattingInfo = formattingInfo;
                pc.Option         = option;

                var optionHandler = pc as IOptionHandler;
                if (optionHandler != null)
                {
                    optionHandler.ActivateOptions();
                }

                AddConverter(pc);
            }
        }
        /// <summary>
        /// Internal method to parse the specified pattern to find specified matches
        /// </summary>
        /// <param name="pattern">the pattern to parse</param>
        /// <param name="matches">the converter names to match in the pattern</param>
        /// <remarks>
        /// <para>
        /// The matches param must be sorted such that longer strings come before shorter ones.
        /// </para>
        /// </remarks>
        private void ParseInternal(string pattern, string[] matches)
        {
            int offset = 0;

            while (offset < pattern.Length)
            {
                int i = pattern.IndexOf('%', offset);
                if (i < 0 || i == pattern.Length - 1)
                {
                    ProcessLiteral(pattern.Substring(offset));
                    offset = pattern.Length;
                }
                else
                {
                    if (pattern[i + 1] == '%')
                    {
                        // Escaped
                        ProcessLiteral(pattern.Substring(offset, i - offset + 1));
                        offset = i + 2;
                    }
                    else
                    {
                        ProcessLiteral(pattern.Substring(offset, i - offset));
                        offset = i + 1;

                        FormattingInfo formattingInfo = new FormattingInfo();

                        // Process formatting options

                        // Look for the align flag
                        if (offset < pattern.Length)
                        {
                            if (pattern[offset] == '-')
                            {
                                // Seen align flag
                                formattingInfo.LeftAlign = true;
                                offset++;
                            }
                        }
                        // Look for the minimum length
                        while (offset < pattern.Length && char.IsDigit(pattern[offset]))
                        {
                            // Seen digit
                            if (formattingInfo.Min < 0)
                            {
                                formattingInfo.Min = 0;
                            }

                            formattingInfo.Min = (formattingInfo.Min * 10) + int.Parse(pattern[offset].ToString(), NumberFormatInfo.InvariantInfo);

                            offset++;
                        }
                        // Look for the separator between min and max
                        if (offset < pattern.Length)
                        {
                            if (pattern[offset] == '.')
                            {
                                // Seen separator
                                offset++;
                            }
                        }
                        // Look for the maximum length
                        while (offset < pattern.Length && char.IsDigit(pattern[offset]))
                        {
                            // Seen digit
                            if (formattingInfo.Max == int.MaxValue)
                            {
                                formattingInfo.Max = 0;
                            }

                            formattingInfo.Max = (formattingInfo.Max * 10) + int.Parse(pattern[offset].ToString(), NumberFormatInfo.InvariantInfo);

                            offset++;
                        }

                        int remainingStringLength = pattern.Length - offset;

                        // Look for pattern
                        for (int m = 0; m < matches.Length; m++)
                        {
                            string key = matches[m];

                            if (key.Length <= remainingStringLength)
                            {
                                if (string.Compare(pattern, offset, key, 0, key.Length) == 0)
                                {
                                    // Found match
                                    offset = offset + matches[m].Length;

                                    string option = null;

                                    // Look for option
                                    if (offset < pattern.Length)
                                    {
                                        if (pattern[offset] == '{')
                                        {
                                            // Seen option start
                                            offset++;

                                            int optEnd = pattern.IndexOf('}', offset);
                                            if (optEnd < 0)
                                            {
                                                // error
                                            }
                                            else
                                            {
                                                option = pattern.Substring(offset, optEnd - offset);
                                                offset = optEnd + 1;
                                            }
                                        }
                                    }

                                    ProcessConverter(matches[m], option, formattingInfo);
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        }
Example #6
0
		/// <summary>
		/// Process a parsed converter pattern
		/// </summary>
		/// <param name="converterName">the name of the converter</param>
		/// <param name="option">the optional option for the converter</param>
		/// <param name="formattingInfo">the formatting info for the converter</param>
		private void ProcessConverter(string converterName, string option, FormattingInfo formattingInfo)
		{
			LogLog.Debug("PatternParser: Converter ["+converterName+"] Option ["+option+"] Format [min="+formattingInfo.Min+",max="+formattingInfo.Max+",leftAlign="+formattingInfo.LeftAlign+"]");

			// Lookup the converter type
			Type converterType = (Type)m_patternConverters[converterName];
			if (converterType == null)
			{
				LogLog.Error("PatternParser: Unknown converter name ["+converterName+"] in conversion pattern.");
			}
			else
			{
				// Create the pattern converter
				PatternConverter pc = null;
				try
				{
					pc = (PatternConverter)Activator.CreateInstance(converterType);
				}
				catch(Exception createInstanceEx)
				{
					LogLog.Error("PatternParser: Failed to create instance of Type ["+converterType.FullName+"] using default constructor. Exception: "+createInstanceEx.ToString());
				}

				// formattingInfo variable is an instance variable, occasionally reset 
				// and used over and over again
				pc.FormattingInfo = formattingInfo;
				pc.Option = option;

				IOptionHandler optionHandler = pc as IOptionHandler;
				if (optionHandler != null)
				{
					optionHandler.ActivateOptions();
				}

				AddConverter(pc);
			}
		}
Example #7
0
		/// <summary>
		/// Internal method to parse the specified pattern to find specified matches
		/// </summary>
		/// <param name="pattern">the pattern to parse</param>
		/// <param name="matches">the converter names to match in the pattern</param>
		/// <remarks>
		/// <para>
		/// The matches param must be sorted such that longer strings come before shorter ones.
		/// </para>
		/// </remarks>
		private void ParseInternal(string pattern, string[] matches)
		{
			int offset = 0;
			while(offset < pattern.Length)
			{
				int i = pattern.IndexOf('%', offset);
				if (i < 0 || i == pattern.Length - 1)
				{
					ProcessLiteral(pattern.Substring(offset));
					offset = pattern.Length;
				}
				else
				{
					if (pattern[i+1] == '%')
					{
						// Escaped
						ProcessLiteral(pattern.Substring(offset, i - offset + 1));
						offset = i + 2;
					}
					else
					{
						ProcessLiteral(pattern.Substring(offset, i - offset));
						offset = i + 1;

						FormattingInfo formattingInfo = new FormattingInfo();

						// Process formatting options

						// Look for the align flag
						if (offset < pattern.Length)
						{
							if (pattern[offset] == '-')
							{
								// Seen align flag
								formattingInfo.LeftAlign = true;
								offset++;
							}
						}
						// Look for the minimum length
						while (offset < pattern.Length && char.IsDigit(pattern[offset]))
						{
							// Seen digit
							if (formattingInfo.Min < 0)
							{
								formattingInfo.Min = 0;
							}
							formattingInfo.Min = (formattingInfo.Min * 10) + int.Parse(pattern[offset].ToString(CultureInfo.InvariantCulture), System.Globalization.NumberFormatInfo.InvariantInfo);
							offset++;
						}
						// Look for the separator between min and max
						if (offset < pattern.Length)
						{
							if (pattern[offset] == '.')
							{
								// Seen separator
								offset++;
							}
						}
						// Look for the maximum length
						while (offset < pattern.Length && char.IsDigit(pattern[offset]))
						{
							// Seen digit
							if (formattingInfo.Max == int.MaxValue)
							{
								formattingInfo.Max = 0;
							}
							formattingInfo.Max = (formattingInfo.Max * 10) + int.Parse(pattern[offset].ToString(CultureInfo.InvariantCulture), System.Globalization.NumberFormatInfo.InvariantInfo);
							offset++;
						}

						int remainingStringLength = pattern.Length - offset;

						// Look for pattern
						for(int m=0; m<matches.Length; m++)
						{
							if (matches[m].Length <= remainingStringLength)
							{
								if (String.Compare(pattern, offset, matches[m], 0, matches[m].Length, false, System.Globalization.CultureInfo.InvariantCulture) == 0)
								{
									// Found match
									offset = offset + matches[m].Length;

									string option = null;

									// Look for option
									if (offset < pattern.Length)
									{
										if (pattern[offset] == '{')
										{
											// Seen option start
											offset++;
											
											int optEnd = pattern.IndexOf('}', offset);
											if (optEnd < 0)
											{
												// error
											}
											else
											{
												option = pattern.Substring(offset, optEnd - offset);
												offset = optEnd + 1;
											}
										}
									}

									ProcessConverter(matches[m], option, formattingInfo);
									break;
								}
							}
						}
					}
				}
			}
		}
Example #8
0
        private void ParseInternal(string pattern, string[] matches)
        {
            int startIndex = 0;

            while (startIndex < pattern.Length)
            {
                int index = pattern.IndexOf('%', startIndex);
                if ((index < 0) || (index == (pattern.Length - 1)))
                {
                    this.ProcessLiteral(pattern.Substring(startIndex));
                    startIndex = pattern.Length;
                    continue;
                }
                if (pattern[index + 1] == '%')
                {
                    this.ProcessLiteral(pattern.Substring(startIndex, (index - startIndex) + 1));
                    startIndex = index + 2;
                    continue;
                }
                this.ProcessLiteral(pattern.Substring(startIndex, index - startIndex));
                startIndex = index + 1;
                FormattingInfo formattingInfo = new FormattingInfo();
                if ((startIndex < pattern.Length) && (pattern[startIndex] == '-'))
                {
                    formattingInfo.LeftAlign = true;
                    startIndex++;
                }
                while (true)
                {
                    if ((startIndex >= pattern.Length) || !char.IsDigit(pattern[startIndex]))
                    {
                        if ((startIndex < pattern.Length) && (pattern[startIndex] == '.'))
                        {
                            startIndex++;
                        }
                        while (true)
                        {
                            if ((startIndex >= pattern.Length) || !char.IsDigit(pattern[startIndex]))
                            {
                                int num3 = pattern.Length - startIndex;
                                for (int i = 0; i < matches.Length; i++)
                                {
                                    if ((matches[i].Length <= num3) && (string.Compare(pattern, startIndex, matches[i], 0, matches[i].Length, false, CultureInfo.InvariantCulture) == 0))
                                    {
                                        startIndex += matches[i].Length;
                                        string option = null;
                                        if ((startIndex < pattern.Length) && (pattern[startIndex] == '{'))
                                        {
                                            startIndex++;
                                            int num5 = pattern.IndexOf('}', startIndex);
                                            if (num5 >= 0)
                                            {
                                                option     = pattern.Substring(startIndex, num5 - startIndex);
                                                startIndex = num5 + 1;
                                            }
                                        }
                                        this.ProcessConverter(matches[i], option, formattingInfo);
                                        break;
                                    }
                                }
                                break;
                            }
                            if (formattingInfo.Max == 0x7fffffff)
                            {
                                formattingInfo.Max = 0;
                            }
                            formattingInfo.Max = (formattingInfo.Max * 10) + int.Parse(pattern[startIndex].ToString(CultureInfo.InvariantCulture), NumberFormatInfo.InvariantInfo);
                            startIndex++;
                        }
                        break;
                    }
                    if (formattingInfo.Min < 0)
                    {
                        formattingInfo.Min = 0;
                    }
                    formattingInfo.Min = (formattingInfo.Min * 10) + int.Parse(pattern[startIndex].ToString(CultureInfo.InvariantCulture), NumberFormatInfo.InvariantInfo);
                    startIndex++;
                }
            }
        }
Example #9
0
        /// <summary>
        /// Internal method to parse the specified pattern to find specified matches
        /// </summary>
        /// <param name="pattern">the pattern to parse</param>
        /// <param name="matches">the converter names to match in the pattern</param>
        /// <remarks>
        /// <para>
        /// The matches param must be sorted such that longer strings come before shorter ones.
        /// </para>
        /// </remarks>
        private void ParseInternal(string pattern, string[] matches)
        {
            int i = 0;

            while (i < pattern.Length)
            {
                int num = pattern.IndexOf('%', i);
                if (num < 0 || num == pattern.Length - 1)
                {
                    ProcessLiteral(pattern.Substring(i));
                    i = pattern.Length;
                    continue;
                }
                if (pattern[num + 1] == '%')
                {
                    ProcessLiteral(pattern.Substring(i, num - i + 1));
                    i = num + 2;
                    continue;
                }
                ProcessLiteral(pattern.Substring(i, num - i));
                i = num + 1;
                FormattingInfo formattingInfo = new FormattingInfo();
                if (i < pattern.Length && pattern[i] == '-')
                {
                    formattingInfo.LeftAlign = true;
                    i++;
                }
                for (; i < pattern.Length && char.IsDigit(pattern[i]); i++)
                {
                    if (formattingInfo.Min < 0)
                    {
                        formattingInfo.Min = 0;
                    }
                    formattingInfo.Min = formattingInfo.Min * 10 + int.Parse(pattern[i].ToString(), NumberFormatInfo.InvariantInfo);
                }
                if (i < pattern.Length && pattern[i] == '.')
                {
                    i++;
                }
                for (; i < pattern.Length && char.IsDigit(pattern[i]); i++)
                {
                    if (formattingInfo.Max == int.MaxValue)
                    {
                        formattingInfo.Max = 0;
                    }
                    formattingInfo.Max = formattingInfo.Max * 10 + int.Parse(pattern[i].ToString(), NumberFormatInfo.InvariantInfo);
                }
                int num2 = pattern.Length - i;
                for (int j = 0; j < matches.Length; j++)
                {
                    string text = matches[j];
                    if (text.Length > num2 || string.Compare(pattern, i, text, 0, text.Length) != 0)
                    {
                        continue;
                    }
                    i += matches[j].Length;
                    string option = null;
                    if (i < pattern.Length && pattern[i] == '{')
                    {
                        i++;
                        int num3 = pattern.IndexOf('}', i);
                        if (num3 >= 0)
                        {
                            option = pattern.Substring(i, num3 - i);
                            i      = num3 + 1;
                        }
                    }
                    ProcessConverter(matches[j], option, formattingInfo);
                    break;
                }
            }
        }