//======================================================================== // // GlobalParams.h // // Copyright 2001-2003 Glyph & Cog, LLC // //======================================================================== //======================================================================== // // Modified under the Poppler project - http://poppler.freedesktop.org // // All changes made under the Poppler project to this file are licensed // under GPL version 2 or later // // Copyright (C) 2005, 2007-2010 Albert Astals Cid // Copyright (C) 2005 Jonathan Blandford // Copyright (C) 2006 Takashi Iwai // Copyright (C) 2006 Kristian Høgsberg // Copyright (C) 2007 Krzysztof Kowalczyk // Copyright (C) 2009 Jonathan Kew // Copyright (C) 2009 Petr Gajdos // Copyright (C) 2009 William Bader // Copyright (C) 2010 Hib Eris // // 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 // //======================================================================== #ifndef GLOBALPARAMS_H #define GLOBALPARAMS_H #ifdef USE_GCC_PRAGMAS #pragma interface #endif #include #include "poppler-config.h" #include #if WITH_FONTCONFIGURATION_FONTCONFIG #include #endif #include "goo/gtypes.h" #include "CharTypes.h" #if MULTITHREADED #include "goo/GooMutex.h" #endif class GooString; class GooList; class GooHash; class NameToCharCode; class CharCodeToUnicode; class CharCodeToUnicodeCache; class UnicodeMap; class UnicodeMapCache; class CMap; class CMapCache; struct XpdfSecurityHandler; class GlobalParams; class GfxFont; class Stream; #ifdef _WIN32 class WinFontList; #endif //------------------------------------------------------------------------ // The global parameters object. extern GlobalParams *globalParams; //------------------------------------------------------------------------ enum DisplayFontParamKind { displayFontT1, displayFontTT }; struct DisplayFontParamT1 { GooString *fileName; }; struct DisplayFontParamTT { GooString *fileName; int faceIndex; }; class DisplayFontParam { public: GooString *name; // font name for 8-bit fonts and named // CID fonts; collection name for // generic CID fonts DisplayFontParamKind kind; union { DisplayFontParamT1 t1; DisplayFontParamTT tt; }; DisplayFontParam(GooString *nameA, DisplayFontParamKind kindA); void setFileName(GooString *fileNameA) { if (displayFontT1 == kind) t1.fileName = fileNameA; else { assert(displayFontTT == kind); tt.fileName = fileNameA; } } virtual ~DisplayFontParam(); }; //------------------------------------------------------------------------ class PSFontParam { public: GooString *pdfFontName; // PDF font name for 8-bit fonts and // named 16-bit fonts; char collection // name for generic 16-bit fonts int wMode; // writing mode (0=horiz, 1=vert) for // 16-bit fonts GooString *psFontName; // PostScript font name GooString *encoding; // encoding, for 16-bit fonts only PSFontParam(GooString *pdfFontNameA, int wModeA, GooString *psFontNameA, GooString *encodingA); ~PSFontParam(); }; //------------------------------------------------------------------------ enum PSLevel { psLevel1, psLevel1Sep, psLevel2, psLevel2Sep, psLevel3, psLevel3Sep }; //------------------------------------------------------------------------ enum EndOfLineKind { eolUnix, // LF eolDOS, // CR+LF eolMac // CR }; //------------------------------------------------------------------------ enum ScreenType { screenUnset, screenDispersed, screenClustered, screenStochasticClustered }; //------------------------------------------------------------------------ class GlobalParams { public: // Initialize the global parameters by attempting to read a config // file. GlobalParams(const char *customPopplerDataDir = NULL); ~GlobalParams(); void setBaseDir(char *dir); #if WITH_FONTCONFIGURATION_WIN32 void setupBaseFonts(char *dir); #endif //----- accessors CharCode getMacRomanCharCode(char *charName); GooString *getBaseDir(); Unicode mapNameToUnicode(char *charName); UnicodeMap *getResidentUnicodeMap(GooString *encodingName); FILE *getUnicodeMapFile(GooString *encodingName); FILE *findCMapFile(GooString *collection, GooString *cMapName); FILE *findToUnicodeFile(GooString *name); DisplayFontParam *getDisplayFont(GfxFont *font); GBool getPSExpandSmaller(); GBool getPSShrinkLarger(); GBool getPSCenter(); PSLevel getPSLevel(); PSFontParam *getPSFont(GooString *fontName); PSFontParam *getPSFont16(GooString *fontName, GooString *collection, int wMode); GBool getPSEmbedType1(); GBool getPSEmbedTrueType(); GBool getPSEmbedCIDPostScript(); GBool getPSEmbedCIDTrueType(); GBool getPSSubstFonts(); GBool getPSPreload(); GBool getPSOPI(); GBool getPSASCIIHex(); GooString *getTextEncodingName(); EndOfLineKind getTextEOL(); GBool getTextPageBreaks(); GBool getTextKeepTinyChars(); GooString *findFontFile(GooString *fontName, char **exts); GBool getEnableFreeType(); GBool getAntialias(); GBool getVectorAntialias(); GBool getStrokeAdjust(); ScreenType getScreenType(); int getScreenSize(); int getScreenDotRadius(); double getScreenGamma(); double getScreenBlackThreshold(); double getScreenWhiteThreshold(); GBool getMapNumericCharNames(); GBool getMapUnknownCharNames(); GBool getPrintCommands(); GBool getProfileCommands(); GBool getErrQuiet(); CharCodeToUnicode *getCIDToUnicode(GooString *collection); CharCodeToUnicode *getUnicodeToUnicode(GooString *fontName); UnicodeMap *getUnicodeMap(GooString *encodingName); CMap *getCMap(GooString *collection, GooString *cMapName, Stream *stream = NULL); UnicodeMap *getTextEncoding(); #ifdef ENABLE_PLUGINS GBool loadPlugin(char *type, char *name); #endif GooList *getEncodingNames(); //----- functions to set parameters void setPSExpandSmaller(GBool expand); void setPSShrinkLarger(GBool shrink); void setPSCenter(GBool center); void setPSLevel(PSLevel level); void setPSEmbedType1(GBool embed); void setPSEmbedTrueType(GBool embed); void setPSEmbedCIDPostScript(GBool embed); void setPSEmbedCIDTrueType(GBool embed); void setPSSubstFonts(GBool substFonts); void setPSPreload(GBool preload); void setPSOPI(GBool opi); void setPSASCIIHex(GBool hex); void setTextEncoding(char *encodingName); GBool setTextEOL(char *s); void setTextPageBreaks(GBool pageBreaks); void setTextKeepTinyChars(GBool keep); GBool setEnableFreeType(char *s); GBool setAntialias(char *s); GBool setVectorAntialias(char *s); void setStrokeAdjust(GBool strokeAdjust); void setScreenType(ScreenType st); void setScreenSize(int size); void setScreenDotRadius(int radius); void setScreenGamma(double gamma); void setScreenBlackThreshold(double blackThreshold); void setScreenWhiteThreshold(double whiteThreshold); void setMapNumericCharNames(GBool map); void setMapUnknownCharNames(GBool map); void setPrintCommands(GBool printCommandsA); void setProfileCommands(GBool profileCommandsA); void setErrQuiet(GBool errQuietA); //----- security handlers void addSecurityHandler(XpdfSecurityHandler *handler); XpdfSecurityHandler *getSecurityHandler(char *name); private: void parseNameToUnicode(GooString *name); GBool parseYesNo2(char *token, GBool *flag); UnicodeMap *getUnicodeMap2(GooString *encodingName); void scanEncodingDirs(); void addCIDToUnicode(GooString *collection, GooString *fileName); void addUnicodeMap(GooString *encodingName, GooString *fileName); void addCMapDir(GooString *collection, GooString *dir); //----- static tables NameToCharCode * // mapping from char name to macRomanReverseMap; // MacRomanEncoding index //----- user-modifiable settings GooString *baseDir; // base directory - for plugins, etc. NameToCharCode * // mapping from char name to Unicode nameToUnicode; GooHash *cidToUnicodes; // files for mappings from char collections // to Unicode, indexed by collection name // [GooString] GooHash *unicodeToUnicodes; // files for Unicode-to-Unicode mappings, // indexed by font name pattern [GooString] GooHash *residentUnicodeMaps; // mappings from Unicode to char codes, // indexed by encoding name [UnicodeMap] GooHash *unicodeMaps; // files for mappings from Unicode to char // codes, indexed by encoding name [GooString] GooHash *cMapDirs; // list of CMap dirs, indexed by collection // name [GooList[GooString]] GooList *toUnicodeDirs; // list of ToUnicode CMap dirs [GooString] GooHash *displayFonts; // display font info, indexed by font name // [DisplayFontParam] #ifdef _WIN32 GBool baseFontsInitialized; WinFontList *winFontList; // system TrueType fonts #endif GBool psExpandSmaller; // expand smaller pages to fill paper GBool psShrinkLarger; // shrink larger pages to fit paper GBool psCenter; // center pages on the paper PSLevel psLevel; // PostScript level to generate GooHash *psFonts; // PostScript font info, indexed by PDF // font name [PSFontParam] GooList *psNamedFonts16; // named 16-bit fonts [PSFontParam] GooList *psFonts16; // generic 16-bit fonts [PSFontParam] GBool psEmbedType1; // embed Type 1 fonts? GBool psEmbedTrueType; // embed TrueType fonts? GBool psEmbedCIDPostScript; // embed CID PostScript fonts? GBool psEmbedCIDTrueType; // embed CID TrueType fonts? GBool psSubstFonts; // substitute missing fonts? GBool psPreload; // preload PostScript images and forms into // memory GBool psOPI; // generate PostScript OPI comments? GBool psASCIIHex; // use ASCIIHex instead of ASCII85? GooString *textEncoding; // encoding (unicodeMap) to use for text // output EndOfLineKind textEOL; // type of EOL marker to use for text // output GBool textPageBreaks; // insert end-of-page markers? GBool textKeepTinyChars; // keep all characters in text output GooList *fontDirs; // list of font dirs [GooString] GBool enableFreeType; // FreeType enable flag GBool antialias; // anti-aliasing enable flag GBool vectorAntialias; // vector anti-aliasing enable flag GBool strokeAdjust; // stroke adjustment enable flag ScreenType screenType; // halftone screen type int screenSize; // screen matrix size int screenDotRadius; // screen dot radius double screenGamma; // screen gamma correction double screenBlackThreshold; // screen black clamping threshold double screenWhiteThreshold; // screen white clamping threshold GBool mapNumericCharNames; // map numeric char names (from font subsets)? GBool mapUnknownCharNames; // map unknown char names? GBool printCommands; // print the drawing commands GBool profileCommands; // profile the drawing commands GBool errQuiet; // suppress error messages? CharCodeToUnicodeCache *cidToUnicodeCache; CharCodeToUnicodeCache *unicodeToUnicodeCache; UnicodeMapCache *unicodeMapCache; CMapCache *cMapCache; #ifdef ENABLE_PLUGINS GList *plugins; // list of plugins [Plugin] GList *securityHandlers; // list of loaded security handlers // [XpdfSecurityHandler] #endif #if MULTITHREADED GooMutex mutex; GooMutex unicodeMapCacheMutex; GooMutex cMapCacheMutex; #endif const char *popplerDataDir; }; #endif