Exemple #1
0
        protected bool SyntaxCheckParameters()
        {
            PatternToken lToken = GetCurrentToken();

            if (lToken == PatternToken.CLOSE_PARA)
            {
                return(true);                   // no parameters
            }
            if (!SyntaxCheckParameter())
            {
                return(false);
            }

            lToken = GetCurrentToken();

            if (lToken == PatternToken.CLOSE_PARA)
            {
                return(true);
            }

            if (lToken != PatternToken.COMMA)
            {
                return(SetErrorMessage("Expected ',': " + CompileErrorLocation()));
            }

            NextToken();
            return(SyntaxCheckParameters());
        }
Exemple #2
0
        protected bool SyntaxCheckFunction()
        {
            PatternFunction lFunction = GetCurrentFunction();

            if (lFunction == null)
            {
                return(SetErrorMessage("Unknown Function: " + CompileErrorLocation()));
            }

            NextToken();
            PatternToken lToken = GetCurrentToken();

            if (lToken != PatternToken.OPEN_PARA)
            {
                return(SetErrorMessage("Expected ')': " + CompileErrorLocation()));
            }

            NextToken();

            if (!SyntaxCheckParameters())
            {
                return(false);
            }

            lToken = GetCurrentToken();

            if (lToken != PatternToken.CLOSE_PARA)
            {
                return(SetErrorMessage("Expected ')': " + CompileErrorLocation()));
            }

            NextToken();

            return(true);
        }
Exemple #3
0
        public bool SyntaxCheck()
        {
            ClearErrorMessages();

            mPosition = 0;

            if (PatternOperands.Count == 0)
            {
                return(true);
            }

            if (!SyntaxCheckExpression())
            {
                return(false);
            }

            PatternToken lToken = GetCurrentToken();

            if (lToken != PatternToken.END)
            {
                return(SetErrorMessage("Unexpected token: " + CompileErrorLocation()));
            }

            return(true);
        }
        public static PatternCode Scan(string code)
        {
            PatternCode lPatternCode = new PatternCode();
            int         lPosition    = 0;

            PatternToken lPreviousToken = PatternToken.UNKNOWN;

            // tokenize code
            while (lPosition < code.Length)
            {
                string       lTokenString = ReadTokenString(code, ref lPosition);
                PatternToken lToken       = GetToken(lTokenString, lPreviousToken);

                // "*" could also be a variable
                if ((lToken == PatternToken.MULTIPLY) && (lPreviousToken == PatternToken.COMMA || lPreviousToken == PatternToken.OPEN_PARA))
                {
                    lToken = PatternToken.VARIABLE;
                }

                int lParameterCount = (lToken == PatternToken.FUNCTION) ? GetParameterCount(code, lPosition) : 0;

                PatternOperand patternOperand = new PatternOperand(lToken, lTokenString, lParameterCount);

                if (lToken == PatternToken.UNKNOWN)
                {
                    lPatternCode.SetErrorMessage("Unknown Token: " + lTokenString.ToString());
                    return(lPatternCode);
                }
                lPatternCode.Add(patternOperand);

                lPreviousToken = lToken;
            }

            return(lPatternCode);
        }
Exemple #5
0
        void HandleText(PatternToken t)
        {
            StringBuilder reToAppend = inHeader ? headerRe : bodyRe;

            reToAppend.AppendFormat("{0} # fixed text '{1}'{2}", Regex.Escape(t.Value), t.Value, Environment.NewLine);

            ConcatToBody(GetCSharpStringLiteral(t.Value));
        }
