use of org.eclipse.mylyn.wikitext.parser.css.CssRule in project mylyn.docs by eclipse.
the class CssParserTest method testDetectStyles.
public void testDetectStyles() {
String css = "a: b and more; c: d ; e: fg; h i: j";
String[] expectedRuleNames = new String[] { "a", "c", "e", "i" };
String[] expectedRuleValues = new String[] { "b and more", "d", "fg", "j" };
Iterator<CssRule> ruleIterator = parser.createRuleIterator(css);
int count = 0;
while (ruleIterator.hasNext()) {
CssRule rule = ruleIterator.next();
++count;
assertEquals(expectedRuleNames[count - 1], rule.name);
assertEquals(expectedRuleValues[count - 1], rule.value);
}
assertEquals(expectedRuleNames.length, count);
}
use of org.eclipse.mylyn.wikitext.parser.css.CssRule in project mylyn.docs by eclipse.
the class RepairBrokenCSSColorStylesProcessor method process.
@Override
public void process(Document document) {
Element body = document.body();
CssParser cssParser = new CssParser();
for (Element element : Selector.select("[style]", body)) {
// $NON-NLS-1$
// $NON-NLS-1$
String style = element.attr("style");
// $NON-NLS-1$
String newStyle = "";
List<CssRule> rules = null;
CssRule newRule = null;
if (style != null && style.length() > 0) {
rules = cssParser.parseBlockContent(style);
Iterator<CssRule> ruleIt = rules.iterator();
while (ruleIt.hasNext()) {
CssRule rule = ruleIt.next();
if ("color".equals(rule.name)) {
// $NON-NLS-1$
String color = rule.value;
// no 3- or 6-character CSS color names are written in hex characters
Matcher invalidHexColorMatcher = Pattern.compile(// $NON-NLS-1$
"^\\s*([0-9a-fA-F]{6}|[0-9a-fA-F]{3})(?:\\s+(.+))?\\s*$").matcher(color);
if (invalidHexColorMatcher.matches()) {
// $NON-NLS-1$
String newColor = "#" + invalidHexColorMatcher.group(1);
String additionalDeclarations = invalidHexColorMatcher.group(2);
if (additionalDeclarations != null) {
// $NON-NLS-1$
newColor += " " + additionalDeclarations;
}
ruleIt.remove();
// $NON-NLS-1$
newRule = new CssRule("color", newColor.trim(), 0, 0, 0, 0);
}
}
}
}
if (rules != null && newRule != null) {
newStyle = addRuleToStyle(newStyle, newRule);
for (CssRule rule : rules) {
newStyle = addRuleToStyle(newStyle, rule);
}
// $NON-NLS-1$
element.attr("style", newStyle);
}
}
}
use of org.eclipse.mylyn.wikitext.parser.css.CssRule in project mylyn.docs by eclipse.
the class DocBookDocumentBuilder method emitImage.
private void emitImage(Attributes attributes, String url, boolean inline) {
// see http://www.docbook.org/tdg/en/html/imagedata-x.html
ensureBlockElementsOpen();
// $NON-NLS-1$ //$NON-NLS-2$
writer.writeStartElement(inline ? "inlinemediaobject" : "mediaobject");
applyAttributes(attributes);
// $NON-NLS-1$
writer.writeStartElement("imageobject");
// $NON-NLS-1$
writer.writeEmptyElement("imagedata");
// $NON-NLS-1$
writer.writeAttribute("fileref", makeUrlAbsolute(url));
String cssStyle = attributes.getCssStyle();
if (cssStyle != null) {
String width = null;
String depth = null;
Iterator<CssRule> ruleIterator = new CssParser().createRuleIterator(cssStyle);
while (ruleIterator.hasNext()) {
CssRule rule = ruleIterator.next();
if ("width".equals(rule.name)) {
// $NON-NLS-1$
width = rule.value;
} else if ("height".equals(rule.name)) {
// $NON-NLS-1$
depth = rule.value;
}
}
if (width != null) {
Matcher matcher = PERCENTAGE.matcher(width);
if (matcher.matches()) {
// $NON-NLS-1$
writer.writeAttribute("scale", matcher.group(1));
} else {
// $NON-NLS-1$
writer.writeAttribute("width", width);
if (depth != null) {
// $NON-NLS-1$
writer.writeAttribute("depth", depth);
}
}
}
}
// imageobject
writer.writeEndElement();
// inlinemediaobject or mediaobject
writer.writeEndElement();
}
use of org.eclipse.mylyn.wikitext.parser.css.CssRule in project mylyn.docs by eclipse.
the class RemoveExcessiveStylesProcessor method process.
@Override
public void process(Document document) {
Element body = document.body();
CssParser cssParser = new CssParser();
for (Element element : Selector.select("[style], font, span", body)) {
// $NON-NLS-1$
// $NON-NLS-1$
String style = element.attr("style");
// $NON-NLS-1$
String newStyle = "";
List<CssRule> rules = null;
if (style != null && style.length() > 0) {
rules = cssParser.parseBlockContent(style);
Iterator<CssRule> ruleIt = rules.iterator();
while (ruleIt.hasNext()) {
CssRule rule = ruleIt.next();
if ("color".equals(rule.name)) {
// $NON-NLS-1$
if (!(rule.value.equalsIgnoreCase("black") || rule.value.equals("#010101"))) {
// $NON-NLS-1$//$NON-NLS-2$
continue;
}
} else if ("font-weight".equals(rule.name)) {
// $NON-NLS-1$
if (rule.value.equalsIgnoreCase("bold") || rule.value.equalsIgnoreCase("bolder")) {
// $NON-NLS-1$ //$NON-NLS-2$
continue;
}
} else if ("font-style".equals(rule.name)) {
// $NON-NLS-1$
if (rule.value.equalsIgnoreCase("bold") || rule.value.equalsIgnoreCase("italic")) {
// $NON-NLS-1$ //$NON-NLS-2$
continue;
}
} else if ("text-decoration".equals(rule.name)) {
// $NON-NLS-1$
if (rule.value.equalsIgnoreCase("underline") || rule.value.equalsIgnoreCase("line-through")) {
// $NON-NLS-1$ //$NON-NLS-2$
continue;
}
}
ruleIt.remove();
}
}
if ("font".equalsIgnoreCase(element.nodeName())) {
// $NON-NLS-1$
// $NON-NLS-1$
String color = element.attr("color");
if (color != null && color.trim().length() > 0) {
if (rules == null) {
rules = new ArrayList<CssRule>(1);
}
// $NON-NLS-1$
rules.add(new CssRule("color", color.trim(), 0, 0, 0, 0));
}
}
if (rules != null) {
for (CssRule rule : rules) {
// $NON-NLS-1$ //$NON-NLS-2$
newStyle += rule.name + ": " + rule.value + ";";
}
}
if (newStyle.length() > 0) {
if ("font".equalsIgnoreCase(element.nodeName())) {
// $NON-NLS-1$
// $NON-NLS-1$
Element spanElement = document.createElement("span");
for (Node child : new ArrayList<Node>(element.childNodes())) {
child.remove();
spanElement.appendChild(child);
}
element.before(spanElement);
element.remove();
element = spanElement;
}
// $NON-NLS-1$
element.attr("style", newStyle);
} else {
// $NON-NLS-1$
element.removeAttr("style");
if (// $NON-NLS-1$//$NON-NLS-2$
("span".equalsIgnoreCase(element.nodeName()) && (element.attr("class").trim().isEmpty())) || "font".equalsIgnoreCase(element.nodeName())) {
// $NON-NLS-1$
removeElementPreserveChildren(element);
}
}
}
}
use of org.eclipse.mylyn.wikitext.parser.css.CssRule in project mylyn.docs by eclipse.
the class XslfoDocumentBuilder method attributesFromCssStyles.
private Map<String, String> attributesFromCssStyles(String styles) {
if (styles == null) {
return Collections.emptyMap();
}
List<CssRule> rules = new CssParser().parseBlockContent(styles);
if (rules.isEmpty()) {
return Collections.emptyMap();
}
Map<String, String> mapping = new HashMap<String, String>();
for (CssRule rule : rules) {
if (CSS_RULE_VERTICAL_ALIGN.equals(rule.name)) {
String cssValue = rule.value;
if (cssValue.equals("super")) {
// $NON-NLS-1$
// $NON-NLS-1$ //$NON-NLS-2$
mapping.put("font-size", "75%");
// $NON-NLS-1$ //$NON-NLS-2$
mapping.put("baseline-shift", "super");
} else if (cssValue.equals("sub")) {
// $NON-NLS-1$
// $NON-NLS-1$ //$NON-NLS-2$
mapping.put("font-size", "75%");
// $NON-NLS-1$ //$NON-NLS-2$
mapping.put("baseline-shift", "sub");
} else if (cssValue.equals("top")) {
// $NON-NLS-1$
// $NON-NLS-1$ //$NON-NLS-2$
mapping.put("display-align", "before");
} else if (cssValue.equals("middle")) {
// $NON-NLS-1$
// $NON-NLS-1$ //$NON-NLS-2$
mapping.put("display-align", "center");
} else if (cssValue.equals("bottom")) {
// $NON-NLS-1$
// $NON-NLS-1$ //$NON-NLS-2$
mapping.put("display-align", "after");
}
} else if (//
CSS_RULE_TEXT_DECORATION.equals(rule.name) || //
CSS_RULE_FONT_FAMILY.equals(rule.name) || //
CSS_RULE_FONT_SIZE.equals(rule.name) || //
CSS_RULE_FONT_WEIGHT.equals(rule.name) || //
CSS_RULE_FONT_STYLE.equals(rule.name) || //
CSS_RULE_BACKGROUND_COLOR.equals(rule.name) || CSS_RULE_COLOR.equals(rule.name)) {
mapping.put(rule.name, rule.value);
} else if (CSS_RULE_BORDER_STYLE.equals(rule.name)) {
mapping.put(rule.name, rule.value);
} else if (CSS_RULE_BORDER_WIDTH.equals(rule.name)) {
mapping.put(rule.name, rule.value);
} else if (CSS_RULE_BORDER_COLOR.equals(rule.name)) {
mapping.put(rule.name, rule.value);
} else if (CSS_RULE_TEXT_ALIGN.equals(rule.name)) {
mapping.put(rule.name, rule.value);
}
}
return mapping;
}
Aggregations