public void Setup() { MyMultiLineDoc <string> myMultiLineDoc = new MyMultiLineDoc <string>(); string[] simpleDoc = new string[] { "A", "B", "CDE", "F" };// myMultiLineDoc.LoadLines(simpleDoc); heightTree = new HeightTree(myMultiLineDoc); heightTree.Rebuild(); int line_index = 1; foreach (string mytext in simpleDoc) { heightTree.SetLineHeight(line_index, 16); line_index++; } double ypos0 = heightTree.LineNumberToY(1); double ypos1 = heightTree.LineNumberToY(2); //document = new TextDocument(); //document.Text = "1\n2\n3\n4\n5\n6\n7\n8\n9\n10"; //heightTree = new HeightTree(document, 10); //foreach (DocumentLine line in document.Lines) //{ // heightTree.SetHeight(line, line.LineNumber); //} }
public void TestFoldYToLineNumber () { var editor = Create ("1\n2\n3\n4\n5\n6\n7"); HeightTree heightTree = new HeightTree (editor); heightTree.Rebuild (); heightTree.Fold (2, 2); for (int i = 1; i <= editor.LineCount; i++) { int j = i; if (j >= 2) { if (j <= 4) { j = 2; } else { j -= 2; } } int k; if (i >= 2 && i <= 4) { k = 2; } else { k = i; } Assert.AreEqual (k, heightTree.YToLineNumber ((j - 1) * editor.LineHeight)); } }
public void TestSetLineHeight() { var editor = new TextEditorData(); editor.Text = "1\n2\n3\n4\n5\n6\n7"; HeightTree heightTree = new HeightTree(editor); heightTree.Rebuild(); for (int i = 1; i <= editor.LineCount; i += 2) { heightTree.SetLineHeight(i, editor.LineHeight * 2); } double y = 0; for (int i = 1; i <= editor.LineCount; i++) { Assert.AreEqual(y, heightTree.LineNumberToY(i)); y += i % 2 == 0 ? editor.LineHeight : editor.LineHeight * 2; } y = 0; for (int i = 1; i <= editor.LineCount; i++) { Assert.AreEqual(i, heightTree.YToLineNumber(y)); y += i % 2 == 0 ? editor.LineHeight : editor.LineHeight * 2; } }
public void TestFoldLineNumberToYCase1() { var editor = new TextEditorData(); editor.Text = "1\n2\n3\n4\n5\n6\n7"; HeightTree heightTree = new HeightTree(editor); heightTree.Rebuild(); heightTree.Fold(2, 2); for (int i = 1; i <= editor.LineCount; i++) { int j = i; if (j >= 2) { if (j <= 4) { j = 2; } else { j -= 2; } } Assert.AreEqual((j - 1) * editor.LineHeight, heightTree.LineNumberToY(i)); } }
public void TestCoordinatesAfterFolding () { var editor = new TextEditorData (); for (int i = 0; i < 100; i++) editor.Insert (0, "line\n"); HeightTree heightTree = new HeightTree (editor); heightTree.Rebuild (); heightTree.Fold (1, 2); heightTree.Fold (6, 4); heightTree.Fold (5, 10); var f = heightTree.Fold (20, 8); heightTree.Unfold (f, 20, 8); heightTree.Fold (20, 4); heightTree.Fold (25, 4); for (int i = 50; i <= editor.LineCount; i++) { var y = System.Math.Max (0, (i - 3 - 10 - 8) * editor.LineHeight); Assert.AreEqual (y, heightTree.LineNumberToY (i), "line:" + i + " --> y:" + y); Assert.AreEqual (i, heightTree.YToLineNumber (y), "y:" + y + " --> line:" + i); } for (int i = 50; i <= editor.LineCount; i++) { var y = System.Math.Max (0, (i - 3 - 10 - 8) * editor.LineHeight); Assert.AreEqual (y, heightTree.LineNumberToY (i), "line:" + i + " --> y:" + y); Assert.AreEqual (i, heightTree.YToLineNumber (y), "y:" + y + " --> line:" + i); } }
public TextLayer(TextView parent, TextDocument textDocument) : base(parent) { Document = textDocument; elementGenerators = new ObserveAddRemoveCollection <VisualLineElementGenerator>(ElementGenerator_Added, ElementGenerator_Removed); lineTransformers = new ObserveAddRemoveCollection <IVisualLineTransformer>(LineTransformer_Added, LineTransformer_Removed); heightTree = new HeightTree(textDocument, Skin.DefaultFont.Size); lines = new Dictionary <DocumentLine, VisualLine>(); GlobalTextRunProperties = new TextRunProperties { Foreground = Color.Black }; lineTransformers = new ObserveAddRemoveCollection <IVisualLineTransformer>(LineTransformer_Added, LineTransformer_Removed); HighlightingDefinition = HighlightingManager.DefaultHighlightingManager.Instance.GetDefinition("C#"); var colorizer = new HighlightingColorizer(highlightingDefinition.MainRuleSet); lineTransformers.Add(colorizer); weakLineTracker = WeakLineTracker.Register(textDocument, this); RebuildDocument(); }
public void TestLineNumberToYWithFolds() { var editor = new TextEditorData(); editor.Text = "1\n2\n3\n4\n5\n6\n7\n8\n9\n0"; //123 //4 //5[678]90 HeightTree heightTree = new HeightTree(editor); heightTree.Rebuild(); heightTree.Fold(1, 2); heightTree.Fold(6, 3); heightTree.Fold(5, 5); Assert.AreEqual(0 * editor.LineHeight, heightTree.LineNumberToY(1)); Assert.AreEqual(0 * editor.LineHeight, heightTree.LineNumberToY(2)); Assert.AreEqual(0 * editor.LineHeight, heightTree.LineNumberToY(3)); Assert.AreEqual(1 * editor.LineHeight, heightTree.LineNumberToY(4)); for (int i = 5; i <= 10; i++) { Assert.AreEqual(2 * editor.LineHeight, heightTree.LineNumberToY(i)); } }
public void TestSimpleYToLineNumber () { var editor = Create ("1\n2\n3\n4\n5\n6\n7"); HeightTree heightTree = new HeightTree (editor); heightTree.Rebuild (); for (int i = 1; i <= editor.LineCount; i++) { Assert.AreEqual (i, heightTree.YToLineNumber ((i - 1) * editor.LineHeight)); } }
public void TestBug4839 () { var editor = Create ("1\n2\n3\n4\n5\n6\n7"); editor.Caret.Offset = editor.Text.Length; var heightTree = new HeightTree (editor); heightTree.Rebuild (); MiscActions.InsertNewLine (editor); Assert.AreEqual ((editor.LineCount - 1) * editor.LineHeight, heightTree.LineNumberToY (editor.LineCount)); }
public void Setup() { document = new TextDocument(); document.Text = "1\n2\n3\n4\n5\n6\n7\n8\n9\n10"; heightTree = new HeightTree(document, 10); foreach (DocumentLine line in document.Lines) { heightTree.SetHeight(line, line.LineNumber); } }
public void TestSimpleLineNumberToY () { var editor = new TextEditorData (); editor.Text = "1\n2\n3\n4\n5\n6\n7"; HeightTree heightTree = new HeightTree (editor); heightTree.Rebuild (); for (int i = 1; i <= editor.LineCount; i++) { Assert.AreEqual ((i - 1) * editor.LineHeight, heightTree.LineNumberToY (i)); } }
public void TestUnfold () { var editor = Create ("1\n2\n3\n4\n5\n6\n7"); HeightTree heightTree = new HeightTree (editor); heightTree.Rebuild (); var f = heightTree.Fold (2, 2); heightTree.Unfold (f, 2, 2); for (int i = 1; i <= editor.LineCount; i++) { Assert.AreEqual ((i - 1) * editor.LineHeight, heightTree.LineNumberToY (i)); Assert.AreEqual (i, heightTree.YToLineNumber ((i - 1) * editor.LineHeight)); } }
public void TestSimpleLineNumberToY() { var editor = new TextEditorData(); editor.Text = "1\n2\n3\n4\n5\n6\n7"; HeightTree heightTree = new HeightTree(editor); heightTree.Rebuild(); for (int i = 1; i <= editor.LineCount; i++) { Assert.AreEqual((i - 1) * editor.LineHeight, heightTree.LineNumberToY(i)); } }
public void TestYToLineNumberWithFolds () { var editor = Create ("1\n2\n3\n4\n5\n6\n7\n8\n9\n0"); HeightTree heightTree = new HeightTree (editor); heightTree.Rebuild (); heightTree.Fold (1, 2); heightTree.Fold (6, 3); heightTree.Fold (5, 5); Assert.AreEqual (1, heightTree.YToLineNumber (0 * editor.LineHeight)); Assert.AreEqual (4, heightTree.YToLineNumber (1 * editor.LineHeight)); Assert.AreEqual (5, heightTree.YToLineNumber (2 * editor.LineHeight)); }
public void TestFoldLineNumberToY () { var editor = Create ("1\n2\n3\n4\n5\n6\n7\n8"); HeightTree heightTree = new HeightTree (editor); heightTree.Rebuild (); heightTree.Fold (1, 3); Assert.AreEqual (0, heightTree.LineNumberToY (2)); Assert.AreEqual (0, heightTree.LineNumberToY (4)); Assert.AreEqual (1 * editor.LineHeight, heightTree.LineNumberToY (5)); Assert.AreEqual (2 * editor.LineHeight, heightTree.LineNumberToY (6)); Assert.AreEqual (3 * editor.LineHeight, heightTree.LineNumberToY (7)); }
internal static void CheckHeights(TextDocument document, HeightTree heightTree) { double[] heights = document.Lines.Select(l => heightTree.GetIsCollapsed(l) ? 0 : heightTree.GetHeight(l)).ToArray(); double[] visualPositions = new double[document.LineCount + 1]; for (int i = 0; i < heights.Length; i++) { visualPositions[i + 1] = visualPositions[i] + heights[i]; } foreach (DocumentLine ls in document.Lines) { Assert.AreEqual(visualPositions[ls.LineNumber - 1], heightTree.GetVisualPosition(ls)); } Assert.AreEqual(visualPositions[document.LineCount], heightTree.TotalHeight); }
public void TestFoldLineNumberToY() { var editor = new TextEditorData(); editor.Text = "1\n2\n3\n4\n5\n6\n7\n8"; HeightTree heightTree = new HeightTree(editor); heightTree.Rebuild(); heightTree.Fold(1, 3); for (int i = 1; i <= editor.LineCount; i++) { Console.WriteLine(i + ":" + heightTree.LineNumberToY(i)); } Assert.AreEqual(0, heightTree.LineNumberToY(2)); Assert.AreEqual(0, heightTree.LineNumberToY(4)); Assert.AreEqual(1 * editor.LineHeight, heightTree.LineNumberToY(5)); Assert.AreEqual(2 * editor.LineHeight, heightTree.LineNumberToY(6)); Assert.AreEqual(3 * editor.LineHeight, heightTree.LineNumberToY(7)); }
public void TestLineNumberToYWithFolds () { var editor = Create ("1\n2\n3\n4\n5\n6\n7\n8\n9\n0"); //123 //4 //5[678]90 HeightTree heightTree = new HeightTree (editor); heightTree.Rebuild (); heightTree.Fold (1, 2); heightTree.Fold (6, 3); heightTree.Fold (5, 5); Assert.AreEqual (0 * editor.LineHeight, heightTree.LineNumberToY (1)); Assert.AreEqual (0 * editor.LineHeight, heightTree.LineNumberToY (2)); Assert.AreEqual (0 * editor.LineHeight, heightTree.LineNumberToY (3)); Assert.AreEqual (1 * editor.LineHeight, heightTree.LineNumberToY (4)); for (int i = 5; i <= 10; i++) Assert.AreEqual (2 * editor.LineHeight, heightTree.LineNumberToY (i)); }
public void TestSetLineHeight () { var editor = new TextEditorData (); editor.Text = "1\n2\n3\n4\n5\n6\n7"; HeightTree heightTree = new HeightTree (editor); heightTree.Rebuild (); for (int i = 1; i <= editor.LineCount; i += 2) { heightTree.SetLineHeight (i, editor.LineHeight * 2); } double y = 0; for (int i = 1; i <= editor.LineCount; i++) { Assert.AreEqual (y, heightTree.LineNumberToY (i)); y += i % 2 == 0 ? editor.LineHeight : editor.LineHeight * 2; } y = 0; for (int i = 1; i <= editor.LineCount; i++) { Assert.AreEqual (i, heightTree.YToLineNumber (y)); y += i % 2 == 0 ? editor.LineHeight : editor.LineHeight * 2; } }
public void CollapsingTest() { char[] chars = { 'a', 'b', '\r', '\n' }; char[] buffer = new char[20]; HeightTree heightTree = new HeightTree(document, 10); List <CollapsedLineSection> collapsedSections = new List <CollapsedLineSection>(); for (int i = 0; i < 2500; i++) { // Console.WriteLine("Iteration " + i); // Console.WriteLine(heightTree.GetTreeAsString()); // foreach (CollapsedLineSection cs in collapsedSections) { // Console.WriteLine(cs); // } switch (rnd.Next(0, 10)) { case 0: case 1: case 2: case 3: case 4: case 5: int offset = rnd.Next(0, document.TextLength); int length = rnd.Next(0, document.TextLength - offset); int newTextLength = rnd.Next(0, 20); for (int j = 0; j < newTextLength; j++) { buffer[j] = chars[rnd.Next(0, chars.Length)]; } document.Replace(offset, length, new string(buffer, 0, newTextLength)); break; case 6: case 7: int startLine = rnd.Next(1, document.LineCount + 1); int endLine = rnd.Next(startLine, document.LineCount + 1); collapsedSections.Add(heightTree.CollapseText(document.GetLineByNumber(startLine), document.GetLineByNumber(endLine))); break; case 8: if (collapsedSections.Count > 0) { CollapsedLineSection cs = collapsedSections[rnd.Next(0, collapsedSections.Count)]; // unless the text section containing the CollapsedSection was deleted: if (cs.Start != null) { cs.Uncollapse(); } collapsedSections.Remove(cs); } break; case 9: foreach (DocumentLine ls in document.Lines) { heightTree.SetHeight(ls, ls.LineNumber); } break; } var treeSections = new HashSet <CollapsedLineSection>(heightTree.GetAllCollapsedSections()); int expectedCount = 0; foreach (CollapsedLineSection cs in collapsedSections) { if (cs.Start != null) { expectedCount++; Assert.IsTrue(treeSections.Contains(cs)); } } Assert.AreEqual(expectedCount, treeSections.Count); CheckLines(); HeightTests.CheckHeights(document, heightTree); } }
public void TestFoldLineNumberToYCase1 () { var editor = new TextEditorData (); editor.Text = "1\n2\n3\n4\n5\n6\n7"; HeightTree heightTree = new HeightTree (editor); heightTree.Rebuild (); heightTree.Fold (2, 2); for (int i = 1; i <= editor.LineCount; i++) { int j = i; if (j >= 2) { if (j <= 4) { j = 2; } else { j -= 2; } } Console.WriteLine ("i:" + i + "/" + j); Assert.AreEqual ((j - 1) * editor.LineHeight, heightTree.LineNumberToY (i)); } }
public void TestFoldLineNumberToY () { var editor = new TextEditorData (); editor.Text = "1\n2\n3\n4\n5\n6\n7\n8"; HeightTree heightTree = new HeightTree (editor); heightTree.Rebuild (); heightTree.Fold (1, 3); for (int i = 1; i <= editor.LineCount; i++) { Console.WriteLine (i + ":"+ heightTree.LineNumberToY (i)); } Assert.AreEqual (0, heightTree.LineNumberToY (2)); Assert.AreEqual (0, heightTree.LineNumberToY (4)); Assert.AreEqual (1 * editor.LineHeight, heightTree.LineNumberToY (5)); Assert.AreEqual (2 * editor.LineHeight, heightTree.LineNumberToY (6)); Assert.AreEqual (3 * editor.LineHeight, heightTree.LineNumberToY (7)); }
public void TestFoldYToLineNumber () { var editor = new TextEditorData (); editor.Text = "1\n2\n3\n4\n5\n6\n7"; HeightTree heightTree = new HeightTree (editor); heightTree.Rebuild (); heightTree.Fold (2, 2); for (int i = 1; i <= editor.LineCount; i++) { int j = i; if (j >= 2) { if (j <= 4) { j = 2; } else { j -= 2; } } int k; if (i >= 2 && i <= 4) { k = 2; } else { k = i; } Assert.AreEqual (k, heightTree.YToLineNumber ((j - 1) * editor.LineHeight)); } }
public void TestBug4839MultipleNewLines () { var editor = new TextEditorData (); editor.Text = "1\n2\n3\n4\n5\n6\n7"; editor.Caret.Offset = editor.Text.Length; var heightTree = new HeightTree (editor); heightTree.Rebuild (); MiscActions.InsertNewLine (editor); MiscActions.InsertNewLine (editor); Assert.AreEqual ((editor.LineCount - 1) * editor.LineHeight, heightTree.LineNumberToY (editor.LineCount)); }
public void TestUnfold () { var editor = new TextEditorData (); editor.Text = "1\n2\n3\n4\n5\n6\n7"; HeightTree heightTree = new HeightTree (editor); heightTree.Rebuild (); var f = heightTree.Fold (2, 2); heightTree.Unfold (f, 2, 2); for (int i = 1; i <= editor.LineCount; i++) { Assert.AreEqual ((i - 1) * editor.LineHeight, heightTree.LineNumberToY (i)); Assert.AreEqual (i, heightTree.YToLineNumber ((i - 1) * editor.LineHeight)); } }
public void TestFoldLineNumberToY () { var editor = new TextEditorData (); editor.Text = "1\n2\n3\n4\n5\n6\n7\n8"; HeightTree heightTree = new HeightTree (editor); heightTree.Rebuild (); heightTree.Fold (1, 3); Assert.AreEqual (0, heightTree.LineNumberToY (2)); Assert.AreEqual (0, heightTree.LineNumberToY (4)); Assert.AreEqual (1 * editor.LineHeight, heightTree.LineNumberToY (5)); Assert.AreEqual (2 * editor.LineHeight, heightTree.LineNumberToY (6)); Assert.AreEqual (3 * editor.LineHeight, heightTree.LineNumberToY (7)); }
public void TestFoldLineNumberToYCase1 () { var editor = Create ("1\n2\n3\n4\n5\n6\n7"); HeightTree heightTree = new HeightTree (editor); heightTree.Rebuild (); heightTree.Fold (2, 2); for (int i = 1; i <= editor.LineCount; i++) { int j = i; if (j >= 2) { if (j <= 4) { j = 2; } else { j -= 2; } } Assert.AreEqual ((j - 1) * editor.LineHeight, heightTree.LineNumberToY (i)); } }