Exemple #6
0
        IEnumerable <PatternToken> TokenizePattern(string pattern)
        {
            int idx = 0;             // Current position in the pattern

            for (;;)
            {
                Match m = patternParserRe.Match(pattern, idx);

                if (m.Success)
                {
                    // A specifier is found

                    if (m.Index > idx)                     // Yield the text before the specifier found (if any)
                    {
                        PatternToken txt1 = new PatternToken();
                        txt1.Type  = PatternTokenType.Text;
                        txt1.Value = pattern.Substring(idx, m.Index - idx);
                        yield return(txt1);
                    }

                    if (m.Groups[1].Value != "")                     // If %% was found, yield single '%'
                    {
                        PatternToken txt2 = new PatternToken();
                        txt2.Type  = PatternTokenType.Text;
                        txt2.Value = "%";
                        yield return(txt2);
                    }
                    else                     // A 'normal' specifier was found. Fill up the structure and yield it.
                    {
                        PatternToken spec;
                        spec.Type             = PatternTokenType.Specifier;
                        spec.RightPaddingFlag = m.Groups[2].Value != "";
                        spec.Padding          = m.Groups[3].Value != "" ? int.Parse(m.Groups[3].Value) : 0;
                        spec.Trim             = m.Groups[4].Value != "" ? int.Parse(m.Groups[4].Value) : 0;
                        spec.Value            = m.Groups[5].Value;
                        spec.Argument         = m.Groups[6].Value;
                        yield return(spec);
                    }

                    // Move current position to the end of the specifier found
                    idx = m.Index + m.Length;
                }
                else
                {
                    if (idx < pattern.Length)                     // Yield the rest of the pattern if any
                    {
                        PatternToken txt3 = new PatternToken();
                        txt3.Type  = PatternTokenType.Text;
                        txt3.Value = pattern.Substring(idx);
                        yield return(txt3);
                    }

                    // Stop parsing
                    break;
                }
            }
        }
Exemple #7
0
        private PatternToken GetRootPatternToken([NotNull] RootModel rootModel)
        {
            Assert.ArgumentNotNull(rootModel, "rootModel");

            if (_rootPatternToken == null)
            {
                _rootPatternToken = WildcardParser.ParseWildcardString(_textToHighlight, rootModel);
            }

            return(_rootPatternToken);
        }
Exemple #8
0
        private PatternToken GetSubstituteWithPatternToken([NotNull] RootModel rootModel)
        {
            Assert.ArgumentNotNull(rootModel, "rootModel");

            if (_rootSubstituteWithPatternToken == null)
            {
                _rootSubstituteWithPatternToken = WildcardParser.ParseWildcardString(SubstituteWith, rootModel);
            }

            return(_rootSubstituteWithPatternToken);
        }
Exemple #9
0
        protected bool SyntaxCheckParameter()
        {
            PatternToken lToken = GetCurrentToken();

            if (lToken == PatternToken.VARIABLE)
            {
                NextToken();
                return(true);
            }

            return(SyntaxCheckExpression());
        }
Exemple #10
0
        protected int EvaulateFunction()
        {
            PatternFunction lFunction = GetCurrentFunction();

            NextToken();
            NextToken();

            PatternFunctionParameters <int> lPatternFunctionParameters = new PatternFunctionParameters <int>();

            while (true)
            {
                PatternToken lToken    = GetCurrentToken();
                int          lInt      = GetTokenInteger();     // in case this is needed later
                char         lVariable = GetTokenVariable();    // in case this is needed later

                NextToken();

                if (lToken == PatternToken.COMMA)
                {
                    continue;
                }

                if (lToken == PatternToken.CLOSE_PARA)
                {
                    break;
                }

                if (lToken == PatternToken.INTEGER)
                {
                    lPatternFunctionParameters.Add(lInt);
                }
                else if (lToken == PatternToken.VARIABLE)
                {
                    Coordinate lCoordinate = OriginPoint + (Pattern.GetLetterLocation(lVariable) - Pattern.Origin).Transform(Transform);

                    lPatternFunctionParameters.Add(Board.Coord.At(lCoordinate.X, lCoordinate.Y));
                }
                else
                {
                    lPatternFunctionParameters.Add(EvaulateExpression());
                }
            }

            // Call function
            return(lFunction(Board, Player, lPatternFunctionParameters));
        }
