use NodeEndOffsetPlaceholder also for empty structural nodes

Signed-off-by: Florian Thienel <florian@thienel.org>
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/CssBasedBoxModelBuilder.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/CssBasedBoxModelBuilder.java
index ea52d49..f23ec37 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/CssBasedBoxModelBuilder.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/CssBasedBoxModelBuilder.java
@@ -199,8 +199,10 @@
 				final boolean containsInlineContent = containsInlineContent(childrenResults);
 
 				final IStructuralBox content;
-				if (isEmptyElement(element)) {
-					content = visualizeEmptyElement(styles, element);
+				if (isElementWithNoContentAllowed(element)) {
+					content = visualizeStructuralElementWithNoContentAllowed(styles, element);
+				} else if (element.isEmpty()) {
+					content = placeholderForEmptyNode(node, styles, paragraph(styles));
 				} else {
 					content = visualizeChildrenAsStructure(element, styles, childrenResults, verticalBlock());
 				}
@@ -240,7 +242,7 @@
 		});
 	}
 
-	private IStructuralBox visualizeEmptyElement(final Styles styles, final IElement element) {
+	private IStructuralBox visualizeStructuralElementWithNoContentAllowed(final Styles styles, final IElement element) {
 		return paragraph(styles, nodeTag(element, styles));
 	}
 
@@ -305,7 +307,7 @@
 		return validItems.contains(IValidator.PCDATA);
 	}
 
-	private static boolean isEmptyElement(final IElement element) {
+	private static boolean isElementWithNoContentAllowed(final IElement element) {
 		final Set<QualifiedName> validItems = element.getDocument().getValidator().getValidItems(element);
 		return validItems.isEmpty() && !element.hasChildren();
 	}
@@ -320,8 +322,8 @@
 		return node.accept(new BaseNodeVisitorWithResult<IInlineBox>() {
 			@Override
 			public IInlineBox visit(final IElement element) {
-				if (isEmptyElement(element)) {
-					return nodeReference(element, frame(visualizeEmptyElementInline(element, styles), styles));
+				if (isElementWithNoContentAllowed(element)) {
+					return nodeReference(element, frame(visualizeEmptyInlineElementWithNoContentAllowed(element, styles), styles));
 				}
 
 				final InlineContainer inlineElementContent = surroundWithInlineMarkers(element, styles,
@@ -383,7 +385,7 @@
 		}
 	}
 
-	private static IInlineBox visualizeEmptyElementInline(final INode node, final Styles styles) {
+	private static IInlineBox visualizeEmptyInlineElementWithNoContentAllowed(final INode node, final Styles styles) {
 		return nodeTag(node, styles);
 	}