예제 #1
0
 public void SetUp()
 {
     parser = new RawTokenParser();
 }
예제 #2
0
        public Template Parse(string content, string name)
        {
            log.Debug("Start: Parsing Template");

            var template = new Template(name, content);

            var rawTemplate = new RawTokenParser().Parse(content, Options);

            template.Options = rawTemplate.Options;

            foreach (var rawToken in rawTemplate.Tokens)
            {
                var token = new Token();

                if (Options.TrimLeadingWhitespaceInTokenPreamble)
                {
                    if (rawToken.Preamble.IsOnlySpaces())
                    {
                        token.Preamble = rawToken.Preamble;
                    }
                    if (string.IsNullOrWhiteSpace(rawToken.Preamble))
                    {
                        token.Preamble = rawToken.Preamble.TrimLeadingSpaces();
                    }
                    else
                    {
                        token.Preamble = rawToken.Preamble.TrimStart();
                    }
                }
                else
                {
                    token.Preamble = rawToken.Preamble;
                }

                token.Name               = rawToken.Name;
                token.Optional           = rawToken.Optional;
                token.Repeating          = rawToken.Repeating;
                token.TerminateOnNewLine = rawToken.TerminateOnNewline;

                // All tokens optional if out-of-order enabled
                if (template.Options.OutOfOrderTokens)
                {
                    token.Optional = true;
                }

                var tokenTransformers = new List <TransformerContext>();
                var tokenValidators   = new List <ValidatorContext>();

                ParseTokenOperators(rawToken.Decorators, tokenTransformers, tokenValidators);

                foreach (var tokenOperator in tokenTransformers)
                {
                    token.Transformers.Add(tokenOperator);
                }

                foreach (var tokenValidator in tokenValidators)
                {
                    token.Validators.Add(tokenValidator);
                }

                template.AddToken(token);

                log.Trace($"  -> Added Token: {token.Name}");
            }

            log.Debug("Finish: Parsing Template");

            return(template);
        }