add support for the color property

Signed-off-by: Florian Thienel <florian@thienel.org>
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/BoxFactory.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/BoxFactory.java
index 007a8f3..a52e25c 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/BoxFactory.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/BoxFactory.java
@@ -130,17 +130,19 @@
 		return inlineContainer;
 	}
 
-	public static TextContent textContent(final IContent content, final ContentRange range, final FontSpec font) {
+	public static TextContent textContent(final IContent content, final ContentRange range, final FontSpec font, final Color color) {
 		final TextContent textContent = new TextContent();
 		textContent.setContent(content, range);
 		textContent.setFont(font);
+		textContent.setColor(color);
 		return textContent;
 	}
 
-	public static StaticText staticText(final String text, final FontSpec font) {
+	public static StaticText staticText(final String text, final FontSpec font, final Color color) {
 		final StaticText staticText = new StaticText();
 		staticText.setText(text);
 		staticText.setFont(font);
+		staticText.setColor(color);
 		return staticText;
 	}
 
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/StaticText.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/StaticText.java
index d0984ce..0f5f0fe 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/StaticText.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/StaticText.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.vex.core.internal.boxes;
 
+import org.eclipse.vex.core.internal.core.Color;
 import org.eclipse.vex.core.internal.core.FontMetrics;
 import org.eclipse.vex.core.internal.core.FontResource;
 import org.eclipse.vex.core.internal.core.FontSpec;
@@ -30,6 +31,7 @@
 
 	private String text;
 	private FontSpec fontSpec;
+	private Color color;
 
 	private final CharSequenceSplitter splitter = new CharSequenceSplitter();
 
@@ -115,6 +117,15 @@
 		layoutValid = false;
 	}
 
+	public Color getColor() {
+		return color;
+	}
+
+	public void setColor(final Color color) {
+		this.color = color;
+		layoutValid = false;
+	}
+
 	@Override
 	public void accept(final IBoxVisitor visitor) {
 		visitor.visit(this);
@@ -155,6 +166,7 @@
 	@Override
 	public void paint(final Graphics graphics) {
 		applyFont(graphics);
+		graphics.setColor(graphics.getColor(color));
 		graphics.drawString(getText(), 0, 0);
 	}
 
@@ -171,6 +183,9 @@
 		if (!hasEqualFont((StaticText) other)) {
 			return false;
 		}
+		if (!hasEqualColor((StaticText) other)) {
+			return false;
+		}
 
 		return true;
 	}
@@ -186,6 +201,16 @@
 		return true;
 	}
 
+	private boolean hasEqualColor(final StaticText other) {
+		if (color != null && !color.equals(other.color)) {
+			return false;
+		}
+		if (color == null && other.color != null) {
+			return false;
+		}
+		return true;
+	}
+
 	@Override
 	public boolean join(final IInlineBox other) {
 		if (!canJoin(other)) {
@@ -225,6 +250,7 @@
 			tail.setText("");
 		}
 		tail.setFont(fontSpec);
+		tail.setColor(color);
 		tail.setParent(parent);
 		return tail;
 	}
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/TextContent.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/TextContent.java
index 9d900b2..d8bd501 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/TextContent.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/boxes/TextContent.java
@@ -38,6 +38,7 @@
 	private IPosition endPosition;
 
 	private FontSpec fontSpec;
+	private Color color;
 
 	private final CharSequenceSplitter splitter = new CharSequenceSplitter();
 
@@ -141,6 +142,15 @@
 		invalidateLayout();
 	}
 
+	public Color getColor() {
+		return color;
+	}
+
+	public void setColor(final Color color) {
+		this.color = color;
+		invalidateLayout();
+	}
+
 	@Override
 	public void accept(final IBoxVisitor visitor) {
 		visitor.visit(this);
@@ -181,6 +191,7 @@
 	@Override
 	public void paint(final Graphics graphics) {
 		applyFont(graphics);
+		graphics.setForeground(graphics.getColor(color));
 		graphics.drawString(getText(), 0, 0);
 	}
 
@@ -225,6 +236,9 @@
 		if (!hasEqualFont((TextContent) other)) {
 			return false;
 		}
+		if (!hasEqualColor((TextContent) other)) {
+			return false;
+		}
 
 		return true;
 	}
