예제 #1
0
        public static Token Parse(Token parent, Scope scope, PreprocessorToken insertToken)
        {
            var ret = new InsertToken(parent, scope);

            var scopeIndent = scope.Indent();
            var tokens = new List<Token>();
            tokens.Add(ret._startToken = new InsertBoundaryToken(ret, scope, insertToken.Span, true));

            while (true)
            {
                var token = scope.File.ParseToken(parent, scopeIndent);
                if (token == null) break;
                if (token.GetType() == typeof(PreprocessorToken) && token.Text == "#endinsert")
                {
                    tokens.Add(ret._endToken = new InsertBoundaryToken(ret, scope, token.Span, false));
                    break;
                }
                else tokens.Add(token);
            }

            ret._tokens = tokens.ToArray();
            ret.Span = new Span(ret._tokens.First().Span.Start, ret._tokens.Last().Span.End);
            return ret;
        }
예제 #2
0
 public InsertBoundaryToken(InsertToken parent, Scope scope, Span span, bool start)
     : base(parent, scope, span)
 {
     _start = start;
 }