summaryrefslogtreecommitdiff
path: root/xfa/fgas/font
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/fgas/font')
-rw-r--r--xfa/fgas/font/fgas_stdfontmgr.cpp48
-rw-r--r--xfa/fgas/font/fgas_stdfontmgr.h10
2 files changed, 53 insertions, 5 deletions
diff --git a/xfa/fgas/font/fgas_stdfontmgr.cpp b/xfa/fgas/font/fgas_stdfontmgr.cpp
index fc839e9209..00b1028a76 100644
--- a/xfa/fgas/font/fgas_stdfontmgr.cpp
+++ b/xfa/fgas/font/fgas_stdfontmgr.cpp
@@ -13,9 +13,11 @@
#include "xfa/fgas/font/fgas_gefont.h"
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
+
IFGAS_FontMgr* IFGAS_FontMgr::Create(FX_LPEnumAllFonts pEnumerator) {
return new CFGAS_StdFontMgrImp(pEnumerator);
}
+
CFGAS_StdFontMgrImp::CFGAS_StdFontMgrImp(FX_LPEnumAllFonts pEnumerator)
: m_pEnumerator(pEnumerator),
m_FontFaces(),
@@ -74,6 +76,7 @@ CFGAS_GEFont* CFGAS_StdFontMgrImp::GetDefFontByCodePage(
}
return NULL;
}
+
CFGAS_GEFont* CFGAS_StdFontMgrImp::GetDefFontByCharset(
uint8_t nCharset,
uint32_t dwFontStyles,
@@ -128,6 +131,7 @@ CFGAS_GEFont* CFGAS_StdFontMgrImp::GetDefFontByLanguage(
return GetDefFontByCodePage(FX_GetDefCodePageByLanguage(wLanguage),
dwFontStyles, pszFontFamily);
}
+
CFGAS_GEFont* CFGAS_StdFontMgrImp::LoadFont(const FX_WCHAR* pszFontFamily,
uint32_t dwFontStyles,
uint16_t wCodePage) {
@@ -159,6 +163,7 @@ CFGAS_GEFont* CFGAS_StdFontMgrImp::LoadFont(const FX_WCHAR* pszFontFamily,
}
return NULL;
}
+
CFGAS_GEFont* CFGAS_StdFontMgrImp::LoadFont(const uint8_t* pBuffer,
int32_t iLength) {
ASSERT(pBuffer && iLength > 0);
@@ -207,6 +212,7 @@ CFGAS_GEFont* CFGAS_StdFontMgrImp::LoadFont(IFX_Stream* pFontStream,
}
return NULL;
}
+
CFGAS_GEFont* CFGAS_StdFontMgrImp::LoadFont(CFGAS_GEFont* pSrcFont,
uint32_t dwFontStyles,
uint16_t wCodePage) {
@@ -258,6 +264,7 @@ void CFGAS_StdFontMgrImp::RemoveFont(CFX_MapPtrToPtr& fontMap,
break;
}
}
+
void CFGAS_StdFontMgrImp::RemoveFont(CFGAS_GEFont* pFont) {
RemoveFont(m_CPFonts, pFont);
RemoveFont(m_FamilyFonts, pFont);
@@ -270,6 +277,7 @@ void CFGAS_StdFontMgrImp::RemoveFont(CFGAS_GEFont* pFont) {
m_Fonts.RemoveAt(iFind, 1);
}
}
+
FX_FONTDESCRIPTOR const* CFGAS_StdFontMgrImp::FindFont(
const FX_WCHAR* pszFontFamily,
uint32_t dwFontStyles,
@@ -308,6 +316,7 @@ FX_FONTDESCRIPTOR const* CFGAS_StdFontMgrImp::FindFont(
}
return NULL;
}
+
FX_FONTDESCRIPTOR const* FX_DefFontMatcher(FX_LPFONTMATCHPARAMS pParams,
const CFX_FontDescriptors& fonts) {
FX_FONTDESCRIPTOR const* pBestFont = NULL;
@@ -363,6 +372,7 @@ FX_FONTDESCRIPTOR const* FX_DefFontMatcher(FX_LPFONTMATCHPARAMS pParams,
}
return iBestSimilar < 1 ? NULL : pBestFont;
}
+
int32_t FX_GetSimilarValue(FX_FONTDESCRIPTOR const* pFont,
uint32_t dwFontStyles) {
int32_t iValue = 0;
@@ -384,9 +394,11 @@ int32_t FX_GetSimilarValue(FX_FONTDESCRIPTOR const* pFont,
}
return iValue;
}
+
FX_LPMatchFont FX_GetDefFontMatchor() {
return FX_DefFontMatcher;
}
+
uint32_t FX_GetGdiFontStyles(const LOGFONTW& lf) {
uint32_t dwStyles = 0;
if ((lf.lfPitchAndFamily & 0x03) == FIXED_PITCH) {
@@ -404,6 +416,7 @@ uint32_t FX_GetGdiFontStyles(const LOGFONTW& lf) {
}
return dwStyles;
}
+
static int32_t CALLBACK FX_GdiFontEnumProc(ENUMLOGFONTEX* lpelfe,
NEWTEXTMETRICEX* lpntme,
DWORD dwFontType,
@@ -427,6 +440,7 @@ static int32_t CALLBACK FX_GdiFontEnumProc(ENUMLOGFONTEX* lpelfe,
FX_Free(pFont);
return 1;
}
+
static void FX_EnumGdiFonts(CFX_FontDescriptors& fonts,
const FX_WCHAR* pwsFaceName,
FX_WCHAR wUnicode) {
@@ -442,9 +456,11 @@ static void FX_EnumGdiFonts(CFX_FontDescriptors& fonts,
(FONTENUMPROCW)FX_GdiFontEnumProc, (LPARAM)&fonts, 0);
::ReleaseDC(NULL, hDC);
}
+
FX_LPEnumAllFonts FX_GetDefFontEnumerator() {
return FX_EnumGdiFonts;
}
+
#else
const FX_CHAR* g_FontFolders[] = {
#if _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_
@@ -457,11 +473,18 @@ const FX_CHAR* g_FontFolders[] = {
#endif
};
+CFX_FontDescriptor::CFX_FontDescriptor()
+ : m_nFaceIndex(0), m_dwFontStyles(0), m_dwUsb(), m_dwCsb() {}
+
+CFX_FontDescriptor::~CFX_FontDescriptor() {}
+
CFX_FontSourceEnum_File::CFX_FontSourceEnum_File() {
for (size_t i = 0; i < FX_ArraySize(g_FontFolders); ++i)
m_FolderPaths.Add(g_FontFolders[i]);
}
+CFX_FontSourceEnum_File::~CFX_FontSourceEnum_File() {}
+
CFX_ByteString CFX_FontSourceEnum_File::GetNextFile() {
Restart:
void* pCurHandle =
@@ -522,6 +545,7 @@ Restart:
}
return bsName;
}
+
FX_POSITION CFX_FontSourceEnum_File::GetStartPosition() {
m_wsNext = GetNextFile().UTF8Decode();
if (0 == m_wsNext.GetLength()) {
@@ -600,11 +624,13 @@ FX_BOOL CFGAS_FontMgrImp::EnumFontsFromFiles() {
return FALSE;
return TRUE;
}
+
FX_BOOL CFGAS_FontMgrImp::EnumFonts() {
if (EnumFontsFromFontMapper())
return TRUE;
return EnumFontsFromFiles();
}
+
void CFGAS_FontMgrImp::Release() {
for (int32_t i = 0; i < m_InstalledFonts.GetSize(); i++) {
delete m_InstalledFonts[i];
@@ -633,24 +659,28 @@ void CFGAS_FontMgrImp::Release() {
}
delete this;
}
+
CFGAS_GEFont* CFGAS_FontMgrImp::GetDefFontByCodePage(
uint16_t wCodePage,
uint32_t dwFontStyles,
const FX_WCHAR* pszFontFamily) {
return nullptr;
}
+
CFGAS_GEFont* CFGAS_FontMgrImp::GetDefFontByCharset(
uint8_t nCharset,
uint32_t dwFontStyles,
const FX_WCHAR* pszFontFamily) {
return nullptr;
}
+
CFGAS_GEFont* CFGAS_FontMgrImp::GetDefFontByUnicode(
FX_WCHAR wUnicode,
uint32_t dwFontStyles,
const FX_WCHAR* pszFontFamily) {
return nullptr;
}
+
CFGAS_GEFont* CFGAS_FontMgrImp::GetDefFontByLanguage(
uint16_t wLanguage,
uint32_t dwFontStyles,
@@ -698,6 +728,7 @@ CFGAS_GEFont* CFGAS_FontMgrImp::GetFontByCodePage(
pFonts->Add(pFont);
return pFont;
}
+
CFGAS_GEFont* CFGAS_FontMgrImp::GetFontByCharset(
uint8_t nCharset,
uint32_t dwFontStyles,
@@ -705,6 +736,7 @@ CFGAS_GEFont* CFGAS_FontMgrImp::GetFontByCharset(
return GetFontByCodePage(FX_GetCodePageFromCharset(nCharset), dwFontStyles,
pszFontFamily);
}
+
CFGAS_GEFont* CFGAS_FontMgrImp::GetFontByUnicode(
FX_WCHAR wUnicode,
uint32_t dwFontStyles,
@@ -756,6 +788,7 @@ CFGAS_GEFont* CFGAS_FontMgrImp::GetFontByUnicode(
m_FailedUnicodes2NULL.SetAt(wUnicode, nullptr);
return nullptr;
}
+
FX_BOOL CFGAS_FontMgrImp::VerifyUnicode(CFX_FontDescriptor* pDesc,
FX_WCHAR wcUnicode) {
IFX_FileRead* pFileRead = CreateFontStream(pDesc->m_wsFaceName.UTF8Encode());
@@ -933,6 +966,7 @@ IFX_FileRead* CFGAS_FontMgrImp::CreateFontStream(
}
return nullptr;
}
+
int32_t CFGAS_FontMgrImp::MatchFonts(CFX_FontDescriptorInfos& MatchedFonts,
uint16_t wCodePage,
uint32_t dwFontStyles,
@@ -1078,6 +1112,7 @@ int32_t CFGAS_FontMgrImp::CalcPenalty(CFX_FontDescriptor* pInstalled,
}
return nPenalty;
}
+
void CFGAS_FontMgrImp::ClearFontCache() {
FX_POSITION pos = m_Hash2CandidateList.GetStartPosition();
while (pos) {
@@ -1094,6 +1129,7 @@ void CFGAS_FontMgrImp::ClearFontCache() {
pFileRead->Release();
}
}
+
void CFGAS_FontMgrImp::RemoveFont(CFGAS_GEFont* pEFont) {
if (NULL == pEFont) {
return;
@@ -1180,6 +1216,7 @@ void CFGAS_FontMgrImp::RegisterFaces(IFX_FileRead* pFontStream,
FXFT_Done_Face(pFace);
} while (index < num_faces);
}
+
uint32_t CFGAS_FontMgrImp::GetFlags(FXFT_Face pFace) {
uint32_t flag = 0;
if (FT_IS_FIXED_WIDTH(pFace)) {
@@ -1200,10 +1237,12 @@ uint32_t CFGAS_FontMgrImp::GetFlags(FXFT_Face pFace) {
}
return flag;
}
+
#define GetUInt8(p) ((uint8_t)((p)[0]))
#define GetUInt16(p) ((uint16_t)((p)[0] << 8 | (p)[1]))
#define GetUInt32(p) \
((uint32_t)((p)[0] << 24 | (p)[1] << 16 | (p)[2] << 8 | (p)[3]))
+
void CFGAS_FontMgrImp::GetNames(const uint8_t* name_table,
CFX_WideStringArray& Names) {
if (NULL == name_table) {
@@ -1246,6 +1285,7 @@ struct FX_BIT2CHARSET {
uint16_t wBit;
uint16_t wCharset;
};
+
FX_BIT2CHARSET g_FX_Bit2Charset1[16] = {
{1 << 0, FX_CHARSET_ANSI},
{1 << 1, FX_CHARSET_MSWin_EasterEuropean},
@@ -1264,6 +1304,7 @@ FX_BIT2CHARSET g_FX_Bit2Charset1[16] = {
{1 << 14, FX_CHARSET_Default},
{1 << 15, FX_CHARSET_Default},
};
+
FX_BIT2CHARSET g_FX_Bit2Charset2[16] = {
{1 << 0, FX_CHARSET_Thai},
{1 << 1, FX_CHARSET_ShiftJIS},
@@ -1282,6 +1323,7 @@ FX_BIT2CHARSET g_FX_Bit2Charset2[16] = {
{1 << 14, FX_CHARSET_OEM},
{1 << 15, FX_CHARSET_Symbol},
};
+
FX_BIT2CHARSET g_FX_Bit2Charset3[16] = {
{1 << 0, FX_CHARSET_Default}, {1 << 1, FX_CHARSET_Default},
{1 << 2, FX_CHARSET_Default}, {1 << 3, FX_CHARSET_Default},
@@ -1292,6 +1334,7 @@ FX_BIT2CHARSET g_FX_Bit2Charset3[16] = {
{1 << 12, FX_CHARSET_Default}, {1 << 13, FX_CHARSET_Default},
{1 << 14, FX_CHARSET_Default}, {1 << 15, FX_CHARSET_Default},
};
+
FX_BIT2CHARSET g_FX_Bit2Charset4[16] = {
{1 << 0, FX_CHARSET_Default}, {1 << 1, FX_CHARSET_Default},
{1 << 2, FX_CHARSET_Default}, {1 << 3, FX_CHARSET_Default},
@@ -1302,12 +1345,14 @@ FX_BIT2CHARSET g_FX_Bit2Charset4[16] = {
{1 << 12, FX_CHARSET_Default}, {1 << 13, FX_CHARSET_Default},
{1 << 14, FX_CHARSET_Default}, {1 << 15, FX_CHARSET_US},
};
+
#define CODEPAGERANGE_IMPLEMENT(n) \
for (int32_t i = 0; i < 16; i++) { \
if ((a##n & g_FX_Bit2Charset##n[i].wBit) != 0) { \
Charsets.Add(g_FX_Bit2Charset##n[i].wCharset); \
} \
}
+
void CFGAS_FontMgrImp::GetCharsets(FXFT_Face pFace,
CFX_ArrayTemplate<uint16_t>& Charsets) {
Charsets.RemoveAll();
@@ -1326,6 +1371,7 @@ void CFGAS_FontMgrImp::GetCharsets(FXFT_Face pFace,
Charsets.Add(FX_CHARSET_Default);
}
}
+
#undef CODEPAGERANGE_IMPLEMENT
void CFGAS_FontMgrImp::GetUSBCSB(FXFT_Face pFace,
uint32_t* USB,
@@ -1347,6 +1393,7 @@ void CFGAS_FontMgrImp::GetUSBCSB(FXFT_Face pFace,
CSB[1] = 0;
}
}
+
int32_t CFGAS_FontMgrImp::IsPartName(const CFX_WideString& Name1,
const CFX_WideString& Name2) {
if (Name1.Find(Name2.c_str()) != -1) {
@@ -1354,4 +1401,5 @@ int32_t CFGAS_FontMgrImp::IsPartName(const CFX_WideString& Name1,
}
return 0;
}
+
#endif
diff --git a/xfa/fgas/font/fgas_stdfontmgr.h b/xfa/fgas/font/fgas_stdfontmgr.h
index 11d91fc7f5..66b1412d10 100644
--- a/xfa/fgas/font/fgas_stdfontmgr.h
+++ b/xfa/fgas/font/fgas_stdfontmgr.h
@@ -82,11 +82,8 @@ uint32_t FX_GetGdiFontStyles(const LOGFONTW& lf);
class CFX_FontDescriptor {
public:
- CFX_FontDescriptor() : m_nFaceIndex(0), m_dwFontStyles(0) {
- m_dwUsb[0] = m_dwUsb[1] = m_dwUsb[2] = m_dwUsb[3] = 0;
- m_dwCsb[0] = m_dwCsb[1] = 0;
- }
- ~CFX_FontDescriptor() {}
+ CFX_FontDescriptor();
+ ~CFX_FontDescriptor();
int32_t m_nFaceIndex;
CFX_WideString m_wsFaceName;
@@ -95,6 +92,7 @@ class CFX_FontDescriptor {
uint32_t m_dwUsb[4];
uint32_t m_dwCsb[2];
};
+
typedef CFX_ArrayTemplate<CFX_FontDescriptor*> CFX_FontDescriptors;
struct FX_FontDescriptorInfo {
@@ -112,6 +110,7 @@ struct FX_FontDescriptorInfo {
return nPenalty == other.nPenalty;
}
};
+
typedef CFX_ArrayTemplate<FX_FontDescriptorInfo> CFX_FontDescriptorInfos;
struct FX_HandleParentPath {
@@ -127,6 +126,7 @@ struct FX_HandleParentPath {
class CFX_FontSourceEnum_File {
public:
CFX_FontSourceEnum_File();
+ ~CFX_FontSourceEnum_File();
void Release() { delete this; }
FX_POSITION GetStartPosition();