File indexing completed on 2025-12-10 10:23:47
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037 #ifndef GLOBALPARAMS_H
0038 #define GLOBALPARAMS_H
0039
0040 #include <cassert>
0041 #include "poppler-config.h"
0042 #include "poppler_private_export.h"
0043 #include <cstdio>
0044 #include "CharTypes.h"
0045 #include "UnicodeMap.h"
0046 #include "Error.h"
0047 #include <unordered_map>
0048 #include <string>
0049 #include <memory>
0050 #include <mutex>
0051 #include <vector>
0052
0053 class GooString;
0054 class NameToCharCode;
0055 class CharCodeToUnicode;
0056 class CharCodeToUnicodeCache;
0057 class UnicodeMapCache;
0058 class CMap;
0059 class CMapCache;
0060 class GlobalParams;
0061 class GfxFont;
0062 class Stream;
0063 class SysFontList;
0064
0065
0066
0067
0068 extern std::unique_ptr<GlobalParams> POPPLER_PRIVATE_EXPORT globalParams;
0069
0070
0071
0072 enum SysFontType
0073 {
0074 sysFontPFA,
0075 sysFontPFB,
0076 sysFontTTF,
0077 sysFontTTC
0078 };
0079
0080
0081
0082 struct FamilyStyleFontSearchResult
0083 {
0084 FamilyStyleFontSearchResult() = default;
0085
0086 FamilyStyleFontSearchResult(const std::string &filepathA, int faceIndexA) : filepath(filepathA), faceIndex(faceIndexA) { }
0087
0088 std::string filepath;
0089 int faceIndex = 0;
0090 };
0091
0092
0093
0094 struct UCharFontSearchResult
0095 {
0096 UCharFontSearchResult() = default;
0097
0098 UCharFontSearchResult(const std::string &filepathA, int faceIndexA, const std::string &familyA, const std::string &styleA) : filepath(filepathA), faceIndex(faceIndexA), family(familyA), style(styleA) { }
0099
0100 const std::string filepath;
0101 const int faceIndex = 0;
0102 const std::string family;
0103 const std::string style;
0104 };
0105
0106
0107
0108 class POPPLER_PRIVATE_EXPORT GlobalParams
0109 {
0110 public:
0111
0112 explicit GlobalParams(const char *customPopplerDataDir = nullptr);
0113
0114 ~GlobalParams();
0115
0116 GlobalParams(const GlobalParams &) = delete;
0117 GlobalParams &operator=(const GlobalParams &) = delete;
0118
0119 void setupBaseFonts(const char *dir);
0120
0121
0122
0123 CharCode getMacRomanCharCode(const char *charName);
0124
0125
0126
0127 Unicode mapNameToUnicodeText(const char *charName);
0128
0129
0130
0131 Unicode mapNameToUnicodeAll(const char *charName);
0132
0133 UnicodeMap *getResidentUnicodeMap(const std::string &encodingName);
0134 FILE *getUnicodeMapFile(const std::string &encodingName);
0135 FILE *findCMapFile(const GooString *collection, const GooString *cMapName);
0136 FILE *findToUnicodeFile(const GooString *name);
0137 GooString *findFontFile(const std::string &fontName);
0138 GooString *findBase14FontFile(const GooString *base14Name, const GfxFont *font);
0139 GooString *findSystemFontFile(const GfxFont *font, SysFontType *type, int *fontNum, GooString *substituteFontName = nullptr, const GooString *base14Name = nullptr);
0140 FamilyStyleFontSearchResult findSystemFontFileForFamilyAndStyle(const std::string &fontFamily, const std::string &fontStyle, const std::vector<std::string> &filesToIgnore = {});
0141 UCharFontSearchResult findSystemFontFileForUChar(Unicode uChar, const GfxFont &fontToEmulate);
0142 std::string getTextEncodingName() const;
0143 bool getPrintCommands();
0144 bool getProfileCommands();
0145 bool getErrQuiet();
0146
0147 CharCodeToUnicode *getCIDToUnicode(const GooString *collection);
0148 const UnicodeMap *getUnicodeMap(const std::string &encodingName);
0149 std::shared_ptr<CMap> getCMap(const GooString *collection, const GooString *cMapName);
0150 const UnicodeMap *getTextEncoding();
0151
0152 const UnicodeMap *getUtf8Map();
0153
0154 std::vector<std::string> getEncodingNames();
0155
0156
0157 void addFontFile(const GooString *fontName, const GooString *path);
0158 void setTextEncoding(const char *encodingName);
0159 void setPrintCommands(bool printCommandsA);
0160 void setProfileCommands(bool profileCommandsA);
0161 void setErrQuiet(bool errQuietA);
0162
0163 static bool parseYesNo2(const char *token, bool *flag);
0164
0165 private:
0166 void parseNameToUnicode(const GooString *name);
0167
0168 void scanEncodingDirs();
0169 void addCIDToUnicode(const GooString *collection, const GooString *fileName);
0170 void addUnicodeMap(const GooString *encodingName, const GooString *fileName);
0171 void addCMapDir(const GooString *collection, const GooString *dir);
0172
0173
0174
0175 NameToCharCode *
0176 macRomanReverseMap;
0177
0178
0179
0180 NameToCharCode *
0181 nameToUnicodeZapfDingbats;
0182 NameToCharCode *
0183 nameToUnicodeText;
0184
0185
0186 std::unordered_map<std::string, std::string> cidToUnicodes;
0187
0188
0189 std::unordered_map<std::string, UnicodeMap> residentUnicodeMaps;
0190
0191
0192 std::unordered_map<std::string, std::string> unicodeMaps;
0193
0194 std::unordered_multimap<std::string, std::string> cMapDirs;
0195 std::vector<GooString *> toUnicodeDirs;
0196 bool baseFontsInitialized;
0197 #ifdef _WIN32
0198
0199 std::unordered_map<std::string, std::string> substFiles;
0200 #endif
0201
0202 std::unordered_map<std::string, std::string> fontFiles;
0203 SysFontList *sysFonts;
0204 GooString *textEncoding;
0205
0206 bool printCommands;
0207 bool profileCommands;
0208 bool errQuiet;
0209
0210 CharCodeToUnicodeCache *cidToUnicodeCache;
0211 CharCodeToUnicodeCache *unicodeToUnicodeCache;
0212 UnicodeMapCache *unicodeMapCache;
0213 CMapCache *cMapCache;
0214
0215 const UnicodeMap *utf8Map;
0216
0217 mutable std::recursive_mutex mutex;
0218 mutable std::recursive_mutex unicodeMapCacheMutex;
0219 mutable std::recursive_mutex cMapCacheMutex;
0220
0221 const char *popplerDataDir;
0222 };
0223
0224 class POPPLER_PRIVATE_EXPORT GlobalParamsIniter
0225 {
0226 public:
0227 explicit GlobalParamsIniter(ErrorCallback errorCallback);
0228 ~GlobalParamsIniter();
0229
0230 GlobalParamsIniter(const GlobalParamsIniter &) = delete;
0231 GlobalParamsIniter &operator=(const GlobalParamsIniter &) = delete;
0232
0233 static bool setCustomDataDir(const std::string &dir);
0234
0235 private:
0236 static std::mutex mutex;
0237 static int count;
0238
0239 static std::string customDataDir;
0240 };
0241
0242 #endif