public void ReparseFile() { System.Web.Razor.Text.ITextBuffer textBuffer = new ShimTextBufferAdapter(_viewBuffer.CurrentSnapshot); TextChange textChange = new TextChange(0, textBuffer.Length, textBuffer, 0, textBuffer.Length, textBuffer); CheckForStructureChanges(textChange); }
private int?GetDesiredIndentationHelper(ITextSnapshotLine line) { int?num = null; if (IsSmartIndentEnabled() && line.LineNumber > 0 && RazorCodeGenerator != null) { ITextSnapshotLine lineFromLineNumber = line.Snapshot.GetLineFromLineNumber(line.LineNumber - 1); Block document = RazorCodeGenerator.Document; System.Web.Razor.Text.ITextBuffer textBuffer = new ShimTextBufferAdapter(lineFromLineNumber.Snapshot); TextChange change = new TextChange(lineFromLineNumber.End, 0, textBuffer, lineFromLineNumber.End, 0, textBuffer); Stack <Block> stack = new Stack <Block>(); System.Web.Razor.Parser.SyntaxTree.Span span = LocateOwner(document, change, stack); if (span.Kind != SpanKind.Code) { SyntaxTreeNode syntaxTreeNode = span; while (stack.Count > 0 && !num.HasValue) { Block block = stack.Pop(); List <SyntaxTreeNode> list = new List <SyntaxTreeNode>(block.Children); for (int i = 0; i < list.Count; i++) { SyntaxTreeNode syntaxTreeNode2 = list[i]; if (!syntaxTreeNode2.IsBlock) { System.Web.Razor.Parser.SyntaxTree.Span span2 = syntaxTreeNode2 as System.Web.Razor.Parser.SyntaxTree.Span; if (span2.Kind == SpanKind.MetaCode) { ITextSnapshotLine lineFromLineNumber2 = line.Snapshot.GetLineFromLineNumber(span2.Start.LineIndex); int num2 = 0; if (i < list.Count - 1) { SyntaxTreeNode syntaxTreeNode3 = list[i + 1]; if (syntaxTreeNode3.IsBlock && (syntaxTreeNode3 as Block).Type == BlockType.Markup) { num2 = _textView.Options.GetOptionValue <int>(DefaultOptions.IndentSizeOptionId); } } num = new int?(GetIndentLevelOfLine(lineFromLineNumber2) + num2); } } if (syntaxTreeNode2 == syntaxTreeNode) { break; } } syntaxTreeNode = block; } } } if (BaseIndenter != null) { int?desiredIndentation = BaseIndenter.GetDesiredIndentation(line); if (desiredIndentation.HasValue && (!num.HasValue || desiredIndentation > num)) { num = desiredIndentation; } } return(num); }
private void TextBuffer_OnChanged(object sender, TextContentChangedEventArgs e) { if (_htmlDocument.IsMassiveChangeInProgress) { _bufferChangedWithinMassiveEdit = true; return; } if (e.Changes.Count > 0) { System.Web.Razor.Text.ITextBuffer newBuffer = new ShimTextBufferAdapter(e.After); System.Web.Razor.Text.ITextBuffer oldBuffer = new ShimTextBufferAdapter(e.Before); ITextChange textChange = e.Changes[0]; ITextChange expr_60 = e.Changes[e.Changes.Count - 1]; int oldLength = expr_60.OldEnd - textChange.OldPosition; int newLength = expr_60.NewEnd - textChange.NewPosition; TextChange textChange2 = new TextChange(textChange.OldPosition, oldLength, oldBuffer, textChange.NewPosition, newLength, newBuffer); CheckForStructureChanges(textChange2); } }
private int? GetDesiredIndentationHelper(ITextSnapshotLine line) { int? num = null; if (IsSmartIndentEnabled() && line.LineNumber > 0 && RazorCodeGenerator != null) { ITextSnapshotLine lineFromLineNumber = line.Snapshot.GetLineFromLineNumber(line.LineNumber - 1); Block document = RazorCodeGenerator.Document; System.Web.Razor.Text.ITextBuffer textBuffer = new ShimTextBufferAdapter(lineFromLineNumber.Snapshot); TextChange change = new TextChange(lineFromLineNumber.End, 0, textBuffer, lineFromLineNumber.End, 0, textBuffer); Stack<Block> stack = new Stack<Block>(); System.Web.Razor.Parser.SyntaxTree.Span span = LocateOwner(document, change, stack); if (span.Kind != SpanKind.Code) { SyntaxTreeNode syntaxTreeNode = span; while (stack.Count > 0 && !num.HasValue) { Block block = stack.Pop(); List<SyntaxTreeNode> list = new List<SyntaxTreeNode>(block.Children); for (int i = 0; i < list.Count; i++) { SyntaxTreeNode syntaxTreeNode2 = list[i]; if (!syntaxTreeNode2.IsBlock) { System.Web.Razor.Parser.SyntaxTree.Span span2 = syntaxTreeNode2 as System.Web.Razor.Parser.SyntaxTree.Span; if (span2.Kind == SpanKind.MetaCode) { ITextSnapshotLine lineFromLineNumber2 = line.Snapshot.GetLineFromLineNumber(span2.Start.LineIndex); int num2 = 0; if (i < list.Count - 1) { SyntaxTreeNode syntaxTreeNode3 = list[i + 1]; if (syntaxTreeNode3.IsBlock && (syntaxTreeNode3 as Block).Type == BlockType.Markup) { num2 = _textView.Options.GetOptionValue<int>(DefaultOptions.IndentSizeOptionId); } } num = new int?(GetIndentLevelOfLine(lineFromLineNumber2) + num2); } } if (syntaxTreeNode2 == syntaxTreeNode) { break; } } syntaxTreeNode = block; } } } if (BaseIndenter != null) { int? desiredIndentation = BaseIndenter.GetDesiredIndentation(line); if (desiredIndentation.HasValue && (!num.HasValue || desiredIndentation > num)) { num = desiredIndentation; } } return num; }