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. 4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "public/fpdf_sysfontinfo.h" 8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <memory> 104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 11d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "core/fxcrt/fx_codepage.h" 124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxge/cfx_fontmapper.h" 13d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "core/fxge/cfx_fontmgr.h" 144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxge/cfx_gemodule.h" 154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxge/fx_font.h" 164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxge/ifx_systemfontinfo.h" 174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/fsdk_define.h" 18d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fpdfsdk/pwl/cpwl_font_map.h" 19d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "third_party/base/ptr_util.h" 20d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 21d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic_assert(FXFONT_ANSI_CHARSET == FX_CHARSET_ANSI, "Charset must match"); 22d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic_assert(FXFONT_DEFAULT_CHARSET == FX_CHARSET_Default, 23d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann "Charset must match"); 24d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic_assert(FXFONT_SYMBOL_CHARSET == FX_CHARSET_Symbol, "Charset must match"); 25d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic_assert(FXFONT_SHIFTJIS_CHARSET == FX_CHARSET_ShiftJIS, 26d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann "Charset must match"); 27d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic_assert(FXFONT_HANGEUL_CHARSET == FX_CHARSET_Hangul, 28d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann "Charset must match"); 29d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic_assert(FXFONT_GB2312_CHARSET == FX_CHARSET_ChineseSimplified, 30d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann "Charset must match"); 31d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic_assert(FXFONT_CHINESEBIG5_CHARSET == FX_CHARSET_ChineseTraditional, 32d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann "Charset must match"); 33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CFX_ExternalFontInfo final : public IFX_SystemFontInfo { 35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann explicit CFX_ExternalFontInfo(FPDF_SYSFONTINFO* pInfo) : m_pInfo(pInfo) {} 374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ~CFX_ExternalFontInfo() override { 38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pInfo->Release) 39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pInfo->Release(m_pInfo); 40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool EnumFontList(CFX_FontMapper* pMapper) override { 43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pInfo->EnumFonts) { 44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pInfo->EnumFonts(m_pInfo, pMapper); 454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void* MapFont(int weight, 514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bItalic, 52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int charset, 53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int pitch_family, 54d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const char* family) override { 554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_pInfo->MapFont) 564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return nullptr; 57d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 58d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int iExact; 594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_pInfo->MapFont(m_pInfo, weight, bItalic, charset, pitch_family, 604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann family, &iExact); 61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 63d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void* GetFont(const char* family) override { 644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_pInfo->GetFont) 654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return nullptr; 664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_pInfo->GetFont(m_pInfo, family); 67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t GetFontData(void* hFont, 704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t table, 71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t* buffer, 724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t size) override { 734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_pInfo->GetFontData) 744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return 0; 754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_pInfo->GetFontData(m_pInfo, hFont, table, buffer, size); 76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 78d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool GetFaceName(void* hFont, ByteString* name) override { 79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pInfo->GetFaceName) 804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t size = m_pInfo->GetFaceName(m_pInfo, hFont, nullptr, 0); 82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (size == 0) 834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann char* buffer = FX_Alloc(char, size); 85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann size = m_pInfo->GetFaceName(m_pInfo, hFont, buffer, size); 86d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *name = ByteString(buffer, size); 87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_Free(buffer); 884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 91d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool GetFontCharset(void* hFont, int* charset) override { 924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_pInfo->GetFontCharset) 934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 95d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *charset = m_pInfo->GetFontCharset(m_pInfo, hFont); 964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void DeleteFont(void* hFont) override { 100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pInfo->DeleteFont) 101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pInfo->DeleteFont(m_pInfo, hFont); 102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann private: 105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FPDF_SYSFONTINFO* const m_pInfo; 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 108d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannFPDF_EXPORT void FPDF_CALLCONV FPDF_AddInstalledFont(void* mapper, 109d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const char* name, 110d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int charset) { 111d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_FontMapper* pMapper = static_cast<CFX_FontMapper*>(mapper); 1124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pMapper->AddInstalledFont(name, charset); 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 115d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannFPDF_EXPORT void FPDF_CALLCONV 116d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannFPDF_SetSystemFontInfo(FPDF_SYSFONTINFO* pFontInfoExt) { 117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pFontInfoExt->version != 1) 118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_GEModule::Get()->GetFontMgr()->SetSystemFontInfo( 121d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pdfium::MakeUnique<CFX_ExternalFontInfo>(pFontInfoExt)); 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 124d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannFPDF_EXPORT const FPDF_CharsetFontMap* FPDF_CALLCONV FPDF_GetDefaultTTFMap() { 125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return CPWL_FontMap::defaultTTFMap; 126e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 127e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstruct FPDF_SYSFONTINFO_DEFAULT : public FPDF_SYSFONTINFO { 129d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann UnownedPtr<IFX_SystemFontInfo> m_pFontInfo; 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic void DefaultRelease(struct _FPDF_SYSFONTINFO* pThis) { 1334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto* pDefault = static_cast<FPDF_SYSFONTINFO_DEFAULT*>(pThis); 134d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann delete pDefault->m_pFontInfo.Release(); 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic void DefaultEnumFonts(struct _FPDF_SYSFONTINFO* pThis, void* pMapper) { 1384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto* pDefault = static_cast<FPDF_SYSFONTINFO_DEFAULT*>(pThis); 1394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pDefault->m_pFontInfo->EnumFontList((CFX_FontMapper*)pMapper); 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic void* DefaultMapFont(struct _FPDF_SYSFONTINFO* pThis, 143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int weight, 144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int bItalic, 145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int charset, 146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int pitch_family, 147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const char* family, 148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int* bExact) { 1494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto* pDefault = static_cast<FPDF_SYSFONTINFO_DEFAULT*>(pThis); 1504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return pDefault->m_pFontInfo->MapFont(weight, !!bItalic, charset, 151d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pitch_family, family); 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid* DefaultGetFont(struct _FPDF_SYSFONTINFO* pThis, const char* family) { 1554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto* pDefault = static_cast<FPDF_SYSFONTINFO_DEFAULT*>(pThis); 1564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return pDefault->m_pFontInfo->GetFont(family); 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic unsigned long DefaultGetFontData(struct _FPDF_SYSFONTINFO* pThis, 160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void* hFont, 161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann unsigned int table, 162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann unsigned char* buffer, 163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann unsigned long buf_size) { 1644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto* pDefault = static_cast<FPDF_SYSFONTINFO_DEFAULT*>(pThis); 1654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return pDefault->m_pFontInfo->GetFontData(hFont, table, buffer, buf_size); 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic unsigned long DefaultGetFaceName(struct _FPDF_SYSFONTINFO* pThis, 169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void* hFont, 170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann char* buffer, 171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann unsigned long buf_size) { 172d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ByteString name; 1734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto* pDefault = static_cast<FPDF_SYSFONTINFO_DEFAULT*>(pThis); 174d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pDefault->m_pFontInfo->GetFaceName(hFont, &name)) 175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 176d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (name.GetLength() >= static_cast<size_t>(buf_size)) 177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return name.GetLength() + 1; 178d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 179d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann strncpy(buffer, name.c_str(), 180d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (name.GetLength() + 1) * sizeof(ByteString::CharType)); 181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return name.GetLength() + 1; 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic int DefaultGetFontCharset(struct _FPDF_SYSFONTINFO* pThis, void* hFont) { 185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int charset; 1864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto* pDefault = static_cast<FPDF_SYSFONTINFO_DEFAULT*>(pThis); 187d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pDefault->m_pFontInfo->GetFontCharset(hFont, &charset)) 188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return charset; 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic void DefaultDeleteFont(struct _FPDF_SYSFONTINFO* pThis, void* hFont) { 1934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto* pDefault = static_cast<FPDF_SYSFONTINFO_DEFAULT*>(pThis); 1944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pDefault->m_pFontInfo->DeleteFont(hFont); 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 197d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannFPDF_EXPORT FPDF_SYSFONTINFO* FPDF_CALLCONV FPDF_GetDefaultSystemFontInfo() { 1984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::unique_ptr<IFX_SystemFontInfo> pFontInfo = 1994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann IFX_SystemFontInfo::CreateDefault(nullptr); 200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFontInfo) 2014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return nullptr; 202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FPDF_SYSFONTINFO_DEFAULT* pFontInfoExt = 204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_Alloc(FPDF_SYSFONTINFO_DEFAULT, 1); 205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFontInfoExt->DeleteFont = DefaultDeleteFont; 206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFontInfoExt->EnumFonts = DefaultEnumFonts; 207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFontInfoExt->GetFaceName = DefaultGetFaceName; 208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFontInfoExt->GetFont = DefaultGetFont; 209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFontInfoExt->GetFontCharset = DefaultGetFontCharset; 210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFontInfoExt->GetFontData = DefaultGetFontData; 211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFontInfoExt->MapFont = DefaultMapFont; 212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFontInfoExt->Release = DefaultRelease; 213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFontInfoExt->version = 1; 2144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pFontInfoExt->m_pFontInfo = pFontInfo.release(); 215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pFontInfoExt; 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 2174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 218d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannFPDF_EXPORT void FPDF_CALLCONV 219d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannFPDF_FreeDefaultSystemFontInfo(FPDF_SYSFONTINFO* pDefaultFontInfo) { 2204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_Free(static_cast<FPDF_SYSFONTINFO_DEFAULT*>(pDefaultFontInfo)); 2214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 222