introduce base class for simple inline boxes that just paint something

Signed-off-by: Florian Thienel <florian@thienel.org>
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/SimpleInlineBox.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/SimpleInlineBox.java
new file mode 100644
index 0000000..1e93a65
--- /dev/null
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/SimpleInlineBox.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Florian Thienel and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * 		Florian Thienel - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.vex.core.internal.boxes;
+
+import org.eclipse.vex.core.internal.core.Graphics;
+import org.eclipse.vex.core.internal.core.Rectangle;
+
+/**
+ * @author Florian Thienel
+ */
+public abstract class SimpleInlineBox extends BaseBox implements IInlineBox {
+
+	private IBox parent;
+	private int top;
+	private int left;
+
+	private LineWrappingRule lineWrappingAtStart = LineWrappingRule.ALLOWED;
+	private LineWrappingRule lineWrappingAtEnd = LineWrappingRule.ALLOWED;
+
+	@Override
+	public void setParent(final IBox parent) {
+		this.parent = parent;
+	}
+
+	@Override
+	public IBox getParent() {
+		return parent;
+	}
+
+	@Override
+	public int getAbsoluteTop() {
+		if (parent == null) {
+			return top;
+		}
+		return parent.getAbsoluteTop() + top;
+	}
+
+	@Override
+	public int getAbsoluteLeft() {
+		if (parent == null) {
+			return left;
+		}
+		return parent.getAbsoluteLeft() + left;
+	}
+
+	@Override
+	public int getTop() {
+		return top;
+	}
+
+	@Override
+	public int getLeft() {
+		return left;
+	}
+
+	@Override
+	public void setPosition(final int top, final int left) {
+		this.top = top;
+		this.left = left;
+	}
+
+	@Override
+	public Rectangle getBounds() {
+		return new Rectangle(left, top, getWidth(), getHeight());
+	}
+
+	@Override
+	public int getInvisibleGapAtStart(final Graphics graphics) {
+		return 0;
+	}
+
+	@Override
+	public int getInvisibleGapAtEnd(final Graphics graphics) {
+		return 0;
+	}
+
+	@Override
+	public LineWrappingRule getLineWrappingAtStart() {
+		return lineWrappingAtStart;
+	}
+
+	public void setLineWrappingAtStart(final LineWrappingRule wrappingRule) {
+		lineWrappingAtStart = wrappingRule;
+	}
+
+	@Override
+	public LineWrappingRule getLineWrappingAtEnd() {
+		return lineWrappingAtEnd;
+	}
+
+	public void setLineWrappingAtEnd(final LineWrappingRule wrappingRule) {
+		lineWrappingAtEnd = wrappingRule;
+	}
+
+	@Override
+	public boolean requiresSplitForLineWrapping() {
+		return lineWrappingAtStart == LineWrappingRule.REQUIRED || lineWrappingAtEnd == LineWrappingRule.REQUIRED;
+	}
+
+	@Override
+	public boolean canJoin(final IInlineBox other) {
+		return false;
+	}
+
+	@Override
+	public boolean join(final IInlineBox other) {
+		return false;
+	}
+
+	@Override
+	public boolean canSplit() {
+		return false;
+	}
+
+	@Override
+	public IInlineBox splitTail(final Graphics graphics, final int headWidth, final boolean force) {
+		throw new UnsupportedOperationException("Splitting is not supported for " + getClass().getName() + ".");
+	}
+}
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/Square.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/Square.java
index 99d75a2..812e093 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/Square.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/Square.java
@@ -13,63 +13,14 @@
 import org.eclipse.vex.core.internal.core.Color;
 import org.eclipse.vex.core.internal.core.ColorResource;
 import org.eclipse.vex.core.internal.core.Graphics;
-import org.eclipse.vex.core.internal.core.Rectangle;
 
 /**
  * @author Florian Thienel
  */
-public class Square extends BaseBox implements IInlineBox {
+public class Square extends SimpleInlineBox {
 
-	private IBox parent;
-	private int top;
-	private int left;
 	private int size;
 
-	private LineWrappingRule lineWrappingAtStart = LineWrappingRule.ALLOWED;
-	private LineWrappingRule lineWrappingAtEnd = LineWrappingRule.ALLOWED;
-
-	@Override
-	public void setParent(final IBox parent) {
-		this.parent = parent;
-	}
-
-	@Override
-	public IBox getParent() {
-		return parent;
-	}
-
-	@Override
-	public int getAbsoluteTop() {
-		if (parent == null) {
-			return top;
-		}
-		return parent.getAbsoluteTop() + top;
-	}
-
-	@Override
-	public int getAbsoluteLeft() {
-		if (parent == null) {
-			return left;
-		}
-		return parent.getAbsoluteLeft() + left;
-	}
-
-	@Override
-	public int getTop() {
-		return top;
-	}
-
-	@Override
-	public int getLeft() {
-		return left;
-	}
-
-	@Override
-	public void setPosition(final int top, final int left) {
-		this.top = top;
-		this.left = left;
-	}
-
 	@Override
 	public int getWidth() {
 		return size;
@@ -81,50 +32,12 @@
 	}
 
 	@Override
-	public Rectangle getBounds() {
-		return new Rectangle(left, top, size, size);
-	}
-
-	public void setSize(final int size) {
-		this.size = size;
-	}
-
-	@Override
 	public int getBaseline() {
 		return size;
 	}
 
-	@Override
-	public int getInvisibleGapAtStart(final Graphics graphics) {
-		return 0;
-	}
-
-	@Override
-	public int getInvisibleGapAtEnd(final Graphics graphics) {
-		return 0;
-	}
-
-	@Override
-	public LineWrappingRule getLineWrappingAtStart() {
-		return lineWrappingAtStart;
-	}
-
-	public void setLineWrappingAtStart(final LineWrappingRule wrappingRule) {
-		lineWrappingAtStart = wrappingRule;
-	}
-
-	@Override
-	public LineWrappingRule getLineWrappingAtEnd() {
-		return lineWrappingAtEnd;
-	}
-
-	public void setLineWrappingAtEnd(final LineWrappingRule wrappingRule) {
-		lineWrappingAtEnd = wrappingRule;
-	}
-
-	@Override
-	public boolean requiresSplitForLineWrapping() {
-		return lineWrappingAtStart == LineWrappingRule.REQUIRED || lineWrappingAtEnd == LineWrappingRule.REQUIRED;
+	public void setSize(final int size) {
+		this.size = size;
 	}
 
 	@Override
@@ -155,24 +68,4 @@
 
 		graphics.fillRect(0, 0, size, size);
 	}
-
-	@Override
-	public boolean canJoin(final IInlineBox other) {
-		return false;
-	}
-
-	@Override
-	public boolean join(final IInlineBox other) {
-		return false;
-	}
-
-	@Override
-	public boolean canSplit() {
-		return false;
-	}
-
-	@Override
-	public IInlineBox splitTail(final Graphics graphics, final int headWidth, final boolean force) {
-		throw new UnsupportedOperationException("Splitting is not supported for Square.");
-	}
 }