do not include the text of intersecting children into childNodes(Range)

Signed-off-by: Florian Thienel <florian@thienel.org>
diff --git a/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/dom/ParentTest.java b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/dom/ParentTest.java
index 1477604..4aa272f 100644
--- a/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/dom/ParentTest.java
+++ b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/dom/ParentTest.java
@@ -442,6 +442,19 @@
 	}

 

 	@Test

+	public void shouldProvideChildNodesBeforeOffsetWithoutTextfragmentOfIntersectingChild() throws Exception {

+		final TestChild child1 = addTestChild();

+		final TestChild child2 = addTestChild();

+		final TestChild child3 = addTestChild();

+		content.insertText(child3.getEndOffset(), "Hello World");

+

+		final List<Node> childNodes12 = parent.getChildNodesBefore(child3.getStartOffset() + 5);

+		assertEquals(2, childNodes12.size());

+		assertSame(child1, childNodes12.get(0));

+		assertSame(child2, childNodes12.get(1));

+	}

+

+	@Test

 	public void shouldProvideChildNodesAfterOffset() throws Exception {

 		final TestChild child1 = addTestChild();

 		final TestChild child2 = addTestChild();

@@ -462,6 +475,19 @@
 	}

 

 	@Test

+	public void shouldProvideChildNodesAfterOffsetWithoutTextfragmentOfIntersectingChild() throws Exception {

+		final TestChild child1 = addTestChild();

+		content.insertText(child1.getEndOffset(), "Hello World");

+		final TestChild child2 = addTestChild();

+		final TestChild child3 = addTestChild();

+

+		final List<Node> childNodes23 = parent.getChildNodesAfter(child1.getEndOffset() - 5);

+		assertEquals(2, childNodes23.size());

+		assertSame(child2, childNodes23.get(0));

+		assertSame(child3, childNodes23.get(1));

+	}

+

+	@Test

 	public void shouldProvideInsertionIndexForOffset() throws Exception {

 		final TestChild child1 = addTestChild();

 		final TestChild child2 = addTestChild();

diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Parent.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Parent.java
index d7bd274..ecc0899 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Parent.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Parent.java
@@ -116,6 +116,12 @@
 				mergeTextIntoResult(textStart, child.getStartOffset(), result);

 				result.add(child);

 				textStart = child.getEndOffset() + 1;

+			} else if (trimmedRange.contains(child.getStartOffset())) {

+				mergeTextIntoResult(textStart, child.getStartOffset(), result);

+				textStart = child.getEndOffset() + 1;

+				break; // we can bail out here because we are behind the trimmed range now

+			} else if (trimmedRange.contains(child.getEndOffset())) {

+				textStart = child.getEndOffset() + 1;

 			}

 		}