コード例 #1
0
        public override ParsedDocument Parse(bool storeAst, string fileName, System.IO.TextReader content, Projects.Project project = null)
        {
            currentDocument = openDocuments.FirstOrDefault(d => d != null && d.FileName == fileName);
            // We need document and project to be loaded to correctly initialize Razor Host.
            this.project = project as DotNetProject;
            if (currentDocument == null && !TryAddDocument(fileName))
            {
                return(new RazorCSharpParsedDocument(fileName, new RazorCSharpPageInfo()));
            }

            this.aspProject = project as AspMvcProject;

            EnsureParserInitializedFor(fileName);

            var errors = new List <Error> ();

            using (var source = new SeekableTextReader(content)) {
                var textChange  = CreateTextChange(source);
                var parseResult = editorParser.CheckForStructureChanges(textChange);
                if (parseResult == PartialParseResult.Rejected)
                {
                    parseComplete.WaitOne();
                    if (!capturedArgs.GeneratorResults.Success)
                    {
                        GetRazorErrors(errors);
                    }
                }
            }

            ParseHtmlDocument(errors);
            CreateCSharpParsedDocument();
            ClearLastChange();

            RazorHostKind kind = RazorHostKind.WebPage;

            if (editorParser.Host is WebCodeRazorHost)
            {
                kind = RazorHostKind.WebCode;
            }
            else if (editorParser.Host is MonoDevelop.RazorGenerator.RazorHost)
            {
                kind = RazorHostKind.Template;
            }

            var pageInfo = new RazorCSharpPageInfo()
            {
                HtmlRoot         = htmlParsedDocument,
                GeneratorResults = capturedArgs.GeneratorResults,
                Spans            = editorParser.CurrentParseTree.Flatten(),
                CSharpParsedFile = parsedCodeFile,
                CSharpCode       = csharpCode,
                Errors           = errors,
                FoldingRegions   = GetFoldingRegions(),
                Comments         = comments,
                Compilation      = CreateCompilation(),
                HostKind         = kind,
            };

            return(new RazorCSharpParsedDocument(fileName, pageInfo));
        }
コード例 #2
0
		public RazorCSharpParsedDocument (string fileName, RazorCSharpPageInfo pageInfo) : base (fileName)
		{
			PageInfo = pageInfo;
			Flags |= ParsedDocumentFlags.NonSerializable;
			if (PageInfo.Errors != null)
				Add (PageInfo.Errors);
		}
コード例 #3
0
 public RazorCSharpParsedDocument(string fileName, RazorCSharpPageInfo pageInfo) : base(fileName)
 {
     PageInfo = pageInfo;
     Flags   |= ParsedDocumentFlags.NonSerializable;
     if (PageInfo.Errors != null)
     {
         Add(PageInfo.Errors);
     }
 }
コード例 #4
0
		public override ParsedDocument Parse (bool storeAst, string fileName, System.IO.TextReader content, Projects.Project project = null)
		{
			currentDocument = openDocuments.FirstOrDefault (d => d != null && d.FileName == fileName);
			// We need document and project to be loaded to correctly initialize Razor Host.
			this.project = project as DotNetProject;
			if (currentDocument == null && !TryAddDocument (fileName))
				return new RazorCSharpParsedDocument (fileName, new RazorCSharpPageInfo ());

			this.aspProject = project as AspMvcProject;

			EnsureParserInitializedFor (fileName);

			var errors = new List<Error> ();

			using (var source = new SeekableTextReader (content)) {
				var textChange = CreateTextChange (source);
				var parseResult = editorParser.CheckForStructureChanges (textChange);
				if (parseResult == PartialParseResult.Rejected) {
					parseComplete.WaitOne ();
					if (!capturedArgs.GeneratorResults.Success)
						GetRazorErrors (errors);
				}
			}

			ParseHtmlDocument (errors);
			CreateCSharpParsedDocument ();
			ClearLastChange ();

			RazorHostKind kind = RazorHostKind.WebPage;
			if (editorParser.Host is WebCodeRazorHost) {
				kind = RazorHostKind.WebCode;
			} else if (editorParser.Host is MonoDevelop.RazorGenerator.PreprocessedRazorHost) {
				kind = RazorHostKind.Template;
			}

			var pageInfo = new RazorCSharpPageInfo () {
				HtmlRoot = htmlParsedDocument,
				GeneratorResults = capturedArgs.GeneratorResults,
				Spans = editorParser.CurrentParseTree.Flatten (),
				CSharpParsedFile = parsedCodeFile,
				CSharpCode = csharpCode,
				Errors = errors,
				FoldingRegions = GetFoldingRegions (),
				Comments = comments,
				Compilation = CreateCompilation (),
				HostKind = kind,
			};

			return new RazorCSharpParsedDocument (fileName, pageInfo);
		}