Package org.pdfbox.encoding

Source Code of org.pdfbox.encoding.Encoding

/**
* Copyright (c) 2003, www.pdfbox.org
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
*    this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
*    this list of conditions and the following disclaimer in the documentation
*    and/or other materials provided with the distribution.
* 3. Neither the name of pdfbox; nor the names of its
*    contributors may be used to endorse or promote products derived from this
*    software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* http://www.pdfbox.org
*
*/
package org.pdfbox.encoding;

import java.io.IOException;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.pdfbox.cos.COSName;

/**
* This is an interface to a text encoder.
*
* @author Ben Litchfield
* @version $Revision: 1.7 $
*/
public abstract class Encoding
{
    /**
     * This is a mapping from a character code to a character name.
     */
    protected Map codeToName = new HashMap();
    /**
     * This is a mapping from a character name to a character code.
     */
    protected Map nameToCode = new HashMap();

    private static final Map NAME_TO_CHARACTER = new HashMap();
    private static final Map CHARACTER_TO_NAME = new HashMap();

    static
    {
        NAME_TO_CHARACTER.put( COSName.getPDFName( ".notdef" ), "" );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "A" ), "" + (char)0101 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "AE" ), "" + (char)0306 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Aacute" ), "" + (char)0301 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Acircumflex" ), "" + (char)0302 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Adieresis" ), "" + (char)0304 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Agrave" ), "" + (char)0300 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Alpha" ), "?" );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Aring" ), "" + (char)0305 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Atilde" ), "" + (char)0303 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "B" ), "" + (char)0102 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Beta" ), "?" );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "C" ), "" + (char)0103 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Ccedilla" ), "" + (char)0307 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Chi" ), "?" );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "D" ), "" + (char)0104 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Delta" ), "delta" );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "E" ), "" + (char)0105 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Eacute" ), "" + (char)0311 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Ecircumflex" ), "" + (char)0312 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Edieresis" ), "" + (char)0313 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Egrave" ), "" + (char)0310 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Epsilon" ), "E" );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Eta" ), "H" );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Euro" ), "" + (char)0x80 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Eth" ), "" + (char)0320 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Euro" ), "" + (char)0200 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "F" ), "" + (char)0106 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "G" ), "" + (char)0107 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Gamma" ), "G" );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "H" ), "" + (char)0110 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "I" ), "" + (char)0111 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Iacute" ), "" + (char)0315 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Icircumflex" ), "" + (char)0316 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Idieresis" ), "" + (char)0317 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Ifraktur" ), "I" );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Igrave" ), "" + (char)0314 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Iota" ), "I" );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "J" ), "" + (char)0112 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "K" ), "" + (char)0113 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Kappa" ), "K" );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "L" ), "" + (char)0114 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Lambda" ), "?" );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Lslash" ), "L" );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "M" ), "" + (char)0115 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "N" ), "" + (char)0116 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Ntilde" ), "" + (char)0321 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "O" ), "" + (char)0117 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "OE" ), "" + (char)0214 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Oacute" ), "" + (char)0323 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Ocircumflex" ), "" + (char)0324 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Odieresis" ), "" + (char)0326 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Ograve" ), "" + (char)0322 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Oslash" ), "" + (char)0330 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Otilde" ), "" + (char)0325 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "P" ), "" + (char)0120 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Q" ), "" + (char)0121 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "R" ), "" + (char)0122 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "S" ), "" + (char)0123 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Scaron" ), "" + (char)0212 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Sigma" ), "?" );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "T" ), "" + (char)0124 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Thorn" ), "" + (char)0336 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "U" ), "" + (char)0125 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Uacute" ), "" + (char)0332 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Ucircumflex" ), "" + (char)0333 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Udieresis" ), "" + (char)0334 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Ugrave" ), "" + (char)0331 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "V" ), "" + (char)0126 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "W" ), "" + (char)0127 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "X" ), "" + (char)0130 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Y" ), "" + (char)0131 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Yacute" ), "" + (char)0335 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Ydieresis" ), "" + (char)0237 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Z" ), "" + (char)0132 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "Zcaron" ), "" + (char)0216 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "a" ), "" + (char)0141 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "aacute" ), "" + (char)0341 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "acircumflex" ), "" + (char)0342 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "acute" ), "" + (char)0264 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "adieresis" ), "" + (char)0344 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "ae" ), "" + (char)0346 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "agrave" ), "" + (char)0340 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "ampersand" ), "" + (char)046 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "aring" ), "" + (char)0345 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "arrowhorizex" ), "-" );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "asciicircum" ), "" + (char)0136 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "asciitilde" ), "" + (char)0176 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "asterisk" ), "" + (char)052 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "at" ), "" + (char)0100 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "atilde" ), "" + (char)0343 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "b" ), "" + (char)0142 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "backslash" ), "" + (char)0134 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "bar" ), "" + (char)0174 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "braceleft" ), "" + (char)0173 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "braceright" ), "" + (char)0175 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "bracketleft" ), "" + (char)0133 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "bracketright" ), "" + (char)0135 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "breve" ), "" + (char)0306 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "brokenbar" ), "" + (char)0246 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "bullet" ), "" + (char)0225 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "c" ), "" + (char)0143 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "caron" ), "" + (char)0317 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "ccedilla" ), "" + (char)0347 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "cedilla" ), "" + (char)0270 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "cent" ), "" + (char)0242 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "circumflex" ), "" + (char)0210 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "colon" ), "" + (char)072 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "comma" ), "" + (char)054 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "copyright" ), "" + (char)0251 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "currency" ), "" + (char)0244 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "d" ), "" + (char)0144 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "dagger" ), "" + (char)0206 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "daggerdbl" ), "" + (char)0207 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "degree" ), "" + (char)0260 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "dieresis" ), "" + (char)0250 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "divide" ), "" + (char)0367 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "dollar" ), "" + (char)044 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "dotaccent" ), "" + (char)0372 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "dotlessi" ), "" + (char)0365 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "e" ), "" + (char)0145 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "eacute" ), "" + (char)0351 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "ecircumflex" ), "" + (char)0352 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "edieresis" ), "" + (char)0353 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "egrave" ), "" + (char)0350 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "eight" ), "" + (char)070 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "ellipsis" ), "" + (char)0205 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "emdash" ), "" + (char)0227 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "endash" ), "" + (char)0226 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "equal" ), "" + (char)075 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "eth" ), "" + (char)0360 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "exclam" ), "" + (char)041 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "exclamdown" ), "" + (char)0241 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "f" ), "" + (char)0146 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "fi" ), "fi" );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "five" ), "" + (char)065 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "fl" ), "fl" );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "florin" ), "" + (char)0203 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "four" ), "" + (char)064 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "fraction" ), "/" );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "g" ), "" + (char)0147 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "germandbls" ), "" + (char)0337 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "grave" ), "" + (char)0140 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "greater" ), "" + (char)076 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "guillemotleft" ), "" + (char)0253 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "guillemotright" ), "" + (char)0273 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "guilsinglleft" ), "" + (char)0213 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "guilsinglright" ), "" + (char)0233 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "h" ), "" + (char)0150 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "hungarumlaut" ), "" + (char)0315 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "hyphen" ), "" + (char)055 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "i" ), "" + (char)0151 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "iacute" ), "" + (char)0355 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "icircumflex" ), "" + (char)0356 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "idieresis" ), "" + (char)0357 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "igrave" ), "" + (char)0354 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "j" ), "" + (char)0152 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "k" ), "" + (char)0153 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "l" ), "" + (char)0154 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "less" ), "" + (char)074 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "lessequal" ), "<=" + (char)074 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "logicalnot" ), "" + (char)0254 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "lslash" ), "l" );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "m" ), "" + (char)0155 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "macron" ), "" + (char)0257 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "minus" ), "-" );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "mu" ), "" + (char)0265 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "multiply" ), "" + (char)0327 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "n" ), "" + (char)0156 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "nine" ), "" + (char)071 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "ntilde" ), "" + (char)0361 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "numbersign" ), "" + (char)043 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "o" ), "" + (char)0157 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "oacute" ), "" + (char)0363 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "ocircumflex" ), "" + (char)0364 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "odieresis" ), "" + (char)0366 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "oe" ), "" + (char)0234 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "ogonek" ), "" + (char)0316 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "ograve" ), "" + (char)0362 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "one" ), "" + (char)061 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "onehalf" ), "" + (char)0275 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "onequarter" ), "" + (char)0274 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "onesuperior" ), "" + (char)0271 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "ordfeminine" ), "" + (char)0252 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "ordmasculine" ), "" + (char)0272 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "oslash" ), "" + (char)0370 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "otilde" ), "" + (char)0365 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "p" ), "" + (char)0160 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "paragraph" ), "" + (char)0266 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "parenleft" ), "" + (char)050 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "parenright" ), "" + (char)051 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "percent" ), "" + (char)045 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "period" ), "" + (char)056 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "periodcentered" ), "" + (char)0267 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "perthousand" ), "" + (char)0211 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "plus" ), "" + (char)053 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "plusminus" ), "" + (char)0261 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "q" ), "" + (char)0161 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "question" ), "" + (char)077 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "questiondown" ), "" + (char)0277 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "quotedbl" ), "" + (char)042 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "quotedblbase" ), "" + (char)0204 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "quotedblleft" ), "" + (char)0223 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "quotedblright" ), "" + (char)0224 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "quoteleft" ), "" + (char)0221 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "quoteright" ), "" + (char)0222 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "quotesinglbase" ), "" + (char)0202 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "quotesingle" ), "" + (char)047 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "r" ), "" + (char)0162 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "registered" ), "" + (char)0256 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "registersans" ), "" + (char)0256 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "registerserif" ), "" + (char)0256 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "ring" ), "" + (char)0312 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "s" ), "" + (char)0163 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "scaron" ), "" + (char)0232 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "section" ), "" + (char)0247 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "semicolon" ), "" + (char)073 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "seven" ), "" + (char)067 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "six" ), "" + (char)066 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "slash" ), "" + (char)057 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "space" ), "" + (char)040 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "sterling" ), "" + (char)0243 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "t" ), "" + (char)0164 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "thorn" ), "" + (char)0376 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "three" ), "" + (char)063 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "threequarters" ), "" + (char)0276 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "threesuperior" ), "" + (char)0263 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "tilde" ), "" + (char)0230 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "trademark" ), "" + (char)0231 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "trademarksans" ), "" + (char)0231 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "trademarkserif" ), "" + (char)0231 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "two" ), "" + (char)062 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "twosuperior" ), "" + (char)0262 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "u" ), "" + (char)0165 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "uacute" ), "" + (char)0372 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "ucircumflex" ), "" + (char)0373 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "udieresis" ), "" + (char)0374 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "ugrave" ), "" + (char)0371 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "underscore" ), "" + (char)0137 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "v" ), "" + (char)0166 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "w" ), "" + (char)0167 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "x" ), "" + (char)0170 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "y" ), "" + (char)0171 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "yacute" ), "" + (char)0375 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "ydieresis" ), "" + (char)0377 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "yen" ), "" + (char)0245 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "z" ), "" + (char)0172 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "zcaron" ), "" + (char)0236 );
        NAME_TO_CHARACTER.put( COSName.getPDFName( "zero" ), "" + (char)060 );

        Iterator keys = NAME_TO_CHARACTER.keySet().iterator();
        while( keys.hasNext() )
        {
            Object key = keys.next();
            Object value = NAME_TO_CHARACTER.get( key );
            CHARACTER_TO_NAME.put( value, key );
        }
    }


    /**
     * This will add a character encoding.
     *
     * @param code The character code that matches the character.
     * @param name The name of the character.
     */
    protected void addCharacterEncoding( int code, COSName name )
    {
        Integer intCode = new Integer( code );
        codeToName.put( intCode, name );
        nameToCode.put( name, intCode );
    }

    /**
     * This will get the character code for the name.
     *
     * @param name The name of the character.
     *
     * @return The code for the character.
     *
     * @throws IOException If there is no character code for the name.
     */
    public int getCode( COSName name ) throws IOException
    {
        Integer code = (Integer)nameToCode.get( name );
        if( code == null )
        {
            throw new IOException( "No character code for character name '" + name.getName() + "'" );
        }
        return code.intValue();
    }

    /**
     * This will take a character code and get the name from the code.
     *
     * @param code The character code.
     *
     * @return The name of the character.
     *
     * @throws IOException If there is no name for the code.
     */
    public COSName getName( int code ) throws IOException
    {
        COSName name = (COSName)codeToName.get( new Integer( code ) );
        if( name == null )
        {
            //lets be forgiving for now
            name = COSName.getPDFName( "space" );
            //throw new IOException( getClass().getName() +
            //                       ": No name for character code '" + code + "'" );
        }
        return name;
    }

    /**
     * This will take a character code and get the name from the code.
     *
     * @param c The character.
     *
     * @return The name of the character.
     *
     * @throws IOException If there is no name for the character.
     */
    public COSName getNameFromCharacter( char c ) throws IOException
    {
        COSName name = (COSName)CHARACTER_TO_NAME.get( "" + c );
        if( name == null )
        {
            throw new IOException( "No name for character '" + c + "'" );
        }
        return name;
    }

    /**
     * This will get the character from the code.
     *
     * @param code The character code.
     *
     * @return The printable character for the code.
     *
     * @throws IOException If there is not name for the character.
     */
    public String getCharacter( int code ) throws IOException
    {
        return getCharacter( getName( code ) );
    }

    /**
     * This will get the character from the name.
     *
     * @param name The name of the character.
     *
     * @return The printable character for the code.
     */
    public static String getCharacter( COSName name )
    {
        String character = (String)NAME_TO_CHARACTER.get( name );
        if( character == null )
        {
            character = name.getName();
        }
        return character;
    }
}
TOP

Related Classes of org.pdfbox.encoding.Encoding

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.