Exemple #11
0
        public PatternOperand(PatternToken token, string tokenString, int paramCount)
        {
            Token = token;
            Source = tokenString; // used for debugging

            if (token == PatternToken.INTEGER)
                Integer = Convert.ToInt32(tokenString);
            else if (token == PatternToken.VARIABLE)
                Variable = tokenString[0];
            else if (token == PatternToken.UNKNOWN)
                return;
            else if (token == PatternToken.FUNCTION)
            {
                Integer = paramCount;
                Function = PatternFunctions.GetFunction(tokenString, paramCount);
            }
        }
        private bool EvalulateCondition(PatternProcessingParameters parameters, PatternToken token)
        {
            if (token.Type == TokenType.TAG_BRANCH_CHANCE)
            {
                var chance = int.Parse(TrimTag(1, token.Value));

                return(_random.Next(100) < chance);
            }
            else if (token.Type == TokenType.TAG_BRANCH_CONTEXT)
            {
                return(parameters.Context.Contains(TrimTag(1, token.Value)));
            }
            else if (token.Type == TokenType.TAG_BRANCH_VARIABLE)
            {
                return(parameters.Variables.ContainsKey(TrimTag(1, token.Value)));
            }

            throw new PatternParseException("Unhandled condition type: " + token.Type);
        }
        static PatternToken GetToken(string token, PatternToken previousToken)
        {
            if (string.IsNullOrEmpty(token))
            {
                return(PatternToken.UNKNOWN);
            }

            TokenCharacterType lType = GetCharType(token[0]);

            if (lType == TokenCharacterType.UNKNOWN)
            {
                return(PatternToken.UNKNOWN);
            }

            if (lType == TokenCharacterType.WORD)
            {
                if (token.Length == 1)
                {
                    return(PatternToken.VARIABLE);                      // variables are one character only (at least in this language)
                }
                else
                {
                    return(PatternToken.FUNCTION);                      // functions are always more than on character (in this language)
                }
            }
            if (lType == TokenCharacterType.NUMBER)
            {
                return(PatternToken.INTEGER);
            }

            if ((lType == TokenCharacterType.STAR) && (previousToken == PatternToken.COMMA || previousToken == PatternToken.OPEN_PARA))
            {
                return(PatternToken.VARIABLE);
            }

            if (PatternTokens.Instance.ContainsKey(token))
            {
                return(PatternTokens.Instance[token]);
            }

            return(PatternToken.UNKNOWN);
        }
        public PatternOperand(PatternToken token, string tokenString, int paramCount)
        {
            Token  = token;
            Source = tokenString;             // used for debugging

            if (token == PatternToken.INTEGER)
            {
                Integer = Convert.ToInt32(tokenString);
            }
            else if (token == PatternToken.VARIABLE)
            {
                Variable = tokenString[0];
            }
            else if (token == PatternToken.UNKNOWN)
            {
                return;
            }
            else if (token == PatternToken.FUNCTION)
            {
                Integer  = paramCount;
                Function = PatternFunctions.GetFunction(tokenString, paramCount);
            }
        }
        static int GetParameterCount(string code, int position)
        {
            int lParamCnt = 0;
            int lLevel    = 0;

            int lPosition = position;

            // skip past the first open para.
            while (lPosition < code.Length)
            {
                string       lTokenString = ReadTokenString(code, ref lPosition);
                PatternToken lToken       = GetToken(lTokenString);

                if (lToken == PatternToken.OPEN_PARA)
                {
                    break;
                }
            }

            while (lPosition < code.Length)
            {
                string       lTokenString = ReadTokenString(code, ref lPosition);
                PatternToken lToken       = GetToken(lTokenString);

                if (lLevel == 0)
                {
                    if (lParamCnt == 0)
                    {
                        if ((lToken != PatternToken.UNKNOWN) && (lToken != PatternToken.CLOSE_PARA))
                        {
                            lParamCnt++;
                        }
                    }

                    if (lToken == PatternToken.COMMA)
                    {
                        lParamCnt++;
                    }
                    else
                    if (lToken == PatternToken.OPEN_PARA)
                    {
                        lLevel++;
                    }
                    else
                    if (lToken == PatternToken.CLOSE_PARA)
                    {
                        return(lParamCnt);
                    }
                }
                else
                if (lToken == PatternToken.OPEN_PARA)
                {
                    lLevel++;
                }
                else
                if (lToken == PatternToken.CLOSE_PARA)
                {
                    lLevel--;
                }
            }

            return(-1);                 // something went wrong
        }
 public PatternOperand(PatternToken token)
 {
     Token = token;
 }
