00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef CHARCODETOUNICODE_H
00012 #define CHARCODETOUNICODE_H
00013
00014 #include <aconf.h>
00015
00016 #ifdef USE_GCC_PRAGMAS
00017 #pragma interface
00018 #endif
00019
00020 #include "CharTypes.h"
00021
00022 #if MULTITHREADED
00023 #include "GMutex.h"
00024 #endif
00025
00026 struct CharCodeToUnicodeString;
00027
00028
00029
00030 class CharCodeToUnicode {
00031 public:
00032
00033
00034
00035
00036 static CharCodeToUnicode *parseCIDToUnicode(GString *fileName,
00037 GString *collection);
00038
00039
00040
00041
00042 static CharCodeToUnicode *parseUnicodeToUnicode(GString *fileName);
00043
00044
00045
00046
00047 static CharCodeToUnicode *make8BitToUnicode(Unicode *toUnicode);
00048
00049
00050 static CharCodeToUnicode *parseCMap(GString *buf, int nBits);
00051
00052
00053
00054 void mergeCMap(GString *buf, int nBits);
00055
00056 ~CharCodeToUnicode();
00057
00058 void incRefCnt();
00059 void decRefCnt();
00060
00061
00062 GBool match(GString *tagA);
00063
00064
00065 void setMapping(CharCode c, Unicode *u, int len);
00066
00067
00068 int mapToUnicode(CharCode c, Unicode *u, int size);
00069
00070 private:
00071
00072 void parseCMap1(int (*getCharFunc)(void *), void *data, int nBits);
00073 void addMapping(CharCode code, char *uStr, int n, int offset);
00074 CharCodeToUnicode(GString *tagA);
00075 CharCodeToUnicode(GString *tagA, Unicode *mapA,
00076 CharCode mapLenA, GBool copyMap,
00077 CharCodeToUnicodeString *sMapA,
00078 int sMapLenA, int sMapSizeA);
00079
00080 GString *tag;
00081 Unicode *map;
00082 CharCode mapLen;
00083 CharCodeToUnicodeString *sMap;
00084 int sMapLen, sMapSize;
00085 int refCnt;
00086 #ifdef MULTITHREADED
00087 GMutex mutex;
00088 #endif
00089 };
00090
00091
00092
00093 class CharCodeToUnicodeCache {
00094 public:
00095
00096 CharCodeToUnicodeCache(int sizeA);
00097 ~CharCodeToUnicodeCache();
00098
00099
00100
00101
00102 CharCodeToUnicode *getCharCodeToUnicode(GString *tag);
00103
00104
00105 void add(CharCodeToUnicode *ctu);
00106
00107 private:
00108
00109 CharCodeToUnicode **cache;
00110 int size;
00111 };
00112
00113 #endif