Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Thienel2016-01-21 16:54:01 +0000
committerFlorian Thienel2016-01-21 16:54:01 +0000
commit8d7e9b473724baf0c142f67753145220c2bc32a8 (patch)
treea7e471efc950b871f5f0c807dda5a9adac0f3716
parentbcbe88ad4caf86de5340d3236bd255e47e920b74 (diff)
downloadorg.eclipse.mylyn.docs.vex-8d7e9b473724baf0c142f67753145220c2bc32a8.tar.gz
org.eclipse.mylyn.docs.vex-8d7e9b473724baf0c142f67753145220c2bc32a8.tar.xz
org.eclipse.mylyn.docs.vex-8d7e9b473724baf0c142f67753145220c2bc32a8.zip
allow url(...) to be used in the content CSS property
Signed-off-by: Florian Thienel <florian@thienel.org>
-rw-r--r--org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/css/BatikBehaviorTest.java10
-rw-r--r--org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/css/CssTest.java4
-rw-r--r--org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/IPropertyContent.java16
-rw-r--r--org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/IPropertyContentVisitor.java19
-rw-r--r--org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/StyleSheet.java4
-rw-r--r--org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/Styles.java56
-rw-r--r--org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/TextualContent.java31
-rw-r--r--org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/URIContent.java32
-rw-r--r--org.eclipse.vex.core/src/org/eclipse/vex/core/internal/layout/LayoutUtils.java2
-rw-r--r--org.eclipse.vex.core/src/org/eclipse/vex/core/internal/visualization/CssBasedBoxModelBuilder.java5
10 files changed, 168 insertions, 11 deletions
diff --git a/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/css/BatikBehaviorTest.java b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/css/BatikBehaviorTest.java
index e3542dae..8760d402 100644
--- a/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/css/BatikBehaviorTest.java
+++ b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/css/BatikBehaviorTest.java
@@ -50,7 +50,7 @@ public class BatikBehaviorTest {
final Element element = new Element("plan");
final IElement before = styleSheet.getPseudoElementBefore(element);
final Styles beforeStyles = styleSheet.getStyles(before);
- assertEquals("test", beforeStyles.getContent(element).get(0));
+ assertEquals("test", beforeStyles.getTextualContent(element).get(0));
assertEquals(123.0f, beforeStyles.getFontSize(), 0.0f);
}
@@ -63,7 +63,7 @@ public class BatikBehaviorTest {
assertEquals(123.0f, styles.getFontSize(), 0.0f);
final IElement before = styleSheet.getPseudoElementBefore(element);
final Styles beforeStyles = styleSheet.getStyles(before);
- assertEquals("test", beforeStyles.getContent(element).get(0));
+ assertEquals("test", beforeStyles.getTextualContent(element).get(0));
assertEquals(123.0f, beforeStyles.getFontSize(), 0.0f);
}
@@ -76,9 +76,9 @@ public class BatikBehaviorTest {
final Element nochild = new Element("child");
child.setParent(element);
final Styles styles = styleSheet.getStyles(child);
- assertEquals(1, styles.getContent(element).size());
- assertEquals("child", styles.getContent(element).get(0));
+ assertEquals(1, styles.getTextualContent(element).size());
+ assertEquals("child", styles.getTextualContent(element).get(0));
final Styles nochildStyles = styleSheet.getStyles(nochild);
- assertEquals("nochild", nochildStyles.getContent(element).get(0));
+ assertEquals("nochild", nochildStyles.getTextualContent(element).get(0));
}
} \ No newline at end of file
diff --git a/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/css/CssTest.java b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/css/CssTest.java
index 33892320..a770e768 100644
--- a/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/css/CssTest.java
+++ b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/css/CssTest.java
@@ -579,9 +579,9 @@ public class CssTest {
final Styles styles = ss.getStyles(element);
- assertEquals("Before", styles.getContent(element).get(0));
+ assertEquals("Before", styles.getTextualContent(element).get(0));
element.setAttribute("attribute", "After");
- assertEquals("After", styles.getContent(element).get(0));
+ assertEquals("After", styles.getTextualContent(element).get(0));
}
@Test
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/IPropertyContent.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/IPropertyContent.java
new file mode 100644
index 00000000..2eb64415
--- /dev/null
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/IPropertyContent.java
@@ -0,0 +1,16 @@
+/*******************************************************************************
+ * Copyright (c) 2016 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.css;
+
+public interface IPropertyContent {
+
+ <T> T accept(IPropertyContentVisitor<T> visitor);
+}
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/IPropertyContentVisitor.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/IPropertyContentVisitor.java
new file mode 100644
index 00000000..0beaee18
--- /dev/null
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/IPropertyContentVisitor.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2016 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.css;
+
+public interface IPropertyContentVisitor<T> {
+
+ T visit(TextualContent content);
+
+ T visit(URIContent content);
+
+}
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/StyleSheet.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/StyleSheet.java
index 5e388d74..40fdbf39 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/StyleSheet.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/StyleSheet.java
@@ -263,6 +263,10 @@ public class StyleSheet {
// content: attr(attributeName)
content.add(lexicalUnit);
break;
+ case LexicalUnit.SAC_URI:
+ // content: url("<some URI of an image>")
+ content.add(lexicalUnit);
+ break;
}
lexicalUnit = lexicalUnit.getNextLexicalUnit();
}
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/Styles.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/Styles.java
index 4b2af16e..4213ed8c 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/Styles.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/Styles.java
@@ -13,6 +13,8 @@
*******************************************************************************/
package org.eclipse.vex.core.internal.css;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -22,6 +24,7 @@ import org.eclipse.vex.core.internal.core.Color;
import org.eclipse.vex.core.internal.core.FontSpec;
import org.eclipse.vex.core.internal.core.Length;
import org.eclipse.vex.core.provisional.dom.BaseNodeVisitor;
+import org.eclipse.vex.core.provisional.dom.BaseNodeVisitorWithResult;
import org.eclipse.vex.core.provisional.dom.IElement;
import org.eclipse.vex.core.provisional.dom.INode;
import org.eclipse.vex.core.provisional.dom.IProcessingInstruction;
@@ -168,7 +171,7 @@ public class Styles {
* @param node
* The INode to get attr(...) values from
*/
- public List<String> getContent(final INode node) {
+ public List<String> getTextualContent(final INode node) {
final List<String> content = new ArrayList<String>();
for (LexicalUnit lexicalUnit : contentLexicalUnits) {
switch (lexicalUnit.getLexicalUnitType()) {
@@ -202,6 +205,57 @@ public class Styles {
return content;
}
+ public List<IPropertyContent> getAllContent(final INode node) {
+ final List<IPropertyContent> allContent = new ArrayList<IPropertyContent>();
+ for (LexicalUnit lexicalUnit : contentLexicalUnits) {
+ final IPropertyContent content = getContent(lexicalUnit, node);
+ if (content != null) {
+ allContent.add(content);
+ }
+ lexicalUnit = lexicalUnit.getNextLexicalUnit();
+ }
+ return allContent;
+ }
+
+ private IPropertyContent getContent(final LexicalUnit lexicalUnit, final INode node) {
+ switch (lexicalUnit.getLexicalUnitType()) {
+ case LexicalUnit.SAC_STRING_VALUE:
+ // content: "A String"
+ return new TextualContent(lexicalUnit.getStringValue());
+ case LexicalUnit.SAC_ATTR:
+ // content: attr(attributeName)
+ final LexicalUnit currentLexicalUnit = lexicalUnit;
+ return node.accept(new BaseNodeVisitorWithResult<IPropertyContent>() {
+ @Override
+ public IPropertyContent visit(final IElement element) {
+ final String attributeValue = element.getAttributeValue(currentLexicalUnit.getStringValue());
+ if (attributeValue != null) {
+ return new TextualContent(attributeValue);
+ }
+ return null;
+ }
+
+ @Override
+ public IPropertyContent visit(final IProcessingInstruction pi) {
+ if (currentLexicalUnit.getStringValue().equalsIgnoreCase(CSS.PSEUDO_TARGET)) {
+ return new TextualContent(pi.getTarget());
+ }
+ return null;
+ }
+ });
+ case LexicalUnit.SAC_URI:
+ // content: url("<some URI of an image>")
+ try {
+ return new URIContent(new URI(lexicalUnit.getStringValue()));
+ } catch (final URISyntaxException e) {
+ e.printStackTrace();
+ return null;
+ }
+ default:
+ return null;
+ }
+ }
+
/**
* Returns the value of the <code>display</code> property.
*/
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/TextualContent.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/TextualContent.java
new file mode 100644
index 00000000..f2764eb5
--- /dev/null
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/TextualContent.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2016 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.css;
+
+public class TextualContent implements IPropertyContent {
+
+ public final String text;
+
+ public TextualContent(final String text) {
+ this.text = text;
+ }
+
+ @Override
+ public <T> T accept(final IPropertyContentVisitor<T> visitor) {
+ return visitor.visit(this);
+ }
+
+ @Override
+ public String toString() {
+ return text;
+ }
+
+}
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/URIContent.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/URIContent.java
new file mode 100644
index 00000000..4c06f2b8
--- /dev/null
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/css/URIContent.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2016 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.css;
+
+import java.net.URI;
+
+public class URIContent implements IPropertyContent {
+
+ public final URI uri;
+
+ public URIContent(final URI uri) {
+ this.uri = uri;
+ }
+
+ @Override
+ public <T> T accept(final IPropertyContentVisitor<T> visitor) {
+ return visitor.visit(this);
+ }
+
+ @Override
+ public String toString() {
+ return uri.toString();
+ }
+}
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/layout/LayoutUtils.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/layout/LayoutUtils.java
index 49a24dbc..dbe570d1 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/layout/LayoutUtils.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/layout/LayoutUtils.java
@@ -77,7 +77,7 @@ public class LayoutUtils {
* The node passed to Styles#getContent (to get attr values from)
*/
public static String getGeneratedContent(final LayoutContext context, final Styles styles, final INode node) {
- final List<String> content = styles.getContent(node);
+ final List<String> content = styles.getTextualContent(node);
final StringBuffer sb = new StringBuffer();
for (final String string : content) {
sb.append(string); // TODO: change to ContentPart
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 f23ec37d..0a0d1ea8 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
@@ -41,6 +41,7 @@ import org.eclipse.vex.core.internal.boxes.Paragraph;
import org.eclipse.vex.core.internal.boxes.RootBox;
import org.eclipse.vex.core.internal.boxes.TextContent;
import org.eclipse.vex.core.internal.css.CSS;
+import org.eclipse.vex.core.internal.css.IPropertyContent;
import org.eclipse.vex.core.internal.css.StyleSheet;
import org.eclipse.vex.core.internal.css.Styles;
import org.eclipse.vex.core.internal.css.Styles.PseudoElement;
@@ -287,7 +288,7 @@ public class CssBasedBoxModelBuilder implements IBoxModelBuilder {
}
final StringBuilder content = new StringBuilder();
- for (final String part : pseudoElementStyles.getContent(node)) {
+ for (final IPropertyContent part : pseudoElementStyles.getAllContent(node)) {
content.append(part);
}
return frame(paragraph(pseudoElementStyles, staticText(content.toString(), pseudoElementStyles)), pseudoElementStyles);
@@ -440,7 +441,7 @@ public class CssBasedBoxModelBuilder implements IBoxModelBuilder {
}
final StringBuilder content = new StringBuilder();
- for (final String part : pseudoElementStyles.getContent(node)) {
+ for (final IPropertyContent part : pseudoElementStyles.getAllContent(node)) {
content.append(part);
}
return frame(inlineContainer(staticText(content.toString(), pseudoElementStyles)), pseudoElementStyles);

Back to the top