/*
* Copyright 2006-2017 ICEsoft Technologies Canada Corp.
*
* Licensed 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.
*/
package org.icepdf.core.pobjects.fonts;
import org.icepdf.core.pobjects.Name;
/**
* CMap inteface.
*
* @since 3.0
*/
public interface CMap {
public static final Name TYPE = new Name("CMap");
/**
* Maps the character id to an underlying unicode value if available.
*
* @param ch character code to find unicode value of.
* @return unicode value of ch if available otherwise original ch is returned unaltered.
*/
public char toSelector(char ch);
public char toSelector(char ch, boolean isCFF);
/**
* Maps the character id to an underlying to unicode table. This method should
* be called when looking for a unicode value for a CID. This method differs
* slightly from #toSelector in that it can return at String rather then a
* single character code.
*
* @param ch character id to look for corresponding unicode values.
* @return unicode value of specified character code.
*/
public String toUnicode(char ch);
/**
* Determines if the cid should be interpreted as a one or two byte character.
* Some CID fonts use the one byte notation but the two byte is the most
* common bar far.
*
* @return true if the cid should be considered as having a one byte length.
*/
public boolean isOneByte();
/**
* Determines if the cid should be interpreted as a one or two byte character.
* Some CID fonts use the one byte notation but the two byte is the most
* common bar far.
*
* @return true if the cid should be considered as having a two byte length.
*/
public boolean isTwoByte();
/**
* Determines if the cid should be interpreted as a one or two byte character.
* Some CID fonts use the one byte notation but the two byte is the most
* common bar far. A mixed byte string must be parsed differently as the font
* can be used to determine the number of bytes used for each character.
*
* @return true if the cid should be considered as having a mixed byte length.
*/
public boolean isMixedByte();
/**
* Utility method ot check if a CMap contain s any data, specifically usable toUnicode data.
*
* @return true if the mapping contains at least one entry.
*/
public boolean isEmptyMapping();
}