Exemple #17
0
        protected bool SyntaxCheckExpression()
        {
            PatternToken lToken = GetCurrentToken();

            if (lToken == PatternToken.COMMA)
            {
                return(SetErrorMessage("Unexpected ',': " + CompileErrorLocation()));
            }

            if (lToken == PatternToken.CLOSE_PARA)
            {
                return(SetErrorMessage("Unexpected ')': " + CompileErrorLocation()));
            }

            if (lToken == PatternToken.FUNCTION)
            {
                if (!SyntaxCheckFunction())
                {
                    return(false);
                }
            }
            else if (lToken == PatternToken.OPEN_PARA)
            {
                NextToken();

                if (!SyntaxCheckExpression())
                {
                    return(false);
                }

                lToken = GetCurrentToken();

                if (lToken != PatternToken.CLOSE_PARA)
                {
                    return(SetErrorMessage("Expected ')': " + CompileErrorLocation()));
                }

                NextToken();
            }
            else if (lToken == PatternToken.INTEGER)             // || (lToken == PatternToken.REAL))
            {
                NextToken();
            }
            else
            {
                return(SetErrorMessage("Unexpected token: " + CompileErrorLocation()));
            }

            PatternToken lNextToken = GetCurrentToken();

            if ((lNextToken == PatternToken.EQUAL) ||
                (lNextToken == PatternToken.NOT_EQUAL) ||
                (lNextToken == PatternToken.GATHER_THAN) ||
                (lNextToken == PatternToken.LESS_THAN) ||
                (lNextToken == PatternToken.GATHER_THAN_OR_EQUAL) ||
                (lNextToken == PatternToken.LESS_THAN_OR_EQUAL) ||
                (lNextToken == PatternToken.AND) ||
                (lNextToken == PatternToken.MULTIPLY) ||
                (lNextToken == PatternToken.OR) ||
                (lNextToken == PatternToken.PLUS) ||
                (lNextToken == PatternToken.MINUS))
            {
                NextToken();
                return(SyntaxCheckExpression());
            }

            if ((lNextToken == PatternToken.END) || (lNextToken == PatternToken.CLOSE_PARA))
            {
                return(true);
            }

            return(SetErrorMessage("Expected: " + CompileErrorLocation()));
        }
