public override ParsedDocument Parse (ProjectDom dom, string fileName, string fileContent) { using (var tr = new StringReader (fileContent)) { var info = new PageInfo (); var rootNode = new RootNode (); var errors = new List<Error> (); try { rootNode.Parse (fileName, tr); } catch (Exception ex) { LoggingService.LogError ("Unhandled error parsing ASP.NET document '" + (fileName ?? "") + "'", ex); errors.Add (new Error (ErrorType.Error, 0, 0, "Unhandled error parsing ASP.NET document: " + ex.Message)); } foreach (var pe in rootNode.ParseErrors) errors.Add (new Error (ErrorType.Error, pe.Location.BeginLine, pe.Location.BeginColumn, pe.Message)); info.Populate (rootNode, errors); var type = AspNetAppProject.DetermineWebSubtype (fileName); if (type != info.Subtype) { if (info.Subtype == WebSubtype.None) { errors.Add (new Error (ErrorType.Error, 1, 1, "File directive is missing")); } else { type = info.Subtype; errors.Add (new Error (ErrorType.Warning, 1, 1, "File directive does not match page extension")); } } var result = new AspNetParsedDocument (fileName, type, rootNode, info); result.Add (errors); /* if (MonoDevelop.Core.LoggingService.IsLevelEnabled (MonoDevelop.Core.Logging.LogLevel.Debug)) { DebugStringVisitor dbg = new DebugStringVisitor (); rootNode.AcceptVisit (dbg); System.Text.StringBuilder sb = new System.Text.StringBuilder (); sb.AppendLine ("Parsed AspNet file:"); sb.AppendLine (dbg.DebugString); if (errors.Count > 0) { sb.AppendLine ("Errors:"); foreach (ParserException ex in errors) sb.AppendLine (ex.ToString ()); } MonoDevelop.Core.LoggingService.LogDebug (sb.ToString ()); }*/ return result; } }
void CreateHtmlDocument () { var sb = new StringBuilder (); var spanList = new List<Span> (); comments = new List<Comment> (); Action<Span> action = (Span span) => { if (span.Kind == SpanKind.Markup) { sb.Append (span.Content); spanList.Add (span); } else { for (int i = 0; i < span.Content.Length; i++) { char ch = span.Content[i]; if (ch != '\r' && ch != '\n') sb.Append (' '); else sb.Append (ch); } if (span.Kind == SpanKind.Comment) { var comment = new Comment (span.Content) { OpenTag = "@*", ClosingTag = "*@", CommentType = CommentType.Block, }; comment.Region = new DomRegion ( currentDocument.OffsetToLocation (span.Start.AbsoluteIndex - comment.OpenTag.Length), currentDocument.OffsetToLocation (span.Start.AbsoluteIndex + span.Length + comment.ClosingTag.Length)); comments.Add (comment); } } }; editorParser.CurrentParseTree.Accept (new CallbackVisitor (action)); var root = new RootNode (); try { root.Parse (lastParsedFile, new StringReader (sb.ToString ())); } catch (Exception ex) { LoggingService.LogError ("Unhandled error parsing html in Razor document '" + (lastParsedFile ?? "") + "'", ex); } htmlParsedDocument = root; }