summaryrefslogtreecommitdiff
path: root/core/fxge/ge/cfx_unicodeencoding.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/fxge/ge/cfx_unicodeencoding.cpp')
-rw-r--r--core/fxge/ge/cfx_unicodeencoding.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/core/fxge/ge/cfx_unicodeencoding.cpp b/core/fxge/ge/cfx_unicodeencoding.cpp
new file mode 100644
index 0000000000..456c2f5d49
--- /dev/null
+++ b/core/fxge/ge/cfx_unicodeencoding.cpp
@@ -0,0 +1,33 @@
+// Copyright 2016 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "core/fxge/include/cfx_unicodeencoding.h"
+
+#include "core/fxge/include/fx_font.h"
+#include "core/fxge/include/fx_freetype.h"
+
+CFX_UnicodeEncoding::CFX_UnicodeEncoding(CFX_Font* pFont) : m_pFont(pFont) {}
+
+CFX_UnicodeEncoding::~CFX_UnicodeEncoding() {}
+
+uint32_t CFX_UnicodeEncoding::GlyphFromCharCode(uint32_t charcode) {
+ FXFT_Face face = m_pFont->GetFace();
+ if (!face)
+ return charcode;
+
+ if (FXFT_Select_Charmap(face, FXFT_ENCODING_UNICODE) == 0)
+ return FXFT_Get_Char_Index(face, charcode);
+
+ if (m_pFont->GetSubstFont() &&
+ m_pFont->GetSubstFont()->m_Charset == FXFONT_SYMBOL_CHARSET) {
+ uint32_t index = 0;
+ if (FXFT_Select_Charmap(face, FXFT_ENCODING_MS_SYMBOL) == 0)
+ index = FXFT_Get_Char_Index(face, charcode);
+ if (!index && !FXFT_Select_Charmap(face, FXFT_ENCODING_APPLE_ROMAN))
+ return FXFT_Get_Char_Index(face, charcode);
+ }
+ return charcode;
+}