Exemple #18
0
        protected int EvaulateExpression()
        {
            int lLeft  = TRUE;
            int lRight = TRUE;

            while (true)
            {
                PatternToken lLeftToken = GetCurrentToken();

                if (lLeftToken == PatternToken.OPEN_PARA)
                {
                    NextToken();
                    lLeft = EvaulateExpression();
                }
                else
                if (lLeftToken == PatternToken.INTEGER)
                {
                    lLeft = GetTokenInteger();
                    NextToken();
                }
                else if (lLeftToken == PatternToken.FUNCTION)
                {
                    lLeft = EvaulateFunction();
                }
                else
                {
                    return(0);                                  // ERROR!!!
                }

                PatternToken lOtoken = GetCurrentToken();
                NextToken();

                if ((lOtoken == PatternToken.CLOSE_PARA) || (lOtoken == PatternToken.END))
                {
                    return(lLeft);                      // immediate close (no comparison)
                }

                // short cut boolean evaluation
                if (((lOtoken == PatternToken.AND) && (lLeft == TRUE)) || ((lOtoken == PatternToken.OR) && (lLeft == FALSE)))
                {
                    int lPCnt = 1;

                    while (lPCnt > 0)
                    {
                        PatternToken lToken = GetCurrentToken();
                        NextToken();

                        if (lToken == PatternToken.CLOSE_PARA)
                        {
                            lPCnt--;
                        }
                        else if (lToken == PatternToken.OPEN_PARA)
                        {
                            lPCnt++;
                        }
                        else if (lToken == PatternToken.END)
                        {
                            break;
                        }
                    }

                    return(lLeft);
                }

                lRight = EvaulateExpression();

                switch (lOtoken)
                {
                case PatternToken.EQUAL: lLeft = (lLeft == lRight) ? TRUE : FALSE; break;

                case PatternToken.NOT_EQUAL: lLeft = (lLeft != lRight) ? TRUE : FALSE; break;

                case PatternToken.GATHER_THAN: lLeft = (lLeft > lRight) ? TRUE : FALSE; break;

                case PatternToken.LESS_THAN: lLeft = (lLeft < lRight) ? TRUE : FALSE; break;

                case PatternToken.GATHER_THAN_OR_EQUAL: lLeft = (lLeft >= lRight) ? TRUE : FALSE; break;

                case PatternToken.LESS_THAN_OR_EQUAL: lLeft = (lLeft <= lRight) ? TRUE : FALSE; break;

                case PatternToken.AND: lLeft = ((lLeft == TRUE) && (lRight == TRUE)) ? TRUE : FALSE; break;

                case PatternToken.OR: lLeft = ((lLeft == TRUE) || (lRight == TRUE)) ? TRUE : FALSE; break;

                case PatternToken.PLUS: lLeft = (lLeft + lRight); break;

                case PatternToken.MINUS: lLeft = (lLeft - lRight); break;

                case PatternToken.MULTIPLY: lLeft = (lLeft * lRight); break;

                default: return(FALSE);                        // ERROR!
                }

                return(lLeft);
            }
        }
        private StringBuilder ProcessSubPattern(StringBuilder resultBuilder,
                                                PatternProcessingParameters parameters, PatternToken token)
        {
            var namelistName = TrimTag(1, token.Value);
            var namelist     = _namelistSource.GetNamelist(namelistName);

            if (namelist == null)
            {
                throw new PatternParseException(string.Format("No namelist matching {0} found.",
                                                              namelistName));
            }

            var fragments = namelist.FragmentsForContext(parameters.Context);

            if (fragments.Count < 1)
            {
                throw new PatternParseException(string.Format(
                                                    "No fragments found for namelist: {0} and contexts: {1}",
                                                    namelistName,
                                                    string.Join(", ", parameters.Context.ToArray())));
            }

            var r = _random.Next(fragments.Count);

            var fragment = fragments[r];

            var subParams = new PatternProcessingParameters(fragment)
            {
                CapitalizationScheme = parameters.CapitalizationScheme,
                Context     = parameters.Context,
                UniqueCheck = parameters.UniqueCheck,
                Variables   = parameters.Variables
            };

            var result = Process(subParams);

            return(resultBuilder.Append(result));
        }
