// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#ifndef _FPDF_MODULE_
#define _FPDF_MODULE_
#ifndef _FXCRT_EXTENSION_
#include "../fxcrt/fx_ext.h"
#endif
class CPDF_ModuleMgr;
class CPDF_PageModuleDef;
class CPDF_RenderModuleDef;
class CPDF_SecurityHandler;
class CCodec_ModuleMgr;
class CPDF_Dictionary;
class ICodec_JpegModule;
class ICodec_JpxModule;
class ICodec_FaxModule;
class ICodec_Jbig2Module;
class ICodec_IccModule;
class ICodec_FlateModule;
#define ADDIN_NAME_CJK "Eastern Asian Language Support"
#define ADDIN_NAME_DECODER "JPEG2000 and JBIG2 Image Decoders"
class CPDF_ModuleMgr : public CFX_Object
{
public:
static void Create();
static CPDF_ModuleMgr* Get();
static void Destroy();
void SetCodecModule(CCodec_ModuleMgr* pModule)
{
m_pCodecModule = pModule;
}
CCodec_ModuleMgr* GetCodecModule()
{
return m_pCodecModule;
}
void InitPageModule();
void InitRenderModule();
void SetModulePath(FX_LPCSTR module_name, FX_LPCSTR path);
CFX_ByteString GetModuleFilePath(FX_LPCSTR module_name, FX_LPCSTR name);
void SetDownloadCallback(FX_BOOL (*callback)(FX_LPCSTR module_name));
FX_BOOL DownloadModule(FX_LPCSTR module_name);
void NotifyModuleAvailable(FX_LPCSTR module_name);
CPDF_RenderModuleDef* GetRenderModule() const
{
return m_pRenderModule;
}
CPDF_PageModuleDef* GetPageModule() const
{
return m_pPageModule;
}
void LoadEmbeddedGB1CMaps();
void LoadEmbeddedCNS1CMaps();
void LoadEmbeddedJapan1CMaps();
void LoadEmbeddedKorea1CMaps();
ICodec_FaxModule* GetFaxModule();
ICodec_JpegModule* GetJpegModule();
ICodec_JpxModule* GetJpxModule();
ICodec_Jbig2Module* GetJbig2Module();
ICodec_IccModule* GetIccModule();
ICodec_FlateModule* GetFlateModule();
void RegisterSecurityHandler(FX_LPCSTR name, CPDF_SecurityHandler * (*CreateHandler)(void* param), void* param);
CPDF_SecurityHandler* CreateSecurityHandler(FX_LPCSTR name);
void SetPrivateData(FX_LPVOID module_id, FX_LPVOID pData, PD_CALLBACK_FREEDATA callback);
FX_LPVOID GetPrivateData(FX_LPVOID module_id);
int m_FileBufSize;
protected:
CPDF_ModuleMgr();
~CPDF_ModuleMgr();
void Initialize();
void InitModules();
CCodec_ModuleMgr* m_pCodecModule;
CPDF_RenderModuleDef* m_pRenderModule;
CPDF_PageModuleDef* m_pPageModule;
FX_BOOL (*m_pDownloadCallback)(FX_LPCSTR module_name);
CFX_ByteString m_DefaultModulePath;
CFX_CMapByteStringToPtr m_ModulePathList;
CFX_MapByteStringToPtr m_SecurityHandlerMap;
CFX_PrivateData m_privateData;
};
class CPDF_Document;
class CPDF_DocPageData;
class CPDF_FontGlobals;
class IPDF_FontMgr;
class IPDF_FontMapper;
class CPDF_ColorSpace;
class CPDF_PageModuleDef : public CFX_Object
{
public:
virtual ~CPDF_PageModuleDef() {}
virtual CPDF_DocPageData* CreateDocData(CPDF_Document* pDoc)
{
return NULL;
}
virtual void ReleaseDoc(CPDF_Document*) {}
virtual void ClearDoc(CPDF_Document*) {}
virtual CPDF_FontGlobals* GetFontGlobals()
{
return NULL;
}
virtual void ClearStockFont(CPDF_Document* pDoc) {}
virtual void NotifyCJKAvailable() {}
virtual CPDF_ColorSpace* GetStockCS(int family)
{
return NULL;
}
};
class CPDF_PageObjects;
class CFX_AffineMatrix;
class CPDF_RenderOptions;
class CPDF_Page;
class CPDF_DocRenderData;
class CPDF_PageRenderCache;
class CFX_BitmapDevice;
class CPDF_Stream;
class CFX_DIBSource;
class CPDF_RenderConfig;
class CPDF_Image;
class CPDF_RenderModuleDef : public CFX_Object
{
public:
virtual ~CPDF_RenderModuleDef() {}
virtual CPDF_DocRenderData* CreateDocData(CPDF_Document* pDoc)
{
return NULL;
}
virtual void DestroyDocData(CPDF_DocRenderData*) {}
virtual void ClearDocData(CPDF_DocRenderData*) {}
virtual CPDF_DocRenderData* GetRenderData()
{
return NULL;
}
virtual CPDF_PageRenderCache* CreatePageCache(CPDF_Page* pPage)
{
return NULL;
}
virtual void DestroyPageCache(CPDF_PageRenderCache*) {}
virtual void NotifyDecoderAvailable() {}
virtual CPDF_RenderConfig* GetConfig()
{
return NULL;
}
};
#endif