1// Copyright 2014 PDFium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#include <memory>
8
9#include "core/fxge/cfx_fontmapper.h"
10#include "core/fxge/ifx_systemfontinfo.h"
11
12static ByteString GetStringFromTable(const uint8_t* string_ptr,
13                                     uint32_t string_ptr_length,
14                                     uint16_t offset,
15                                     uint16_t length) {
16  if (string_ptr_length < static_cast<uint32_t>(offset + length)) {
17    return ByteString();
18  }
19  return ByteString(string_ptr + offset, length);
20}
21
22ByteString GetNameFromTT(const uint8_t* name_table,
23                         uint32_t name_table_size,
24                         uint32_t name_id) {
25  if (!name_table || name_table_size < 6) {
26    return ByteString();
27  }
28  uint32_t name_count = GET_TT_SHORT(name_table + 2);
29  uint32_t string_offset = GET_TT_SHORT(name_table + 4);
30  // We will ignore the possibility of overlap of structures and
31  // string table as if it's all corrupt there's not a lot we can do.
32  if (name_table_size < string_offset) {
33    return ByteString();
34  }
35
36  const uint8_t* string_ptr = name_table + string_offset;
37  uint32_t string_ptr_size = name_table_size - string_offset;
38  name_table += 6;
39  name_table_size -= 6;
40  if (name_table_size < name_count * 12) {
41    return ByteString();
42  }
43
44  for (uint32_t i = 0; i < name_count; i++, name_table += 12) {
45    if (GET_TT_SHORT(name_table + 6) == name_id &&
46        GET_TT_SHORT(name_table) == 1 && GET_TT_SHORT(name_table + 2) == 0) {
47      return GetStringFromTable(string_ptr, string_ptr_size,
48                                GET_TT_SHORT(name_table + 10),
49                                GET_TT_SHORT(name_table + 8));
50    }
51  }
52  return ByteString();
53}
54#ifdef PDF_ENABLE_XFA
55void* IFX_SystemFontInfo::MapFontByUnicode(uint32_t dwUnicode,
56                                           int weight,
57                                           bool bItalic,
58                                           int pitch_family) {
59  return nullptr;
60}
61#endif  // PDF_ENABLE_XFA
62
63int IFX_SystemFontInfo::GetFaceIndex(void* hFont) {
64  return 0;
65}
66
67extern "C" {
68unsigned long _FTStreamRead(FXFT_Stream stream,
69                            unsigned long offset,
70                            unsigned char* buffer,
71                            unsigned long count);
72void _FTStreamClose(FXFT_Stream stream);
73};
74
75#if _FX_OS_ == _FX_OS_ANDROID_
76std::unique_ptr<IFX_SystemFontInfo> IFX_SystemFontInfo::CreateDefault(
77    const char** pUnused) {
78  return nullptr;
79}
80#endif
81