Text should know its Parent

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 40e5837..cde2f74 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
@@ -179,6 +179,12 @@
 		assertEquals("Wo", childNodes.get(2).getText());

 	}

 

+	@Test

+	public void shouldSetParentOnTextNodes() throws Exception {

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

+		assertSame(parent, parent.getChildNodes().get(0).getParent());

+	}

+

 	private TestChild addTestChild() {

 		final int offset = parent.getEndOffset();

 		content.insertElementMarker(offset);

diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java
index 2c3b70a..2623b5d 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java
@@ -326,14 +326,14 @@
 		for (int i = 0; i < elements.size(); i++) {
 			final int start = elements.get(i).getStartOffset();
 			if (offset < start) {
-				nodes.add(new Text(content, offset, start));
+				nodes.add(new Text(null, content, offset, start));
 			}
 			nodes.add(elements.get(i));
 			offset = elements.get(i).getEndOffset() + 1;
 		}
 
 		if (offset < endOffset) {
-			nodes.add(new Text(content, offset, endOffset));
+			nodes.add(new Text(null, content, offset, endOffset));
 		}
 
 		return nodes;
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 73b34f4..69de4f0 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
@@ -50,7 +50,7 @@
 				final int childEnd = child.getEndOffset();

 				if (offset < childStart) {

 					final int textEnd = Math.min(childStart, rangeEnd);

-					result.add(new Text(getContent(), offset, textEnd));

+					result.add(new Text(this, getContent(), offset, textEnd));

 					offset = textEnd + 1;

 				}

 				if (childStart >= rangeStart && childStart <= rangeEnd && childEnd <= rangeEnd) {

@@ -65,7 +65,7 @@
 		}

 

 		if (offset < rangeEnd) {

-			result.add(new Text(getContent(), offset, rangeEnd));

+			result.add(new Text(this, getContent(), offset, rangeEnd));

 		}

 

 		return Collections.unmodifiableList(result);

diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Text.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Text.java
index 43dc8d2..e84e587 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Text.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Text.java
@@ -19,6 +19,8 @@
 	/**
 	 * Class constructor.
 	 * 
+	 * @param parent
+	 *            The parent node containing the text
 	 * @param content
 	 *            Content object containing the text
 	 * @param startOffset
@@ -26,7 +28,8 @@
 	 * @param endOffset
 	 *            character offset of the end of the run
 	 */
-	public Text(final Content content, final int startOffset, final int endOffset) {
+	public Text(final Parent parent, final Content content, final int startOffset, final int endOffset) {
+		setParent(parent);
 		associate(content, startOffset, endOffset);
 	}