| /* |
| * 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.fonts.type1; |
| |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| /** |
| * Enumerates the linkplain http://unicode.org/Public/MAPPINGS/VENDORS/ADOBE/stdenc.txt for |
| * characters found in a Type1 font. |
| */ |
| public enum AdobeStandardEncoding { |
| /** space character */ |
| space(0x0020, 0x20, "SPACE", "space"), |
| /** space character */ |
| space_nobreak(0x00A0, 0x20, "NO-BREAK SPACE", "space"), |
| /** exclamation mark */ |
| exclam(0x0021, 0x21, "EXCLAMATION MARK", "exclam"), |
| /** quotation mark */ |
| quotedbl(0x0022, 0x22, "QUOTATION MARK", "quotedbl"), |
| /** number sign */ |
| numersign(0x0023, 0x23, "NUMBER SIGN", "numbersign"), |
| /** dollar character */ |
| dollar(0x0024, 0x24, "DOLLAR SIGN", "dollar"), |
| /** percent character */ |
| percent(0x0025, 0x25, "PERCENT SIGN", "percent"), |
| /** ampersand character */ |
| ampersand(0x0026, 0x26, "AMPERSAND", "ampersand"), |
| /** right single quotation mark */ |
| quoteright(0x2019, 0x27, "RIGHT SINGLE QUOTATION MARK", "quoteright"), |
| /** left parenthesis character */ |
| parenleft(0x0028, 0x28, "LEFT PARENTHESIS", "parenleft"), |
| /** right parenthesis character */ |
| parenright(0x0029, 0x29, "RIGHT PARENTHESIS", "parenright"), |
| /** asterisk character */ |
| asterisk(0x002A, 0x2A, "ASTERISK", "asterisk"), |
| /** plus sign */ |
| plus(0x002B, 0x2B, "PLUS SIGN", "plus"), |
| /** comma character */ |
| comma(0x002C, 0x2C, "COMMA", "comma"), |
| /** hyphen-minus character */ |
| hyphen(0x002D, 0x2D, "HYPHEN-MINUS", "hyphen"), |
| /** soft-hyphen character */ |
| hyphen_soft(0x00AD, 0x2D, "SOFT HYPHEN", "hyphen"), |
| /** period character */ |
| period(0x002E, 0x2E, "FULL STOP", "period"), |
| /** slash character */ |
| slash(0x002F, 0x2F, "SOLIDUS", "slash"), |
| /** zero character */ |
| zero(0x0030, 0x30, "DIGIT ZERO", "zero"), |
| /** one character */ |
| one(0x0031, 0x31, "DIGIT ONE", "one"), |
| /** two character */ |
| two(0x0032, 0x32, "DIGIT TWO", "two"), |
| /** three character */ |
| three(0x0033, 0x33, "DIGIT THREE", "three"), |
| /** four character */ |
| four(0x0034, 0x34, "DIGIT FOUR", "four"), |
| /** five character */ |
| five(0x0035, 0x35, "DIGIT FIVE", "five"), |
| /** six character */ |
| six(0x0036, 0x36, "DIGIT SIX", "six"), |
| /** seven character */ |
| seven(0x0037, 0x37, "DIGIT SEVEN", "seven"), |
| /** eight character */ |
| eight(0x0038, 0x38, "DIGIT EIGHT", "eight"), |
| /** nine character */ |
| nine(0x0039, 0x39, "DIGIT NINE", "nine"), |
| /** colon character */ |
| colon(0x003A, 0x3A, "COLON", "colon"), |
| /** semi-colon character */ |
| semicolon(0x003B, 0x3B, "SEMICOLON", "semicolon"), |
| /** less character */ |
| less(0x003C, 0x3C, "LESS-THAN SIGN", "less"), |
| /** equal character */ |
| equal(0x003D, 0x3D, "EQUALS SIGN", "equal"), |
| /** greater character */ |
| greater(0x003E, 0x3E, "GREATER-THAN SIGN", "greater"), |
| /** question character */ |
| question(0x003F, 0x3F, "QUESTION MARK", "question"), |
| /** at character */ |
| at(0x0040, 0x40, "COMMERCIAL AT", "at"), |
| /** A character */ |
| A(0x0041, 0x41, "LATIN CAPITAL LETTER A", "A"), |
| /** B character */ |
| B(0x0042, 0x42, "LATIN CAPITAL LETTER B", "B"), |
| /** C character */ |
| C(0x0043, 0x43, "LATIN CAPITAL LETTER C", "C"), |
| /** D character */ |
| D(0x0044, 0x44, "LATIN CAPITAL LETTER D", "D"), |
| /** E character */ |
| E(0x0045, 0x45, "LATIN CAPITAL LETTER E", "E"), |
| /** F character */ |
| F(0x0046, 0x46, "LATIN CAPITAL LETTER F", "F"), |
| /** G character */ |
| G(0x0047, 0x47, "LATIN CAPITAL LETTER G", "G"), |
| /** H character */ |
| H(0x0048, 0x48, "LATIN CAPITAL LETTER H", "H"), |
| /** I character */ |
| I(0x0049, 0x49, "LATIN CAPITAL LETTER I", "I"), |
| /** J character */ |
| J(0x004A, 0x4A, "LATIN CAPITAL LETTER J", "J"), |
| /** K character */ |
| K(0x004B, 0x4B, "LATIN CAPITAL LETTER K", "K"), |
| /** L character */ |
| L(0x004C, 0x4C, "LATIN CAPITAL LETTER L", "L"), |
| /** M character */ |
| M(0x004D, 0x4D, "LATIN CAPITAL LETTER M", "M"), |
| /** N character */ |
| N(0x004E, 0x4E, "LATIN CAPITAL LETTER N", "N"), |
| /** O character */ |
| O(0x004F, 0x4F, "LATIN CAPITAL LETTER O", "O"), |
| /** P character */ |
| P(0x0050, 0x50, "LATIN CAPITAL LETTER P", "P"), |
| /** Q character */ |
| Q(0x0051, 0x51, "LATIN CAPITAL LETTER Q", "Q"), |
| /** R character */ |
| R(0x0052, 0x52, "LATIN CAPITAL LETTER R", "R"), |
| /** S character */ |
| S(0x0053, 0x53, "LATIN CAPITAL LETTER S", "S"), |
| /** T character */ |
| T(0x0054, 0x54, "LATIN CAPITAL LETTER T", "T"), |
| /** U character */ |
| U(0x0055, 0x55, "LATIN CAPITAL LETTER U", "U"), |
| /** V character */ |
| V(0x0056, 0x56, "LATIN CAPITAL LETTER V", "V"), |
| /** W character */ |
| W(0x0057, 0x57, "LATIN CAPITAL LETTER W", "W"), |
| /** X character */ |
| X(0x0058, 0x58, "LATIN CAPITAL LETTER X", "X"), |
| /** Y character */ |
| Y(0x0059, 0x59, "LATIN CAPITAL LETTER Y", "Y"), |
| /** Z character */ |
| Z(0x005A, 0x5A, "LATIN CAPITAL LETTER Z", "Z"), |
| /** left bracket character */ |
| bracketleft(0x005B, 0x5B, "LEFT SQUARE BRACKET", "bracketleft"), |
| /** back slash character */ |
| backslash(0x005C, 0x5C, "REVERSE SOLIDUS", "backslash"), |
| /** bracket right character */ |
| bracketright(0x005D, 0x5D, "RIGHT SQUARE BRACKET", "bracketright"), |
| /** circumflex character */ |
| asciicircum(0x005E, 0x5E, "CIRCUMFLEX ACCENT", "asciicircum"), |
| /** under score character */ |
| underscore(0x005F, 0x5F, "LOW LINE", "underscore"), |
| /** left single quotation character */ |
| quoteleft(0x2018, 0x60, "LEFT SINGLE QUOTATION MARK", "quoteleft"), |
| /** a character */ |
| a(0x0061, 0x61, "LATIN SMALL LETTER A", "a"), |
| /** b character */ |
| b(0x0062, 0x62, "LATIN SMALL LETTER B", "b"), |
| /** c character */ |
| c(0x0063, 0x63, "LATIN SMALL LETTER C", "c"), |
| /** d character */ |
| d(0x0064, 0x64, "LATIN SMALL LETTER D", "d"), |
| /** e character */ |
| e(0x0065, 0x65, "LATIN SMALL LETTER E", "e"), |
| /** f character */ |
| f(0x0066, 0x66, "LATIN SMALL LETTER F", "f"), |
| /** g character */ |
| g(0x0067, 0x67, "LATIN SMALL LETTER G", "g"), |
| /** h character */ |
| h(0x0068, 0x68, "LATIN SMALL LETTER H", "h"), |
| /** i character */ |
| i(0x0069, 0x69, "LATIN SMALL LETTER I", "i"), |
| /** j character */ |
| j(0x006A, 0x6A, "LATIN SMALL LETTER J", "j"), |
| /** k character */ |
| k(0x006B, 0x6B, "LATIN SMALL LETTER K", "k"), |
| /** l character */ |
| l(0x006C, 0x6C, "LATIN SMALL LETTER L", "l"), |
| /** m character */ |
| m(0x006D, 0x6D, "LATIN SMALL LETTER M", "m"), |
| /** n character */ |
| n(0x006E, 0x6E, "LATIN SMALL LETTER N", "n"), |
| /** o character */ |
| o(0x006F, 0x6F, "LATIN SMALL LETTER O", "o"), |
| /** p character */ |
| p(0x0070, 0x70, "LATIN SMALL LETTER P", "p"), |
| /** q character */ |
| q(0x0071, 0x71, "LATIN SMALL LETTER Q", "q"), |
| /** r character */ |
| r(0x0072, 0x72, "LATIN SMALL LETTER R", "r"), |
| /** s character */ |
| s(0x0073, 0x73, "LATIN SMALL LETTER S", "s"), |
| /** t character */ |
| t(0x0074, 0x74, "LATIN SMALL LETTER T", "t"), |
| /** u character */ |
| u(0x0075, 0x75, "LATIN SMALL LETTER U", "u"), |
| /** v character */ |
| v(0x0076, 0x76, "LATIN SMALL LETTER V", "v"), |
| /** w character */ |
| w(0x0077, 0x77, "LATIN SMALL LETTER W", "w"), |
| /** x character */ |
| x(0x0078, 0x78, "LATIN SMALL LETTER X", "x"), |
| /** y character */ |
| y(0x0079, 0x79, "LATIN SMALL LETTER Y", "y"), |
| /** z character */ |
| z(0x007A, 0x7A, "LATIN SMALL LETTER Z", "z"), |
| /** left curly bracket character */ |
| braceleft(0x007B, 0x7B, "LEFT CURLY BRACKET", "braceleft"), |
| /** vertical line character */ |
| bar(0x007C, 0x7C, "VERTICAL LINE", "bar"), |
| /** right curly bracket character */ |
| braceright(0x007D, 0x7D, "RIGHT CURLY BRACKET", "braceright"), |
| /** tilde character */ |
| asciitilde(0x007E, 0x7E, "TILDE", "asciitilde"), |
| /** inverted exclamation mark */ |
| exclamdown(0x00A1, 0xA1, "INVERTED EXCLAMATION MARK", "exclamdown"), |
| /** cent character */ |
| cent(0x00A2, 0xA2, "CENT SIGN", "cent"), |
| /** sterling character */ |
| sterling(0x00A3, 0xA3, "POUND SIGN", "sterling"), |
| /** fraction slash character */ |
| fraction(0x2044, 0xA4, "FRACTION SLASH", "fraction"), |
| /** division slash character */ |
| fraction_division_slash(0x2215, 0xA4, "DIVISION SLASH", "fraction"), |
| /** yen character */ |
| yen(0x00A5, 0xA5, "YEN SIGN", "yen"), |
| /** florin character */ |
| florin(0x0192, 0xA6, "LATIN SMALL LETTER F WITH HOOK", "florin"), |
| /** section sign character */ |
| section(0x00A7, 0xA7, "SECTION SIGN", "section"), |
| /** currency sign character */ |
| currency(0x00A4, 0xA8, "CURRENCY SIGN", "currency"), |
| /** apostrophe character */ |
| quotesingle(0x0027, 0xA9, "APOSTROPHE", "quotesingle"), |
| /** double left quotation mark */ |
| quotedblleft(0x201C, 0xAA, "LEFT DOUBLE QUOTATION MARK", "quotedblleft"), |
| /** left-pointing double angle quotation mark */ |
| guillemotleft(0x00AB, 0xAB, "LEFT-POINTING DOUBLE ANGLE QUOTATION MARK", "guillemotleft"), |
| /** left-pointing single quotation mark */ |
| guilsinglleft(0x2039, 0xAC, "SINGLE LEFT-POINTING ANGLE QUOTATION MARK", "guilsinglleft"), |
| /** right-pointing single quotation mark */ |
| guilsinglright(0x203A, 0xAD, "SINGLE RIGHT-POINTING ANGLE QUOTATION MARK", "guilsinglright"), |
| /** fi ligature */ |
| fi(0xFB01, 0xAE, "LATIN SMALL LIGATURE FI", "fi"), |
| /** fl ligature */ |
| fl(0xFB02, 0xAF, "LATIN SMALL LIGATURE FL", "fl"), |
| /** en-dash character */ |
| endash(0x2013, 0xB1, "EN DASH", "endash"), |
| /** dagger character */ |
| dagger(0x2020, 0xB2, "DAGGER", "dagger"), |
| /** double dagger character */ |
| daggerdbl(0x2021, 0xB3, "DOUBLE DAGGER", "daggerdbl"), |
| /** centered period character */ |
| periodcentered(0x00B7, 0xB4, "MIDDLE DOT", "periodcentered"), |
| /** centered period character */ |
| periodcentered_bullet_operator(0x2219, 0xB4, "BULLET OPERATOR", "periodcentered"), |
| /** paragraph character */ |
| paragraph(0x00B6, 0xB6, "PILCROW SIGN", "paragraph"), |
| /** bullet character */ |
| bullet(0x2022, 0xB7, "BULLET", "bullet"), |
| /** single low-9 quotation mark */ |
| quotesinglbase(0x201A, 0xB8, "SINGLE LOW-9 QUOTATION MARK", "quotesinglbase"), |
| /** double low-9 quotation mark */ |
| quotedblbase(0x201E, 0xB9, "DOUBLE LOW-9 QUOTATION MARK", "quotedblbase"), |
| /** right double quotation mark */ |
| quotedblright(0x201D, 0xBA, "RIGHT DOUBLE QUOTATION MARK", "quotedblright"), |
| /** right-pointing double angle quotation mark */ |
| guillemotright(0x00BB, 0xBB, "RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK", "guillemotright"), |
| /** horizontal ellipsis character */ |
| ellipsis(0x2026, 0xBC, "HORIZONTAL ELLIPSIS", "ellipsis"), |
| /** per-mille character */ |
| perthousand(0x2030, 0xBD, "PER MILLE SIGN", "perthousand"), |
| /** inverted question mark */ |
| questiondown(0x00BF, 0xBF, "INVERTED QUESTION MARK", "questiondown"), |
| /** grave accent character */ |
| grave(0x0060, 0xC1, "GRAVE ACCENT", "grave"), |
| /** acute accent character */ |
| acute(0x00B4, 0xC2, "ACUTE ACCENT", "acute"), |
| /** modifier letter circumflex accent character */ |
| circumflex(0x02C6, 0xC3, "MODIFIER LETTER CIRCUMFLEX ACCENT", "circumflex"), |
| /** small tilde character */ |
| tilde(0x02DC, 0xC4, "SMALL TILDE", "tilde"), |
| /** macron character */ |
| macron(0x00AF, 0xC5, "MACRON", "macron"), |
| /** modifier letter macron character */ |
| macron_modifier_letter(0x02C9, 0xC5, "MODIFIER LETTER MACRON", "macron"), |
| /** breve character */ |
| breve(0x02D8, 0xC6, "BREVE", "breve"), |
| /** dot above character */ |
| dotaccent(0x02D9, 0xC7, "DOT ABOVE", "dotaccent"), |
| /** diaeresis character */ |
| dieresis(0x00A8, 0xC8, "DIAERESIS", "dieresis"), |
| /** ring above character */ |
| ring(0x02DA, 0xCA, "RING ABOVE", "ring"), |
| /** cedilla character */ |
| cedilla(0x00B8, 0xCB, "CEDILLA", "cedilla"), |
| /** double acute accent character */ |
| hungarumlaut(0x02DD, 0xCD, "DOUBLE ACUTE ACCENT", "hungarumlaut"), |
| /** agonek character */ |
| ogonek(0x02DB, 0xCE, "OGONEK", "ogonek"), |
| /** caron character */ |
| caron(0x02C7, 0xCF, "CARON", "caron"), |
| /** emdash character */ |
| emdash(0x2014, 0xD0, "EM DASH", "emdash"), |
| /** AE (capitalised) character */ |
| AE(0x00C6, 0xE1, "LATIN CAPITAL LETTER AE", "AE"), |
| /** femenine ordinal indicator character */ |
| ordfeminine(0x00AA, 0xE3, "FEMININE ORDINAL INDICATOR", "ordfeminine"), |
| /** capital letter L with stroke character */ |
| Lslash(0x0141, 0xE8, "LATIN CAPITAL LETTER L WITH STROKE", "Lslash"), |
| /** capital letter O with stroke character */ |
| Oslash(0x00D8, 0xE9, "LATIN CAPITAL LETTER O WITH STROKE", "Oslash"), |
| /** OE (capitalised) character */ |
| OE(0x0152, 0xEA, "LATIN CAPITAL LIGATURE OE", "OE"), |
| /** masculine ordinal indicator character */ |
| ordmasculine(0x00BA, 0xEB, "MASCULINE ORDINAL INDICATOR", "ordmasculine"), |
| /** ae (small) character */ |
| ae(0x00E6, 0xF1, "LATIN SMALL LETTER AE", "ae"), |
| /** dotless i character */ |
| dotlessi(0x0131, 0xF5, "LATIN SMALL LETTER DOTLESS I", "dotlessi"), |
| /** small letter l with stroke character */ |
| lslash(0x0142, 0xF8, "LATIN SMALL LETTER L WITH STROKE", "lslash"), |
| /** small letter o with stroke character */ |
| oslash(0x00F8, 0xF9, "LATIN SMALL LETTER O WITH STROKE", "oslash"), |
| /** oe (small) character */ |
| oe(0x0153, 0xFA, "LATIN SMALL LIGATURE OE", "oe"), |
| /** small letter sharp s character */ |
| germandbls(0x00DF, 0xFB, "LATIN SMALL LETTER SHARP S", "germandbls"); |
| |
| private final int unicodeIndex; |
| private final int adobeCodePoint; |
| private final String unicodeName; |
| private final String adobeName; |
| |
| /** The name of the Adobe Standard Encoding as seen in an AFM file. */ |
| public static final String NAME = "AdobeStandardEncoding"; |
| |
| private static final Map<String, AdobeStandardEncoding> CACHE |
| = new HashMap<String, AdobeStandardEncoding>(); |
| static { |
| for (AdobeStandardEncoding encoding : AdobeStandardEncoding.values()) { |
| CACHE.put(encoding.getAdobeName(), encoding); |
| } |
| } |
| |
| private AdobeStandardEncoding(int unicodeIndex, int adobeCodePoint, String unicodeName, |
| String adobeName) { |
| this.unicodeIndex = unicodeIndex; |
| this.adobeCodePoint = adobeCodePoint; |
| this.unicodeName = unicodeName; |
| this.adobeName = adobeName; |
| } |
| |
| /** |
| * The Unicode index of this character. |
| * |
| * @return the Unicode index |
| */ |
| int getUnicodeIndex() { |
| return unicodeIndex; |
| } |
| |
| /** |
| * The Adobe code point of this character. |
| * |
| * @return the Adobe code point |
| */ |
| int getAdobeCodePoint() { |
| return adobeCodePoint; |
| } |
| |
| /** |
| * The Unicode name for this character. |
| * |
| * @return the Unicode name |
| */ |
| String getUnicodeName() { |
| return unicodeName; |
| } |
| |
| /** |
| * The Adobe name for this character. |
| * |
| * @return the Adobe name |
| */ |
| String getAdobeName() { |
| return adobeName; |
| } |
| |
| /** |
| * Returns the code point of a Adobe standard encoded character given its name. If the name |
| * cannot be found, -1 is returned. |
| * |
| * @param adobeName the name of the character |
| * @return the Adobe code point |
| */ |
| public static int getAdobeCodePoint(String adobeName) { |
| AdobeStandardEncoding encoding = CACHE.get(adobeName); |
| return encoding != null ? encoding.getAdobeCodePoint() : -1; |
| } |
| |
| public static String getCharFromCodePoint(int codePoint) { |
| for (AdobeStandardEncoding encoding : CACHE.values()) { |
| if (encoding.getAdobeCodePoint() == codePoint) { |
| return encoding.getAdobeName(); |
| } |
| } |
| return ""; |
| } |
| |
| public static char getUnicodeFromCodePoint(int codePoint) { |
| for (AdobeStandardEncoding encoding : CACHE.values()) { |
| if (encoding.getAdobeCodePoint() == codePoint) { |
| return (char) encoding.getUnicodeIndex(); |
| } |
| } |
| return (char) -1; |
| } |
| } |