コード例 #1
0
 public void ResumeSpans(ParserContext context) {
     if (TransitionSpan != null) {
         context.OutputSpan(TransitionSpan);
     }
     if (InitialSpan != null) {
         context.ResumeSpan(InitialSpan);
     }
 }
コード例 #2
0
        public void ConstructorInitializesProperties()
        {
            // Arrange
            SeekableTextReader expectedBuffer = new SeekableTextReader(TextReader.Null);
            CSharpCodeParser expectedCodeParser = new CSharpCodeParser();
            HtmlMarkupParser expectedMarkupParser = new HtmlMarkupParser();

            // Act
            ParserContext context = new ParserContext(expectedBuffer, expectedCodeParser, expectedMarkupParser, expectedCodeParser);

            // Assert
            Assert.NotNull(context.Source);
            Assert.Same(expectedCodeParser, context.CodeParser);
            Assert.Same(expectedMarkupParser, context.MarkupParser);
            Assert.Same(expectedCodeParser, context.ActiveParser);
        }
コード例 #3
0
        public virtual void Parse(LookaheadTextReader input, ParserVisitor visitor) {
            // Setup the parser context
            ParserContext context = new ParserContext(input, CodeParser, MarkupParser, MarkupParser, visitor) {
                DesignTimeMode = DesignTimeMode
            };

            MarkupParser.Context = context;
            CodeParser.Context = context;

            // Execute the context
            try {
                MarkupParser.ParseDocument();
            }
            finally {
                context.OnComplete();
            }
        }
コード例 #4
0
        public void ConstructorInitializesProperties() {
            // Arrange
            LookaheadTextReader expectedBuffer = new BufferingTextReader(TextReader.Null);
            CSharpCodeParser expectedCodeParser = new CSharpCodeParser();
            HtmlMarkupParser expectedMarkupParser = new HtmlMarkupParser();
            ParserVisitor expectedListener = new Mock<ParserVisitor>().Object;

            // Act
            ParserContext context = new ParserContext(expectedBuffer, expectedCodeParser, expectedMarkupParser, expectedCodeParser, expectedListener);

            // Assert
            Assert.IsInstanceOfType(context.Source, typeof(BufferingTextReader));
            Assert.AreSame(expectedBuffer, context.Source);
            Assert.AreSame(expectedCodeParser, context.CodeParser);
            Assert.AreSame(expectedMarkupParser, context.MarkupParser);
            Assert.AreSame(expectedCodeParser, context.ActiveParser);
            Assert.AreSame(expectedListener, context.Visitor);
        }
        private static List<Span> ParseDocument(string documentContents, IList<RazorError> errors = null)
        {
            errors = errors ?? new List<RazorError>();
            var markupParser = new HtmlMarkupParser();
            var codeParser = new TestMvcCSharpRazorCodeParser();
            var context = new ParserContext(new SeekableTextReader(documentContents), codeParser, markupParser, markupParser);
            codeParser.Context = context;
            markupParser.Context = context;
            markupParser.ParseDocument();

            ParserResults results = context.CompleteParse();
            foreach (RazorError error in results.ParserErrors)
            {
                errors.Add(error);
            }
            return results.Document.Flatten().ToList();
        }
コード例 #6
0
        private ParserResults ParseCore(ITextDocument input)
        {
            // Setup the parser context
            ParserContext context = new ParserContext(input, CodeParser, MarkupParser, MarkupParser)
            {
                DesignTimeMode = DesignTimeMode
            };

            MarkupParser.Context = context;
            CodeParser.Context = context;

            // Execute the parse
            MarkupParser.ParseDocument();

            // Get the result
            ParserResults results = context.CompleteParse();

            // Rewrite whitespace if supported
            Block current = results.Document;
            foreach (ISyntaxTreeRewriter rewriter in Optimizers)
            {
                current = rewriter.Rewrite(current);
            }

            // Link the leaf nodes into a chain
            Span prev = null;
            foreach (Span node in current.Flatten())
            {
                node.Previous = prev;
                if (prev != null)
                {
                    prev.Next = node;
                }
                prev = node;
            }

            // Return the new result
            return new ParserResults(current, results.ParserErrors);
        }