@@ -250,6 +264,16 @@
 		return true;
 	}
 
+	private boolean hasEqualColor(final TextContent other) {
+		if (color != null && !color.equals(other.color)) {
+			return false;
+		}
+		if (color == null && other.color != null) {
+			return false;
+		}
+		return true;
+	}
+
 	@Override
 	public boolean join(final IInlineBox other) {
 		if (!canJoin(other)) {
@@ -291,6 +315,7 @@
 		final TextContent tail = new TextContent();
 		tail.setContent(content, new ContentRange(splittingOffset, endPosition.getOffset()));
 		tail.setFont(fontSpec);
+		tail.setColor(color);
 		tail.setParent(parent);
 		return tail;
 	}
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/CssBoxFactory.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/CssBoxFactory.java
index 63ba386..4920774 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/CssBoxFactory.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/CssBoxFactory.java
@@ -53,6 +53,7 @@
 		final TextContent textContent = new TextContent();
 		textContent.setContent(content, range);
 		textContent.setFont(font(styles));
+		textContent.setColor(styles.getColor());
 		return textContent;
 	}
 
@@ -60,6 +61,7 @@
 		final StaticText staticText = new StaticText();
 		staticText.setText(text);
 		staticText.setFont(font(styles));
+		staticText.setColor(styles.getColor());
 		return staticText;
 	}
 
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/InlineElementVisualization.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/InlineElementVisualization.java
index cd7f8be..844b6d1 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/InlineElementVisualization.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/InlineElementVisualization.java
@@ -20,6 +20,7 @@
 import org.eclipse.vex.core.internal.boxes.InlineContainer;
 import org.eclipse.vex.core.internal.boxes.Margin;
 import org.eclipse.vex.core.internal.boxes.Padding;
+import org.eclipse.vex.core.internal.core.Color;
 import org.eclipse.vex.core.internal.core.FontSpec;
 import org.eclipse.vex.core.provisional.dom.IElement;
 
@@ -44,7 +45,7 @@
 		if (element.hasChildren()) {
 			visualizeChildrenInline(element.children(), container);
 		} else {
-			container.appendChild(staticText(" ", TIMES_NEW_ROMAN));
+			container.appendChild(staticText(" ", TIMES_NEW_ROMAN, Color.BLACK));
 		}
 		return container;
 	}
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/ParagraphVisualization.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/ParagraphVisualization.java
index d7e7292..e55c497 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/ParagraphVisualization.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/ParagraphVisualization.java
@@ -20,6 +20,7 @@
 import org.eclipse.vex.core.internal.boxes.Margin;
 import org.eclipse.vex.core.internal.boxes.Padding;
 import org.eclipse.vex.core.internal.boxes.Paragraph;
+import org.eclipse.vex.core.internal.core.Color;
 import org.eclipse.vex.core.internal.core.FontSpec;
 import org.eclipse.vex.core.provisional.dom.IElement;
 
@@ -56,7 +57,7 @@
 
 	private Paragraph visualizeEmptyElement(final IElement element) {
 		final Paragraph paragraph = paragraph();
-		paragraph.appendChild(staticText(" ", TIMES_NEW_ROMAN));
+		paragraph.appendChild(staticText(" ", TIMES_NEW_ROMAN, Color.BLACK));
 		return paragraph;
 	}
 }
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/TextVisualization.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/TextVisualization.java
index 6d846f5..2487556 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/TextVisualization.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/TextVisualization.java
@@ -13,6 +13,7 @@
 import static org.eclipse.vex.core.internal.boxes.BoxFactory.textContent;
 
 import org.eclipse.vex.core.internal.boxes.IInlineBox;
+import org.eclipse.vex.core.internal.core.Color;
 import org.eclipse.vex.core.internal.core.FontSpec;
 import org.eclipse.vex.core.provisional.dom.IText;
 
@@ -22,6 +23,6 @@
 
 	@Override
 	public IInlineBox visit(final IText text) {
-		return textContent(text.getContent(), text.getRange(), TIMES_NEW_ROMAN);
+		return textContent(text.getContent(), text.getRange(), TIMES_NEW_ROMAN, Color.BLACK);
 	}
 }