/*
 * 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.
 */
package org.apache.fontbox.cff;

/**
 * This is specialized CFFCharset. It's used if the CharsetId of a font is set to 1.
 * 
 * @author Villu Ruusmann
 */
public final class CFFExpertCharset extends CFFCharsetType1
{
    private static final int CHAR_CODE = 0;
    private static final int CHAR_NAME = 1;

    private CFFExpertCharset()
    {
        // Table of character codes and their corresponding names.
        Object[][] cffExpertCharsetTable = {
                {0, ".notdef"},
                {1, "space"},
                {229, "exclamsmall"},
                {230, "Hungarumlautsmall"},
                {231, "dollaroldstyle"},
                {232, "dollarsuperior"},
                {233, "ampersandsmall"},
                {234, "Acutesmall"},
                {235, "parenleftsuperior"},
                {236, "parenrightsuperior"},
                {237, "twodotenleader"},
                {238, "onedotenleader"},
                {13, "comma"},
                {14, "hyphen"},
                {15, "period"},
                {99, "fraction"},
                {239, "zerooldstyle"},
                {240, "oneoldstyle"},
                {241, "twooldstyle"},
                {242, "threeoldstyle"},
                {243, "fouroldstyle"},
                {244, "fiveoldstyle"},
                {245, "sixoldstyle"},
                {246, "sevenoldstyle"},
                {247, "eightoldstyle"},
                {248, "nineoldstyle"},
                {27, "colon"},
                {28, "semicolon"},
                {249, "commasuperior"},
                {250, "threequartersemdash"},
                {251, "periodsuperior"},
                {252, "questionsmall"},
                {253, "asuperior"},
                {254, "bsuperior"},
                {255, "centsuperior"},
                {256, "dsuperior"},
                {257, "esuperior"},
                {258, "isuperior"},
                {259, "lsuperior"},
                {260, "msuperior"},
                {261, "nsuperior"},
                {262, "osuperior"},
                {263, "rsuperior"},
                {264, "ssuperior"},
                {265, "tsuperior"},
                {266, "ff"},
                {109, "fi"},
                {110, "fl"},
                {267, "ffi"},
                {268, "ffl"},
                {269, "parenleftinferior"},
                {270, "parenrightinferior"},
                {271, "Circumflexsmall"},
                {272, "hyphensuperior"},
                {273, "Gravesmall"},
                {274, "Asmall"},
                {275, "Bsmall"},
                {276, "Csmall"},
                {277, "Dsmall"},
                {278, "Esmall"},
                {279, "Fsmall"},
                {280, "Gsmall"},
                {281, "Hsmall"},
                {282, "Ismall"},
                {283, "Jsmall"},
                {284, "Ksmall"},
                {285, "Lsmall"},
                {286, "Msmall"},
                {287, "Nsmall"},
                {288, "Osmall"},
                {289, "Psmall"},
                {290, "Qsmall"},
                {291, "Rsmall"},
                {292, "Ssmall"},
                {293, "Tsmall"},
                {294, "Usmall"},
                {295, "Vsmall"},
                {296, "Wsmall"},
                {297, "Xsmall"},
                {298, "Ysmall"},
                {299, "Zsmall"},
                {300, "colonmonetary"},
                {301, "onefitted"},
                {302, "rupiah"},
                {303, "Tildesmall"},
                {304, "exclamdownsmall"},
                {305, "centoldstyle"},
                {306, "Lslashsmall"},
                {307, "Scaronsmall"},
                {308, "Zcaronsmall"},
                {309, "Dieresissmall"},
                {310, "Brevesmall"},
                {311, "Caronsmall"},
                {312, "Dotaccentsmall"},
                {313, "Macronsmall"},
                {314, "figuredash"},
                {315, "hypheninferior"},
                {316, "Ogoneksmall"},
                {317, "Ringsmall"},
                {318, "Cedillasmall"},
                {158, "onequarter"},
                {155, "onehalf"},
                {163, "threequarters"},
                {319, "questiondownsmall"},
                {320, "oneeighth"},
                {321, "threeeighths"},
                {322, "fiveeighths"},
                {323, "seveneighths"},
                {324, "onethird"},
                {325, "twothirds"},
                {326, "zerosuperior"},
                {150, "onesuperior"},
                {164, "twosuperior"},
                {169, "threesuperior"},
                {327, "foursuperior"},
                {328, "fivesuperior"},
                {329, "sixsuperior"},
                {330, "sevensuperior"},
                {331, "eightsuperior"},
                {332, "ninesuperior"},
                {333, "zeroinferior"},
                {334, "oneinferior"},
                {335, "twoinferior"},
                {336, "threeinferior"},
                {337, "fourinferior"},
                {338, "fiveinferior"},
                {339, "sixinferior"},
                {340, "seveninferior"},
                {341, "eightinferior"},
                {342, "nineinferior"},
                {343, "centinferior"},
                {344, "dollarinferior"},
                {345, "periodinferior"},
                {346, "commainferior"},
                {347, "Agravesmall"},
                {348, "Aacutesmall"},
                {349, "Acircumflexsmall"},
                {350, "Atildesmall"},
                {351, "Adieresissmall"},
                {352, "Aringsmall"},
                {353, "AEsmall"},
                {354, "Ccedillasmall"},
                {355, "Egravesmall"},
                {356, "Eacutesmall"},
                {357, "Ecircumflexsmall"},
                {358, "Edieresissmall"},
                {359, "Igravesmall"},
                {360, "Iacutesmall"},
                {361, "Icircumflexsmall"},
                {362, "Idieresissmall"},
                {363, "Ethsmall"},
                {364, "Ntildesmall"},
                {365, "Ogravesmall"},
                {366, "Oacutesmall"},
                {367, "Ocircumflexsmall"},
                {368, "Otildesmall"},
                {369, "Odieresissmall"},
                {370, "OEsmall"},
                {371, "Oslashsmall"},
                {372, "Ugravesmall"},
                {373, "Uacutesmall"},
                {374, "Ucircumflexsmall"},
                {375, "Udieresissmall"},
                {376, "Yacutesmall"},
                {377, "Thornsmall"},
                {378, "Ydieresissmall"}
        };

        int gid = 0;
        for (Object[] charsetEntry : cffExpertCharsetTable)
        {
            addSID(gid++, (Integer) charsetEntry[CHAR_CODE], charsetEntry[CHAR_NAME].toString());
        }
    }

    /**
     * Returns an instance of the CFFExpertCharset class.
     * @return an instance of CFFExpertCharset
     */
    public static CFFExpertCharset getInstance()
    {
        return CFFExpertCharset.INSTANCE;
    }

    private static final CFFExpertCharset INSTANCE = new CFFExpertCharset();

}
