1e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// found in the LICENSE file. 4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 7e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "font_int.h" 8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fpdfapi/fpdf_module.h" 10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fpdfapi/fpdf_page.h" 11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fpdfapi/fpdf_resource.h" 12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fxcrt/fx_ext.h" 13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fxge/fx_freetype.h" 14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fxge/fx_ge.h" 15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/src/fpdfapi/fpdf_cmaps/cmap_int.h" 16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannnamespace { 18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannconst FX_CHAR* const g_CharsetNames[CIDSET_NUM_SETS] = 20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {nullptr, "GB1", "CNS1", "Japan1", "Korea1", "UCS"}; 21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannconst int g_CharsetCPs[CIDSET_NUM_SETS] = {0, 936, 950, 932, 949, 1200}; 23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_PredefinedCMap { 25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const FX_CHAR* m_pName; 27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSet m_Charset; 28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_Coding; 29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap::CodingScheme m_CodingScheme; 30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD m_LeadingSegCount; 31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t m_LeadingSegs[4]; 32e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannconst CPDF_PredefinedCMap g_PredefinedCMaps[] = { 35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"GB-EUC", 36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_GB1, 37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDCODING_GB, 38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap::MixedTwoBytes, 39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1, 40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {0xa1, 0xfe}}, 41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"GBpc-EUC", 42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_GB1, 43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDCODING_GB, 44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap::MixedTwoBytes, 45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1, 46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {0xa1, 0xfc}}, 47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"GBK-EUC", 48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_GB1, 49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDCODING_GB, 50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap::MixedTwoBytes, 51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1, 52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {0x81, 0xfe}}, 53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"GBKp-EUC", 54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_GB1, 55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDCODING_GB, 56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap::MixedTwoBytes, 57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1, 58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {0x81, 0xfe}}, 59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"GBK2K-EUC", 60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_GB1, 61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDCODING_GB, 62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap::MixedTwoBytes, 63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1, 64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {0x81, 0xfe}}, 65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"GBK2K", 66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_GB1, 67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDCODING_GB, 68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap::MixedTwoBytes, 69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1, 70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {0x81, 0xfe}}, 71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"UniGB-UCS2", CIDSET_GB1, CIDCODING_UCS2, CPDF_CMap::TwoBytes}, 72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"UniGB-UTF16", CIDSET_GB1, CIDCODING_UTF16, CPDF_CMap::TwoBytes}, 73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"B5pc", 74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_CNS1, 75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDCODING_BIG5, 76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap::MixedTwoBytes, 77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1, 78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {0xa1, 0xfc}}, 79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"HKscs-B5", 80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_CNS1, 81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDCODING_BIG5, 82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap::MixedTwoBytes, 83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1, 84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {0x88, 0xfe}}, 85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"ETen-B5", 86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_CNS1, 87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDCODING_BIG5, 88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap::MixedTwoBytes, 89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1, 90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {0xa1, 0xfe}}, 91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"ETenms-B5", 92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_CNS1, 93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDCODING_BIG5, 94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap::MixedTwoBytes, 95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1, 96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {0xa1, 0xfe}}, 97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"UniCNS-UCS2", CIDSET_CNS1, CIDCODING_UCS2, CPDF_CMap::TwoBytes}, 98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"UniCNS-UTF16", CIDSET_CNS1, CIDCODING_UTF16, CPDF_CMap::TwoBytes}, 99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"83pv-RKSJ", 100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_JAPAN1, 101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDCODING_JIS, 102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap::MixedTwoBytes, 103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 2, 104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {0x81, 0x9f, 0xe0, 0xfc}}, 105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"90ms-RKSJ", 106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_JAPAN1, 107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDCODING_JIS, 108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap::MixedTwoBytes, 109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 2, 110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {0x81, 0x9f, 0xe0, 0xfc}}, 111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"90msp-RKSJ", 112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_JAPAN1, 113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDCODING_JIS, 114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap::MixedTwoBytes, 115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 2, 116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {0x81, 0x9f, 0xe0, 0xfc}}, 117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"90pv-RKSJ", 118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_JAPAN1, 119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDCODING_JIS, 120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap::MixedTwoBytes, 121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 2, 122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {0x81, 0x9f, 0xe0, 0xfc}}, 123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"Add-RKSJ", 124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_JAPAN1, 125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDCODING_JIS, 126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap::MixedTwoBytes, 127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 2, 128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {0x81, 0x9f, 0xe0, 0xfc}}, 129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"EUC", 130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_JAPAN1, 131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDCODING_JIS, 132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap::MixedTwoBytes, 133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 2, 134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {0x8e, 0x8e, 0xa1, 0xfe}}, 135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"H", CIDSET_JAPAN1, CIDCODING_JIS, CPDF_CMap::TwoBytes, 1, {0x21, 0x7e}}, 136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"V", CIDSET_JAPAN1, CIDCODING_JIS, CPDF_CMap::TwoBytes, 1, {0x21, 0x7e}}, 137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"Ext-RKSJ", 138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_JAPAN1, 139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDCODING_JIS, 140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap::MixedTwoBytes, 141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 2, 142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {0x81, 0x9f, 0xe0, 0xfc}}, 143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"UniJIS-UCS2", CIDSET_JAPAN1, CIDCODING_UCS2, CPDF_CMap::TwoBytes}, 144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"UniJIS-UCS2-HW", CIDSET_JAPAN1, CIDCODING_UCS2, CPDF_CMap::TwoBytes}, 145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"UniJIS-UTF16", CIDSET_JAPAN1, CIDCODING_UTF16, CPDF_CMap::TwoBytes}, 146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"KSC-EUC", 147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_KOREA1, 148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDCODING_KOREA, 149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap::MixedTwoBytes, 150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1, 151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {0xa1, 0xfe}}, 152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"KSCms-UHC", 153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_KOREA1, 154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDCODING_KOREA, 155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap::MixedTwoBytes, 156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1, 157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {0x81, 0xfe}}, 158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"KSCms-UHC-HW", 159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_KOREA1, 160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDCODING_KOREA, 161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap::MixedTwoBytes, 162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1, 163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {0x81, 0xfe}}, 164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"KSCpc-EUC", 165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_KOREA1, 166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDCODING_KOREA, 167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap::MixedTwoBytes, 168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1, 169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {0xa1, 0xfd}}, 170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"UniKS-UCS2", CIDSET_KOREA1, CIDCODING_UCS2, CPDF_CMap::TwoBytes}, 171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {"UniKS-UTF16", CIDSET_KOREA1, CIDCODING_UTF16, CPDF_CMap::TwoBytes}, 172e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCIDSet CIDSetFromSizeT(size_t index) { 175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (index >= CIDSET_NUM_SETS) { 176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann NOTREACHED(); 177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return CIDSET_UNKNOWN; 178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return static_cast<CIDSet>(index); 180e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCIDSet CharsetFromOrdering(const CFX_ByteString& ordering) { 183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (size_t charset = 1; charset < FX_ArraySize(g_CharsetNames); ++charset) { 184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (ordering == CFX_ByteStringC(g_CharsetNames[charset])) 185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return CIDSetFromSizeT(charset); 186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return CIDSET_UNKNOWN; 188e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_ByteString CMap_GetString(const CFX_ByteStringC& word) { 191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return word.Mid(1, word.GetLength() - 2); 192e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CompareDWORD(const void* data1, const void* data2) { 195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (*(FX_DWORD*)data1) - (*(FX_DWORD*)data2); 196e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CompareCID(const void* key, const void* element) { 199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if ((*(FX_DWORD*)key) < (*(FX_DWORD*)element)) { 200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return -1; 201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if ((*(FX_DWORD*)key) > 203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (*(FX_DWORD*)element) + ((FX_DWORD*)element)[1] / 65536) { 204e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return 1; 205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 207e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CheckCodeRange(uint8_t* codes, 210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int size, 211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CMap_CodeRange* pRanges, 212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nRanges) { 213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iSeg = nRanges - 1; 214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann while (iSeg >= 0) { 215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pRanges[iSeg].m_CharSize < size) { 216ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann --iSeg; 217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 218ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iChar = 0; 220ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann while (iChar < size) { 221ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (codes[iChar] < pRanges[iSeg].m_Lower[iChar] || 222ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann codes[iChar] > pRanges[iSeg].m_Upper[iChar]) { 223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 224ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ++iChar; 226ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iChar == pRanges[iSeg].m_CharSize) 228ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 2; 229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 230ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iChar) 231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (size == pRanges[iSeg].m_CharSize) ? 2 : 1; 232ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iSeg--; 233ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 234ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 235e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 236ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint GetCharSizeImpl(FX_DWORD charcode, 238ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CMap_CodeRange* pRanges, 239ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iRangesSize) { 240ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!iRangesSize) 241e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return 1; 242ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 243ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t codes[4]; 244ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann codes[0] = codes[1] = 0x00; 245ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann codes[2] = (uint8_t)(charcode >> 8 & 0xFF); 246ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann codes[3] = (uint8_t)charcode; 247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int offset = 0; 248ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int size = 4; 249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < 4; ++i) { 250ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iSeg = iRangesSize - 1; 251ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann while (iSeg >= 0) { 252ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pRanges[iSeg].m_CharSize < size) { 253ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann --iSeg; 254ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 255ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 256ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iChar = 0; 257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann while (iChar < size) { 258ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (codes[offset + iChar] < pRanges[iSeg].m_Lower[iChar] || 259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann codes[offset + iChar] > pRanges[iSeg].m_Upper[iChar]) { 260ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 261ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 262ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ++iChar; 263ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 264ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iChar == pRanges[iSeg].m_CharSize) 265ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return size; 266ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann --iSeg; 267ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 268ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann --size; 269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ++offset; 270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 271ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 1; 272e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 273ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 274ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannbool IsValidEmbeddedCharcodeFromUnicodeCharset(CIDSet charset) { 275ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (charset) { 276ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CIDSET_GB1: 277ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CIDSET_CNS1: 278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CIDSET_JAPAN1: 279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CIDSET_KOREA1: 280ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return true; 281ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 282ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann default: 283ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return false; 284ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 285e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 286ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 287ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ 288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_DWORD EmbeddedCharcodeFromUnicode(const FXCMAP_CMap* pEmbedMap, 289ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSet charset, 290ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WCHAR unicode) { 291ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!IsValidEmbeddedCharcodeFromUnicodeCharset(charset)) 292e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return 0; 293ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 294ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_FontGlobals* pFontGlobals = 295ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals(); 296ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const FX_WORD* pCodes = pFontGlobals->m_EmbeddedToUnicodes[charset].m_pMap; 297ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pCodes) 298e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return 0; 299ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 300ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nCodes = pFontGlobals->m_EmbeddedToUnicodes[charset].m_Count; 301ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < nCodes; ++i) { 302ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pCodes[i] == unicode) { 303ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD CharCode = FPDFAPI_CharCodeFromCID(pEmbedMap, i); 304ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CharCode != 0) { 305ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return CharCode; 306ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 307ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 308ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 309ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 310e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 311ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif // _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ 312ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 313ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_WCHAR EmbeddedUnicodeFromCharcode(const FXCMAP_CMap* pEmbedMap, 314ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSet charset, 315ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD charcode) { 316ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!IsValidEmbeddedCharcodeFromUnicodeCharset(charset)) 317e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return 0; 318ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 319ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WORD cid = FPDFAPI_CIDFromCharCode(pEmbedMap, charcode); 320ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (cid == 0) 321e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return 0; 322ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 323ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_FontGlobals* pFontGlobals = 324ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals(); 325ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const FX_WORD* pCodes = pFontGlobals->m_EmbeddedToUnicodes[charset].m_pMap; 326ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pCodes) 327e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return 0; 328ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 329ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (cid < pFontGlobals->m_EmbeddedToUnicodes[charset].m_Count) 330ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pCodes[cid]; 331ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 332e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 333ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 334ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid FT_UseCIDCharmap(FXFT_Face face, int coding) { 335ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int encoding; 336ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (coding) { 337ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CIDCODING_GB: 338ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann encoding = FXFT_ENCODING_GB2312; 339ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 340ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CIDCODING_BIG5: 341ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann encoding = FXFT_ENCODING_BIG5; 342ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 343ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CIDCODING_JIS: 344ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann encoding = FXFT_ENCODING_SJIS; 345ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 346ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CIDCODING_KOREA: 347ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann encoding = FXFT_ENCODING_JOHAB; 348ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 349ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann default: 350ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann encoding = FXFT_ENCODING_UNICODE; 351ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 352ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int err = FXFT_Select_Charmap(face, encoding); 353ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (err) { 354ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann err = FXFT_Select_Charmap(face, FXFT_ENCODING_UNICODE); 355ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 356ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (err && FXFT_Get_Face_Charmaps(face)) { 357ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Set_Charmap(face, *FXFT_Get_Face_Charmaps(face)); 358ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 359e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 360ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 361ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannconst struct CIDTransform { 362ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WORD CID; 363ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t a, b, c, d, e, f; 364ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} g_Japan1_VertCIDs[] = { 365e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {97, 129, 0, 0, 127, 55, 0}, 366e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7887, 127, 0, 0, 127, 76, 89}, 367e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7888, 127, 0, 0, 127, 79, 94}, 368e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7889, 0, 129, 127, 0, 17, 127}, 369e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7890, 0, 129, 127, 0, 17, 127}, 370e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7891, 0, 129, 127, 0, 17, 127}, 371e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7892, 0, 129, 127, 0, 17, 127}, 372e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7893, 0, 129, 127, 0, 17, 127}, 373e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7894, 0, 129, 127, 0, 17, 127}, 374e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7895, 0, 129, 127, 0, 17, 127}, 375e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7896, 0, 129, 127, 0, 17, 127}, 376e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7897, 0, 129, 127, 0, 17, 127}, 377e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7898, 0, 129, 127, 0, 17, 127}, 378e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7899, 0, 129, 127, 0, 17, 104}, 379e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7900, 0, 129, 127, 0, 17, 127}, 380e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7901, 0, 129, 127, 0, 17, 104}, 381e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7902, 0, 129, 127, 0, 17, 127}, 382e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7903, 0, 129, 127, 0, 17, 127}, 383e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7904, 0, 129, 127, 0, 17, 127}, 384e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7905, 0, 129, 127, 0, 17, 114}, 385e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7906, 0, 129, 127, 0, 17, 127}, 386e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7907, 0, 129, 127, 0, 17, 127}, 387e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7908, 0, 129, 127, 0, 17, 127}, 388e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7909, 0, 129, 127, 0, 17, 127}, 389e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7910, 0, 129, 127, 0, 17, 127}, 390e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7911, 0, 129, 127, 0, 17, 127}, 391e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7912, 0, 129, 127, 0, 17, 127}, 392e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7913, 0, 129, 127, 0, 17, 127}, 393e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7914, 0, 129, 127, 0, 17, 127}, 394e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7915, 0, 129, 127, 0, 17, 114}, 395e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7916, 0, 129, 127, 0, 17, 127}, 396e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7917, 0, 129, 127, 0, 17, 127}, 397e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7918, 127, 0, 0, 127, 18, 25}, 398e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7919, 127, 0, 0, 127, 18, 25}, 399e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7920, 127, 0, 0, 127, 18, 25}, 400e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7921, 127, 0, 0, 127, 18, 25}, 401e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7922, 127, 0, 0, 127, 18, 25}, 402e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7923, 127, 0, 0, 127, 18, 25}, 403e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7924, 127, 0, 0, 127, 18, 25}, 404e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7925, 127, 0, 0, 127, 18, 25}, 405e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7926, 127, 0, 0, 127, 18, 25}, 406e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7927, 127, 0, 0, 127, 18, 25}, 407e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7928, 127, 0, 0, 127, 18, 25}, 408e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7929, 127, 0, 0, 127, 18, 25}, 409e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7930, 127, 0, 0, 127, 18, 25}, 410e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7931, 127, 0, 0, 127, 18, 25}, 411e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7932, 127, 0, 0, 127, 18, 25}, 412e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7933, 127, 0, 0, 127, 18, 25}, 413e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7934, 127, 0, 0, 127, 18, 25}, 414e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7935, 127, 0, 0, 127, 18, 25}, 415e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7936, 127, 0, 0, 127, 18, 25}, 416e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7937, 127, 0, 0, 127, 18, 25}, 417e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7938, 127, 0, 0, 127, 18, 25}, 418e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {7939, 127, 0, 0, 127, 18, 25}, 419e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8720, 0, 129, 127, 0, 19, 102}, 420e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8721, 0, 129, 127, 0, 13, 127}, 421e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8722, 0, 129, 127, 0, 19, 108}, 422e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8723, 0, 129, 127, 0, 19, 102}, 423e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8724, 0, 129, 127, 0, 19, 102}, 424e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8725, 0, 129, 127, 0, 19, 102}, 425e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8726, 0, 129, 127, 0, 19, 102}, 426e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8727, 0, 129, 127, 0, 19, 102}, 427e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8728, 0, 129, 127, 0, 19, 114}, 428e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8729, 0, 129, 127, 0, 19, 114}, 429e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8730, 0, 129, 127, 0, 38, 108}, 430e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8731, 0, 129, 127, 0, 13, 108}, 431e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8732, 0, 129, 127, 0, 19, 108}, 432e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8733, 0, 129, 127, 0, 19, 108}, 433e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8734, 0, 129, 127, 0, 19, 108}, 434e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8735, 0, 129, 127, 0, 19, 108}, 435e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8736, 0, 129, 127, 0, 19, 102}, 436e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8737, 0, 129, 127, 0, 19, 102}, 437e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8738, 0, 129, 127, 0, 19, 102}, 438e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8739, 0, 129, 127, 0, 19, 102}, 439e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8740, 0, 129, 127, 0, 19, 102}, 440e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8741, 0, 129, 127, 0, 19, 102}, 441e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8742, 0, 129, 127, 0, 19, 102}, 442e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8743, 0, 129, 127, 0, 19, 102}, 443e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8744, 0, 129, 127, 0, 19, 102}, 444e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8745, 0, 129, 127, 0, 19, 102}, 445e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8746, 0, 129, 127, 0, 19, 114}, 446e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8747, 0, 129, 127, 0, 19, 114}, 447e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8748, 0, 129, 127, 0, 19, 102}, 448e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8749, 0, 129, 127, 0, 19, 102}, 449e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8750, 0, 129, 127, 0, 19, 102}, 450e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8751, 0, 129, 127, 0, 19, 102}, 451e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8752, 0, 129, 127, 0, 19, 102}, 452e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8753, 0, 129, 127, 0, 19, 102}, 453e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8754, 0, 129, 127, 0, 19, 102}, 454e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8755, 0, 129, 127, 0, 19, 102}, 455e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8756, 0, 129, 127, 0, 19, 102}, 456e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8757, 0, 129, 127, 0, 19, 102}, 457e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8758, 0, 129, 127, 0, 19, 102}, 458e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8759, 0, 129, 127, 0, 19, 102}, 459e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8760, 0, 129, 127, 0, 19, 102}, 460e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8761, 0, 129, 127, 0, 19, 102}, 461e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8762, 0, 129, 127, 0, 19, 102}, 462e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8763, 0, 129, 127, 0, 19, 102}, 463e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8764, 0, 129, 127, 0, 19, 102}, 464e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8765, 0, 129, 127, 0, 19, 102}, 465e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8766, 0, 129, 127, 0, 19, 102}, 466e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8767, 0, 129, 127, 0, 19, 102}, 467e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8768, 0, 129, 127, 0, 19, 102}, 468e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8769, 0, 129, 127, 0, 19, 102}, 469e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8770, 0, 129, 127, 0, 19, 102}, 470e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8771, 0, 129, 127, 0, 19, 102}, 471e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8772, 0, 129, 127, 0, 19, 102}, 472e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8773, 0, 129, 127, 0, 19, 102}, 473e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8774, 0, 129, 127, 0, 19, 102}, 474e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8775, 0, 129, 127, 0, 19, 102}, 475e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8776, 0, 129, 127, 0, 19, 102}, 476e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8777, 0, 129, 127, 0, 19, 102}, 477e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8778, 0, 129, 127, 0, 19, 102}, 478e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8779, 0, 129, 127, 0, 19, 114}, 479e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8780, 0, 129, 127, 0, 19, 108}, 480e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8781, 0, 129, 127, 0, 19, 114}, 481e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8782, 0, 129, 127, 0, 13, 114}, 482e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8783, 0, 129, 127, 0, 19, 108}, 483e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8784, 0, 129, 127, 0, 13, 114}, 484e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8785, 0, 129, 127, 0, 19, 108}, 485e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8786, 0, 129, 127, 0, 19, 108}, 486e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8787, 0, 129, 127, 0, 19, 108}, 487e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8788, 0, 129, 127, 0, 19, 108}, 488e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8789, 0, 129, 127, 0, 19, 108}, 489e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8790, 0, 129, 127, 0, 19, 108}, 490e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8791, 0, 129, 127, 0, 19, 108}, 491e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8792, 0, 129, 127, 0, 19, 108}, 492e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8793, 0, 129, 127, 0, 19, 108}, 493e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8794, 0, 129, 127, 0, 19, 108}, 494e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8795, 0, 129, 127, 0, 19, 108}, 495e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8796, 0, 129, 127, 0, 19, 108}, 496e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8797, 0, 129, 127, 0, 19, 108}, 497e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8798, 0, 129, 127, 0, 19, 108}, 498e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8799, 0, 129, 127, 0, 19, 108}, 499e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8800, 0, 129, 127, 0, 19, 108}, 500e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8801, 0, 129, 127, 0, 19, 108}, 501e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8802, 0, 129, 127, 0, 19, 108}, 502e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8803, 0, 129, 127, 0, 19, 108}, 503e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8804, 0, 129, 127, 0, 19, 108}, 504e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8805, 0, 129, 127, 0, 19, 108}, 505e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8806, 0, 129, 127, 0, 19, 108}, 506e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8807, 0, 129, 127, 0, 19, 108}, 507e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8808, 0, 129, 127, 0, 19, 108}, 508e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8809, 0, 129, 127, 0, 19, 108}, 509e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8810, 0, 129, 127, 0, 19, 108}, 510e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8811, 0, 129, 127, 0, 19, 114}, 511e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8812, 0, 129, 127, 0, 19, 102}, 512e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8813, 0, 129, 127, 0, 19, 114}, 513e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8814, 0, 129, 127, 0, 76, 102}, 514e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8815, 0, 129, 127, 0, 13, 121}, 515e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8816, 0, 129, 127, 0, 19, 114}, 516e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8817, 0, 129, 127, 0, 19, 127}, 517e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8818, 0, 129, 127, 0, 19, 114}, 518e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov {8819, 0, 129, 127, 0, 218, 108}, 519e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 520ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 521ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CompareCIDTransform(const void* key, const void* element) { 522ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WORD CID = *static_cast<const FX_WORD*>(key); 523ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return CID - static_cast<const struct CIDTransform*>(element)->CID; 524ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 525ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 526ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} // namespace 527ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 528ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_CMapManager::CPDF_CMapManager() { 529ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bPrompted = FALSE; 530ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_memset(m_CID2UnicodeMaps, 0, sizeof m_CID2UnicodeMaps); 531ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 532ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_CMapManager::~CPDF_CMapManager() { 533ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (const auto& pair : m_CMaps) { 534ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann delete pair.second; 535ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 536ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CMaps.clear(); 537ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (size_t i = 0; i < FX_ArraySize(m_CID2UnicodeMaps); ++i) { 538ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann delete m_CID2UnicodeMaps[i]; 539ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 540ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 541ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_CMap* CPDF_CMapManager::GetPredefinedCMap(const CFX_ByteString& name, 542ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bPromptCJK) { 543ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann auto it = m_CMaps.find(name); 544ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (it != m_CMaps.end()) { 545ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return it->second; 546ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 547ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap* pCMap = LoadPredefinedCMap(name, bPromptCJK); 548ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!name.IsEmpty()) { 549ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CMaps[name] = pCMap; 550ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 551ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pCMap; 552ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 553ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_CMap* CPDF_CMapManager::LoadPredefinedCMap(const CFX_ByteString& name, 554ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bPromptCJK) { 555ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap* pCMap = new CPDF_CMap; 556ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const FX_CHAR* pname = name; 557ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (*pname == '/') { 558ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pname++; 559ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 560ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pCMap->LoadPredefined(this, pname, bPromptCJK); 561ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pCMap; 562ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 563ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 564ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_CMapManager::ReloadAll() { 565ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (const auto& pair : m_CMaps) { 566ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap* pCMap = pair.second; 567ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pCMap->LoadPredefined(this, pair.first, FALSE); 568ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 569ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (size_t i = 0; i < FX_ArraySize(m_CID2UnicodeMaps); ++i) { 570ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CPDF_CID2UnicodeMap* pMap = m_CID2UnicodeMaps[i]) { 571ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pMap->Load(this, CIDSetFromSizeT(i), FALSE); 572ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 573ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 574ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 575ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_CID2UnicodeMap* CPDF_CMapManager::GetCID2UnicodeMap(CIDSet charset, 576ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bPromptCJK) { 577ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_CID2UnicodeMaps[charset]) 578ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CID2UnicodeMaps[charset] = LoadCID2UnicodeMap(charset, bPromptCJK); 579ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_CID2UnicodeMaps[charset]; 580ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 581ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_CID2UnicodeMap* CPDF_CMapManager::LoadCID2UnicodeMap(CIDSet charset, 582ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bPromptCJK) { 583ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CID2UnicodeMap* pMap = new CPDF_CID2UnicodeMap(); 584ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pMap->Initialize()) { 585ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann delete pMap; 586ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 587ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 588ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pMap->Load(this, charset, bPromptCJK); 589ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pMap; 590ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 591ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_CMapParser::CPDF_CMapParser() { 592ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCMap = NULL; 593ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Status = 0; 594ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CodeSeq = 0; 595ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 596ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_CMapParser::Initialize(CPDF_CMap* pCMap) { 597ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCMap = pCMap; 598ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Status = 0; 599ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CodeSeq = 0; 600ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_AddMaps.EstimateSize(0, 10240); 601ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 602ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 603ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 604ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_CMapParser::ParseWord(const CFX_ByteStringC& word) { 605ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (word.IsEmpty()) { 606ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 607ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 608ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (word == "begincidchar") { 609ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Status = 1; 610ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CodeSeq = 0; 611ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (word == "begincidrange") { 612ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Status = 2; 613ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CodeSeq = 0; 614ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (word == "endcidrange" || word == "endcidchar") { 615ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Status = 0; 616ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (word == "/WMode") { 617ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Status = 6; 618ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (word == "/Registry") { 619ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Status = 3; 620ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (word == "/Ordering") { 621ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Status = 4; 622ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (word == "/Supplement") { 623ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Status = 5; 624ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (word == "begincodespacerange") { 625ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Status = 7; 626ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CodeSeq = 0; 627ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (word == "usecmap") { 628ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (m_Status == 1 || m_Status == 2) { 629ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CodePoints[m_CodeSeq] = CMap_GetCode(word); 630ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CodeSeq++; 631ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD StartCode, EndCode; 632ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WORD StartCID; 633ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Status == 1) { 634ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_CodeSeq < 2) { 635ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 636ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 637ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann EndCode = StartCode = m_CodePoints[0]; 638ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann StartCID = (FX_WORD)m_CodePoints[1]; 639ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 640ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_CodeSeq < 3) { 641ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 642ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 643ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann StartCode = m_CodePoints[0]; 644ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann EndCode = m_CodePoints[1]; 645ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann StartCID = (FX_WORD)m_CodePoints[2]; 646ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 647ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (EndCode < 0x10000) { 648ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (FX_DWORD code = StartCode; code <= EndCode; code++) { 649ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCMap->m_pMapping[code] = (FX_WORD)(StartCID + code - StartCode); 650ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 651ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 652ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD buf[2]; 653ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann buf[0] = StartCode; 654ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann buf[1] = ((EndCode - StartCode) << 16) + StartCID; 655ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_AddMaps.AppendBlock(buf, sizeof buf); 656ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 657ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CodeSeq = 0; 658ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (m_Status == 3) { 659ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CMap_GetString(word); 660ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Status = 0; 661ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (m_Status == 4) { 662ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCMap->m_Charset = CharsetFromOrdering(CMap_GetString(word)); 663ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Status = 0; 664ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (m_Status == 5) { 665ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CMap_GetCode(word); 666ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Status = 0; 667ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (m_Status == 6) { 668ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCMap->m_bVertical = CMap_GetCode(word); 669ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Status = 0; 670ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (m_Status == 7) { 671ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (word == "endcodespacerange") { 672ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nSegs = m_CodeRanges.GetSize(); 673ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nSegs > 1) { 674ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCMap->m_CodingScheme = CPDF_CMap::MixedFourBytes; 675ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCMap->m_nCodeRanges = nSegs; 676ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCMap->m_pLeadingBytes = 677ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_Alloc2D(uint8_t, nSegs, sizeof(CMap_CodeRange)); 678ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_memcpy(m_pCMap->m_pLeadingBytes, m_CodeRanges.GetData(), 679ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nSegs * sizeof(CMap_CodeRange)); 680ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (nSegs == 1) { 681ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCMap->m_CodingScheme = (m_CodeRanges[0].m_CharSize == 2) 682ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ? CPDF_CMap::TwoBytes 683ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : CPDF_CMap::OneByte; 684ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 685ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Status = 0; 686ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 687ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (word.GetLength() == 0 || word.GetAt(0) != '<') { 688ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 689ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 690ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_CodeSeq % 2) { 691ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CMap_CodeRange range; 692ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CMap_GetCodeRange(range, m_LastWord, word)) { 693ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CodeRanges.Add(range); 694ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 695ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 696ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CodeSeq++; 697ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 698ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 699ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_LastWord = word; 700ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 701ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 702ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Static. 703ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_DWORD CPDF_CMapParser::CMap_GetCode(const CFX_ByteStringC& word) { 704ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int num = 0; 705ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (word.GetAt(0) == '<') { 706ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 1; i < word.GetLength() && std::isxdigit(word.GetAt(i)); ++i) 707ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann num = num * 16 + FXSYS_toHexDigit(word.GetAt(i)); 708ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return num; 709ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 710ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 711ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < word.GetLength() && std::isdigit(word.GetAt(i)); ++i) 712ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann num = num * 10 + FXSYS_toDecimalDigit(word.GetAt(i)); 713ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return num; 714ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 715ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 716ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Static. 717ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannbool CPDF_CMapParser::CMap_GetCodeRange(CMap_CodeRange& range, 718ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_ByteStringC& first, 719ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_ByteStringC& second) { 720ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (first.GetLength() == 0 || first.GetAt(0) != '<') 721ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return false; 722ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 723ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int i; 724ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (i = 1; i < first.GetLength(); ++i) { 725ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (first.GetAt(i) == '>') { 726ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 727ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 728ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 729ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann range.m_CharSize = (i - 1) / 2; 730ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (range.m_CharSize > 4) 731ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return false; 732ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 733ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (i = 0; i < range.m_CharSize; ++i) { 734ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t digit1 = first.GetAt(i * 2 + 1); 735ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t digit2 = first.GetAt(i * 2 + 2); 736ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann range.m_Lower[i] = FXSYS_toHexDigit(digit1) * 16 + FXSYS_toHexDigit(digit2); 737ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 738ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 739ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD size = second.GetLength(); 740ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (i = 0; i < range.m_CharSize; ++i) { 741ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t digit1 = ((FX_DWORD)i * 2 + 1 < size) 742ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ? second.GetAt((FX_STRSIZE)i * 2 + 1) 743ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : '0'; 744ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t digit2 = ((FX_DWORD)i * 2 + 2 < size) 745ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ? second.GetAt((FX_STRSIZE)i * 2 + 2) 746ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : '0'; 747ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann range.m_Upper[i] = FXSYS_toHexDigit(digit1) * 16 + FXSYS_toHexDigit(digit2); 748ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 749ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return true; 750ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 751ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 752ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_CMap::CPDF_CMap() { 753ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Charset = CIDSET_UNKNOWN; 754ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Coding = CIDCODING_UNKNOWN; 755ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CodingScheme = TwoBytes; 756ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bVertical = 0; 757ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bLoaded = FALSE; 758ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pMapping = NULL; 759ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pLeadingBytes = NULL; 760ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pAddMapping = NULL; 761ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEmbedMap = NULL; 762ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pUseMap = NULL; 763ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_nCodeRanges = 0; 764ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 765ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_CMap::~CPDF_CMap() { 766ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_Free(m_pMapping); 767ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_Free(m_pAddMapping); 768ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_Free(m_pLeadingBytes); 769ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann delete m_pUseMap; 770ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 771ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_CMap::Release() { 772ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_PredefinedCMap.IsEmpty()) { 773ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann delete this; 774ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 775ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 776ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 777ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_CMap::LoadPredefined(CPDF_CMapManager* pMgr, 778ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const FX_CHAR* pName, 779ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bPromptCJK) { 780ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_PredefinedCMap = pName; 781ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_PredefinedCMap == "Identity-H" || m_PredefinedCMap == "Identity-V") { 782ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Coding = CIDCODING_CID; 783ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bVertical = pName[9] == 'V'; 784ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bLoaded = TRUE; 785ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 786ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 787ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString cmapid = m_PredefinedCMap; 788ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bVertical = cmapid.Right(1) == "V"; 789ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (cmapid.GetLength() > 2) { 790ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann cmapid = cmapid.Left(cmapid.GetLength() - 2); 791ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 792ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CPDF_PredefinedCMap* map = nullptr; 793ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (size_t i = 0; i < FX_ArraySize(g_PredefinedCMaps); ++i) { 794ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (cmapid == CFX_ByteStringC(g_PredefinedCMaps[i].m_pName)) { 795ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann map = &g_PredefinedCMaps[i]; 796ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 797ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 798ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 799ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!map) 800ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 801ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 802ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Charset = map->m_Charset; 803ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Coding = map->m_Coding; 804ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CodingScheme = map->m_CodingScheme; 805ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_CodingScheme == MixedTwoBytes) { 806ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pLeadingBytes = FX_Alloc(uint8_t, 256); 807ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (FX_DWORD i = 0; i < map->m_LeadingSegCount; ++i) { 808ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const uint8_t* segs = map->m_LeadingSegs; 809ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int b = segs[i * 2]; b <= segs[i * 2 + 1]; ++b) { 810ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pLeadingBytes[b] = 1; 811ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 812ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 813ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 814ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FPDFAPI_FindEmbeddedCMap(pName, m_Charset, m_Coding, m_pEmbedMap); 815ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pEmbedMap) { 816ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bLoaded = TRUE; 817ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 818ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 819ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 820ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 821ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_CMap::LoadEmbedded(const uint8_t* pData, FX_DWORD size) { 822ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pMapping = FX_Alloc(FX_WORD, 65536); 823ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMapParser parser; 824ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann parser.Initialize(this); 825ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_SimpleParser syntax(pData, size); 826ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann while (1) { 827ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteStringC word = syntax.GetWord(); 828ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (word.IsEmpty()) { 829ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 830ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 831ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann parser.ParseWord(word); 832ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 833ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_CodingScheme == MixedFourBytes && parser.m_AddMaps.GetSize()) { 834ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pAddMapping = FX_Alloc(uint8_t, parser.m_AddMaps.GetSize() + 4); 835ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann *(FX_DWORD*)m_pAddMapping = parser.m_AddMaps.GetSize() / 8; 836ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_memcpy(m_pAddMapping + 4, parser.m_AddMaps.GetBuffer(), 837ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann parser.m_AddMaps.GetSize()); 838ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_qsort(m_pAddMapping + 4, parser.m_AddMaps.GetSize() / 8, 8, 839ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CompareDWORD); 840ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 841ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 842ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 843ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 844ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_WORD CPDF_CMap::CIDFromCharCode(FX_DWORD charcode) const { 845ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Coding == CIDCODING_CID) { 846ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (FX_WORD)charcode; 847ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 848ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pEmbedMap) { 849ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FPDFAPI_CIDFromCharCode(m_pEmbedMap, charcode); 850ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 851ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pMapping) { 852ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (FX_WORD)charcode; 853ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 854ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (charcode >> 16) { 855ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pAddMapping) { 856ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void* found = FXSYS_bsearch(&charcode, m_pAddMapping + 4, 857ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann *(FX_DWORD*)m_pAddMapping, 8, CompareCID); 858ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!found) { 859ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pUseMap) { 860ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pUseMap->CIDFromCharCode(charcode); 861ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 862ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 863ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 864ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (FX_WORD)(((FX_DWORD*)found)[1] % 65536 + charcode - 865ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann *(FX_DWORD*)found); 866ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 867ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pUseMap) 868ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pUseMap->CIDFromCharCode(charcode); 869ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 870ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 871ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD CID = m_pMapping[charcode]; 872ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!CID && m_pUseMap) 873ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pUseMap->CIDFromCharCode(charcode); 874ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (FX_WORD)CID; 875ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 876ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 877ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_DWORD CPDF_CMap::GetNextChar(const FX_CHAR* pString, 878ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nStrLen, 879ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int& offset) const { 880ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_CodingScheme) { 881ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case OneByte: 882ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return ((uint8_t*)pString)[offset++]; 883ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case TwoBytes: 884ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann offset += 2; 885ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return ((uint8_t*)pString)[offset - 2] * 256 + 886ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ((uint8_t*)pString)[offset - 1]; 887ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case MixedTwoBytes: { 888ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t byte1 = ((uint8_t*)pString)[offset++]; 889ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pLeadingBytes[byte1]) { 890ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return byte1; 891ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 892ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t byte2 = ((uint8_t*)pString)[offset++]; 893ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return byte1 * 256 + byte2; 894ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 895ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case MixedFourBytes: { 896ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t codes[4]; 897ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int char_size = 1; 898ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann codes[0] = ((uint8_t*)pString)[offset++]; 899ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CMap_CodeRange* pRanges = (CMap_CodeRange*)m_pLeadingBytes; 900ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann while (1) { 901ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int ret = CheckCodeRange(codes, char_size, pRanges, m_nCodeRanges); 902ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (ret == 0) { 903ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 904ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 905ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (ret == 2) { 906ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD charcode = 0; 907ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < char_size; i++) { 908ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann charcode = (charcode << 8) + codes[i]; 909ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 910ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return charcode; 911ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 912ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (char_size == 4 || offset == nStrLen) { 913ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 914ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 915ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann codes[char_size++] = ((uint8_t*)pString)[offset++]; 916ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 917ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 918e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 919ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 920ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 921ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 922ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDF_CMap::GetCharSize(FX_DWORD charcode) const { 923ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_CodingScheme) { 924ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case OneByte: 925ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 1; 926ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case TwoBytes: 927ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 2; 928ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case MixedTwoBytes: 929ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case MixedFourBytes: 930ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (charcode < 0x100) { 931ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 1; 932ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 933ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (charcode < 0x10000) { 934ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 2; 935ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 936ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (charcode < 0x1000000) { 937ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 3; 938ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 939ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 4; 940ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 941ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 1; 942ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 943ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDF_CMap::CountChar(const FX_CHAR* pString, int size) const { 944ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_CodingScheme) { 945ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case OneByte: 946ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return size; 947ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case TwoBytes: 948ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (size + 1) / 2; 949ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case MixedTwoBytes: { 950ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int count = 0; 951ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < size; i++) { 952ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann count++; 953ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pLeadingBytes[((uint8_t*)pString)[i]]) { 954ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann i++; 955ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 956ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 957ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return count; 958ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 959ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case MixedFourBytes: { 960ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int count = 0, offset = 0; 961ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann while (offset < size) { 962ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann GetNextChar(pString, size, offset); 963ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann count++; 964ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 965ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return count; 966ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 967ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 968ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return size; 969ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 970ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 971ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDF_CMap::AppendChar(FX_CHAR* str, FX_DWORD charcode) const { 972ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_CodingScheme) { 973ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case OneByte: 974ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann str[0] = (uint8_t)charcode; 975ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 1; 976ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case TwoBytes: 977ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann str[0] = (uint8_t)(charcode / 256); 978ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann str[1] = (uint8_t)(charcode % 256); 979ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 2; 980ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case MixedTwoBytes: 981ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case MixedFourBytes: 982ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (charcode < 0x100) { 983ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CMap_CodeRange* pRanges = (CMap_CodeRange*)m_pLeadingBytes; 984ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iSize = GetCharSizeImpl(charcode, pRanges, m_nCodeRanges); 985ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iSize == 0) { 986ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iSize = 1; 987ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 988ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iSize > 1) { 989ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_memset(str, 0, sizeof(uint8_t) * iSize); 990ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 991ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann str[iSize - 1] = (uint8_t)charcode; 992ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return iSize; 993ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 994ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (charcode < 0x10000) { 995ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann str[0] = (uint8_t)(charcode >> 8); 996ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann str[1] = (uint8_t)charcode; 997ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 2; 998ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 999ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (charcode < 0x1000000) { 1000ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann str[0] = (uint8_t)(charcode >> 16); 1001ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann str[1] = (uint8_t)(charcode >> 8); 1002ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann str[2] = (uint8_t)charcode; 1003ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 3; 1004ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1005ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann str[0] = (uint8_t)(charcode >> 24); 1006ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann str[1] = (uint8_t)(charcode >> 16); 1007ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann str[2] = (uint8_t)(charcode >> 8); 1008ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann str[3] = (uint8_t)charcode; 1009ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 4; 1010ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1011ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 1012ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1013ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_CID2UnicodeMap::CPDF_CID2UnicodeMap() { 1014ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_EmbeddedCount = 0; 1015ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1016ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_CID2UnicodeMap::~CPDF_CID2UnicodeMap() {} 1017ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_CID2UnicodeMap::Initialize() { 1018ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 1019ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1020ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_CID2UnicodeMap::IsLoaded() { 1021ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_EmbeddedCount != 0; 1022ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1023ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_WCHAR CPDF_CID2UnicodeMap::UnicodeFromCID(FX_WORD CID) { 1024ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Charset == CIDSET_UNICODE) { 1025ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return CID; 1026ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1027ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CID < m_EmbeddedCount) { 1028ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pEmbeddedMap[CID]; 1029ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1030ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 1031ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1032ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1033ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_CID2UnicodeMap::Load(CPDF_CMapManager* pMgr, 1034ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSet charset, 1035ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bPromptCJK) { 1036ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Charset = charset; 1037ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FPDFAPI_LoadCID2UnicodeMap(charset, m_pEmbeddedMap, m_EmbeddedCount); 1038ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1039ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1040ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "ttgsubtable.h" 1041ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_CIDFont::CPDF_CIDFont() : CPDF_Font(PDFFONT_CIDFONT) { 1042ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCMap = NULL; 1043ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pAllocatedCMap = NULL; 1044ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCID2UnicodeMap = NULL; 1045ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pAnsiWidths = NULL; 1046ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCIDToGIDMap = NULL; 1047ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bCIDIsGID = FALSE; 1048ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bAdobeCourierStd = FALSE; 1049ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pTTGSUBTable = NULL; 1050ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_memset(m_CharBBox, 0xff, 256 * sizeof(FX_SMALL_RECT)); 1051ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1052ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_CIDFont::~CPDF_CIDFont() { 1053ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pAnsiWidths) { 1054ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_Free(m_pAnsiWidths); 1055ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1056ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann delete m_pAllocatedCMap; 1057ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann delete m_pCIDToGIDMap; 1058ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann delete m_pTTGSUBTable; 1059ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1060ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_WORD CPDF_CIDFont::CIDFromCharCode(FX_DWORD charcode) const { 1061ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pCMap) { 1062ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (FX_WORD)charcode; 1063ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1064ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pCMap->CIDFromCharCode(charcode); 1065ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1066ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_CIDFont::IsVertWriting() const { 1067ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pCMap ? m_pCMap->IsVertWriting() : FALSE; 1068ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1069ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1070ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_WCHAR CPDF_CIDFont::_UnicodeFromCharCode(FX_DWORD charcode) const { 1071ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_pCMap->m_Coding) { 1072ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CIDCODING_UCS2: 1073ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CIDCODING_UTF16: 1074ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (FX_WCHAR)charcode; 1075ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CIDCODING_CID: 1076ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pCID2UnicodeMap || !m_pCID2UnicodeMap->IsLoaded()) { 1077ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 1078ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1079ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pCID2UnicodeMap->UnicodeFromCID((FX_WORD)charcode); 1080ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1081ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pCMap->IsLoaded() || !m_pCID2UnicodeMap || 1082ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann !m_pCID2UnicodeMap->IsLoaded()) { 1083ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ 1084ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WCHAR unicode; 1085ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int charsize = 1; 1086ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (charcode > 255) { 1087ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann charcode = (charcode % 256) * 256 + (charcode / 256); 1088ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann charsize = 2; 1089ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1090ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int ret = FXSYS_MultiByteToWideChar(g_CharsetCPs[m_pCMap->m_Coding], 0, 1091ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (const FX_CHAR*)&charcode, charsize, 1092ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &unicode, 1); 1093ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (ret != 1) { 1094ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 1095ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1096ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return unicode; 1097ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif 1098ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pCMap->m_pEmbedMap) { 1099ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return EmbeddedUnicodeFromCharcode(m_pCMap->m_pEmbedMap, 1100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCMap->m_Charset, charcode); 1101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 1103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pCID2UnicodeMap->UnicodeFromCID(CIDFromCharCode(charcode)); 1105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_DWORD CPDF_CIDFont::_CharCodeFromUnicode(FX_WCHAR unicode) const { 1107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_pCMap->m_Coding) { 1108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CIDCODING_UNKNOWN: 1109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 1110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CIDCODING_UCS2: 1111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CIDCODING_UTF16: 1112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return unicode; 1113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CIDCODING_CID: { 1114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pCID2UnicodeMap || !m_pCID2UnicodeMap->IsLoaded()) { 1115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 1116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD CID = 0; 1118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann while (CID < 65536) { 1119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WCHAR this_unicode = m_pCID2UnicodeMap->UnicodeFromCID((FX_WORD)CID); 1120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (this_unicode == unicode) { 1121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return CID; 1122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CID++; 1124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 1126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (unicode < 0x80) { 1130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return static_cast<FX_DWORD>(unicode); 1131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pCMap->m_Coding == CIDCODING_CID) { 1133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 1134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ 1136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t buffer[32]; 1137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int ret = 1138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_WideCharToMultiByte(g_CharsetCPs[m_pCMap->m_Coding], 0, &unicode, 1, 1139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (char*)buffer, 4, NULL, NULL); 1140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (ret == 1) { 1141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return buffer[0]; 1142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (ret == 2) { 1144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return buffer[0] * 256 + buffer[1]; 1145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#else 1147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pCMap->m_pEmbedMap) { 1148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return EmbeddedCharcodeFromUnicode(m_pCMap->m_pEmbedMap, m_pCMap->m_Charset, 1149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann unicode); 1150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif 1152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 1153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_CIDFont::_Load() { 1156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pFontDict->GetString("Subtype") == "TrueType") { 1157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return LoadGB2312(); 1158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Array* pFonts = m_pFontDict->GetArray("DescendantFonts"); 1160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFonts) { 1161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 1162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pFonts->GetCount() != 1) { 1164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 1165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pCIDFontDict = pFonts->GetDict(0); 1167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pCIDFontDict) { 1168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 1169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_BaseFont = pCIDFontDict->GetString("BaseFont"); 1171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if ((m_BaseFont.Compare("CourierStd") == 0 || 1172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_BaseFont.Compare("CourierStd-Bold") == 0 || 1173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_BaseFont.Compare("CourierStd-BoldOblique") == 0 || 1174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_BaseFont.Compare("CourierStd-Oblique") == 0) && 1175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann !IsEmbedded()) { 1176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bAdobeCourierStd = TRUE; 1177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pFontDesc = pCIDFontDict->GetDict("FontDescriptor"); 1179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pFontDesc) { 1180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann LoadFontDescriptor(pFontDesc); 1181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pEncoding = m_pFontDict->GetElementValue("Encoding"); 1183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pEncoding) { 1184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 1185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString subtype = pCIDFontDict->GetString("Subtype"); 1187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bType1 = (subtype == "CIDFontType0"); 1188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pEncoding->IsName()) { 1190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString cmap = pEncoding->GetString(); 1191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCMap = 1192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ModuleMgr::Get() 1193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ->GetPageModule() 1194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ->GetFontGlobals() 1195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ->m_CMapManager.GetPredefinedCMap(cmap, m_pFontFile && m_bType1); 1196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (CPDF_Stream* pStream = pEncoding->AsStream()) { 1197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pAllocatedCMap = m_pCMap = new CPDF_CMap; 1198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_StreamAcc acc; 1199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann acc.LoadAllData(pStream, FALSE); 1200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCMap->LoadEmbedded(acc.GetData(), acc.GetSize()); 1201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 1202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 1203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pCMap) { 1205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 1206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Charset = m_pCMap->m_Charset; 1208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Charset == CIDSET_UNKNOWN) { 1209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pCIDInfo = pCIDFontDict->GetDict("CIDSystemInfo"); 1210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pCIDInfo) { 1211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Charset = CharsetFromOrdering(pCIDInfo->GetString("Ordering")); 1212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Charset != CIDSET_UNKNOWN) 1215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCID2UnicodeMap = 1216ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ModuleMgr::Get() 1217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ->GetPageModule() 1218ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ->GetFontGlobals() 1219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ->m_CMapManager.GetCID2UnicodeMap( 1220ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Charset, 1221ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann !m_pFontFile && (m_pCMap->m_Coding == CIDCODING_CID || 1222ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pCIDFontDict->KeyExist("W"))); 1223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Font.GetFace()) { 1224ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_bType1) { 1225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE); 1226ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 1227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FT_UseCIDCharmap(m_Font.GetFace(), m_pCMap->m_Coding); 1228ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1230ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_DefaultWidth = pCIDFontDict->GetInteger("DW", 1000); 1231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Array* pWidthArray = pCIDFontDict->GetArray("W"); 1232ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pWidthArray) { 1233ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann LoadMetricsArray(pWidthArray, m_WidthList, 1); 1234ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!IsEmbedded()) { 1236ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann LoadSubstFont(); 1237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1238ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (1) { 1239ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pFontFile || (GetSubstFont()->m_SubstFlags & FXFONT_SUBST_EXACT)) { 1240ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pmap = pCIDFontDict->GetElementValue("CIDToGIDMap"); 1241ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pmap) { 1242ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CPDF_Stream* pStream = pmap->AsStream()) { 1243ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCIDToGIDMap = new CPDF_StreamAcc; 1244ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCIDToGIDMap->LoadAllData(pStream, FALSE); 1245ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (pmap->GetString() == "Identity") { 1246ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ 1247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pFontFile) { 1248ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bCIDIsGID = TRUE; 1249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1250ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#else 1251ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bCIDIsGID = TRUE; 1252ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif 1253ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1254ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1255ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1256ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CheckFontMetrics(); 1258ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsVertWriting()) { 1259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pWidthArray = pCIDFontDict->GetArray("W2"); 1260ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pWidthArray) { 1261ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann LoadMetricsArray(pWidthArray, m_VertMetrics, 3); 1262ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1263ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Array* pDefaultArray = pCIDFontDict->GetArray("DW2"); 1264ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pDefaultArray) { 1265ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_DefaultVY = pDefaultArray->GetInteger(0); 1266ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_DefaultW1 = pDefaultArray->GetInteger(1); 1267ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 1268ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_DefaultVY = 880; 1269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_DefaultW1 = -1000; 1270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1271ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1272ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 1273ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1274ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1275ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_CIDFont::GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level) { 1276ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (charcode < 256 && m_CharBBox[charcode].Right != -1) { 1277ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.bottom = m_CharBBox[charcode].Bottom; 1278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.left = m_CharBBox[charcode].Left; 1279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.right = m_CharBBox[charcode].Right; 1280ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.top = m_CharBBox[charcode].Top; 1281ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1282ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1283ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bVert = FALSE; 1284ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int glyph_index = GlyphFromCharCode(charcode, &bVert); 1285ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Face face = m_Font.GetFace(); 1286ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (face) { 1287ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.left = rect.bottom = rect.right = rect.top = 0; 1288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (FXFT_Is_Face_Tricky(face)) { 1289ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int err = FXFT_Load_Glyph(face, glyph_index, 1290ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH); 1291ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!err) { 1292ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_BBox cbox; 1293ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Glyph glyph; 1294ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann err = FXFT_Get_Glyph(((FXFT_Face)face)->glyph, &glyph); 1295ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!err) { 1296ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Glyph_Get_CBox(glyph, FXFT_GLYPH_BBOX_PIXELS, &cbox); 1297ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int pixel_size_x = ((FXFT_Face)face)->size->metrics.x_ppem; 1298ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int pixel_size_y = ((FXFT_Face)face)->size->metrics.y_ppem; 1299ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pixel_size_x == 0 || pixel_size_y == 0) { 1300ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.left = cbox.xMin; 1301ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.right = cbox.xMax; 1302ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.top = cbox.yMax; 1303ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.bottom = cbox.yMin; 1304ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 1305ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.left = cbox.xMin * 1000 / pixel_size_x; 1306ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.right = cbox.xMax * 1000 / pixel_size_x; 1307ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.top = cbox.yMax * 1000 / pixel_size_y; 1308ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.bottom = cbox.yMin * 1000 / pixel_size_y; 1309ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1310ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (rect.top > FXFT_Get_Face_Ascender(face)) { 1311ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.top = FXFT_Get_Face_Ascender(face); 1312ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1313ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (rect.bottom < FXFT_Get_Face_Descender(face)) { 1314ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.bottom = FXFT_Get_Face_Descender(face); 1315ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1316ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Done_Glyph(glyph); 1317ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1318ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1319ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 1320ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int err = FXFT_Load_Glyph(face, glyph_index, FXFT_LOAD_NO_SCALE); 1321ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (err == 0) { 1322ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.left = TT2PDF(FXFT_Get_Glyph_HoriBearingX(face), face); 1323ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.right = TT2PDF( 1324ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Get_Glyph_HoriBearingX(face) + FXFT_Get_Glyph_Width(face), 1325ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann face); 1326ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.top = TT2PDF(FXFT_Get_Glyph_HoriBearingY(face), face); 1327ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.top += rect.top / 64; 1328ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.bottom = TT2PDF( 1329ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Get_Glyph_HoriBearingY(face) - FXFT_Get_Glyph_Height(face), 1330ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann face); 1331ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1332ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1333ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 1334ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect = FX_RECT(0, 0, 0, 0); 1335ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1336ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pFontFile && m_Charset == CIDSET_JAPAN1) { 1337ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WORD CID = CIDFromCharCode(charcode); 1338ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const uint8_t* pTransform = GetCIDTransform(CID); 1339ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pTransform && !bVert) { 1340ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_Matrix matrix(CIDTransformToFloat(pTransform[0]), 1341ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDTransformToFloat(pTransform[1]), 1342ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDTransformToFloat(pTransform[2]), 1343ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDTransformToFloat(pTransform[3]), 1344ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDTransformToFloat(pTransform[4]) * 1000, 1345ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDTransformToFloat(pTransform[5]) * 1000); 1346ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_FloatRect rect_f(rect); 1347ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect_f.Transform(&matrix); 1348ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect = rect_f.GetOutterRect(); 1349ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1350ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1351ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (charcode < 256) { 1352ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CharBBox[charcode].Bottom = (short)rect.bottom; 1353ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CharBBox[charcode].Left = (short)rect.left; 1354ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CharBBox[charcode].Right = (short)rect.right; 1355ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CharBBox[charcode].Top = (short)rect.top; 1356ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1357ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1358ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDF_CIDFont::GetCharWidthF(FX_DWORD charcode, int level) { 1359ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pAnsiWidths && charcode < 0x80) { 1360ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pAnsiWidths[charcode]; 1361ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1362ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WORD cid = CIDFromCharCode(charcode); 1363ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int size = m_WidthList.GetSize(); 1364ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD* list = m_WidthList.GetData(); 1365ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < size; i += 3) { 1366ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (cid >= list[i] && cid <= list[i + 1]) { 1367ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (int)list[i + 2]; 1368ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1369ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1370ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_DefaultWidth; 1371ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1372ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannshort CPDF_CIDFont::GetVertWidth(FX_WORD CID) const { 1373ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD vertsize = m_VertMetrics.GetSize() / 5; 1374ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (vertsize == 0) { 1375ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_DefaultW1; 1376ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1377ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const FX_DWORD* pTable = m_VertMetrics.GetData(); 1378ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (FX_DWORD i = 0; i < vertsize; i++) 1379ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pTable[i * 5] <= CID && pTable[i * 5 + 1] >= CID) { 1380ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (short)(int)pTable[i * 5 + 2]; 1381ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1382ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_DefaultW1; 1383ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1384ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_CIDFont::GetVertOrigin(FX_WORD CID, short& vx, short& vy) const { 1385ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD vertsize = m_VertMetrics.GetSize() / 5; 1386ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (vertsize) { 1387ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const FX_DWORD* pTable = m_VertMetrics.GetData(); 1388ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (FX_DWORD i = 0; i < vertsize; i++) 1389ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pTable[i * 5] <= CID && pTable[i * 5 + 1] >= CID) { 1390ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann vx = (short)(int)pTable[i * 5 + 3]; 1391ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann vy = (short)(int)pTable[i * 5 + 4]; 1392ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1393ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1394ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1395ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD dwWidth = m_DefaultWidth; 1396ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int size = m_WidthList.GetSize(); 1397ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const FX_DWORD* list = m_WidthList.GetData(); 1398ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < size; i += 3) { 1399ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CID >= list[i] && CID <= list[i + 1]) { 1400ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann dwWidth = (FX_WORD)list[i + 2]; 1401ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 1402ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1403ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1404ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann vx = (short)dwWidth / 2; 1405ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann vy = (short)m_DefaultVY; 1406ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1407ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDF_CIDFont::GetGlyphIndex(FX_DWORD unicode, FX_BOOL* pVertGlyph) { 1408ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pVertGlyph) { 1409ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann *pVertGlyph = FALSE; 1410ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1411ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Face face = m_Font.GetFace(); 1412ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int index = FXFT_Get_Char_Index(face, unicode); 1413ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (unicode == 0x2502) { 1414ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return index; 1415ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1416ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (index && IsVertWriting()) { 1417ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pTTGSUBTable) { 1418ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint32_t vindex = 0; 1419ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pTTGSUBTable->GetVerticalGlyph(index, &vindex); 1420ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (vindex) { 1421ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann index = vindex; 1422ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pVertGlyph) { 1423ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann *pVertGlyph = TRUE; 1424ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1425ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1426ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return index; 1427ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1428ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_Font.GetSubData()) { 1429ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann unsigned long length = 0; 1430ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int error = FXFT_Load_Sfnt_Table(face, FT_MAKE_TAG('G', 'S', 'U', 'B'), 0, 1431ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann NULL, &length); 1432ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!error) { 1433ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Font.SetSubData(FX_Alloc(uint8_t, length)); 1434ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1435ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1436ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int error = FXFT_Load_Sfnt_Table(face, FT_MAKE_TAG('G', 'S', 'U', 'B'), 0, 1437ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Font.GetSubData(), NULL); 1438ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!error && m_Font.GetSubData()) { 1439ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pTTGSUBTable = new CFX_CTTGSUBTable; 1440ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pTTGSUBTable->LoadGSUBTable((FT_Bytes)m_Font.GetSubData()); 1441ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint32_t vindex = 0; 1442ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pTTGSUBTable->GetVerticalGlyph(index, &vindex); 1443ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (vindex) { 1444ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann index = vindex; 1445ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pVertGlyph) { 1446ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann *pVertGlyph = TRUE; 1447ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1448ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1449ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1450ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return index; 1451ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1452ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pVertGlyph) { 1453ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann *pVertGlyph = FALSE; 1454ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1455ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return index; 1456ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1457ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDF_CIDFont::GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph) { 1458ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pVertGlyph) { 1459ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann *pVertGlyph = FALSE; 1460ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1461ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pFontFile && !m_pCIDToGIDMap) { 1462ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WORD cid = CIDFromCharCode(charcode); 1463ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WCHAR unicode = 0; 1464ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_bCIDIsGID) { 1465ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_ 1466ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return cid; 1467ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#else 1468ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Flags & PDFFONT_SYMBOLIC) { 1469ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return cid; 1470ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1471ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString uni_str = UnicodeFromCharCode(charcode); 1472ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (uni_str.IsEmpty()) { 1473ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return cid; 1474ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1475ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann unicode = uni_str.GetAt(0); 1476ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif 1477ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 1478ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (cid && m_pCID2UnicodeMap && m_pCID2UnicodeMap->IsLoaded()) { 1479ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann unicode = m_pCID2UnicodeMap->UnicodeFromCID(cid); 1480ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1481ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (unicode == 0) { 1482ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann unicode = _UnicodeFromCharCode(charcode); 1483ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1484ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (unicode == 0 && !(m_Flags & PDFFONT_SYMBOLIC)) { 1485ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann unicode = UnicodeFromCharCode(charcode).GetAt(0); 1486ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1487ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1488ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Face face = m_Font.GetFace(); 1489ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (unicode == 0) { 1490ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_bAdobeCourierStd) { 1491ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return charcode == 0 ? -1 : (int)charcode; 1492ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1493ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann charcode += 31; 1494ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int index = 0, iBaseEncoding; 1495ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bMSUnicode = FT_UseTTCharmap(face, 3, 1); 1496ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bMacRoman = FALSE; 1497ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!bMSUnicode) { 1498ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bMacRoman = FT_UseTTCharmap(face, 1, 0); 1499ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1500ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iBaseEncoding = PDFFONT_ENCODING_STANDARD; 1501ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bMSUnicode) { 1502ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iBaseEncoding = PDFFONT_ENCODING_WINANSI; 1503ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (bMacRoman) { 1504ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iBaseEncoding = PDFFONT_ENCODING_MACROMAN; 1505ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1506ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const FX_CHAR* name = GetAdobeCharName(iBaseEncoding, NULL, charcode); 1507ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!name) { 1508ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return charcode == 0 ? -1 : (int)charcode; 1509ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1510ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WORD unicode = PDF_UnicodeFromAdobeName(name); 1511ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (unicode) { 1512ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bMSUnicode) { 1513ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann index = FXFT_Get_Char_Index(face, unicode); 1514ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (bMacRoman) { 1515ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD maccode = 1516ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FT_CharCodeFromUnicode(FXFT_ENCODING_APPLE_ROMAN, unicode); 1517ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann index = !maccode ? FXFT_Get_Name_Index(face, (char*)name) 1518ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : FXFT_Get_Char_Index(face, maccode); 1519e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } else { 1520ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FXFT_Get_Char_Index(face, unicode); 1521e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 1522ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 1523ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return charcode == 0 ? -1 : (int)charcode; 1524ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1525ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (index == 0 || index == 0xffff) { 1526ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return charcode == 0 ? -1 : (int)charcode; 1527ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1528ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return index; 1529ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1530ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Charset == CIDSET_JAPAN1) { 1531ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (unicode == '\\') { 1532ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann unicode = '/'; 1533ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1534ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_ 1535ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann else if (unicode == 0xa5) { 1536ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann unicode = 0x5c; 1537ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1538ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif 1539e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 1540ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!face) 1541ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return unicode; 1542ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1543ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int err = FXFT_Select_Charmap(face, FXFT_ENCODING_UNICODE); 1544ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (err != 0) { 1545ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int i; 1546ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (i = 0; i < FXFT_Get_Face_CharmapCount(face); i++) { 1547ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD ret = FT_CharCodeFromUnicode( 1548ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(face)[i]), 1549ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (FX_WCHAR)charcode); 1550ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (ret == 0) { 1551ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 1552ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1553ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Set_Charmap(face, FXFT_Get_Face_Charmaps(face)[i]); 1554ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann unicode = (FX_WCHAR)ret; 1555ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 1556ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1557ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (i == FXFT_Get_Face_CharmapCount(face) && i) { 1558ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Set_Charmap(face, FXFT_Get_Face_Charmaps(face)[0]); 1559ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann unicode = (FX_WCHAR)charcode; 1560ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1561ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1562ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (FXFT_Get_Face_Charmap(face)) { 1563ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int index = GetGlyphIndex(unicode, pVertGlyph); 1564ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (index == 0) 1565ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return -1; 1566ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return index; 1567ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1568ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return unicode; 1569ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1570ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_Font.GetFace()) 1571ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return -1; 1572ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1573ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WORD cid = CIDFromCharCode(charcode); 1574ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_bType1) { 1575ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pCIDToGIDMap) { 1576ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return cid; 1577ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1578ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 1579ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pCIDToGIDMap) { 1580ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pFontFile && !m_pCMap->m_pMapping) 1581ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return cid; 1582ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pCMap->m_Coding == CIDCODING_UNKNOWN || 1583ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann !FXFT_Get_Face_Charmap(m_Font.GetFace())) { 1584ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return cid; 1585ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1586ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmap(m_Font.GetFace())) == 1587ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_ENCODING_UNICODE) { 1588ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString unicode_str = UnicodeFromCharCode(charcode); 1589ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (unicode_str.IsEmpty()) { 1590ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return -1; 1591ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1592ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann charcode = unicode_str.GetAt(0); 1593ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1594ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return GetGlyphIndex(charcode, pVertGlyph); 1595ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1596ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1597ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD byte_pos = cid * 2; 1598ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (byte_pos + 2 > m_pCIDToGIDMap->GetSize()) 1599ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return -1; 1600ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1601ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const uint8_t* pdata = m_pCIDToGIDMap->GetData() + byte_pos; 1602ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pdata[0] * 256 + pdata[1]; 1603ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1604ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_DWORD CPDF_CIDFont::GetNextChar(const FX_CHAR* pString, 1605ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nStrLen, 1606ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int& offset) const { 1607ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pCMap->GetNextChar(pString, nStrLen, offset); 1608ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1609ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDF_CIDFont::GetCharSize(FX_DWORD charcode) const { 1610ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pCMap->GetCharSize(charcode); 1611ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1612ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDF_CIDFont::CountChar(const FX_CHAR* pString, int size) const { 1613ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pCMap->CountChar(pString, size); 1614ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1615ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDF_CIDFont::AppendChar(FX_CHAR* str, FX_DWORD charcode) const { 1616ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pCMap->AppendChar(str, charcode); 1617ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1618ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_CIDFont::IsUnicodeCompatible() const { 1619ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pCMap->IsLoaded() || !m_pCID2UnicodeMap || 1620ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann !m_pCID2UnicodeMap->IsLoaded()) { 1621ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pCMap->m_Coding != CIDCODING_UNKNOWN; 1622ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1623ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 1624ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1625ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_CIDFont::IsFontStyleFromCharCode(FX_DWORD charcode) const { 1626ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 1627ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1628ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_CIDFont::LoadSubstFont() { 1629ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Font.LoadSubst(m_BaseFont, !m_bType1, m_Flags, m_StemV * 5, m_ItalicAngle, 1630ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann g_CharsetCPs[m_Charset], IsVertWriting()); 1631ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1632ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_CIDFont::LoadMetricsArray(CPDF_Array* pArray, 1633ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_DWordArray& result, 1634ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nElements) { 1635ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int width_status = 0; 1636ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iCurElement = 0; 1637ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int first_code = 0, last_code; 1638ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD count = pArray->GetCount(); 1639ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (FX_DWORD i = 0; i < count; i++) { 1640ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pObj = pArray->GetElementValue(i); 1641ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pObj) 1642ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 1643ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1644ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CPDF_Array* pArray = pObj->AsArray()) { 1645ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (width_status != 1) 1646ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1647ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1648ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD count = pArray->GetCount(); 1649ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (FX_DWORD j = 0; j < count; j += nElements) { 1650ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann result.Add(first_code); 1651ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann result.Add(first_code); 1652ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int k = 0; k < nElements; k++) { 1653ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann result.Add(pArray->GetInteger(j + k)); 1654ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1655ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann first_code++; 1656ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1657ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann width_status = 0; 1658ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 1659ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (width_status == 0) { 1660ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann first_code = pObj->GetInteger(); 1661ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann width_status = 1; 1662ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (width_status == 1) { 1663ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann last_code = pObj->GetInteger(); 1664ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann width_status = 2; 1665ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iCurElement = 0; 1666ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 1667ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!iCurElement) { 1668ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann result.Add(first_code); 1669ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann result.Add(last_code); 1670ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1671ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann result.Add(pObj->GetInteger()); 1672ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iCurElement++; 1673ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iCurElement == nElements) { 1674ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann width_status = 0; 1675ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1676ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1677ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1678ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1679ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1680ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1681ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// static 1682ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_FLOAT CPDF_CIDFont::CIDTransformToFloat(uint8_t ch) { 1683ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (ch < 128) { 1684ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return ch * 1.0f / 127; 1685ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1686ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (-255 + ch) * 1.0f / 127; 1687ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1688ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1689ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_CIDFont::LoadGB2312() { 1690ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_BaseFont = m_pFontDict->GetString("BaseFont"); 1691ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pFontDesc = m_pFontDict->GetDict("FontDescriptor"); 1692ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pFontDesc) { 1693ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann LoadFontDescriptor(pFontDesc); 1694ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1695ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Charset = CIDSET_GB1; 1696ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bType1 = FALSE; 1697ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCMap = CPDF_ModuleMgr::Get() 1698ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ->GetPageModule() 1699ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ->GetFontGlobals() 1700ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ->m_CMapManager.GetPredefinedCMap("GBK-EUC-H", FALSE); 1701ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCID2UnicodeMap = CPDF_ModuleMgr::Get() 1702ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ->GetPageModule() 1703ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ->GetFontGlobals() 1704ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ->m_CMapManager.GetCID2UnicodeMap(m_Charset, FALSE); 1705ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!IsEmbedded()) { 1706ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann LoadSubstFont(); 1707ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1708ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CheckFontMetrics(); 1709ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_DefaultWidth = 1000; 1710ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pAnsiWidths = FX_Alloc(FX_WORD, 128); 1711ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 32; i < 127; i++) { 1712ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pAnsiWidths[i] = 500; 1713ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1714ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 1715ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1716ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1717ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannconst uint8_t* CPDF_CIDFont::GetCIDTransform(FX_WORD CID) const { 1718ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Charset != CIDSET_JAPAN1 || m_pFontFile) 1719ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return nullptr; 1720ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1721ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const struct CIDTransform* found = (const struct CIDTransform*)FXSYS_bsearch( 1722ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CID, g_Japan1_VertCIDs, FX_ArraySize(g_Japan1_VertCIDs), 1723ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sizeof(g_Japan1_VertCIDs[0]), CompareCIDTransform); 1724ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return found ? &found->a : nullptr; 1725e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1726