private static int SplitAtColisions(IList <VNode> previousLayer, int j, VNode current, VNode previous)
        {
            var startCollides =
                current.Index > previous.Index &&
                current.Index < previous.Index + previous.Length;

            if (startCollides)
            {
                var partAfter = previous.SplitAt(current.Index);
                j++;
                previousLayer.Insert(j, partAfter);
                previous = partAfter;
            }

            var endsCollides =
                current.Index + current.Length > previous.Index &&
                current.Index + current.Length < previous.Index + previous.Length;

            if (endsCollides)
            {
                var partAfter = previous.SplitAt(current.Index + current.Length);
                j++;
                previousLayer.Insert(j, partAfter);
            }
            return(j);
        }
Beispiel #2
0
        public void SplitAt_SameEndIndexPostSplitTest()
        {
            var instance = new VNode("a", "", 18, 41);

            instance.VOffsets.Add(new VTextOffset {
                Index = 18, Delta = -41
            });
            var nextPart = instance.SplitAt(19);

            Assert.AreEqual("a", instance.Tag);
            Assert.AreEqual("", instance.Text);
            Assert.AreEqual(18, instance.Index);
            Assert.AreEqual(1, instance.Length);
            Assert.AreEqual(1, instance.VOffsets.Count);
            Assert.AreEqual(18, instance.VOffsets.Single().Index);
            Assert.AreEqual(-1, instance.VOffsets.Single().Delta);

            Assert.AreEqual("a", nextPart.Tag);
            Assert.AreEqual("", nextPart.Text);
            Assert.AreEqual(19, nextPart.Index);
            Assert.AreEqual(40, nextPart.Length);
            Assert.AreEqual(1, nextPart.VOffsets.Count);
            Assert.AreEqual(19, nextPart.VOffsets.Single().Index);
            Assert.AreEqual(-40, nextPart.VOffsets.Single().Delta);
        }
Beispiel #3
0
        public void SplitAt_NegativeVOffsetMiddleWithTextTest()
        {
            var instance = new VNode("a", "1234", 45, 31);

            instance.VOffsets.Add(new VTextOffset {
                Index = 45, Delta = 4
            });
            instance.VOffsets.Add(new VTextOffset {
                Index = 45, Delta = -31
            });
            var nextPart = instance.SplitAt(61);

            Assert.AreEqual("a", instance.Tag);
            Assert.AreEqual("1234", instance.Text);
            Assert.AreEqual(45, instance.Index);
            Assert.AreEqual(16, instance.Length);
            Assert.AreEqual(2, instance.VOffsets.Count);
            Assert.AreEqual(45, instance.VOffsets.First().Index);
            Assert.AreEqual(4, instance.VOffsets.First().Delta);
            Assert.AreEqual(45, instance.VOffsets.Last().Index);
            Assert.AreEqual(-16, instance.VOffsets.Last().Delta);

            Assert.AreEqual("a", nextPart.Tag);
            Assert.AreEqual("", nextPart.Text);
            Assert.AreEqual(61, nextPart.Index);
            Assert.AreEqual(15, nextPart.Length);
            Assert.AreEqual(1, nextPart.VOffsets.Count);
            Assert.AreEqual(61, nextPart.VOffsets.First().Index);
            Assert.AreEqual(-15, nextPart.VOffsets.First().Delta);
        }
Beispiel #4
0
        public void SplitAt_NegativeVOffsetMiddleTest()
        {
            var instance = new VNode("a", "", 0, 6);

            instance.VOffsets.Add(new VTextOffset {
                Index = 0, Delta = -6
            });
            var nextPart = instance.SplitAt(3);

            Assert.AreEqual("a", instance.Tag);
            Assert.AreEqual("", instance.Text);
            Assert.AreEqual(0, instance.Index);
            Assert.AreEqual(3, instance.Length);
            Assert.AreEqual(1, instance.VOffsets.Count);
            Assert.AreEqual(0, instance.VOffsets.Single().Index);
            Assert.AreEqual(-3, instance.VOffsets.Single().Delta);

            Assert.AreEqual("a", nextPart.Tag);
            Assert.AreEqual("", nextPart.Text);
            Assert.AreEqual(3, nextPart.Index);
            Assert.AreEqual(3, nextPart.Length);
            Assert.AreEqual(1, nextPart.VOffsets.Count);
            Assert.AreEqual(3, nextPart.VOffsets.Single().Index);
            Assert.AreEqual(-3, nextPart.VOffsets.Single().Delta);
        }
