do not allow to insert a comment within another comment

Signed-off-by: Florian Thienel <florian@thienel.org>
diff --git a/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/widget/L2SimpleEditingTest.java b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/widget/L2SimpleEditingTest.java
index 2e81b62..ee1455a 100644
--- a/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/widget/L2SimpleEditingTest.java
+++ b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/widget/L2SimpleEditingTest.java
@@ -255,4 +255,10 @@
 		assertFalse(comment.isAssociated());

 		assertNull(comment.getParent());

 	}

+

+	@Test

+	public void givenAComment_whenCaretInComment_shouldNotAllowToInsertAComment() throws Exception {

+		widget.insertComment();

+		assertFalse("can insert comment within comment", widget.canInsertComment());

+	}

 }

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 88f1e13..94d2055 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
@@ -251,7 +251,14 @@
 
 	public boolean canInsertComment(final int offset) {
 		// TODO Currently comments can only be inserted within the root element.
-		return offset > rootElement.getStartOffset() && offset <= rootElement.getEndOffset();
+		if (!(offset > rootElement.getStartOffset() && offset <= rootElement.getEndOffset())) {
+			return false;
+		}
+		final Node node = getNodeForInsertionAt(offset);
+		if (node instanceof Comment) {
+			return false;
+		}
+		return true;
 	}
 
 	public Comment insertComment(final int offset) {
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/IVexWidget.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/IVexWidget.java
index e960400..fdd50ea 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/IVexWidget.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/IVexWidget.java
@@ -65,6 +65,8 @@
 	 */
 	public void beginWork();
 
+	public boolean canInsertComment();
+
 	/**
 	 * Returns true if the clipboard has content that can be pasted. Used to enable/disable the paste action of a
 	 * containing application.
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/VexWidgetImpl.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/VexWidgetImpl.java
index f29f32b..ee27aa6 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/VexWidgetImpl.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/VexWidgetImpl.java
@@ -23,6 +23,7 @@
 import java.util.List;
 import java.util.Set;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.QualifiedName;
 import org.eclipse.vex.core.internal.core.Caret;
 import org.eclipse.vex.core.internal.core.Color;
@@ -193,6 +194,10 @@
 		beginWorkCount++;
 	}
 
+	public boolean canInsertComment() {
+		return getDocument().canInsertComment(getCaretOffset());
+	}
+
 	/**
 	 * Returns true if the given fragment can be inserted at the current caret position.
 	 * 
@@ -783,6 +788,8 @@
 	}
 
 	public Comment insertComment() throws DocumentValidationException {
+		Assert.isTrue(canInsertComment());
+
 		if (hasSelection()) {
 			deleteSelection();
 		}
diff --git a/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/AddCommentHandler.java b/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/AddCommentHandler.java
index 44cdc10..b2bb232 100644
--- a/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/AddCommentHandler.java
+++ b/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/AddCommentHandler.java
@@ -20,7 +20,9 @@
 

 	@Override

 	public void execute(final VexWidget widget) throws ExecutionException {

-		widget.insertComment();

+		if (widget.canInsertComment()) {

+			widget.insertComment();

+		}

 	}

 

 }

diff --git a/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/swt/VexWidget.java b/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/swt/VexWidget.java
index dad2363..be8951e 100644
--- a/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/swt/VexWidget.java
+++ b/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/swt/VexWidget.java
@@ -135,6 +135,10 @@
 		impl.beginWork();
 	}
 
+	public boolean canInsertComment() {
+		return impl.canInsertComment();
+	}
+
 	public boolean canPaste() {
 		// TODO Auto-generated method stub
 		return false;