Exemplo n.º 1
0
        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);
            //}
        }
Exemplo n.º 2
0
		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));
			}
		}
Exemplo n.º 3
0
        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;
            }
        }
Exemplo n.º 4
0
        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));
            }
        }
Exemplo n.º 5
0
		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);
			}
		}
Exemplo n.º 6
0
        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();
        }
Exemplo n.º 7
0
        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));
            }
        }
Exemplo n.º 8
0
		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));
			}
		}
Exemplo n.º 9
0
		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));
		}
Exemplo n.º 10
0
 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);
     }
 }
Exemplo n.º 11
0
		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));
			}
		}
Exemplo n.º 12
0
		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));
			}
		}
Exemplo n.º 13
0
        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));
            }
        }
Exemplo n.º 14
0
		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));
		}
Exemplo n.º 15
0
		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));
		}
Exemplo n.º 16
0
 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);
 }
Exemplo n.º 17
0
        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));
		}
Exemplo n.º 19
0
		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);
            }
        }
Exemplo n.º 21
0
		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));
			}
		}
Exemplo n.º 22
0
		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);
			}
		}
Exemplo n.º 23
0
		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));
		}
Exemplo n.º 24
0
		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));
			}
		}
Exemplo n.º 25
0
		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));
		}
Exemplo n.º 26
0
		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));
			}
		}
Exemplo n.º 27
0
		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));
			}
		}