Beispiel #5
0
        public void SplitAt_PositiveVOffsetStartTest()
        {
            var instance = new VNode("a", "xx0123456789", 5, 10);

            instance.VOffsets.Add(new VTextOffset {
                Index = 5, Delta = 2
            });
            var nextPart = instance.SplitAt(10);

            Assert.AreEqual("a", instance.Tag);
            Assert.AreEqual("xx01234", instance.Text);
            Assert.AreEqual(5, instance.Index);
            Assert.AreEqual(5, instance.Length);
            Assert.AreEqual(1, instance.VOffsets.Count);

            Assert.AreEqual("a", nextPart.Tag);
            Assert.AreEqual("56789", nextPart.Text);
            Assert.AreEqual(10, nextPart.Index);
            Assert.AreEqual(5, nextPart.Length);
            Assert.AreEqual(0, nextPart.VOffsets.Count);
        }
Beispiel #6
0
        public void SplitAt_NegativeVOffsetEndTest()
        {
            var instance = new VNode("a", "0123456789", 5, 12);

            instance.VOffsets.Add(new VTextOffset {
                Index = 13, Delta = -2
            });
            var nextPart = instance.SplitAt(10);

            Assert.AreEqual("a", instance.Tag);
            Assert.AreEqual("01234", instance.Text);
            Assert.AreEqual(5, instance.Index);
            Assert.AreEqual(5, instance.Length);
            Assert.AreEqual(0, instance.VOffsets.Count);

            Assert.AreEqual("a", nextPart.Tag);
            Assert.AreEqual("56789", nextPart.Text);
            Assert.AreEqual(10, nextPart.Index);
            Assert.AreEqual(7, nextPart.Length);
            Assert.AreEqual(1, nextPart.VOffsets.Count);
        }
Beispiel #7
0
        public void SplitAt_NegativeVOffsetSecondEmptyTest()
        {
            var instance = new VNode("a", "01234", 0, 10);

            instance.VOffsets.Add(new VTextOffset {
                Index = 5, Delta = -5
            });
            var nextPart = instance.SplitAt(5);

            Assert.AreEqual("a", instance.Tag);
            Assert.AreEqual("01234", instance.Text);
            Assert.AreEqual(0, instance.Index);
            Assert.AreEqual(5, instance.Length);
            Assert.AreEqual(0, instance.VOffsets.Count);

            Assert.AreEqual("a", nextPart.Tag);
            Assert.AreEqual("", nextPart.Text);
            Assert.AreEqual(5, nextPart.Index);
            Assert.AreEqual(5, nextPart.Length);
            Assert.AreEqual(1, nextPart.VOffsets.Count);
        }
Beispiel #8
0
        public void SplitAt_Test()
        {
            var instance = new VNode("a", "0123456789", 5, 10);

            instance.SetAttribute("a", "1");
            instance.SetAttribute("b", "2");
            var nextPart = instance.SplitAt(10);

            Assert.AreEqual("a", instance.Tag);
            Assert.AreEqual("01234", instance.Text);
            Assert.AreEqual(5, instance.Index);
            Assert.AreEqual(5, instance.Length);
            Assert.AreEqual("1", instance.Attributes["a"]);
            Assert.AreEqual("2", instance.Attributes["b"]);

            Assert.AreEqual("a", nextPart.Tag);
            Assert.AreEqual("56789", nextPart.Text);
            Assert.AreEqual(10, nextPart.Index);
            Assert.AreEqual(5, nextPart.Length);
            Assert.AreEqual("1", nextPart.Attributes["a"]);
            Assert.AreEqual("2", nextPart.Attributes["b"]);
        }