// Copyright 2014 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 "xfa/fgas/font/fgas_fontutils.h"

#include "core/fxcrt/fx_ext.h"
#include "xfa/fgas/font/cfgas_fontmgr.h"

uint32_t FGAS_GetFontHashCode(uint16_t wCodePage, uint32_t dwFontStyles) {
  uint32_t dwHash = wCodePage;
  if (dwFontStyles & FX_FONTSTYLE_FixedPitch) {
    dwHash |= 0x00010000;
  }
  if (dwFontStyles & FX_FONTSTYLE_Serif) {
    dwHash |= 0x00020000;
  }
  if (dwFontStyles & FX_FONTSTYLE_Symbolic) {
    dwHash |= 0x00040000;
  }
  if (dwFontStyles & FX_FONTSTYLE_Script) {
    dwHash |= 0x00080000;
  }
  if (dwFontStyles & FX_FONTSTYLE_Italic) {
    dwHash |= 0x00100000;
  }
  if (dwFontStyles & FX_FONTSTYLE_Bold) {
    dwHash |= 0x00200000;
  }
  return dwHash;
}
uint32_t FGAS_GetFontFamilyHash(const FX_WCHAR* pszFontFamily,
                                uint32_t dwFontStyles,
                                uint16_t wCodePage) {
  CFX_WideString wsFont(pszFontFamily);
  if (dwFontStyles & FX_FONTSTYLE_Bold) {
    wsFont += L"Bold";
  }
  if (dwFontStyles & FX_FONTSTYLE_Italic) {
    wsFont += L"Italic";
  }
  wsFont += wCodePage;
  return FX_HashCode_GetW(wsFont.AsStringC(), false);
}
static const FGAS_FONTUSB g_FXGdiFontUSBTable[] = {
    {0x0000, 0x007F, 0, 1252},     {0x0080, 0x00FF, 1, 1252},
    {0x0100, 0x017F, 2, 1250},     {0x0180, 0x024F, 3, 1250},
    {0x0250, 0x02AF, 4, 0xFFFF},   {0x02B0, 0x02FF, 5, 0xFFFF},
    {0x0300, 0x036F, 6, 0xFFFF},   {0x0370, 0x03FF, 7, 1253},
    {0x0400, 0x04FF, 9, 1251},     {0x0500, 0x052F, 9, 0xFFFF},
    {0x0530, 0x058F, 10, 0xFFFF},  {0x0590, 0x05FF, 11, 1255},
    {0x0600, 0x06FF, 13, 1256},    {0x0700, 0x074F, 71, 0xFFFF},
    {0x0750, 0x077F, 13, 0xFFFF},  {0x0780, 0x07BF, 72, 0xFFFF},
    {0x07C0, 0x07FF, 14, 0xFFFF},  {0x0800, 0x08FF, 999, 0xFFFF},
    {0x0900, 0x097F, 15, 0xFFFF},  {0x0980, 0x09FF, 16, 0xFFFF},
    {0x0A00, 0x0A7F, 17, 0xFFFF},  {0x0A80, 0x0AFF, 18, 0xFFFF},
    {0x0B00, 0x0B7F, 19, 0xFFFF},  {0x0B80, 0x0BFF, 20, 0xFFFF},
    {0x0C00, 0x0C7F, 21, 0xFFFF},  {0x0C80, 0x0CFF, 22, 0xFFFF},
    {0x0D00, 0x0D7F, 23, 0xFFFF},  {0x0D80, 0x0DFF, 73, 0xFFFF},
    {0x0E00, 0x0E7F, 24, 874},     {0x0E80, 0x0EFF, 25, 0xFFFF},
    {0x0F00, 0x0FFF, 70, 0xFFFF},  {0x1000, 0x109F, 74, 0xFFFF},
    {0x10A0, 0x10FF, 26, 0xFFFF},  {0x1100, 0x11FF, 28, 0xFFFF},
    {0x1200, 0x137F, 75, 0xFFFF},  {0x1380, 0x139F, 75, 0xFFFF},
    {0x13A0, 0x13FF, 76, 0xFFFF},  {0x1400, 0x167F, 77, 0xFFFF},
    {0x1680, 0x169F, 78, 0xFFFF},  {0x16A0, 0x16FF, 79, 0xFFFF},
    {0x1700, 0x171F, 84, 0xFFFF},  {0x1720, 0x173F, 84, 0xFFFF},
    {0x1740, 0x175F, 84, 0xFFFF},  {0x1760, 0x177F, 84, 0xFFFF},
    {0x1780, 0x17FF, 80, 0xFFFF},  {0x1800, 0x18AF, 81, 0xFFFF},
    {0x18B0, 0x18FF, 999, 0xFFFF}, {0x1900, 0x194F, 93, 0xFFFF},
    {0x1950, 0x197F, 94, 0xFFFF},  {0x1980, 0x19DF, 95, 0xFFFF},
    {0x19E0, 0x19FF, 80, 0xFFFF},  {0x1A00, 0x1A1F, 96, 0xFFFF},
    {0x1A20, 0x1AFF, 999, 0xFFFF}, {0x1B00, 0x1B7F, 27, 0xFFFF},
    {0x1B80, 0x1BBF, 112, 0xFFFF}, {0x1BC0, 0x1BFF, 999, 0xFFFF},
    {0x1C00, 0x1C4F, 113, 0xFFFF}, {0x1C50, 0x1C7F, 114, 0xFFFF},
    {0x1C80, 0x1CFF, 999, 0xFFFF}, {0x1D00, 0x1D7F, 4, 0xFFFF},
    {0x1D80, 0x1DBF, 4, 0xFFFF},   {0x1DC0, 0x1DFF, 6, 0xFFFF},
    {0x1E00, 0x1EFF, 29, 0xFFFF},  {0x1F00, 0x1FFF, 30, 0xFFFF},
    {0x2000, 0x206F, 31, 0xFFFF},  {0x2070, 0x209F, 32, 0xFFFF},
    {0x20A0, 0x20CF, 33, 0xFFFF},  {0x20D0, 0x20FF, 34, 0xFFFF},
    {0x2100, 0x214F, 35, 0xFFFF},  {0x2150, 0x215F, 36, 0xFFFF},
    {0x2160, 0x216B, 36, 936},     {0x216C, 0x216F, 36, 0xFFFF},
    {0x2170, 0x2179, 36, 936},     {0x217A, 0x218F, 36, 0xFFFF},
    {0x2190, 0x2199, 37, 949},     {0x219A, 0x21FF, 37, 0xFFFF},
    {0x2200, 0x22FF, 38, 0xFFFF},  {0x2300, 0x23FF, 39, 0xFFFF},
    {0x2400, 0x243F, 40, 0xFFFF},  {0x2440, 0x245F, 41, 0xFFFF},
    {0x2460, 0x2473, 42, 932},     {0x2474, 0x249B, 42, 936},
    {0x249C, 0x24E9, 42, 949},     {0x24EA, 0x24FF, 42, 0xFFFF},
    {0x2500, 0x2573, 43, 936},     {0x2574, 0x257F, 43, 0xFFFF},
    {0x2580, 0x2580, 44, 0xFFFF},  {0x2581, 0x258F, 44, 936},
    {0x2590, 0x259F, 44, 0xFFFF},  {0x25A0, 0x25FF, 45, 0xFFFF},
    {0x2600, 0x26FF, 46, 0xFFFF},  {0x2700, 0x27BF, 47, 0xFFFF},
    {0x27C0, 0x27EF, 38, 0xFFFF},  {0x27F0, 0x27FF, 37, 0xFFFF},
    {0x2800, 0x28FF, 82, 0xFFFF},  {0x2900, 0x297F, 37, 0xFFFF},
    {0x2980, 0x29FF, 38, 0xFFFF},  {0x2A00, 0x2AFF, 38, 0xFFFF},
    {0x2B00, 0x2BFF, 37, 0xFFFF},  {0x2C00, 0x2C5F, 97, 0xFFFF},
    {0x2C60, 0x2C7F, 29, 0xFFFF},  {0x2C80, 0x2CFF, 8, 0xFFFF},
    {0x2D00, 0x2D2F, 26, 0xFFFF},  {0x2D30, 0x2D7F, 98, 0xFFFF},
    {0x2D80, 0x2DDF, 75, 0xFFFF},  {0x2DE0, 0x2DFF, 9, 0xFFFF},
    {0x2E00, 0x2E7F, 31, 0xFFFF},  {0x2E80, 0x2EFF, 59, 0xFFFF},
    {0x2F00, 0x2FDF, 59, 0xFFFF},  {0x2FE0, 0x2FEF, 999, 0xFFFF},
    {0x2FF0, 0x2FFF, 59, 0xFFFF},  {0x3000, 0x303F, 48, 0xFFFF},
    {0x3040, 0x309F, 49, 932},     {0x30A0, 0x30FF, 50, 932},
    {0x3100, 0x3129, 51, 936},     {0x312A, 0x312F, 51, 0xFFFF},
    {0x3130, 0x318F, 52, 949},     {0x3190, 0x319F, 59, 0xFFFF},
    {0x31A0, 0x31BF, 51, 0xFFFF},  {0x31C0, 0x31EF, 61, 0xFFFF},
    {0x31F0, 0x31FF, 50, 0xFFFF},  {0x3200, 0x321C, 54, 949},
    {0x321D, 0x325F, 54, 0xFFFF},  {0x3260, 0x327F, 54, 949},
    {0x3280, 0x32FF, 54, 0xFFFF},  {0x3300, 0x3387, 55, 0xFFFF},
    {0x3388, 0x33D0, 55, 949},     {0x33D1, 0x33FF, 55, 0xFFFF},
    {0x3400, 0x4DBF, 59, 0xFFFF},  {0x4DC0, 0x4DFF, 99, 0xFFFF},
    {0x4E00, 0x9FA5, 59, 936},     {0x9FA6, 0x9FFF, 59, 0xFFFF},
    {0xA000, 0xA48F, 83, 0xFFFF},  {0xA490, 0xA4CF, 83, 0xFFFF},
    {0xA4D0, 0xA4FF, 999, 0xFFFF}, {0xA500, 0xA63F, 12, 0xFFFF},
    {0xA640, 0xA69F, 9, 0xFFFF},   {0xA6A0, 0xA6FF, 999, 0xFFFF},
    {0xA700, 0xA71F, 5, 0xFFFF},   {0xA720, 0xA7FF, 29, 0xFFFF},
    {0xA800, 0xA82F, 100, 0xFFFF}, {0xA830, 0xA8FF, 999, 0xFFFF},
    {0xA840, 0xA87F, 53, 0xFFFF},  {0xA880, 0xA8DF, 115, 0xFFFF},
    {0xA8E0, 0xA8FF, 999, 0xFFFF}, {0xA900, 0xA92F, 116, 0xFFFF},
    {0xA930, 0xA95F, 117, 0xFFFF}, {0xA960, 0xA9FF, 999, 0xFFFF},
    {0xAA00, 0xAA5F, 118, 0xFFFF}, {0xAA60, 0xABFF, 999, 0xFFFF},
    {0xAC00, 0xD7AF, 56, 949},     {0xD7B0, 0xD7FF, 999, 0xFFFF},
    {0xD800, 0xDB7F, 57, 0xFFFF},  {0xDB80, 0xDBFF, 57, 0xFFFF},
    {0xDC00, 0xDFFF, 57, 0xFFFF},  {0xE000, 0xE814, 60, 0xFFFF},
    {0xE815, 0xE864, 60, 936},     {0xE865, 0xF8FF, 60, 0xFFFF},
    {0xF900, 0xFA0B, 61, 949},     {0xFA0C, 0xFA0D, 61, 936},
    {0xFA0E, 0xFA2D, 61, 932},     {0xFA2E, 0xFAFF, 61, 0xFFFF},
    {0xFB00, 0xFB4F, 62, 0xFFFF},  {0xFB50, 0xFDFF, 63, 1256},
    {0xFE00, 0xFE0F, 91, 0xFFFF},  {0xFE10, 0xFE1F, 65, 0xFFFF},
    {0xFE20, 0xFE2F, 64, 0xFFFF},  {0xFE30, 0xFE4F, 65, 0xFFFF},
    {0xFE50, 0xFE6F, 66, 0xFFFF},  {0xFE70, 0xFEFF, 67, 1256},
    {0xFF00, 0xFF5F, 68, 936},     {0xFF60, 0xFF9F, 68, 932},
    {0xFFA0, 0xFFEF, 68, 0xFFFF},
};

const FGAS_FONTUSB* FGAS_GetUnicodeBitField(FX_WCHAR wUnicode) {
  int32_t iEnd = sizeof(g_FXGdiFontUSBTable) / sizeof(FGAS_FONTUSB) - 1;
  ASSERT(iEnd >= 0);
  int32_t iStart = 0, iMid;
  do {
    iMid = (iStart + iEnd) / 2;
    const FGAS_FONTUSB& usb = g_FXGdiFontUSBTable[iMid];
    if (wUnicode < usb.wStartUnicode) {
      iEnd = iMid - 1;
    } else if (wUnicode > usb.wEndUnicode) {
      iStart = iMid + 1;
    } else {
      return &usb;
    }
  } while (iStart <= iEnd);
  return nullptr;
}
