[poppler] goo/GooString.cc goo/GooString.h poppler/GfxFont.cc poppler/GlobalParams.cc poppler/GlobalParams.h poppler/NameToUnicodeTable.h
Albert Astals Cid
aacid at kemper.freedesktop.org
Sat Nov 30 08:32:32 PST 2013
goo/GooString.cc | 10 +
goo/GooString.h | 4
poppler/GfxFont.cc | 15 +
poppler/GlobalParams.cc | 33 ++-
poppler/GlobalParams.h | 16 +
poppler/NameToUnicodeTable.h | 415 +++++++++++++++++++++----------------------
6 files changed, 274 insertions(+), 219 deletions(-)
New commits:
commit 98d75dcdb9b73feb6f35d8ad76f5d0c428289f91
Author: Jason Crain <jason at aquaticape.us>
Date: Sat Nov 30 17:29:50 2013 +0100
Limit use of ZapfDingbats character names
Some PDFs use names from ZapfDingbats (a1-a206) without intending for
them to be used for text extraction. Only use these character names
to locate glyphs or for text extraction with ZapfDingbats fonts.
Bug #60243
diff --git a/goo/GooString.cc b/goo/GooString.cc
index d35161d..e27f158 100644
--- a/goo/GooString.cc
+++ b/goo/GooString.cc
@@ -23,6 +23,7 @@
// Copyright (C) 2012 Fabio D'Urso <fabiodurso at hotmail.it>
// Copyright (C) 2012 Adrian Johnson <ajohnson at redneon.com>
// Copyright (C) 2012 Pino Toscano <pino at kde.org>
+// Copyright (C) 2013 Jason Crain <jason at aquaticape.us>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
@@ -893,6 +894,15 @@ int GooString::cmpN(const char *sA, int n) const {
return 0;
}
+GBool GooString::endsWith(const char *suffix) const {
+ int suffixLen = strlen(suffix);
+
+ if (length < suffixLen)
+ return gFalse;
+
+ return strcmp(s + length - suffixLen, suffix) == 0;
+}
+
GBool GooString::hasUnicodeMarker(void)
{
return length > 1 && (s[0] & 0xff) == 0xfe && (s[1] & 0xff) == 0xff;
diff --git a/goo/GooString.h b/goo/GooString.h
index b24051b..e92a889 100644
--- a/goo/GooString.h
+++ b/goo/GooString.h
@@ -19,6 +19,7 @@
// Copyright (C) 2006 Krzysztof Kowalczyk <kkowalczyk at gmail.com>
// Copyright (C) 2008-2010, 2012 Albert Astals Cid <aacid at kde.org>
// Copyright (C) 2012 Fabio D'Urso <fabiodurso at hotmail.it>
+// Copyright (C) 2013 Jason Crain <jason at aquaticape.us>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
@@ -140,6 +141,9 @@ public:
int cmp(const char *sA) const;
int cmpN(const char *sA, int n) const;
+ // Return true if string ends with suffix
+ GBool endsWith(const char *suffix) const;
+
GBool hasUnicodeMarker(void);
// Sanitizes the string so that it does
diff --git a/poppler/GfxFont.cc b/poppler/GfxFont.cc
index ea22af8..c54181b 100644
--- a/poppler/GfxFont.cc
+++ b/poppler/GfxFont.cc
@@ -30,6 +30,7 @@
// Copyright (C) 2012 Yi Yang <ahyangyi at gmail.com>
// Copyright (C) 2012 Suzuki Toshiya <mpsuzuki at hiroshima-u.ac.jp>
// Copyright (C) 2012 Thomas Freitag <Thomas.Freitag at alfa.de>
+// Copyright (C) 2013 Jason Crain <jason at aquaticape.us>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
@@ -1221,10 +1222,16 @@ Gfx8BitFont::Gfx8BitFont(XRef *xref, const char *tagA, Ref idA, GooString *nameA
// pass 1: use the name-to-Unicode mapping table
missing = hex = gFalse;
+ GBool isZapfDingbats = name && name->endsWith("ZapfDingbats");
for (code = 0; code < 256; ++code) {
if ((charName = enc[code])) {
- if (!(toUnicode[code] = globalParams->mapNameToUnicode(charName)) &&
- strcmp(charName, ".notdef")) {
+ if (isZapfDingbats) {
+ // include ZapfDingbats names
+ toUnicode[code] = globalParams->mapNameToUnicodeAll(charName);
+ } else {
+ toUnicode[code] = globalParams->mapNameToUnicodeText(charName);
+ }
+ if (!toUnicode[code] && strcmp(charName, ".notdef")) {
// if it wasn't in the name-to-Unicode table, check for a
// name that looks like 'Axx' or 'xx', where 'A' is any letter
// and 'xx' is two hex digits
@@ -1485,7 +1492,7 @@ static int parseCharName(char *charName, Unicode *uBuf, int uLen,
// corresponding character in that list.
// 3.2. otherwise, if the component is in the Adobe Glyph List, then map it
// to the corresponding character in that list.
- if (names && (uBuf[0] = globalParams->mapNameToUnicode(charName))) {
+ if (names && (uBuf[0] = globalParams->mapNameToUnicodeText(charName))) {
return 1;
}
if (numeric) {
@@ -1674,7 +1681,7 @@ int *Gfx8BitFont::getCodeToGIDMap(FoFiTrueType *ff) {
} else if (useUnicode) {
Unicode *uAux;
for (i = 0; i < 256; ++i) {
- if (((charName = enc[i]) && (u = globalParams->mapNameToUnicode(charName))))
+ if (((charName = enc[i]) && (u = globalParams->mapNameToUnicodeAll(charName))))
map[i] = ff->mapCodeToGID(cmap, u);
else
{
diff --git a/poppler/GlobalParams.cc b/poppler/GlobalParams.cc
index 6efdd0c..01a3157 100644
--- a/poppler/GlobalParams.cc
+++ b/poppler/GlobalParams.cc
@@ -34,6 +34,7 @@
// Copyright (C) 2012 Adrian Johnson <ajohnson at redneon.com>
// Copyright (C) 2012 Thomas Freitag <Thomas.Freitag at alfa.de>
// Copyright (C) 2012 Peter Breitenlohner <peb at mppmu.mpg.de>
+// Copyright (C) 2013 Jason Crain <jason at aquaticape.us>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
@@ -576,7 +577,8 @@ GlobalParams::GlobalParams(const char *customPopplerDataDir)
#ifdef _WIN32
substFiles = new GooHash(gTrue);
#endif
- nameToUnicode = new NameToCharCode();
+ nameToUnicodeZapfDingbats = new NameToCharCode();
+ nameToUnicodeText = new NameToCharCode();
cidToUnicodes = new GooHash(gTrue);
unicodeToUnicodes = new GooHash(gTrue);
residentUnicodeMaps = new GooHash();
@@ -648,9 +650,13 @@ GlobalParams::GlobalParams(const char *customPopplerDataDir)
securityHandlers = new GooList();
#endif
- // set up the initial nameToUnicode table
- for (i = 0; nameToUnicodeTab[i].name; ++i) {
- nameToUnicode->add(nameToUnicodeTab[i].name, nameToUnicodeTab[i].u);
+ // set up the initial nameToUnicode tables
+ for (i = 0; nameToUnicodeZapfDingbatsTab[i].name; ++i) {
+ nameToUnicodeZapfDingbats->add(nameToUnicodeZapfDingbatsTab[i].name, nameToUnicodeZapfDingbatsTab[i].u);
+ }
+
+ for (i = 0; nameToUnicodeTextTab[i].name; ++i) {
+ nameToUnicodeText->add(nameToUnicodeTextTab[i].name, nameToUnicodeTextTab[i].u);
}
// set up the residentUnicodeMaps table
@@ -740,7 +746,7 @@ void GlobalParams::parseNameToUnicode(GooString *name) {
tok2 = strtok_r(NULL, " \t\r\n", &tokptr);
if (tok1 && tok2) {
sscanf(tok1, "%x", &u);
- nameToUnicode->add(tok2, u);
+ nameToUnicodeText->add(tok2, u);
} else {
error(errConfig, -1, "Bad line in 'nameToUnicode' file ({0:t}:{1:d})",
name, line);
@@ -796,7 +802,8 @@ GlobalParams::~GlobalParams() {
delete macRomanReverseMap;
- delete nameToUnicode;
+ delete nameToUnicodeZapfDingbats;
+ delete nameToUnicodeText;
deleteGooHash(cidToUnicodes, GooString);
deleteGooHash(unicodeToUnicodes, GooString);
deleteGooHash(residentUnicodeMaps, UnicodeMap);
@@ -853,9 +860,17 @@ CharCode GlobalParams::getMacRomanCharCode(char *charName) {
return macRomanReverseMap->lookup(charName);
}
-Unicode GlobalParams::mapNameToUnicode(const char *charName) {
- // no need to lock - nameToUnicode is constant
- return nameToUnicode->lookup(charName);
+Unicode GlobalParams::mapNameToUnicodeAll(const char *charName) {
+ // no need to lock - nameToUnicodeZapfDingbats and nameToUnicodeText are constant
+ Unicode u = nameToUnicodeZapfDingbats->lookup(charName);
+ if (!u)
+ u = nameToUnicodeText->lookup(charName);
+ return u;
+}
+
+Unicode GlobalParams::mapNameToUnicodeText(const char *charName) {
+ // no need to lock - nameToUnicodeText is constant
+ return nameToUnicodeText->lookup(charName);
}
UnicodeMap *GlobalParams::getResidentUnicodeMap(GooString *encodingName) {
diff --git a/poppler/GlobalParams.h b/poppler/GlobalParams.h
index bc11684..c33a802 100644
--- a/poppler/GlobalParams.h
+++ b/poppler/GlobalParams.h
@@ -25,6 +25,7 @@
// Copyright (C) 2011 Pino Toscano <pino at kde.org>
// Copyright (C) 2012 Adrian Johnson <ajohnson at redneon.com>
// Copyright (C) 2012 Thomas Freitag <Thomas.Freitag at alfa.de>
+// Copyright (C) 2013 Jason Crain <jason at aquaticape.us>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
@@ -139,7 +140,14 @@ public:
CharCode getMacRomanCharCode(char *charName);
- Unicode mapNameToUnicode(const char *charName);
+ // Return Unicode values for character names. Used for general text
+ // extraction.
+ Unicode mapNameToUnicodeText(const char *charName);
+
+ // Return Unicode values for character names. Used for glyph
+ // lookups or text extraction with ZapfDingbats fonts.
+ Unicode mapNameToUnicodeAll(const char *charName);
+
UnicodeMap *getResidentUnicodeMap(GooString *encodingName);
FILE *getUnicodeMapFile(GooString *encodingName);
FILE *findCMapFile(GooString *collection, GooString *cMapName);
@@ -271,8 +279,10 @@ private:
//----- user-modifiable settings
- NameToCharCode * // mapping from char name to Unicode
- nameToUnicode;
+ NameToCharCode * // mapping from char name to Unicode for ZapfDingbats
+ nameToUnicodeZapfDingbats;
+ NameToCharCode * // mapping from char name to Unicode for text
+ nameToUnicodeText; // extraction
GooHash *cidToUnicodes; // files for mappings from char collections
// to Unicode, indexed by collection name
// [GooString]
diff --git a/poppler/NameToUnicodeTable.h b/poppler/NameToUnicodeTable.h
index 74645ab..827edba 100644
--- a/poppler/NameToUnicodeTable.h
+++ b/poppler/NameToUnicodeTable.h
@@ -14,6 +14,7 @@
// under GPL version 2 or later
//
// Copyright (C) 2011, 2012 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2013 Jason Crain <jason at aquaticape.us>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
@@ -24,10 +25,13 @@
#include <stddef.h>
-static struct {
+struct NameToUnicodeTab {
Unicode u;
const char *name;
-} nameToUnicodeTab[] = {
+};
+
+// map character names to Unicode
+static struct NameToUnicodeTab nameToUnicodeTextTab[] = {
{0x0021, "!"},
{0x0023, "#"},
{0x0024, "$"},
@@ -800,207 +804,6 @@ static struct {
{0x005f, "_"},
{0x0060, "`"},
{0x0061, "a"},
- {0x275e, "a100"},
- {0x2761, "a101"},
- {0x2762, "a102"},
- {0x2763, "a103"},
- {0x2764, "a104"},
- {0x2710, "a105"},
- {0x2765, "a106"},
- {0x2766, "a107"},
- {0x2767, "a108"},
- {0x2660, "a109"},
- {0x2721, "a10"},
- {0x2665, "a110"},
- {0x2666, "a111"},
- {0x2663, "a112"},
- {0x2709, "a117"},
- {0x2708, "a118"},
- {0x2707, "a119"},
- {0x261b, "a11"},
- {0x2460, "a120"},
- {0x2461, "a121"},
- {0x2462, "a122"},
- {0x2463, "a123"},
- {0x2464, "a124"},
- {0x2465, "a125"},
- {0x2466, "a126"},
- {0x2467, "a127"},
- {0x2468, "a128"},
- {0x2469, "a129"},
- {0x261e, "a12"},
- {0x2776, "a130"},
- {0x2777, "a131"},
- {0x2778, "a132"},
- {0x2779, "a133"},
- {0x277a, "a134"},
- {0x277b, "a135"},
- {0x277c, "a136"},
- {0x277d, "a137"},
- {0x277e, "a138"},
- {0x277f, "a139"},
- {0x270c, "a13"},
- {0x2780, "a140"},
- {0x2781, "a141"},
- {0x2782, "a142"},
- {0x2783, "a143"},
- {0x2784, "a144"},
- {0x2785, "a145"},
- {0x2786, "a146"},
- {0x2787, "a147"},
- {0x2788, "a148"},
- {0x2789, "a149"},
- {0x270d, "a14"},
- {0x278a, "a150"},
- {0x278b, "a151"},
- {0x278c, "a152"},
- {0x278d, "a153"},
- {0x278e, "a154"},
- {0x278f, "a155"},
- {0x2790, "a156"},
- {0x2791, "a157"},
- {0x2792, "a158"},
- {0x2793, "a159"},
- {0x270e, "a15"},
- {0x2794, "a160"},
- {0x2192, "a161"},
- {0x27a3, "a162"},
- {0x2194, "a163"},
- {0x2195, "a164"},
- {0x2799, "a165"},
- {0x279b, "a166"},
- {0x279c, "a167"},
- {0x279d, "a168"},
- {0x279e, "a169"},
- {0x270f, "a16"},
- {0x279f, "a170"},
- {0x27a0, "a171"},
- {0x27a1, "a172"},
- {0x27a2, "a173"},
- {0x27a4, "a174"},
- {0x27a5, "a175"},
- {0x27a6, "a176"},
- {0x27a7, "a177"},
- {0x27a8, "a178"},
- {0x27a9, "a179"},
- {0x2711, "a17"},
- {0x27ab, "a180"},
- {0x27ad, "a181"},
- {0x27af, "a182"},
- {0x27b2, "a183"},
- {0x27b3, "a184"},
- {0x27b5, "a185"},
- {0x27b8, "a186"},
- {0x27ba, "a187"},
- {0x27bb, "a188"},
- {0x27bc, "a189"},
- {0x2712, "a18"},
- {0x27bd, "a190"},
- {0x27be, "a191"},
- {0x279a, "a192"},
- {0x27aa, "a193"},
- {0x27b6, "a194"},
- {0x27b9, "a195"},
- {0x2798, "a196"},
- {0x27b4, "a197"},
- {0x27b7, "a198"},
- {0x27ac, "a199"},
- {0x2713, "a19"},
- {0x2701, "a1"},
- {0x27ae, "a200"},
- {0x27b1, "a201"},
- {0x2703, "a202"},
- {0x2750, "a203"},
- {0x2752, "a204"},
- {0x276e, "a205"},
- {0x2770, "a206"},
- {0x2714, "a20"},
- {0x2715, "a21"},
- {0x2716, "a22"},
- {0x2717, "a23"},
- {0x2718, "a24"},
- {0x2719, "a25"},
- {0x271a, "a26"},
- {0x271b, "a27"},
- {0x271c, "a28"},
- {0x2722, "a29"},
- {0x2702, "a2"},
- {0x2723, "a30"},
- {0x2724, "a31"},
- {0x2725, "a32"},
- {0x2726, "a33"},
- {0x2727, "a34"},
- {0x2605, "a35"},
- {0x2729, "a36"},
- {0x272a, "a37"},
- {0x272b, "a38"},
- {0x272c, "a39"},
- {0x2704, "a3"},
- {0x272d, "a40"},
- {0x272e, "a41"},
- {0x272f, "a42"},
- {0x2730, "a43"},
- {0x2731, "a44"},
- {0x2732, "a45"},
- {0x2733, "a46"},
- {0x2734, "a47"},
- {0x2735, "a48"},
- {0x2736, "a49"},
- {0x260e, "a4"},
- {0x2737, "a50"},
- {0x2738, "a51"},
- {0x2739, "a52"},
- {0x273a, "a53"},
- {0x273b, "a54"},
- {0x273c, "a55"},
- {0x273d, "a56"},
- {0x273e, "a57"},
- {0x273f, "a58"},
- {0x2740, "a59"},
- {0x2706, "a5"},
- {0x2741, "a60"},
- {0x2742, "a61"},
- {0x2743, "a62"},
- {0x2744, "a63"},
- {0x2745, "a64"},
- {0x2746, "a65"},
- {0x2747, "a66"},
- {0x2748, "a67"},
- {0x2749, "a68"},
- {0x274a, "a69"},
- {0x271d, "a6"},
- {0x274b, "a70"},
- {0x25cf, "a71"},
- {0x274d, "a72"},
- {0x25a0, "a73"},
- {0x274f, "a74"},
- {0x2751, "a75"},
- {0x25b2, "a76"},
- {0x25bc, "a77"},
- {0x25c6, "a78"},
- {0x2756, "a79"},
- {0x271e, "a7"},
- {0x25d7, "a81"},
- {0x2758, "a82"},
- {0x2759, "a83"},
- {0x275a, "a84"},
- {0x276f, "a85"},
- {0x2771, "a86"},
- {0x2772, "a87"},
- {0x2773, "a88"},
- {0x2768, "a89"},
- {0x271f, "a8"},
- {0x2769, "a90"},
- {0x276c, "a91"},
- {0x276d, "a92"},
- {0x276a, "a93"},
- {0x276b, "a94"},
- {0x2774, "a95"},
- {0x2775, "a96"},
- {0x275b, "a97"},
- {0x275c, "a98"},
- {0x275d, "a99"},
- {0x2720, "a9"},
{0x0986, "aabengali"},
{0x00e1, "aacute"},
{0x0906, "aadeva"},
@@ -4473,3 +4276,209 @@ static struct {
{0x007e, "~"},
{ 0, NULL }
};
+
+// map ZapfDingbats names to Unicode
+static struct NameToUnicodeTab nameToUnicodeZapfDingbatsTab[] = {
+ {0x275e, "a100"},
+ {0x2761, "a101"},
+ {0x2762, "a102"},
+ {0x2763, "a103"},
+ {0x2764, "a104"},
+ {0x2710, "a105"},
+ {0x2765, "a106"},
+ {0x2766, "a107"},
+ {0x2767, "a108"},
+ {0x2660, "a109"},
+ {0x2721, "a10"},
+ {0x2665, "a110"},
+ {0x2666, "a111"},
+ {0x2663, "a112"},
+ {0x2709, "a117"},
+ {0x2708, "a118"},
+ {0x2707, "a119"},
+ {0x261b, "a11"},
+ {0x2460, "a120"},
+ {0x2461, "a121"},
+ {0x2462, "a122"},
+ {0x2463, "a123"},
+ {0x2464, "a124"},
+ {0x2465, "a125"},
+ {0x2466, "a126"},
+ {0x2467, "a127"},
+ {0x2468, "a128"},
+ {0x2469, "a129"},
+ {0x261e, "a12"},
+ {0x2776, "a130"},
+ {0x2777, "a131"},
+ {0x2778, "a132"},
+ {0x2779, "a133"},
+ {0x277a, "a134"},
+ {0x277b, "a135"},
+ {0x277c, "a136"},
+ {0x277d, "a137"},
+ {0x277e, "a138"},
+ {0x277f, "a139"},
+ {0x270c, "a13"},
+ {0x2780, "a140"},
+ {0x2781, "a141"},
+ {0x2782, "a142"},
+ {0x2783, "a143"},
+ {0x2784, "a144"},
+ {0x2785, "a145"},
+ {0x2786, "a146"},
+ {0x2787, "a147"},
+ {0x2788, "a148"},
+ {0x2789, "a149"},
+ {0x270d, "a14"},
+ {0x278a, "a150"},
+ {0x278b, "a151"},
+ {0x278c, "a152"},
+ {0x278d, "a153"},
+ {0x278e, "a154"},
+ {0x278f, "a155"},
+ {0x2790, "a156"},
+ {0x2791, "a157"},
+ {0x2792, "a158"},
+ {0x2793, "a159"},
+ {0x270e, "a15"},
+ {0x2794, "a160"},
+ {0x2192, "a161"},
+ {0x27a3, "a162"},
+ {0x2194, "a163"},
+ {0x2195, "a164"},
+ {0x2799, "a165"},
+ {0x279b, "a166"},
+ {0x279c, "a167"},
+ {0x279d, "a168"},
+ {0x279e, "a169"},
+ {0x270f, "a16"},
+ {0x279f, "a170"},
+ {0x27a0, "a171"},
+ {0x27a1, "a172"},
+ {0x27a2, "a173"},
+ {0x27a4, "a174"},
+ {0x27a5, "a175"},
+ {0x27a6, "a176"},
+ {0x27a7, "a177"},
+ {0x27a8, "a178"},
+ {0x27a9, "a179"},
+ {0x2711, "a17"},
+ {0x27ab, "a180"},
+ {0x27ad, "a181"},
+ {0x27af, "a182"},
+ {0x27b2, "a183"},
+ {0x27b3, "a184"},
+ {0x27b5, "a185"},
+ {0x27b8, "a186"},
+ {0x27ba, "a187"},
+ {0x27bb, "a188"},
+ {0x27bc, "a189"},
+ {0x2712, "a18"},
+ {0x27bd, "a190"},
+ {0x27be, "a191"},
+ {0x279a, "a192"},
+ {0x27aa, "a193"},
+ {0x27b6, "a194"},
+ {0x27b9, "a195"},
+ {0x2798, "a196"},
+ {0x27b4, "a197"},
+ {0x27b7, "a198"},
+ {0x27ac, "a199"},
+ {0x2713, "a19"},
+ {0x2701, "a1"},
+ {0x27ae, "a200"},
+ {0x27b1, "a201"},
+ {0x2703, "a202"},
+ {0x2750, "a203"},
+ {0x2752, "a204"},
+ {0x276e, "a205"},
+ {0x2770, "a206"},
+ {0x2714, "a20"},
+ {0x2715, "a21"},
+ {0x2716, "a22"},
+ {0x2717, "a23"},
+ {0x2718, "a24"},
+ {0x2719, "a25"},
+ {0x271a, "a26"},
+ {0x271b, "a27"},
+ {0x271c, "a28"},
+ {0x2722, "a29"},
+ {0x2702, "a2"},
+ {0x2723, "a30"},
+ {0x2724, "a31"},
+ {0x2725, "a32"},
+ {0x2726, "a33"},
+ {0x2727, "a34"},
+ {0x2605, "a35"},
+ {0x2729, "a36"},
+ {0x272a, "a37"},
+ {0x272b, "a38"},
+ {0x272c, "a39"},
+ {0x2704, "a3"},
+ {0x272d, "a40"},
+ {0x272e, "a41"},
+ {0x272f, "a42"},
+ {0x2730, "a43"},
+ {0x2731, "a44"},
+ {0x2732, "a45"},
+ {0x2733, "a46"},
+ {0x2734, "a47"},
+ {0x2735, "a48"},
+ {0x2736, "a49"},
+ {0x260e, "a4"},
+ {0x2737, "a50"},
+ {0x2738, "a51"},
+ {0x2739, "a52"},
+ {0x273a, "a53"},
+ {0x273b, "a54"},
+ {0x273c, "a55"},
+ {0x273d, "a56"},
+ {0x273e, "a57"},
+ {0x273f, "a58"},
+ {0x2740, "a59"},
+ {0x2706, "a5"},
+ {0x2741, "a60"},
+ {0x2742, "a61"},
+ {0x2743, "a62"},
+ {0x2744, "a63"},
+ {0x2745, "a64"},
+ {0x2746, "a65"},
+ {0x2747, "a66"},
+ {0x2748, "a67"},
+ {0x2749, "a68"},
+ {0x274a, "a69"},
+ {0x271d, "a6"},
+ {0x274b, "a70"},
+ {0x25cf, "a71"},
+ {0x274d, "a72"},
+ {0x25a0, "a73"},
+ {0x274f, "a74"},
+ {0x2751, "a75"},
+ {0x25b2, "a76"},
+ {0x25bc, "a77"},
+ {0x25c6, "a78"},
+ {0x2756, "a79"},
+ {0x271e, "a7"},
+ {0x25d7, "a81"},
+ {0x2758, "a82"},
+ {0x2759, "a83"},
+ {0x275a, "a84"},
+ {0x276f, "a85"},
+ {0x2771, "a86"},
+ {0x2772, "a87"},
+ {0x2773, "a88"},
+ {0x2768, "a89"},
+ {0x271f, "a8"},
+ {0x2769, "a90"},
+ {0x276c, "a91"},
+ {0x276d, "a92"},
+ {0x276a, "a93"},
+ {0x276b, "a94"},
+ {0x2774, "a95"},
+ {0x2775, "a96"},
+ {0x275b, "a97"},
+ {0x275c, "a98"},
+ {0x275d, "a99"},
+ {0x2720, "a9"},
+ { 0, NULL }
+};
More information about the poppler
mailing list