summaryrefslogtreecommitdiff
path: root/core/src/fpdfapi/fpdf_font/font_int.h
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/fpdfapi/fpdf_font/font_int.h')
-rw-r--r--core/src/fpdfapi/fpdf_font/font_int.h201
1 files changed, 201 insertions, 0 deletions
diff --git a/core/src/fpdfapi/fpdf_font/font_int.h b/core/src/fpdfapi/fpdf_font/font_int.h
new file mode 100644
index 0000000000..779f58ee5d
--- /dev/null
+++ b/core/src/fpdfapi/fpdf_font/font_int.h
@@ -0,0 +1,201 @@
+// 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
+
+typedef void* FXFT_Library;
+class CPDF_CMapManager : public CFX_Object
+{
+public:
+ CPDF_CMapManager();
+ ~CPDF_CMapManager();
+ FX_LPVOID GetPackage(FX_BOOL bPrompt);
+ CPDF_CMap* GetPredefinedCMap(const CFX_ByteString& name, FX_BOOL bPrompt);
+ CPDF_CID2UnicodeMap* GetCID2UnicodeMap(int charset, FX_BOOL bPrompt);
+ void ReloadAll();
+private:
+ CPDF_CMap* LoadPredefinedCMap(const CFX_ByteString& name, FX_BOOL bPrompt);
+ CPDF_CID2UnicodeMap* LoadCID2UnicodeMap(int charset, FX_BOOL bPrompt);
+ void DropAll(FX_BOOL bReload);
+#ifndef _FPDFAPI_MINI_
+ FX_BOOL m_bPrompted;
+ FX_LPVOID m_pPackage;
+#endif
+ CFX_MapByteStringToPtr m_CMaps;
+ CPDF_CID2UnicodeMap* m_CID2UnicodeMaps[6];
+};
+class CPDF_FontGlobals : public CFX_Object
+{
+public:
+ CPDF_FontGlobals();
+ ~CPDF_FontGlobals();
+ void ClearAll();
+ void Clear(void* key);
+ CPDF_Font* Find(void* key, int index);
+ void Set(void* key, int index, CPDF_Font* pFont);
+ CFX_MapPtrToPtr m_pStockMap;
+ CPDF_CMapManager m_CMapManager;
+ struct {
+ const struct FXCMAP_CMap* m_pMapList;
+ int m_Count;
+ } m_EmbeddedCharsets[5];
+ struct {
+ const FX_WORD* m_pMap;
+ int m_Count;
+ } m_EmbeddedToUnicodes[5];
+ FX_LPBYTE m_pContrastRamps;
+};
+struct _CMap_CodeRange {
+ int m_CharSize;
+ FX_BYTE m_Lower[4];
+ FX_BYTE m_Upper[4];
+};
+class CPDF_CMapParser : public CFX_Object
+{
+public:
+ CPDF_CMapParser();
+ ~CPDF_CMapParser() {}
+ FX_BOOL Initialize(CPDF_CMap*);
+ void ParseWord(FX_BSTR str);
+ CFX_BinaryBuf m_AddMaps;
+private:
+ CPDF_CMap* m_pCMap;
+ int m_Status;
+ int m_CodeSeq;
+ FX_DWORD m_CodePoints[4];
+ CFX_ArrayTemplate<_CMap_CodeRange> m_CodeRanges;
+ CFX_ByteString m_Registry, m_Ordering, m_Supplement;
+ CFX_ByteString m_LastWord;
+};
+#define CIDCODING_UNKNOWN 0
+#define CIDCODING_GB 1
+#define CIDCODING_BIG5 2
+#define CIDCODING_JIS 3
+#define CIDCODING_KOREA 4
+#define CIDCODING_UCS2 5
+#define CIDCODING_CID 6
+#define CIDCODING_UTF16 7
+class CPDF_CMap : public CFX_Object
+{
+public:
+ CPDF_CMap();
+ FX_BOOL LoadPredefined(CPDF_CMapManager* pMgr, const FX_CHAR* name, FX_BOOL bPromptCJK);
+ FX_BOOL LoadEmbedded(FX_LPCBYTE pData, FX_DWORD dwSize);
+ void Release();
+ FX_BOOL IsLoaded() const
+ {
+ return m_bLoaded;
+ }
+ int GetCharset()
+ {
+ return m_Charset;
+ }
+ FX_BOOL IsVertWriting() const
+ {
+ return m_bVertical;
+ }
+ FX_WORD CIDFromCharCode(FX_DWORD charcode) const;
+ FX_DWORD CharCodeFromCID(FX_WORD CID) const;
+ int GetCharSize(FX_DWORD charcode) const;
+ FX_DWORD GetNextChar(const FX_CHAR* pString, int& offset) const;
+ int CountChar(const FX_CHAR* pString, int size) const;
+ int AppendChar(FX_LPSTR str, FX_DWORD charcode) const;
+ typedef enum {OneByte, TwoBytes, MixedTwoBytes, MixedFourBytes} CodingScheme;
+protected:
+ ~CPDF_CMap();
+ friend class CPDF_CMapParser;
+ friend class CPDF_CMapManager;
+ friend class CPDF_CIDFont;
+protected:
+ CFX_ByteString m_PredefinedCMap;
+ FX_BOOL m_bVertical;
+ int m_Charset, m_Coding;
+ CodingScheme m_CodingScheme;
+ int m_nCodeRanges;
+ FX_BYTE* m_pLeadingBytes;
+ FX_WORD* m_pMapping;
+ FX_LPBYTE m_pAddMapping;
+ FX_BOOL m_bLoaded;
+ const FXCMAP_CMap* m_pEmbedMap;
+ CPDF_CMap* m_pUseMap;
+};
+class CPDF_PredefinedCMap
+{
+public:
+ FX_LPCSTR m_pName;
+ int m_Charset;
+ int m_Coding;
+ CPDF_CMap::CodingScheme m_CodingScheme;
+ FX_DWORD m_LeadingSegCount;
+ FX_BYTE m_LeadingSegs[4];
+};
+typedef struct _FileHeader {
+ FX_BYTE btTag[4];
+ FX_BYTE btVersion;
+ FX_BYTE btFormat;
+ FX_BYTE btReserved1[2];
+ FX_DWORD dwStartIndex;
+ FX_DWORD dwEndIndex;
+ FX_DWORD dwDataSize;
+ FX_DWORD dwDataOffset;
+ FX_DWORD dwRecordSize;
+} FXMP_FILEHEADER;
+class CPDF_FXMP : public CFX_Object
+{
+public:
+ CPDF_FXMP()
+ {
+ m_pHeader = NULL;
+ m_pTable = NULL;
+ }
+ ~CPDF_FXMP()
+ {
+ if (m_pHeader) {
+ FX_Free(m_pHeader);
+ }
+ }
+ FX_BOOL IsLoaded()
+ {
+ return m_pTable != NULL;
+ }
+ FX_BOOL LoadFile(FX_LPVOID pPackage, FX_LPCSTR fileid);
+ FX_LPBYTE GetRecord(FX_DWORD index);
+private:
+ FXMP_FILEHEADER* m_pHeader;
+ FX_LPBYTE m_pTable;
+};
+class CPDF_CID2UnicodeMap : public CFX_Object
+{
+public:
+ CPDF_CID2UnicodeMap();
+ ~CPDF_CID2UnicodeMap();
+ FX_BOOL Initialize();
+ FX_BOOL IsLoaded();
+ void Load(CPDF_CMapManager* pMgr, int charset, FX_BOOL bPromptCJK);
+ FX_WCHAR UnicodeFromCID(FX_WORD CID);
+protected:
+ int m_Charset;
+ const FX_WORD* m_pEmbeddedMap;
+ FX_DWORD m_EmbeddedCount;
+#ifndef _FPDFAPI_MINI_
+ CPDF_FXMP* m_pExternalMap;
+#endif
+};
+class CPDF_ToUnicodeMap : public CFX_Object
+{
+public:
+ void Load(CPDF_Stream* pStream);
+ CFX_WideString Lookup(FX_DWORD charcode);
+ FX_DWORD ReverseLookup(FX_WCHAR unicode);
+protected:
+ CFX_CMapDWordToDWord m_Map;
+ CPDF_CID2UnicodeMap* m_pBaseMap;
+ CFX_WideTextBuf m_MultiCharBuf;
+};
+class CPDF_FontCharMap : public CFX_CharMap, public CFX_Object
+{
+public:
+ CPDF_FontCharMap(CPDF_Font* pFont);
+ CPDF_Font* m_pFont;
+};