blob: c33a8024c04000b2c89b1cd2656bdd17f0c2ca11 [file] [log] [blame]
//========================================================================
//
// 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, 2012 Albert Astals Cid <aacid@kde.org>
// Copyright (C) 2005 Jonathan Blandford <jrb@redhat.com>
// Copyright (C) 2006 Takashi Iwai <tiwai@suse.de>
// Copyright (C) 2006 Kristian Høgsberg <krh@redhat.com>
// Copyright (C) 2007 Krzysztof Kowalczyk <kkowalczyk@gmail.com>
// Copyright (C) 2009 Jonathan Kew <jonathan_kew@sil.org>
// Copyright (C) 2009 Petr Gajdos <pgajdos@novell.com>
// Copyright (C) 2009, 2011, 2012 William Bader <williambader@hotmail.com>
// Copyright (C) 2010 Hib Eris <hib@hiberis.nl>
// Copyright (C) 2011 Pino Toscano <pino@kde.org>
// Copyright (C) 2012 Adrian Johnson <ajohnson@redneon.com>
// Copyright (C) 2012 Thomas Freitag <Thomas.Freitag@alfa.de>
// Copyright (C) 2013 Jason Crain <jason@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
//
//========================================================================
#ifndef GLOBALPARAMS_H
#define GLOBALPARAMS_H
#ifdef USE_GCC_PRAGMAS
#pragma interface
#endif
#include <assert.h>
#include "poppler-config.h"
#include <stdio.h>
#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;
class SysFontList;
//------------------------------------------------------------------------
// The global parameters object.
extern GlobalParams *globalParams;
//------------------------------------------------------------------------
enum SysFontType {
sysFontPFA,
sysFontPFB,
sysFontTTF,
sysFontTTC
};
//------------------------------------------------------------------------
class PSFontParam16 {
public:
GooString *name; // PDF font name for psResidentFont16;
// char collection name for psResidentFontCC
int wMode; // writing mode (0=horiz, 1=vert)
GooString *psFontName; // PostScript font name
GooString *encoding; // encoding
PSFontParam16(GooString *nameA, int wModeA,
GooString *psFontNameA, GooString *encodingA);
~PSFontParam16();
};
//------------------------------------------------------------------------
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 setupBaseFonts(char *dir);
//----- accessors
CharCode getMacRomanCharCode(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);
FILE *findToUnicodeFile(GooString *name);
GooString *findFontFile(GooString *fontName);
GooString *findBase14FontFile(GooString *base14Name, GfxFont *font);
GooString *findSystemFontFile(GfxFont *font, SysFontType *type,
int *fontNum, GooString *substituteFontName = NULL,
GooString *base14Name = NULL);
GooString *findCCFontFile(GooString *collection);
GBool getPSExpandSmaller();
GBool getPSShrinkLarger();
GBool getPSCenter();
PSLevel getPSLevel();
GooString *getPSResidentFont(GooString *fontName);
GooList *getPSResidentFonts();
PSFontParam16 *getPSResidentFont16(GooString *fontName, int wMode);
PSFontParam16 *getPSResidentFontCC(GooString *collection, int wMode);
GBool getPSEmbedType1();
GBool getPSEmbedTrueType();
GBool getPSEmbedCIDPostScript();
GBool getPSEmbedCIDTrueType();
GBool getPSFontPassthrough();
GBool getPSPreload();
GBool getPSOPI();
GBool getPSASCIIHex();
GBool getPSBinary();
GBool getPSUncompressPreloadedImages();
double getPSRasterResolution();
GBool getPSRasterMono();
GooString *getTextEncodingName();
EndOfLineKind getTextEOL();
GBool getTextPageBreaks();
GBool getTextKeepTinyChars();
GBool getEnableFreeType();
GBool getAntialias();
GBool getVectorAntialias();
GBool getAntialiasPrinting();
GBool getStrokeAdjust();
ScreenType getScreenType();
int getScreenSize();
int getScreenDotRadius();
double getScreenGamma();
double getScreenBlackThreshold();
double getScreenWhiteThreshold();
double getMinLineWidth();
GBool getOverprintPreview() { return overprintPreview; }
GBool getMapNumericCharNames();
GBool getMapUnknownCharNames();
GBool getPrintCommands();
GBool getProfileCommands();
GBool getErrQuiet();
double getSplashResolution();
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 addFontFile(GooString *fontName, GooString *path);
void setPSFile(char *file);
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 setPSFontPassthrough(GBool passthrough);
void setPSPreload(GBool preload);
void setPSOPI(GBool opi);
void setPSASCIIHex(GBool hex);
void setPSBinary(GBool binary);
void setPSUncompressPreloadedImages(GBool uncomp);
void setPSRasterResolution(double res);
void setPSRasterMono(GBool mono);
void setTextEncoding(char *encodingName);
GBool setTextEOL(char *s);
void setTextPageBreaks(GBool pageBreaks);
void setTextKeepTinyChars(GBool keep);
GBool setEnableFreeType(char *s);
GBool setDisableFreeTypeHinting(char *s);
GBool setAntialias(char *s);
GBool setVectorAntialias(char *s);
void setAntialiasPrinting(GBool print);
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 setMinLineWidth(double minLineWidth);
void setOverprintPreview(GBool overprintPreviewA);
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(const 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
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]
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]
GBool baseFontsInitialized;
#ifdef _WIN32
GooHash *substFiles; // windows font substitutes (for CID fonts)
#endif
GooHash *fontFiles; // font files: font name mapped to path
// [GString]
GooList *fontDirs; // list of font dirs [GString]
GooHash *ccFontFiles; // character collection font files:
// collection name mapped to path [GString]
SysFontList *sysFonts; // system fonts
GooString *psFile; // PostScript file or command (for xpdf)
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 *psResidentFonts; // 8-bit fonts resident in printer:
// PDF font name mapped to PS font name
// [GString]
GooList *psResidentFonts16; // 16-bit fonts resident in printer:
// PDF font name mapped to font info
// [PSFontParam16]
GooList *psResidentFontsCC; // 16-bit character collection fonts
// resident in printer: collection name
// mapped to font info [PSFontParam16]
GBool psEmbedType1; // embed Type 1 fonts?
GBool psEmbedTrueType; // embed TrueType fonts?
GBool psEmbedCIDPostScript; // embed CID PostScript fonts?
GBool psEmbedCIDTrueType; // embed CID TrueType fonts?
GBool psFontPassthrough; // pass all fonts through as-is?
GBool psPreload; // preload PostScript images and forms into
// memory
GBool psOPI; // generate PostScript OPI comments?
GBool psASCIIHex; // use ASCIIHex instead of ASCII85?
GBool psBinary; // use binary instead of hex
GBool psUncompressPreloadedImages; // uncompress all preloaded images
double psRasterResolution; // PostScript rasterization resolution (dpi)
GBool psRasterMono; // true to do PostScript rasterization
// in monochrome (gray); false to do it
// in color (RGB/CMYK)
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
GBool enableFreeType; // FreeType enable flag
GBool disableFreeTypeHinting; // FreeType disable hinting flag
GBool antialias; // anti-aliasing enable flag
GBool vectorAntialias; // vector anti-aliasing enable flag
GBool antialiasPrinting; // allow anti-aliasing when printing
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
double minLineWidth; // minimum line width
GBool overprintPreview; // enable overprint preview
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?
double splashResolution; // resolution when rasterizing images
CharCodeToUnicodeCache *cidToUnicodeCache;
CharCodeToUnicodeCache *unicodeToUnicodeCache;
UnicodeMapCache *unicodeMapCache;
CMapCache *cMapCache;
#ifdef ENABLE_PLUGINS
GooList *plugins; // list of plugins [Plugin]
GooList *securityHandlers; // list of loaded security handlers
// [XpdfSecurityHandler]
#endif
#if MULTITHREADED
GooMutex mutex;
GooMutex unicodeMapCacheMutex;
GooMutex cMapCacheMutex;
#endif
const char *popplerDataDir;
};
#endif