summaryrefslogtreecommitdiff
path: root/xfa/fgas/font/cfgas_fontmgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/fgas/font/cfgas_fontmgr.cpp')
-rw-r--r--xfa/fgas/font/cfgas_fontmgr.cpp85
1 files changed, 4 insertions, 81 deletions
diff --git a/xfa/fgas/font/cfgas_fontmgr.cpp b/xfa/fgas/font/cfgas_fontmgr.cpp
index c8aed88547..8a51941627 100644
--- a/xfa/fgas/font/cfgas_fontmgr.cpp
+++ b/xfa/fgas/font/cfgas_fontmgr.cpp
@@ -23,6 +23,10 @@
#include "xfa/fgas/font/cfgas_gefont.h"
#include "xfa/fgas/font/fgas_fontutils.h"
+#if _FX_PLATFORM_ != _FX_PLATFORM_WINDOWS_
+#include "xfa/fgas/font/cfx_fontsourceenum_file.h"
+#endif
+
#if _FX_PLATFORM_ == _FX_PLATFORM_WINDOWS_
namespace {
@@ -198,17 +202,6 @@ const FX_FONTDESCRIPTOR* CFGAS_FontMgr::FindFont(const wchar_t* pszFontFamily,
namespace {
-constexpr const char* g_FontFolders[] = {
-#if _FX_PLATFORM_ == _FX_PLATFORM_LINUX_
- "/usr/share/fonts", "/usr/share/X11/fonts/Type1",
- "/usr/share/X11/fonts/TTF", "/usr/local/share/fonts",
-#elif _FX_PLATFORM_ == _FX_PLATFORM_APPLE_
- "~/Library/Fonts", "/Library/Fonts", "/System/Library/Fonts",
-#elif _FX_PLATFORM_ == _FX_PLATFORM_ANDROID_
- "/system/fonts",
-#endif
-};
-
const uint16_t g_CodePages[] = {FX_CODEPAGE_MSWin_WesternEuropean,
FX_CODEPAGE_MSWin_EasternEuropean,
FX_CODEPAGE_MSWin_Cyrillic,
@@ -295,8 +288,6 @@ inline uint16_t GetUInt16(const uint8_t* p) {
return static_cast<uint16_t>(p[0] << 8 | p[1]);
}
-constexpr wchar_t kFolderSeparator = L'/';
-
extern "C" {
unsigned long ftStreamRead(FXFT_Stream stream,
@@ -580,74 +571,6 @@ CFX_FontDescriptor::CFX_FontDescriptor()
CFX_FontDescriptor::~CFX_FontDescriptor() {}
-CFX_FontSourceEnum_File::CFX_FontSourceEnum_File() {
- for (size_t i = 0; i < FX_ArraySize(g_FontFolders); ++i)
- m_FolderPaths.push_back(g_FontFolders[i]);
-}
-
-CFX_FontSourceEnum_File::~CFX_FontSourceEnum_File() {}
-
-ByteString CFX_FontSourceEnum_File::GetNextFile() {
- FX_FileHandle* pCurHandle =
- !m_FolderQueue.empty() ? m_FolderQueue.back().pFileHandle : nullptr;
- if (!pCurHandle) {
- if (m_FolderPaths.empty())
- return "";
- pCurHandle = FX_OpenFolder(m_FolderPaths.back().c_str());
- HandleParentPath hpp;
- hpp.pFileHandle = pCurHandle;
- hpp.bsParentPath = m_FolderPaths.back();
- m_FolderQueue.push_back(hpp);
- }
- ByteString bsName;
- bool bFolder;
- ByteString bsFolderSeparator = WideString(kFolderSeparator).ToDefANSI();
- while (true) {
- if (!FX_GetNextFile(pCurHandle, &bsName, &bFolder)) {
- FX_CloseFolder(pCurHandle);
- if (!m_FolderQueue.empty())
- m_FolderQueue.pop_back();
- if (m_FolderQueue.empty()) {
- if (!m_FolderPaths.empty())
- m_FolderPaths.pop_back();
- return !m_FolderPaths.empty() ? GetNextFile() : "";
- }
- pCurHandle = m_FolderQueue.back().pFileHandle;
- continue;
- }
- if (bsName == "." || bsName == "..")
- continue;
- if (bFolder) {
- HandleParentPath hpp;
- hpp.bsParentPath =
- m_FolderQueue.back().bsParentPath + bsFolderSeparator + bsName;
- hpp.pFileHandle = FX_OpenFolder(hpp.bsParentPath.c_str());
- if (!hpp.pFileHandle)
- continue;
- m_FolderQueue.push_back(hpp);
- pCurHandle = hpp.pFileHandle;
- continue;
- }
- bsName = m_FolderQueue.back().bsParentPath + bsFolderSeparator + bsName;
- break;
- }
- return bsName;
-}
-
-void CFX_FontSourceEnum_File::GetNext() {
- m_wsNext = GetNextFile().UTF8Decode();
-}
-
-bool CFX_FontSourceEnum_File::HasNext() const {
- return !m_wsNext.IsEmpty();
-}
-
-RetainPtr<IFX_SeekableStream> CFX_FontSourceEnum_File::GetStream() const {
- ASSERT(HasNext());
- return IFX_SeekableStream::CreateFromFilename(m_wsNext.c_str(),
- FX_FILEMODE_ReadOnly);
-}
-
CFGAS_FontMgr::CFGAS_FontMgr()
: m_pFontSource(pdfium::MakeUnique<CFX_FontSourceEnum_File>()) {}