int EN_SMALL_CAPTION = 184;
/** Enumeration constant -- font shorthand */
int EN_STATUS_BAR = 185;
+ /** Enumeration constant -- for page-position, XSL 1.1 */
+ int EN_ONLY = 186;
+ /** Enumeration constant -- for instream-foreign-object and external-graphic, XSL 1.1 */
+ int EN_SCALE_DOWN_TO_FIT = 187;
+ /** Enumeration constant -- for instream-foreign-object and external-graphic, XSL 1.1 */
+ int EN_SCALE_UP_TO_FIT = 188;
/** Number of enumeration constants defined */
- int ENUM_COUNT = 185;
+ int ENUM_COUNT = 188;
}
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.datatypes.LengthBase;
import org.apache.fop.fo.expr.PropertyException;
+import org.apache.fop.fo.flow.table.TableFObj.ColumnNumberPropertyMaker;
import org.apache.fop.fo.properties.BackgroundPositionShorthandParser;
import org.apache.fop.fo.properties.BorderSpacingShorthandParser;
import org.apache.fop.fo.properties.BorderWidthPropertyMaker;
import org.apache.fop.fo.properties.BoxPropShorthandParser;
import org.apache.fop.fo.properties.CharacterProperty;
import org.apache.fop.fo.properties.ColorProperty;
-import org.apache.fop.fo.flow.table.TableFObj.ColumnNumberPropertyMaker;
import org.apache.fop.fo.properties.CondLengthProperty;
import org.apache.fop.fo.properties.CorrespondingPropertyMaker;
import org.apache.fop.fo.properties.DimensionPropertyMaker;
l.setInherited(false);
l.addEnum("auto", getEnumProperty(EN_AUTO, "AUTO"));
l.addEnum("scale-to-fit", getEnumProperty(EN_SCALE_TO_FIT, "SCALE_TO_FIT"));
+ l.addEnum("scale-down-to-fit", getEnumProperty(EN_SCALE_DOWN_TO_FIT, "SCALE_DOWN_TO_FIT"));
+ l.addEnum("scale-up-to-fit", getEnumProperty(EN_SCALE_UP_TO_FIT, "SCALE_UP_TO_FIT"));
l.setDefault("auto");
l.setPercentBase(LengthBase.IMAGE_INTRINSIC_HEIGHT);
addPropertyMaker("content-height", l);
l.setInherited(false);
l.addEnum("auto", getEnumProperty(EN_AUTO, "AUTO"));
l.addEnum("scale-to-fit", getEnumProperty(EN_SCALE_TO_FIT, "SCALE_TO_FIT"));
+ l.addEnum("scale-down-to-fit", getEnumProperty(EN_SCALE_DOWN_TO_FIT, "SCALE_DOWN_TO_FIT"));
+ l.addEnum("scale-up-to-fit", getEnumProperty(EN_SCALE_UP_TO_FIT, "SCALE_UP_TO_FIT"));
l.setDefault("auto");
l.setPercentBase(LengthBase.IMAGE_INTRINSIC_WIDTH);
addPropertyMaker("content-width", l);
m.addEnum("last", getEnumProperty(EN_LAST, "LAST"));
m.addEnum("rest", getEnumProperty(EN_REST, "REST"));
m.addEnum("any", getEnumProperty(EN_ANY, "ANY"));
+ m.addEnum("only", getEnumProperty(EN_ONLY, "ONLY")); //XSL 1.1
m.setDefault("any");
addPropertyMaker("page-position", m);
int cheight = -1;
len = fobj.getContentWidth();
if (len.getEnum() != EN_AUTO) {
- if (len.getEnum() == EN_SCALE_TO_FIT) {
+ switch (len.getEnum()) {
+ case EN_SCALE_TO_FIT:
if (ipd != -1) {
cwidth = ipd;
}
- } else {
+ break;
+ case EN_SCALE_DOWN_TO_FIT:
+ if (ipd != -1 && fobj.getIntrinsicWidth() > ipd) {
+ cwidth = ipd;
+ }
+ break;
+ case EN_SCALE_UP_TO_FIT:
+ if (ipd != -1 && fobj.getIntrinsicWidth() < ipd) {
+ cwidth = ipd;
+ }
+ break;
+ default:
cwidth = len.getValue(this);
}
}
len = fobj.getContentHeight();
if (len.getEnum() != EN_AUTO) {
- if (len.getEnum() == EN_SCALE_TO_FIT) {
+ switch (len.getEnum()) {
+ case EN_SCALE_TO_FIT:
if (bpd != -1) {
cheight = bpd;
}
- } else {
+ break;
+ case EN_SCALE_DOWN_TO_FIT:
+ if (bpd != -1 && fobj.getIntrinsicHeight() > bpd) {
+ cheight = bpd;
+ }
+ break;
+ case EN_SCALE_UP_TO_FIT:
+ if (bpd != -1 && fobj.getIntrinsicHeight() < bpd) {
+ cheight = bpd;
+ }
+ break;
+ default:
cheight = len.getValue(this);
}
}
<changes>
<release version="FOP Trunk">
+ <action context="Code" dev="JM" type="add">
+ Added support for scale-down-to-fit and scale-up-to-fit (introduced in XSL 1.1).
+ </action>
<action context="Code" dev="VH" type="fix" fixes-bug="43633">
Bugfix: content of a row with zero height overriding the previous row
</action>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+ Licensed to the Apache Software Foundation (ASF) under one or more\r
+ contributor license agreements. See the NOTICE file distributed with\r
+ this work for additional information regarding copyright ownership.\r
+ The ASF licenses this file to You under the Apache License, Version 2.0\r
+ (the "License"); you may not use this file except in compliance with\r
+ the License. You may obtain a copy of the License at\r
+\r
+ http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+ Unless required by applicable law or agreed to in writing, software\r
+ distributed under the License is distributed on an "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ See the License for the specific language governing permissions and\r
+ limitations under the License.\r
+-->\r
+<!-- $Id$ -->\r
+<testcase>\r
+ <info>\r
+ <p>\r
+ This test checks external-graphics with content-width
+ (values: scale-to-fit, scale-down-to-fit and scale-up-to-fit)\r
+ </p>\r
+ </info>\r
+ <fo>\r
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">\r
+ <fo:layout-master-set>\r
+ <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in">\r
+ <fo:region-body/>\r
+ </fo:simple-page-master>\r
+ </fo:layout-master-set>\r
+ <fo:page-sequence master-reference="normal" font-size="0" line-height="1">\r
+ <fo:flow flow-name="xsl-region-body">\r
+ <fo:block>\r
+ <fo:external-graphic id="img1" src="../../resources/images/bgimg72dpi.jpg"/>\r
+ </fo:block>\r
+ <fo:block>\r
+ <fo:external-graphic id="img2" src="../../resources/images/bgimg72dpi.jpg"
+ inline-progression-dimension="250pt" block-progression-dimension="250pt"
+ content-height="scale-to-fit" content-width="scale-to-fit"/>\r
+ </fo:block>\r
+ <fo:block>\r
+ <fo:external-graphic id="img3" src="../../resources/images/bgimg72dpi.jpg"\r
+ inline-progression-dimension="250pt" block-progression-dimension="250pt"\r
+ content-height="scale-down-to-fit" content-width="scale-down-to-fit"/>\r
+ </fo:block>\r
+ <fo:block>\r
+ <fo:external-graphic id="img4" src="../../resources/images/bgimg72dpi.jpg"\r
+ inline-progression-dimension="250pt" block-progression-dimension="250pt"\r
+ content-height="scale-up-to-fit" content-width="scale-up-to-fit"/>\r
+ </fo:block>\r
+ <fo:block>\r
+ <fo:external-graphic id="img5" src="../../resources/images/bgimg300dpi.jpg"\r
+ inline-progression-dimension="250pt" block-progression-dimension="250pt"\r
+ content-height="scale-down-to-fit" content-width="scale-down-to-fit"/>\r
+ </fo:block>\r
+ <fo:block>\r
+ <fo:external-graphic id="img6" src="../../resources/images/bgimg300dpi.jpg"\r
+ inline-progression-dimension="250pt" block-progression-dimension="250pt"\r
+ content-height="scale-up-to-fit" content-width="scale-up-to-fit"/>\r
+ </fo:block>\r
+ </fo:flow>\r
+ </fo:page-sequence>\r
+ </fo:root>\r
+ </fo>\r
+ <checks>\r
+ <eval expected="192000" xpath="//image[@prod-id='img1']/../@ipd"/>\r
+ <eval expected="192000" xpath="//image[@prod-id='img1']/../@bpd"/>
+ <eval expected="0 0 192000 192000" xpath="//image[@prod-id='img1']/../@pos"/>\r
+ \r
+ <eval expected="250000" xpath="//image[@prod-id='img2']/../@ipd"/>\r
+ <eval expected="250000" xpath="//image[@prod-id='img2']/../@bpd"/>
+ <eval expected="0 0 250000 250000" xpath="//image[@prod-id='img2']/../@pos"/>\r
+ \r
+ <eval expected="250000" xpath="//image[@prod-id='img3']/../@ipd"/>\r
+ <eval expected="250000" xpath="//image[@prod-id='img3']/../@bpd"/>
+ <eval expected="0 0 192000 192000" xpath="//image[@prod-id='img3']/../@pos"/>\r
+ \r
+ <eval expected="250000" xpath="//image[@prod-id='img4']/../@ipd"/>\r
+ <eval expected="250000" xpath="//image[@prod-id='img4']/../@bpd"/>\r
+ <eval expected="0 0 250000 250000" xpath="//image[@prod-id='img4']/../@pos"/>\r
+
+ <eval expected="250000" xpath="//image[@prod-id='img5']/../@ipd"/>\r
+ <eval expected="250000" xpath="//image[@prod-id='img5']/../@bpd"/>\r
+ <eval expected="0 0 46080 46080" xpath="//image[@prod-id='img5']/../@pos"/>\r
+ \r
+ <eval expected="250000" xpath="//image[@prod-id='img6']/../@ipd"/>\r
+ <eval expected="250000" xpath="//image[@prod-id='img6']/../@bpd"/>\r
+ <eval expected="0 0 250000 250000" xpath="//image[@prod-id='img6']/../@pos"/>\r
+ </checks>\r
+</testcase>\r