Author: cbowditch Date: Fri Mar 29 10:24:14 2019 New Revision: 1856528 URL: http://svn.apache.org/viewvc?rev=1856528&view=rev Log: fix FOP-2514. Patch submitted by Björn Kautler
Added: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fo/properties/OptionalCharacterProperty.java Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fo/FOPropertyMapping.java xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fo/properties/CommonHyphenation.java xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/inline/TextLayoutManager.java Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fo/FOPropertyMapping.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fo/FOPropertyMapping.java?rev=1856528&r1=1856527&r2=1856528&view=diff ============================================================================== --- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fo/FOPropertyMapping.java (original) +++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fo/FOPropertyMapping.java Fri Mar 29 10:24:14 2019 @@ -53,6 +53,7 @@ import org.apache.fop.fo.properties.Leng import org.apache.fop.fo.properties.LineHeightPropertyMaker; import org.apache.fop.fo.properties.ListProperty; import org.apache.fop.fo.properties.NumberProperty; +import org.apache.fop.fo.properties.OptionalCharacterProperty; import org.apache.fop.fo.properties.PageBreakShorthandParser; import org.apache.fop.fo.properties.PageDimensionMaker; import org.apache.fop.fo.properties.PositionShorthandParser; @@ -1105,7 +1106,7 @@ public final class FOPropertyMapping imp addPropertyMaker("hyphenate", m); // hyphenation-character - m = new CharacterProperty.Maker(PR_HYPHENATION_CHARACTER); + m = new OptionalCharacterProperty.Maker(PR_HYPHENATION_CHARACTER); m.setInherited(true); m.setDefault("-"); addPropertyMaker("hyphenation-character", m); Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fo/properties/CommonHyphenation.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fo/properties/CommonHyphenation.java?rev=1856528&r1=1856527&r2=1856528&view=diff ============================================================================== --- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fo/properties/CommonHyphenation.java (original) +++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fo/properties/CommonHyphenation.java Fri Mar 29 10:24:14 2019 @@ -58,7 +58,7 @@ public final class CommonHyphenation { public final EnumProperty hyphenate; /** The "hyphenation-character" property */ - public final CharacterProperty hyphenationCharacter; + public final OptionalCharacterProperty hyphenationCharacter; /** The "hyphenation-push-character-count" property */ public final NumberProperty hyphenationPushCharacterCount; @@ -74,7 +74,7 @@ public final class CommonHyphenation { StringProperty country, StringProperty script, EnumProperty hyphenate, - CharacterProperty hyphenationCharacter, + OptionalCharacterProperty hyphenationCharacter, NumberProperty hyphenationPushCharacterCount, NumberProperty hyphenationRemainCharacterCount) { this.language = language; @@ -104,8 +104,8 @@ public final class CommonHyphenation { = (StringProperty) propertyList.get(Constants.PR_SCRIPT); EnumProperty hyphenate = (EnumProperty) propertyList.get(Constants.PR_HYPHENATE); - CharacterProperty hyphenationCharacter - = (CharacterProperty) propertyList.get(Constants.PR_HYPHENATION_CHARACTER); + OptionalCharacterProperty hyphenationCharacter + = (OptionalCharacterProperty) propertyList.get(Constants.PR_HYPHENATION_CHARACTER); NumberProperty hyphenationPushCharacterCount = (NumberProperty) propertyList.get(Constants.PR_HYPHENATION_PUSH_CHARACTER_COUNT); NumberProperty hyphenationRemainCharacterCount @@ -132,7 +132,10 @@ public final class CommonHyphenation { * @param font the font * @return the effective hyphenation character. */ - public char getHyphChar(org.apache.fop.fonts.Font font) { + public Character getHyphChar(org.apache.fop.fonts.Font font) { + if (hyphenationCharacter.getObject() == null) { + return null; + } char hyphChar = hyphenationCharacter.getCharacter(); if (font.hasChar(hyphChar)) { return hyphChar; //short-cut @@ -183,8 +186,8 @@ public final class CommonHyphenation { * @return the IPD in millipoints for the hyphenation character. */ public int getHyphIPD(org.apache.fop.fonts.Font font) { - char hyphChar = getHyphChar(font); - return font.getCharWidth(hyphChar); + Character hyphChar = getHyphChar(font); + return (hyphChar == null) ? 0 : font.getCharWidth(hyphChar); } /** Added: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fo/properties/OptionalCharacterProperty.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fo/properties/OptionalCharacterProperty.java?rev=1856528&view=auto ============================================================================== --- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fo/properties/OptionalCharacterProperty.java (added) +++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fo/properties/OptionalCharacterProperty.java Fri Mar 29 10:24:14 2019 @@ -0,0 +1,116 @@ +/* + * 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$ */ + +package org.apache.fop.fo.properties; + +import org.apache.fop.fo.FObj; +import org.apache.fop.fo.PropertyList; + +/** + * Superclass for properties that wrap an optional character value + * TODO convert character value to int in order to denote unicode scalar value + * instead of a single UTF-16 code element + */ +public final class OptionalCharacterProperty extends Property { + + /** + * Inner class for creating instances of OptionalCharacterProperty + */ + public static class Maker extends PropertyMaker { + + /** + * @param propId the id of the property for which a Maker should be created + */ + public Maker(int propId) { + super(propId); + } + + /** {@inheritDoc} */ + public Property make(PropertyList propertyList, String value, + FObj fo) { + if (value.isEmpty()) { + return OptionalCharacterProperty.getInstance(null); + } else { + char c = value.charAt(0); + return OptionalCharacterProperty.getInstance(c); + } + } + + } + + /** cache containing all canonical OptionalCharacterProperty instances */ + private static final PropertyCache<OptionalCharacterProperty> CACHE + = new PropertyCache<OptionalCharacterProperty>(); + + private final Character character; + + /** + * @param character character value to be wrapped in this property + */ + private OptionalCharacterProperty(Character character) { + this.character = character; + } + + /** + * Get character property instance for character. + * @param character the character + * @return the character property instance + */ + public static OptionalCharacterProperty getInstance(Character character) { + return CACHE.fetch(new OptionalCharacterProperty(character)); + } + + /** + * @return this.character cast as an Object + */ + public Object getObject() { + return character; + } + + /** + * @return this.character + */ + public char getCharacter() { + return character == null ? 0 : this.character; + } + + /** + * @return this.character cast as a String + */ + public String getString() { + return character == null ? "" : character.toString(); + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof OptionalCharacterProperty) { + OptionalCharacterProperty ocp = (OptionalCharacterProperty) obj; + return character == ocp.character + || character != null + && character.equals(ocp.character); + } else { + return false; + } + } + + @Override + public int hashCode() { + return character == null ? 0 : character.hashCode(); + } +} Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/inline/TextLayoutManager.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/inline/TextLayoutManager.java?rev=1856528&r1=1856527&r2=1856528&view=diff ============================================================================== --- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/inline/TextLayoutManager.java (original) +++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/inline/TextLayoutManager.java Fri Mar 29 10:24:14 2019 @@ -550,7 +550,10 @@ public class TextLayoutManager extends L } private void addHyphenationChar() { - wordChars.append(foText.getCommonHyphenation().getHyphChar(font)); + Character hyphChar = foText.getCommonHyphenation().getHyphChar(font); + if (hyphChar != null) { + wordChars.append(hyphChar); + } // [TBD] expand bidi word levels, letter space adjusts, gpos adjusts // [TBD] [GA] problematic in bidi context... what is level of hyphen? textArea.setHyphenated(); --------------------------------------------------------------------- To unsubscribe, e-mail: fop-commits-unsubscr...@xmlgraphics.apache.org For additional commands, e-mail: fop-commits-h...@xmlgraphics.apache.org