1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file. 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PDFWindow.h" 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_Wnd.h" 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_FontMap.h" 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define DEFAULT_FONT_NAME "Helvetica" 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ------------------------------ CPWL_FontMap ------------------------------ */ 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_FontMap::CPWL_FontMap(IFX_SystemHandler* pSystemHandler) : 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pPDFDoc(NULL), 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pSystemHandler(pSystemHandler) 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_pSystemHandler != NULL); 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_FontMap::~CPWL_FontMap() 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pPDFDoc) 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov delete m_pPDFDoc; 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pPDFDoc = NULL; 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Empty(); 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_FontMap::SetSystemHandler(IFX_SystemHandler* pSystemHandler) 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pSystemHandler = pSystemHandler; 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Document* CPWL_FontMap::GetDocument() 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!m_pPDFDoc) 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPDF_ModuleMgr::Get()) 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pPDFDoc = FX_NEW CPDF_Document; 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pPDFDoc->CreateNewDoc(); 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pPDFDoc; 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Font* CPWL_FontMap::GetPDFFont(FX_INT32 nFontIndex) 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (nFontIndex >=0 && nFontIndex < m_aData.GetSize()) 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return pData->pFont; 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPWL_FontMap::GetPDFFontAlias(FX_INT32 nFontIndex) 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (nFontIndex >=0 && nFontIndex < m_aData.GetSize()) 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return pData->sFontName; 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return ""; 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_FontMap::KnowWord(FX_INT32 nFontIndex, FX_WORD word) 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (nFontIndex >=0 && nFontIndex < m_aData.GetSize()) 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_aData.GetAt(nFontIndex)) 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CharCodeFromUnicode(nFontIndex, word) >= 0; 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FALSE; 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_INT32 CPWL_FontMap::GetWordFontIndex(FX_WORD word, FX_INT32 nCharset, FX_INT32 nFontIndex) 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (nFontIndex > 0) 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (KnowWord(nFontIndex, word)) 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return nFontIndex; 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (const CPWL_FontMap_Data* pData = GetFontMapData(0)) 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (nCharset == DEFAULT_CHARSET || 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pData->nCharset == SYMBOL_CHARSET || 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov nCharset == pData->nCharset) 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (KnowWord(0, word)) 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 0; 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_INT32 nNewFontIndex = -1; 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov nNewFontIndex = this->GetFontIndex(GetNativeFontName(nCharset), nCharset, TRUE); 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (nNewFontIndex >= 0) 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (KnowWord(nNewFontIndex, word)) 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return nNewFontIndex; 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov nNewFontIndex = this->GetFontIndex("Arial Unicode MS", DEFAULT_CHARSET, FALSE); 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (nNewFontIndex >= 0) 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (KnowWord(nNewFontIndex, word)) 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return nNewFontIndex; 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return -1; 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_INT32 CPWL_FontMap::CharCodeFromUnicode(FX_INT32 nFontIndex, FX_WORD word) 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (pData->pFont) 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (pData->pFont->IsUnicodeCompatible()) 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int nCharCode = pData->pFont->CharCodeFromUnicode(word); 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pData->pFont->GlyphFromCharCode(nCharCode); 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return nCharCode; 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (word < 0xFF) 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return word; 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return -1; 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPWL_FontMap::GetNativeFontName(FX_INT32 nCharset) 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov //searching native font is slow, so we must save time 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (FX_INT32 i=0,sz=m_aNativeFont.GetSize(); i<sz; i++) 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_FontMap_Native* pData = m_aNativeFont.GetAt(i)) 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (pData->nCharset == nCharset) 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return pData->sFontName; 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString sNew = GetNativeFont(nCharset); 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!sNew.IsEmpty()) 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_FontMap_Native* pNewData = new CPWL_FontMap_Native; 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pNewData->nCharset = nCharset; 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pNewData->sFontName = sNew; 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_aNativeFont.Add(pNewData); 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return sNew; 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_FontMap::Empty() 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (FX_INT32 i=0, sz=m_aData.GetSize(); i<sz; i++) 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov delete m_aData.GetAt(i); 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_aData.RemoveAll(); 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (FX_INT32 i=0, sz=m_aNativeFont.GetSize(); i<sz; i++) 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov delete m_aNativeFont.GetAt(i); 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_aNativeFont.RemoveAll(); 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_FontMap::Initial(FX_LPCSTR fontname) 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString sFontName = fontname; 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (sFontName.IsEmpty()) 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov sFontName = DEFAULT_FONT_NAME; 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GetFontIndex(sFontName, ANSI_CHARSET, FALSE); 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov //GetFontIndex(this->GetNativeFontName(nCharset), nCharset); 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovList of currently supported standard fonts: 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCourier, Courier-Bold, Courier-BoldOblique, Courier-Oblique 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovHelvetica, Helvetica-Bold, Helvetica-BoldOblique, Helvetica-Oblique 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovTimes-Roman, Times-Bold, Times-Italic, Times-BoldItalic 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovSymbol, ZapfDingbats 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/ 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovconst char* g_sDEStandardFontName[] = {"Courier", "Courier-Bold", "Courier-BoldOblique", "Courier-Oblique", 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov "Helvetica", "Helvetica-Bold", "Helvetica-BoldOblique", "Helvetica-Oblique", 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov "Times-Roman", "Times-Bold", "Times-Italic", "Times-BoldItalic", 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov "Symbol", "ZapfDingbats"}; 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_FontMap::IsStandardFont(const CFX_ByteString& sFontName) 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (FX_INT32 i=0; i<14; i++) 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (sFontName == g_sDEStandardFontName[i]) 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FALSE; 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_INT32 CPWL_FontMap::FindFont(const CFX_ByteString& sFontName, FX_INT32 nCharset) 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (FX_INT32 i=0,sz=m_aData.GetSize(); i<sz; i++) 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_FontMap_Data* pData = m_aData.GetAt(i)) 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (nCharset == DEFAULT_CHARSET || nCharset == pData->nCharset) 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (sFontName.IsEmpty() || pData->sFontName == sFontName) 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return i; 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return -1; 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 252ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_INT32 CPWL_FontMap::GetFontIndex(const CFX_ByteString& sFontName, FX_INT32 nCharset, FX_BOOL bFind) 253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_INT32 nFontIndex = FindFont(EncodeFontAlias(sFontName, nCharset), nCharset); 255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (nFontIndex >= 0) return nFontIndex; 256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// nFontIndex = FindFont("", nCharset); 258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// if (nFontIndex >= 0) return nFontIndex; 259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString sAlias; 261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Font* pFont = NULL; 262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (bFind) 264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pFont = FindFontSameCharset(sAlias, nCharset); 265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!pFont) 267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString sTemp = sFontName; 269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pFont = AddFontToDocument(GetDocument(), sTemp, nCharset); 270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* 272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (FindFont(sAlias)) 273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov sAlias = EncodeFontAlias(sTemp, nCharset); 275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov sAlias = EncodeFontAlias(sTemp, nCharset); 280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov AddedFont(pFont, sAlias); 284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return AddFontData(pFont, sAlias, nCharset); 286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 288ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_INT32 CPWL_FontMap::GetPWLFontIndex(FX_WORD word, FX_INT32 nCharset) 289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_INT32 nFind = -1; 291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (FX_INT32 i=0,sz=m_aData.GetSize(); i<sz; i++) 293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_FontMap_Data* pData = m_aData.GetAt(i)) 295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (pData->nCharset == nCharset) 297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov nFind = i; 299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Font* pNewFont = GetPDFFont(nFind); 305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!pNewFont) return -1; 307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* 309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPDF_Font* pFont = GetPDFFont(nFind)) 310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PWLFont.AddWordToFontDict(pFontDict, word); 312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef FOXIT_CHROME_BUILD 316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString sAlias = EncodeFontAlias("Arial_Chrome", nCharset); 317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else 318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString sAlias = EncodeFontAlias("Arial_Foxit", nCharset); 319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov AddedFont(pNewFont, sAlias); 321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return AddFontData(pNewFont, sAlias, nCharset); 323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 325ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Font* CPWL_FontMap::FindFontSameCharset(CFX_ByteString& sFontAlias, FX_INT32 nCharset) 326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 330ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_INT32 CPWL_FontMap::AddFontData(CPDF_Font* pFont, const CFX_ByteString& sFontAlias, FX_INT32 nCharset) 331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_FontMap_Data* pNewData = new CPWL_FontMap_Data; 333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pNewData->pFont = pFont; 334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pNewData->sFontName = sFontAlias; 335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pNewData->nCharset = nCharset; 336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_aData.Add(pNewData); 338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_aData.GetSize() -1; 340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_FontMap::AddedFont(CPDF_Font* pFont, const CFX_ByteString& sFontAlias) 343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 346ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPWL_FontMap::GetFontName(FX_INT32 nFontIndex) 347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (nFontIndex >=0 && nFontIndex < m_aData.GetSize()) 349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) 351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return pData->sFontName; 353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return ""; 357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 359ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPWL_FontMap::GetNativeFont(FX_INT32 nCharset) 360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString sFontName; 362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (nCharset == DEFAULT_CHARSET) 364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov nCharset = GetNativeCharset(); 365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov sFontName = GetDefaultFontByCharset(nCharset); 367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pSystemHandler) 369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pSystemHandler->FindNativeTrueTypeFont(nCharset, sFontName)) 371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return sFontName; 372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov sFontName = m_pSystemHandler->GetNativeTrueTypeFont(nCharset); 374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return sFontName; 377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 379ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Font* CPWL_FontMap::AddFontToDocument(CPDF_Document* pDoc, CFX_ByteString& sFontName, FX_BYTE nCharset) 380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (IsStandardFont(sFontName)) 382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return AddStandardFont(pDoc, sFontName); 383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return AddSystemFont(pDoc, sFontName, nCharset); 385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 387ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Font* CPWL_FontMap::AddStandardFont(CPDF_Document* pDoc, CFX_ByteString& sFontName) 388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!pDoc) return NULL; 390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Font* pFont = NULL; 392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (sFontName == "ZapfDingbats") 394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pFont = pDoc->AddStandardFont(sFontName, NULL); 395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_FontEncoding fe(PDFFONT_ENCODING_WINANSI); 398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pFont = pDoc->AddStandardFont(sFontName, &fe); 399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return pFont; 402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 404ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Font* CPWL_FontMap::AddSystemFont(CPDF_Document* pDoc, CFX_ByteString& sFontName, FX_BYTE nCharset) 405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!pDoc) return NULL; 407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (sFontName.IsEmpty()) sFontName = GetNativeFont(nCharset); 409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (nCharset == DEFAULT_CHARSET) nCharset = GetNativeCharset(); 410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pSystemHandler) 412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pSystemHandler->AddNativeTrueTypeFontToPDF(pDoc, sFontName, nCharset); 413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 417ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPWL_FontMap::EncodeFontAlias(const CFX_ByteString& sFontName, FX_INT32 nCharset) 418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString sPostfix; 420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov sPostfix.Format("_%02X", nCharset); 421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return EncodeFontAlias(sFontName) + sPostfix; 422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 424ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPWL_FontMap::EncodeFontAlias(const CFX_ByteString& sFontName) 425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString sRet = sFontName; 427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov sRet.Remove(' '); 428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return sRet; 429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 431ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_INT32 CPWL_FontMap::GetFontMapCount() const 432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_aData.GetSize(); 434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovconst CPWL_FontMap_Data* CPWL_FontMap::GetFontMapData(FX_INT32 nIndex) const 437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (nIndex >=0 && nIndex < m_aData.GetSize()) 439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_aData.GetAt(nIndex); 441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 446ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_INT32 CPWL_FontMap::GetNativeCharset() 447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BYTE nCharset = ANSI_CHARSET; 449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_INT32 iCodePage = FXSYS_GetACP(); 450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov switch (iCodePage) 451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case 932://Japan 453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov nCharset = SHIFTJIS_CHARSET; 454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case 936://Chinese (PRC, Singapore) 456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov nCharset = GB2312_CHARSET; 457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case 950://Chinese (Taiwan; Hong Kong SAR, PRC) 459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov nCharset = GB2312_CHARSET; 460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case 1252://Windows 3.1 Latin 1 (US, Western Europe) 462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov nCharset = ANSI_CHARSET; 463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case 874://Thai 465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov nCharset = THAI_CHARSET; 466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case 949://Korean 468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov nCharset = HANGUL_CHARSET; 469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case 1200://Unicode (BMP of ISO 10646) 471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov nCharset = ANSI_CHARSET; 472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case 1250://Windows 3.1 Eastern European 474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov nCharset = EASTEUROPE_CHARSET; 475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case 1251://Windows 3.1 Cyrillic 477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov nCharset = RUSSIAN_CHARSET; 478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case 1253://Windows 3.1 Greek 480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov nCharset = GREEK_CHARSET; 481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case 1254://Windows 3.1 Turkish 483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov nCharset = TURKISH_CHARSET; 484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case 1255://Hebrew 486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov nCharset = HEBREW_CHARSET; 487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case 1256://Arabic 489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov nCharset = ARABIC_CHARSET; 490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case 1257://Baltic 492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov nCharset = BALTIC_CHARSET; 493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case 1258://Vietnamese 495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov nCharset = VIETNAMESE_CHARSET; 496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case 1361://Korean(Johab) 498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov nCharset = JOHAB_CHARSET; 499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return nCharset; 502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovconst CPWL_FontMap::CharsetFontMap CPWL_FontMap::defaultTTFMap[] = { 505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { ANSI_CHARSET, "Helvetica" }, 506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { GB2312_CHARSET, "SimSun" }, 507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { CHINESEBIG5_CHARSET, "MingLiU" }, 508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { SHIFTJIS_CHARSET, "MS Gothic" }, 509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { HANGUL_CHARSET, "Batang" }, 510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { RUSSIAN_CHARSET, "Arial" }, 511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { EASTEUROPE_CHARSET, "Tahoma" }, 512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { ARABIC_CHARSET, "Arial" }, 513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { -1, NULL } 514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 516ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPWL_FontMap::GetDefaultFontByCharset(FX_INT32 nCharset) 517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int i = 0; 519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov while (defaultTTFMap[i].charset != -1) { 520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (nCharset == defaultTTFMap[i].charset) 521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return defaultTTFMap[i].fontname; 522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ++i; 523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return ""; 525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 527ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_INT32 CPWL_FontMap::CharSetFromUnicode(FX_WORD word, FX_INT32 nOldCharset) 528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(m_pSystemHandler && (-1 != m_pSystemHandler->GetCharSet())) 530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pSystemHandler->GetCharSet(); 531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov //to avoid CJK Font to show ASCII 532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (word < 0x7F) return ANSI_CHARSET; 533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov //follow the old charset 534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (nOldCharset != DEFAULT_CHARSET) return nOldCharset; 535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov //find new charset 537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ((word >= 0x4E00 && word <= 0x9FA5) || 538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (word >= 0xE7C7 && word <= 0xE7F3) || 539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (word >= 0x3000 && word <= 0x303F) || //��"��" "��" "��" "��" 540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (word >= 0x2000 && word <= 0x206F)) 541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return GB2312_CHARSET; 543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (((word >= 0x3040) && (word <= 0x309F)) || 546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ((word >= 0x30A0) && (word <= 0x30FF)) || 547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ((word >= 0x31F0) && (word <= 0x31FF)) || 548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ((word >= 0xFF00) && (word <= 0xFFEF)) ) 549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return SHIFTJIS_CHARSET; 551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (((word >= 0xAC00) && (word <= 0xD7AF)) || 554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ((word >= 0x1100) && (word <= 0x11FF)) || 555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ((word >= 0x3130) && (word <= 0x318F))) 556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return HANGUL_CHARSET; 558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (word >= 0x0E00 && word <= 0x0E7F) 561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return THAI_CHARSET; 562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ((word >= 0x0370 && word <= 0x03FF) || 564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (word >= 0x1F00 && word <= 0x1FFF)) 565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return GREEK_CHARSET; 566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ((word >= 0x0600 && word <= 0x06FF) || 568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (word >= 0xFB50 && word <= 0xFEFC)) 569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return ARABIC_CHARSET; 570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (word >= 0x0590 && word <= 0x05FF) 572ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return HEBREW_CHARSET; 573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (word >= 0x0400 && word <= 0x04FF) 575ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return RUSSIAN_CHARSET; 576ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (word >= 0x0100 && word <= 0x024F) 578ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return EASTEUROPE_CHARSET; 579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (word >= 0x1E00 && word <= 0x1EFF) 581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return VIETNAMESE_CHARSET; 582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return ANSI_CHARSET; 584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ------------------------ CPWL_DocFontMap ------------------------ */ 587ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 588ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_DocFontMap::CPWL_DocFontMap(IFX_SystemHandler* pSystemHandler, CPDF_Document* pAttachedDoc) 589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov : CPWL_FontMap(pSystemHandler), 590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pAttachedDoc(pAttachedDoc) 591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 594ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_DocFontMap::~CPWL_DocFontMap() 595ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 596ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 598ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Document* CPWL_DocFontMap::GetDocument() 599ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pAttachedDoc; 601ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 602