Exemple #20
0
        static PatternToken GetToken(string token, PatternToken previousToken)
        {
            if (string.IsNullOrEmpty(token))
                return PatternToken.UNKNOWN;

            TokenCharacterType lType = GetCharType(token[0]);

            if (lType == TokenCharacterType.UNKNOWN)
                return PatternToken.UNKNOWN;

            if (lType == TokenCharacterType.WORD)
                if (token.Length == 1)
                    return PatternToken.VARIABLE;	// variables are one character only (at least in this language)
                else
                    return PatternToken.FUNCTION;	// functions are always more than on character (in this language)

            if (lType == TokenCharacterType.NUMBER)
                return PatternToken.INTEGER;

            if ((lType == TokenCharacterType.STAR) && (previousToken == PatternToken.COMMA || previousToken == PatternToken.OPEN_PARA))
                return PatternToken.VARIABLE;

            if (PatternTokens.Instance.ContainsKey(token))
                return PatternTokens.Instance[token];

            return PatternToken.UNKNOWN;
        }
        private StringBuilder PerformSubstitution(StringBuilder resultBuilder,
                                                  PatternProcessingParameters parameters, PatternToken token)
        {
            if (token.Type == TokenType.TAG_SUB_FRAGMENT)
            {
                var namelistName = TrimTag(0, token.Value);
                var namelist     = _namelistSource.GetNamelist(namelistName);

                if (namelist == null)
                {
                    throw new PatternParseException(string.Format("No namelist matching {0} found.",
                                                                  namelistName));
                }

                var fragments = namelist.FragmentsForContext(parameters.Context);

                if (fragments.Count < 1)
                {
                    throw new PatternParseException(string.Format(
                                                        "No fragments found for namelist: {0} and contexts: {1}",
                                                        namelistName,
                                                        string.Join(", ", parameters.Context.ToArray())));
                }

                var r = _random.Next(fragments.Count);

                var fragment = fragments[r];

                if (parameters.CapitalizationScheme == CapitalizationScheme.BY_FRAGMENT)
                {
                    fragment = char.ToUpper(fragment[0]) + fragment.Substring(1);
                }

                return(resultBuilder.Append(fragment));
            }
            else if (token.Type == TokenType.TAG_SUB_VARIABLE)
            {
                var variableName = TrimTag(1, token.Value);

                if (!parameters.Variables.ContainsKey(variableName))
                {
                    throw new PatternParseException("Variable expected but not provided: " + variableName);
                }

                return(resultBuilder.Append(parameters.Variables[variableName]));
            }

            throw new PatternParseException("Unhandled substitution type: " + token.Type);
        }
Exemple #22
0
        protected string Source; // used for debugging

        #endregion Fields

        #region Constructors

        public PatternOperand()
        {
            Token = PatternToken.UNKNOWN;
        }
Exemple #23
0
 public PatternOperand(PatternToken token)
 {
     Token = token;
 }
