org.apache.fop.fonts.NamedCharacter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.apache.fop Show documentation
Show all versions of org.apache.fop Show documentation
The core maven build properties
The newest version!
/*
* 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: NamedCharacter.java 1297404 2012-03-06 10:17:54Z vhennebert $ */
package org.apache.fop.fonts;
import org.apache.xmlgraphics.fonts.Glyphs;
import org.apache.fop.util.CharUtilities;
/**
* Represents an named character with character name (from the Adobe glyph list) and a Unicode
* sequence that this character represents.
*/
public class NamedCharacter {
private String charName;
private String unicodeSequence;
/**
* Main constructor.
* @param charName the character name
* @param unicodeSequence the Unicode sequence associated with this character
*/
public NamedCharacter(String charName, String unicodeSequence) {
if (charName == null) {
throw new NullPointerException("charName must not be null");
}
this.charName = charName;
if (unicodeSequence != null) {
this.unicodeSequence = unicodeSequence;
} else {
this.unicodeSequence = Glyphs.getUnicodeSequenceForGlyphName(charName);
}
}
/**
* Simple constructor.
* @param charName the character name
*/
public NamedCharacter(String charName) {
this(charName, null);
}
/** {@inheritDoc} */
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((charName == null) ? 0 : charName.hashCode());
return result;
}
/** {@inheritDoc} */
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final NamedCharacter other = (NamedCharacter)obj;
return charName.equals(other.charName);
}
/**
* Returns the character name (as defined by the Adobe glyph list).
* @return the character name
*/
public String getName() {
return this.charName;
}
/**
* Returns the Unicode sequence associated with this character.
* @return the Unicode sequence (or null if no Unicode sequence is associated)
*/
public String getUnicodeSequence() {
return this.unicodeSequence;
}
/**
* Indicates whether a single Unicode value is associated with this character.
* @return true if exactly one Unicode value is associated with this character, false otherwise
*/
public boolean hasSingleUnicodeValue() {
return (this.unicodeSequence != null && this.unicodeSequence.length() == 1);
}
/**
* Returns the single Unicode value associated with this named character. Check
* {@link #hasSingleUnicodeValue()} before you call this method because an
* IllegalStateException is thrown is a Unicode sequence with more than one character is
* associated with this character.
* @return the single Unicode value (or FFFF ("NOT A CHARACTER") if no Unicode value is
* available)
* @throws IllegalStateException if a Unicode sequence with more than one value is associated
* with the named character
*/
public char getSingleUnicodeValue() throws IllegalStateException {
if (this.unicodeSequence == null) {
return CharUtilities.NOT_A_CHARACTER;
}
if (this.unicodeSequence.length() > 1) {
throw new IllegalStateException("getSingleUnicodeValue() may not be called for a"
+ " named character that has more than one Unicode value (a sequence)"
+ " associated with the named character!");
}
return this.unicodeSequence.charAt(0);
}
/** {@inheritDoc} */
public String toString() {
StringBuffer sb = new StringBuffer(this.unicodeSequence);
sb.append(" (");
if (this.unicodeSequence != null) {
for (int i = 0, c = this.unicodeSequence.length(); i < c; i++) {
sb.append("0x").append(Integer.toHexString(this.unicodeSequence.charAt(0)));
}
sb.append(", ");
}
sb.append(getName()).append(')');
return sb.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy