Home | History | Annotate | Download | only in fpdf_font
      1 // Copyright 2014 PDFium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
      6 
      7 typedef void* FXFT_Library;
      8 class CPDF_CMapManager : public CFX_Object
      9 {
     10 public:
     11     CPDF_CMapManager();
     12     ~CPDF_CMapManager();
     13     FX_LPVOID				GetPackage(FX_BOOL bPrompt);
     14     CPDF_CMap*				GetPredefinedCMap(const CFX_ByteString& name, FX_BOOL bPrompt);
     15     CPDF_CID2UnicodeMap*	GetCID2UnicodeMap(int charset, FX_BOOL bPrompt);
     16     void					ReloadAll();
     17 private:
     18     CPDF_CMap*				LoadPredefinedCMap(const CFX_ByteString& name,  FX_BOOL bPrompt);
     19     CPDF_CID2UnicodeMap*	LoadCID2UnicodeMap(int charset, FX_BOOL bPrompt);
     20     void					DropAll(FX_BOOL bReload);
     21 #ifndef _FPDFAPI_MINI_
     22     FX_BOOL					m_bPrompted;
     23     FX_LPVOID				m_pPackage;
     24 #endif
     25     CFX_MapByteStringToPtr	m_CMaps;
     26     CPDF_CID2UnicodeMap*	m_CID2UnicodeMaps[6];
     27 };
     28 class CPDF_FontGlobals : public CFX_Object
     29 {
     30 public:
     31     CPDF_FontGlobals();
     32     ~CPDF_FontGlobals();
     33     void				ClearAll();
     34     void				Clear(void* key);
     35     CPDF_Font*			Find(void* key, int index);
     36     void				Set(void* key, int index, CPDF_Font* pFont);
     37     CFX_MapPtrToPtr		m_pStockMap;
     38     CPDF_CMapManager	m_CMapManager;
     39     struct {
     40         const struct FXCMAP_CMap*	m_pMapList;
     41         int				m_Count;
     42     } m_EmbeddedCharsets[5];
     43     struct {
     44         const FX_WORD*	m_pMap;
     45         int				m_Count;
     46     } m_EmbeddedToUnicodes[5];
     47     FX_LPBYTE			m_pContrastRamps;
     48 };
     49 struct _CMap_CodeRange {
     50     int			m_CharSize;
     51     FX_BYTE		m_Lower[4];
     52     FX_BYTE		m_Upper[4];
     53 };
     54 class CPDF_CMapParser : public CFX_Object
     55 {
     56 public:
     57     CPDF_CMapParser();
     58     ~CPDF_CMapParser() {}
     59     FX_BOOL	Initialize(CPDF_CMap*);
     60     void	ParseWord(FX_BSTR str);
     61     CFX_BinaryBuf	m_AddMaps;
     62 private:
     63     CPDF_CMap*	m_pCMap;
     64     int				m_Status;
     65     int				m_CodeSeq;
     66     FX_DWORD		m_CodePoints[4];
     67     CFX_ArrayTemplate<_CMap_CodeRange>	m_CodeRanges;
     68     CFX_ByteString	m_Registry, m_Ordering, m_Supplement;
     69     CFX_ByteString	m_LastWord;
     70 };
     71 #define CIDCODING_UNKNOWN	0
     72 #define CIDCODING_GB		1
     73 #define CIDCODING_BIG5		2
     74 #define CIDCODING_JIS		3
     75 #define CIDCODING_KOREA		4
     76 #define CIDCODING_UCS2		5
     77 #define CIDCODING_CID		6
     78 #define CIDCODING_UTF16		7
     79 class CPDF_CMap : public CFX_Object
     80 {
     81 public:
     82     CPDF_CMap();
     83     FX_BOOL					LoadPredefined(CPDF_CMapManager* pMgr, const FX_CHAR* name, FX_BOOL bPromptCJK);
     84     FX_BOOL					LoadEmbedded(FX_LPCBYTE pData, FX_DWORD dwSize);
     85     void					Release();
     86     FX_BOOL					IsLoaded() const
     87     {
     88         return m_bLoaded;
     89     }
     90     int						GetCharset()
     91     {
     92         return m_Charset;
     93     }
     94     FX_BOOL					IsVertWriting() const
     95     {
     96         return m_bVertical;
     97     }
     98     FX_WORD					CIDFromCharCode(FX_DWORD charcode) const;
     99     FX_DWORD				CharCodeFromCID(FX_WORD CID) const;
    100     int						GetCharSize(FX_DWORD charcode) const;
    101     FX_DWORD				GetNextChar(const FX_CHAR* pString, int& offset) const;
    102     int						CountChar(const FX_CHAR* pString, int size) const;
    103     int						AppendChar(FX_LPSTR str, FX_DWORD charcode) const;
    104     typedef enum {OneByte, TwoBytes, MixedTwoBytes, MixedFourBytes} CodingScheme;
    105 protected:
    106     ~CPDF_CMap();
    107     friend class			CPDF_CMapParser;
    108     friend class			CPDF_CMapManager;
    109     friend class			CPDF_CIDFont;
    110 protected:
    111     CFX_ByteString			m_PredefinedCMap;
    112     FX_BOOL					m_bVertical;
    113     int						m_Charset, m_Coding;
    114     CodingScheme			m_CodingScheme;
    115     int						m_nCodeRanges;
    116     FX_BYTE*				m_pLeadingBytes;
    117     FX_WORD*				m_pMapping;
    118     FX_LPBYTE				m_pAddMapping;
    119     FX_BOOL					m_bLoaded;
    120     const FXCMAP_CMap*		m_pEmbedMap;
    121     CPDF_CMap*				m_pUseMap;
    122 };
    123 class CPDF_PredefinedCMap
    124 {
    125 public:
    126     FX_LPCSTR	m_pName;
    127     int			m_Charset;
    128     int			m_Coding;
    129     CPDF_CMap::CodingScheme	m_CodingScheme;
    130     FX_DWORD	m_LeadingSegCount;
    131     FX_BYTE		m_LeadingSegs[4];
    132 };
    133 typedef struct _FileHeader {
    134     FX_BYTE		btTag[4];
    135     FX_BYTE		btVersion;
    136     FX_BYTE		btFormat;
    137     FX_BYTE		btReserved1[2];
    138     FX_DWORD	dwStartIndex;
    139     FX_DWORD	dwEndIndex;
    140     FX_DWORD	dwDataSize;
    141     FX_DWORD	dwDataOffset;
    142     FX_DWORD	dwRecordSize;
    143 } FXMP_FILEHEADER;
    144 class CPDF_FXMP : public CFX_Object
    145 {
    146 public:
    147     CPDF_FXMP()
    148     {
    149         m_pHeader = NULL;
    150         m_pTable = NULL;
    151     }
    152     ~CPDF_FXMP()
    153     {
    154         if (m_pHeader) {
    155             FX_Free(m_pHeader);
    156         }
    157     }
    158     FX_BOOL		IsLoaded()
    159     {
    160         return m_pTable != NULL;
    161     }
    162     FX_BOOL		LoadFile(FX_LPVOID pPackage, FX_LPCSTR fileid);
    163     FX_LPBYTE	GetRecord(FX_DWORD index);
    164 private:
    165     FXMP_FILEHEADER*	m_pHeader;
    166     FX_LPBYTE	m_pTable;
    167 };
    168 class CPDF_CID2UnicodeMap : public CFX_Object
    169 {
    170 public:
    171     CPDF_CID2UnicodeMap();
    172     ~CPDF_CID2UnicodeMap();
    173     FX_BOOL		Initialize();
    174     FX_BOOL		IsLoaded();
    175     void		Load(CPDF_CMapManager* pMgr, int charset, FX_BOOL bPromptCJK);
    176     FX_WCHAR	UnicodeFromCID(FX_WORD CID);
    177 protected:
    178     int			m_Charset;
    179     const FX_WORD*	m_pEmbeddedMap;
    180     FX_DWORD	m_EmbeddedCount;
    181 #ifndef _FPDFAPI_MINI_
    182     CPDF_FXMP*	m_pExternalMap;
    183 #endif
    184 };
    185 class CPDF_ToUnicodeMap : public CFX_Object
    186 {
    187 public:
    188     void					Load(CPDF_Stream* pStream);
    189     CFX_WideString			Lookup(FX_DWORD charcode);
    190     FX_DWORD				ReverseLookup(FX_WCHAR unicode);
    191 protected:
    192     CFX_CMapDWordToDWord	m_Map;
    193     CPDF_CID2UnicodeMap*	m_pBaseMap;
    194     CFX_WideTextBuf			m_MultiCharBuf;
    195 };
    196 class CPDF_FontCharMap : public CFX_CharMap, public CFX_Object
    197 {
    198 public:
    199     CPDF_FontCharMap(CPDF_Font* pFont);
    200     CPDF_Font*		m_pFont;
    201 };
    202