Exemple #24
0
        void HandleSpecifier(PatternToken t)
        {
            string captureName;
            string re;
            string outputFieldName     = null;
            string outputFieldCode     = null;
            string outputFieldCodeType = null;

            switch (t.Value)
            {
            case "a":
            case "appdomain":
                captureName = "AppDomain";
                re          = @".*";
                break;

            case "c":
            case "logger":
                captureName = "Logger";
                re          = @"[\w\.]+";
                break;

            case "aspnet-cache":
            case "aspnet-context":
            case "aspnet-request":
            case "aspnet-session":
                var m = Regex.Match(t.Value, @"(\w+)-(\w+)");
                captureName =
                    CapitalizeFirstLetter(m.Groups[1].Value) +
                    CapitalizeFirstLetter(m.Groups[2].Value) +
                    CapitalizeFirstLetter(t.Argument);
                re = @".*";
                break;

            case "C":
            case "class":
            case "type":
                captureName = "Class";
                re          = @".*";                // * because caller location might not be accessible
                break;

            case "d":
            case "date":
            case "utcdate":
                captureName = "Time";
                string fmt;
                switch (t.Argument)
                {
                case "ABSOLUTE":
                    fmt = "HH:mm:ss,fff";
                    break;

                case "DATE":
                    fmt = "dd MMM yyyy HH:mm:ss,fff";
                    break;

                case "ISO8601":
                case "":
                    fmt = "yyyy-MM-dd HH:mm:ss,fff";
                    break;

                default:
                    fmt = t.Argument;
                    break;
                }
                re = GetDateRe(fmt);
                outputFieldName = "Time";
                outputFieldCode = string.Format("TO_DATETIME(Time, {0})", GetCSharpStringLiteral(fmt));
                break;

            case "newline":
            case "n":
                captureName = "NL";
                re          = @"\n|\r\n";
                break;

            case "exception":
                captureName = "Exception";
                re          = @".*";
                inHeader    = false;
                break;

            case "file":
            case "F":
                captureName = "File";
                // insert " with Format() because otherwise I would have to remove @ and escape the re heavily
                re = string.Format(@"[^\*\?\{0}\<\>\|]*", '"');                         // [...]* because caller location might not be accessible
                break;

            case "identity":
            case "u":
                captureName = "Identity";
                re          = @"[\w\\\.]*";
                break;

            case "location":
            case "l":
                captureName = "Location";
                re          = @".*";                // * because caller location might not be accessible
                break;

            case "line":
            case "L":
                captureName = "Line";
                re          = @"\d*";                // * because caller location might not be accessible
                break;

            case "p":
            case "level":
                captureName         = "Level";
                re                  = @"DEBUG|INFO|WARN|ERROR|FATAL";
                outputFieldName     = "Severity";
                outputFieldCode     = @"
switch (Level)
{
case ""WARN"":
	return Severity.Warning;
case ""ERROR"":
case ""FATAL"":
	return Severity.Error;
default:
	return Severity.Info;
}";
                outputFieldCodeType = "function";
                break;

            case "message":
            case "m":
                captureName = "Message";
                inHeader    = false;
                re          = ".*";
                break;

            case "method":
            case "M":
                captureName = "Method";
                re          = ".*";
                break;

            case "mdc":
            case "property":
            case "P":
            case "X":
            case "properties":
                captureName = "Prop";
                re          = ".*";
                break;

            case "r":
            case "timestamp":
                captureName = "Timestamp";
                re          = @"\d+";
                break;

            case "thread":
            case "t":
                captureName     = "Thread";
                re              = ".+";
                outputFieldName = "Thread";
                outputFieldCode = "Thread";
                break;

            case "username":
            case "w":
                captureName = "User";
                re          = @"[\w\\\.]+";
                break;

            case "x":
            case "ndc":
                captureName = "NDC";
                re          = @".+";
                break;

            case "stacktrace":
            case "stacktracedetail":
                captureName = "Stacktrace";
                re          = @".+";
                break;

            default:
                return;
            }

            captureName = RegisterCaptureName(captureName);

            StringBuilder reToAppend = inHeader ? headerRe : bodyRe;

            string paddingString = null;

            if (t.Padding != 0)
            {
                paddingString = string.Format(@"\ {{0,{0}}}", t.Padding);
            }

            if (paddingString != null && !t.RightPaddingFlag)
            {
                reToAppend.Append(paddingString);
            }

            reToAppend.AppendFormat("(?<{0}>{1})", captureName, re);

            if (paddingString != null && t.RightPaddingFlag)
            {
                reToAppend.Append(paddingString);
            }

            reToAppend.AppendFormat(" # field '{0}'{1}", t.Value, Environment.NewLine);

            if (outputFieldName != null)
            {
                OutputField f = GetOutputField(outputFieldName);

                // First, check if the code is empty yet.
                // The code may have already been initialized. That may happen if
                // there are several specifiers with the same name and that produce
                // an output field. We want to take in use only the first such specifier.
                if (f.Code.Length == 0)
                {
                    f.Code.Append(outputFieldCode);
                    f.CodeType = outputFieldCodeType;

                    // Time field souldn't go to the body because
                    // it can be displayed later in the log view (Show Time... in content menu)
                    if (outputFieldName == "Time")
                    {
                        return;
                    }
                }
            }
            if (captureName == "Message")
            {
                ConcatToBody(captureName);
            }
        }
        protected string Source;                // used for debugging

        public PatternOperand()
        {
            Token = PatternToken.UNKNOWN;
        }