public LocalDocumentInfo BuildLocalDocument (DocumentInfo info, TextEditorData data, string expressionText, string textAfterCaret, bool isExpression) { var sb = new StringBuilder (); WriteUsings (info.Imports, sb); WriteClassDeclaration (info, sb); sb.AppendLine ("{"); var result = new LocalDocumentInfo (); if (isExpression) { sb.AppendLine ("void Generated ()"); sb.AppendLine ("{"); //Console.WriteLine ("start:" + location.BeginLine +"/" +location.BeginColumn); foreach (var expression in info.Expressions) { if (expression.Location.BeginLine > data.Caret.Line || expression.Location.BeginLine == data.Caret.Line && expression.Location.BeginColumn > data.Caret.Column - 5) continue; //Console.WriteLine ("take xprt:" + expressions.Key.BeginLine +"/" +expressions.Key.BeginColumn); if (expression.IsExpression) sb.Append ("WriteLine ("); string expr = expression.Expression.Trim ('='); result.AddTextPosition (data.Document.LocationToOffset (expression.Location.BeginLine, expression.Location.BeginColumn), sb.Length, expr.Length); sb.Append (expr); if (expression.IsExpression) sb.Append (");"); } } sb.Append (expressionText); int caretPosition = sb.Length; sb.Append (textAfterCaret); sb.AppendLine (); sb.AppendLine ("}"); sb.AppendLine ("}"); result.LocalDocument = sb.ToString (); result.CaretPosition = caretPosition; result.OriginalCaretPosition = data.Caret.Offset; result.ParsedLocalDocument = Parse (info.Dom, info.AspNetDocument.FileName, sb.ToString ()); return result; }
public LocalDocumentInfo BuildLocalDocument (DocumentInfo info, TextEditorData data, string expressionText, string textAfterCaret, bool isExpression) { var sb = new StringBuilder (); WriteUsings (info.Imports, sb); WriteClassDeclaration (info, sb); sb.AppendLine ("{"); var result = new LocalDocumentInfo (); if (isExpression) { sb.AppendLine ("void Generated ()"); sb.AppendLine ("{"); //Console.WriteLine ("start:" + location.BeginLine +"/" +location.BeginColumn); foreach (var node in info.XExpressions) { bool isBlock = node is AspNetRenderBlock; if (node.Region.Begin.Line > data.Caret.Line || node.Region.Begin.Line == data.Caret.Line && node.Region.Begin.Column > data.Caret.Column - 5) continue; //Console.WriteLine ("take xprt:" + expressions.Key.BeginLine +"/" +expressions.Key.BeginColumn); var start = data.Document.LocationToOffset (node.Region.Begin.Line, node.Region.Begin.Column) + 2; var end = data.Document.LocationToOffset (node.Region.End.Line, node.Region.End.Column) - 2; if (!isBlock) { sb.Append ("WriteLine ("); start += 1; } string expr = data.GetTextBetween (start, end); result.AddTextPosition (start, end, expr.Length); sb.Append (expr); if (!isBlock) sb.Append (");"); } } sb.Append (expressionText); int caretPosition = sb.Length; sb.Append (textAfterCaret); sb.AppendLine (); sb.AppendLine ("}"); sb.AppendLine ("}"); result.LocalDocument = sb.ToString (); result.CaretPosition = caretPosition; result.OriginalCaretPosition = data.Caret.Offset; result.ParsedLocalDocument = Parse (info.AspNetDocument.FileName, sb.ToString ()); return result; }