コード例 #7
0
 private static List<Span> ParseDocument(string documentContents, List<RazorError> errors = null) {
     errors = errors ?? new List<RazorError>();
     var reader = new BufferingTextReader(new StringReader(documentContents));
     var markupParser = new HtmlMarkupParser();
     var parserConsumerMock = new Mock<ParserVisitor>();
     List<Span> spans = new List<Span>();
     parserConsumerMock.Setup(consumer => consumer.VisitSpan(It.IsAny<Span>())).Callback<Span>(span => spans.Add(span));
     parserConsumerMock.Setup(consumer => consumer.VisitError(It.IsAny<RazorError>())).Callback<RazorError>(error => errors.Add(error));
     var codeParser = new TestMvcVBRazorCodeParser();
     var context = new ParserContext(reader, codeParser, markupParser, markupParser, parserConsumerMock.Object);
     codeParser.Context = context;
     markupParser.Context = context;
     markupParser.ParseDocument();
     return spans;
 }
コード例 #8
0
 internal ModelSpan(ParserContext context, string modelTypeName)
     : this(context.CurrentSpanStart, context.ContentBuffer.ToString(), modelTypeName) {
 }
コード例 #9
0
 private ParserContext SetupTestRun(string document, Action<TextReader> positioningAction, ParserBase codeParser, MarkupParser markupParser, ParserBase activeParser, ParserVisitor listener) {
     ParserContext context = new ParserContext(new BufferingTextReader(new StringReader(document)), codeParser, markupParser, activeParser, listener);
     positioningAction(context.Source);
     context.ResetBuffers();
     return context;
 }
コード例 #10
0
		// Creates spans when the parsed document isn't available yet.
		void CreateSpans ()
		{
			using (SeekableTextReader source = new SeekableTextReader (doc.Text)) {
				var markupParser = new HtmlMarkupParser ();
				var codeParser = new MvcCSharpRazorCodeParser ();
				var context = new ParserContext (source, codeParser, markupParser, markupParser) { DesignTimeMode = true };
				codeParser.Context = context;
				markupParser.Context = context;

				context.ActiveParser.ParseDocument ();
				var results = context.CompleteParse ();
				currentSpans = results.Document.Flatten ().ToList ();
			}
		}
コード例 #11
0
ファイル: ParserBase.cs プロジェクト: jesshaw/ASP.NET-Mvc-3
 protected void AcceptLineWithBlockComments(ParserContext context, SpanFactory spanFactory) {
     // Read to the end of the line checking for plan9 block comments
     bool keepReading = true;
     while (keepReading) {
         if (CharUtils.IsNewLine(context.CurrentCharacter)) {
             context.AcceptNewLine();
             keepReading = false;
         }
         else if (!TryParseComment(spanFactory)) {
             context.AcceptCurrent();
         }
     }
 }
コード例 #12
0
        private ParserResults ParseCore(ITextDocument input)
        {
            // Setup the parser context
            ParserContext context = new ParserContext(input, CodeParser, MarkupParser, MarkupParser)
            {
                DesignTimeMode = DesignTimeMode
            };

            MarkupParser.Context = context;
            CodeParser.Context = context;

            // Execute the parse
            MarkupParser.ParseDocument();

            // Get the result
            ParserResults results = context.CompleteParse();

            // Rewrite whitespace if supported
            Block current = results.Document;
            foreach (ISyntaxTreeRewriter rewriter in Optimizers)
            {
                current = rewriter.Rewrite(current);
            }

            // Return the new result
            return new ParserResults(current, results.ParserErrors);
        }
コード例 #13
0
 private ParserContext SetupTestContext(string document, Action<TextReader> positioningAction, ParserBase codeParser, ParserBase markupParser, ParserBase activeParser)
 {
     ParserContext context = new ParserContext(new SeekableTextReader(new StringReader(document)), codeParser, markupParser, activeParser);
     positioningAction(context.Source);
     return context;
 }
コード例 #14
0
 protected virtual ImplicitExpressionSpan CreateImplicitExpressionSpan(ParserContext context, bool acceptTrailingDot, AcceptedCharacters accepted) {
     return ImplicitExpressionSpan.Create(context, TopLevelKeywords, acceptTrailingDot, accepted);
 }
コード例 #15
0
 protected virtual ImplicitExpressionSpan CreateImplicitExpressionSpan(ParserContext context, bool acceptTrailingDot, AcceptedCharacters accepted)
 {
     return(ImplicitExpressionSpan.Create(context, TopLevelKeywords, acceptTrailingDot, accepted));
 }
コード例 #16
0
 public static new ResourceSpan Create(ParserContext context, string modelTypeName)
 {
     return new ResourceSpan(context.CurrentSpanStart, context.ContentBuffer.ToString(), modelTypeName);
 }