]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Fix: override PropertyMaker.make() to properly parse font-family names containing...
authorAndreas L. Delmelle <adelmelle@apache.org>
Tue, 6 Feb 2007 20:35:49 +0000 (20:35 +0000)
committerAndreas L. Delmelle <adelmelle@apache.org>
Tue, 6 Feb 2007 20:35:49 +0000 (20:35 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@504280 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/fo/properties/FontFamilyProperty.java
status.xml
test/fotree/testcases/font-family-test.fo [new file with mode: 0644]

index 48082e1d8c94baccb8a9dd0836f8797e76261d75..84000233c59dfb392363f910c0527a11a86ad869 100644 (file)
@@ -21,6 +21,7 @@ package org.apache.fop.fo.properties;
 
 import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.PropertyList;
+import org.apache.fop.fo.expr.PropertyException;
 
 /**
  * Property class for the font-family property.
@@ -39,6 +40,55 @@ public class FontFamilyProperty extends ListProperty {
             super(propId);
         }
 
+        /**
+         * @see org.apache.fop.fo.properties.PropertyMaker#make(
+         *         org.apache.fop.fo.PropertyList, 
+         *         java.lang.String, 
+         *         org.apache.fop.fo.FObj)
+         */
+        public Property make(PropertyList propertyList, String value, FObj fo) throws PropertyException {
+            ListProperty prop = new ListProperty();
+            String tmpVal;
+            int startIndex = 0;
+            int commaIndex = value.indexOf(',');
+            int quoteIndex;
+            int aposIndex;
+            char qChar;
+            boolean parsed = false;
+            while (!parsed) {
+                if (commaIndex == -1) {
+                    tmpVal = value.substring(startIndex).trim();
+                    parsed = true;
+                } else {
+                    tmpVal = value.substring(startIndex, commaIndex).trim();
+                    startIndex = commaIndex + 1;
+                    commaIndex = value.indexOf(',', startIndex);
+                }
+                aposIndex = tmpVal.indexOf('\'');
+                quoteIndex = tmpVal.indexOf('\"');
+                if (aposIndex != -1 || quoteIndex != -1) {
+                    qChar = (aposIndex == -1) ? '\"' : '\'';
+                    if (tmpVal.lastIndexOf(qChar) != tmpVal.length() - 1) {
+                        Property.log.warn("Skipping malformed value for font-family: "
+                                + tmpVal + " in \"" + value + "\".");
+                        tmpVal = "";
+                    } else {
+                        tmpVal = tmpVal.substring(1, tmpVal.length() - 1);
+                    }
+                }
+                if (!"".equals(tmpVal)) {
+                    int dblSpaceIndex = tmpVal.indexOf("  ");
+                    while (dblSpaceIndex != -1) {
+                        tmpVal = tmpVal.substring(0, dblSpaceIndex)
+                                    + tmpVal.substring(dblSpaceIndex + 1);
+                        dblSpaceIndex = tmpVal.indexOf("  ");
+                    }
+                    prop.addProperty(new StringProperty(tmpVal));
+                }
+            }
+            return prop;
+        }
+
         /**
          * @see PropertyMaker#convertProperty
          */
index 49750b3d2bab67ef621fa9a1daf52adc87f7ef52..b1ef07f1e825bb6a5eaffce11214c987f27cb6b2 100644 (file)
@@ -28,6 +28,9 @@
 
   <changes>
     <release version="FOP Trunk">
+      <action context="Code" dev="AD" type="fix">
+        Fix for properly parsing font-family names containing spaces.
+      </action>
       <action context="Code" dev="JM" type="fix" fixes-bug="41488" due-to="Dominic Brügger">
         Fix for NPE with PNG images for RTF output.
       </action>
diff --git a/test/fotree/testcases/font-family-test.fo b/test/fotree/testcases/font-family-test.fo
new file mode 100644 (file)
index 0000000..623a292
--- /dev/null
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<!-- $Id$ -->
+<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:test="http://xmlgraphics.apache.org/fop/test">
+  <fo:layout-master-set>
+    <fo:simple-page-master master-name="simpleA4" page-height="29.7cm" page-width="21cm" margin-top="2cm" margin-bottom="2cm" margin-left="2cm" margin-right="2cm">
+      <fo:region-body/>
+    </fo:simple-page-master>
+  </fo:layout-master-set>
+  <fo:page-sequence master-reference="simpleA4">
+    <fo:flow flow-name="xsl-region-body">
+      <fo:block font-family="Times New Roman">
+        <test:assert property="font-family" expected="[Times New Roman]"/>
+        Test font-family parsing
+      </fo:block>
+      <fo:block font-family="Helvetica, Times New Roman">
+        <test:assert property="font-family" expected="[Helvetica, Times New Roman]"/>
+        Test font-family parsing
+      </fo:block>
+      <fo:block font-family="Times  New   Roman, Helvetica">
+        <test:assert property="font-family" expected="[Times New Roman, Helvetica]"/>
+        Test font-family parsing
+      </fo:block>
+      <fo:block font-family="'Times New Roman', serif">
+        <test:assert property="font-family" expected="[Times New Roman, serif]"/>
+        Test font-family parsing
+      </fo:block>
+      <fo:block font-family="'Times New 'Roman, serif">
+        <test:assert property="font-family" expected="[serif]"/>
+        Test malformed font-family parsing
+      </fo:block>
+    </fo:flow>
+  </fo:page-sequence>
+</fo:root>