Quellcode durchsuchen

Bugzilla #38453:

Bugfix: Text-decoration was not promoted if no text-decoration attribute was specified on a nested element.
Nice side-effect: more efficient evaluation of text-decoration.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@374425 13f79535-47bb-0310-9956-ffa450edef68
tags/fop-0_92-beta
Jeremias Maerki vor 18 Jahren
Ursprung
Commit
8bdee8d2d9

+ 54
- 51
src/java/org/apache/fop/fo/properties/CommonTextDecoration.java Datei anzeigen

@@ -1,5 +1,5 @@
/*
* Copyright 2005 The Apache Software Foundation.
* Copyright 2005-2006 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -68,60 +68,63 @@ public class CommonTextDecoration {
deco = calcTextDecoration(parentList);
}
//For rules, see XSL 1.0, chapters 5.5.6 and 7.16.4
List list = pList.get(Constants.PR_TEXT_DECORATION).getList();
Iterator i = list.iterator();
while (i.hasNext()) {
Property prop = (Property)i.next();
int prop_enum = prop.getEnum();
if (prop_enum == Constants.EN_NONE) {
if (deco != null) {
deco.decoration = 0;
}
return deco;
} else if (prop_enum == Constants.EN_UNDERLINE) {
if (deco == null) {
deco = new CommonTextDecoration();
}
deco.decoration |= UNDERLINE;
deco.underColor = pList.get(Constants.PR_COLOR).getColorType();
} else if (prop_enum == Constants.EN_NO_UNDERLINE) {
if (deco != null) {
deco.decoration &= OVERLINE | LINE_THROUGH | BLINK;
Property textDecoProp = pList.getExplicit(Constants.PR_TEXT_DECORATION);
if (textDecoProp != null) {
List list = textDecoProp.getList();
Iterator i = list.iterator();
while (i.hasNext()) {
Property prop = (Property)i.next();
int propEnum = prop.getEnum();
if (propEnum == Constants.EN_NONE) {
if (deco != null) {
deco.decoration = 0;
}
return deco;
} else if (propEnum == Constants.EN_UNDERLINE) {
if (deco == null) {
deco = new CommonTextDecoration();
}
deco.decoration |= UNDERLINE;
deco.underColor = pList.get(Constants.PR_COLOR).getColorType();
}
} else if (prop_enum == Constants.EN_OVERLINE) {
if (deco == null) {
deco = new CommonTextDecoration();
}
deco.decoration |= OVERLINE;
deco.overColor = pList.get(Constants.PR_COLOR).getColorType();
} else if (prop_enum == Constants.EN_NO_OVERLINE) {
if (deco != null) {
deco.decoration &= UNDERLINE | LINE_THROUGH | BLINK;
} else if (propEnum == Constants.EN_NO_UNDERLINE) {
if (deco != null) {
deco.decoration &= OVERLINE | LINE_THROUGH | BLINK;
deco.underColor = pList.get(Constants.PR_COLOR).getColorType();
}
} else if (propEnum == Constants.EN_OVERLINE) {
if (deco == null) {
deco = new CommonTextDecoration();
}
deco.decoration |= OVERLINE;
deco.overColor = pList.get(Constants.PR_COLOR).getColorType();
}
} else if (prop_enum == Constants.EN_LINE_THROUGH) {
if (deco == null) {
deco = new CommonTextDecoration();
}
deco.decoration |= LINE_THROUGH;
deco.throughColor = pList.get(Constants.PR_COLOR).getColorType();
} else if (prop_enum == Constants.EN_NO_LINE_THROUGH) {
if (deco != null) {
deco.decoration &= UNDERLINE | OVERLINE | BLINK;
} else if (propEnum == Constants.EN_NO_OVERLINE) {
if (deco != null) {
deco.decoration &= UNDERLINE | LINE_THROUGH | BLINK;
deco.overColor = pList.get(Constants.PR_COLOR).getColorType();
}
} else if (propEnum == Constants.EN_LINE_THROUGH) {
if (deco == null) {
deco = new CommonTextDecoration();
}
deco.decoration |= LINE_THROUGH;
deco.throughColor = pList.get(Constants.PR_COLOR).getColorType();
} else if (propEnum == Constants.EN_NO_LINE_THROUGH) {
if (deco != null) {
deco.decoration &= UNDERLINE | OVERLINE | BLINK;
deco.throughColor = pList.get(Constants.PR_COLOR).getColorType();
}
} else if (propEnum == Constants.EN_BLINK) {
if (deco == null) {
deco = new CommonTextDecoration();
}
deco.decoration |= BLINK;
} else if (propEnum == Constants.EN_NO_BLINK) {
if (deco != null) {
deco.decoration &= UNDERLINE | OVERLINE | LINE_THROUGH;
}
} else {
throw new PropertyException("Illegal value encountered: " + prop.getString());
}
} else if (prop_enum == Constants.EN_BLINK) {
if (deco == null) {
deco = new CommonTextDecoration();
}
deco.decoration |= BLINK;
} else if (prop_enum == Constants.EN_NO_BLINK) {
if (deco != null) {
deco.decoration &= UNDERLINE | OVERLINE | LINE_THROUGH;
}
} else {
throw new PropertyException("Illegal value encountered: " + prop.getString());
}
}
return deco;

+ 4
- 0
status.xml Datei anzeigen

@@ -27,6 +27,10 @@

<changes>
<release version="FOP Trunk">
<action context="Code" dev="JM" type="fix" fixes-bug="38453">
Bugfix: Text-decoration was not promoted if no text-decoration attribute was
specified on a nested element.
</action>
<action context="Code" dev="AD" type="add">
Added support for the from-table-column() function.
(Thanks to gerhard.oettl.at.oesoft.at for the inspiration.)

+ 6
- 1
test/layoutengine/standard-testcases/text-decoration_2.xml Datei anzeigen

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright 2005 The Apache Software Foundation
Copyright 2005-2006 The Apache Software Foundation

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -32,6 +32,7 @@
<fo:flow flow-name="xsl-region-body">
<!-- nested inlines -->
<fo:block>normal <fo:inline color="blue" text-decoration="underline">under <fo:inline color="red" font-size="14pt" text-decoration="line-through">through</fo:inline> <fo:inline text-decoration="none">none</fo:inline> under</fo:inline> normal</fo:block>
<fo:block color="blue" text-decoration="underline">Everything in this paragraph including this <fo:basic-link external-destination="http://xmlgraphics.apache.org/fop/">link</fo:basic-link> must be underlined.</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
@@ -84,5 +85,9 @@
<eval xpath="name(//flow/block[1]/lineArea/*[3])" expected="text"/>
<eval xpath="//flow/block[1]/lineArea/*[3]/@color" expected="#000000"/>
<true xpath="//flow/block[2]/lineArea/text[1]/@underline-score"/>
<true xpath="//flow/block[2]/lineArea/inlineparent/text[1]/@underline-score"/>
<true xpath="//flow/block[2]/lineArea/text[2]/@underline-score"/>
</checks>
</testcase>

Laden…
Abbrechen
Speichern