// 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 "core/fxcrt/fx_unicode.h"

#include "core/fxcrt/fx_memory.h"

namespace {

// Format of uint32_t values in kTextLayoutCodeProperties[].
constexpr uint32_t kBreakTypeBitPos = 0;
constexpr uint32_t kBreakTypeBitCount = 6;
constexpr uint32_t kBreakTypeBitMask =
    (((1u << kBreakTypeBitCount) - 1) << kBreakTypeBitPos);

constexpr uint32_t kBidiClassBitPos = 6;
constexpr uint32_t kBidiClassBitCount = 5;
constexpr uint32_t kBidiClassBitMask =
    (((1u << kBidiClassBitCount) - 1) << kBidiClassBitPos);

constexpr uint32_t kCharTypeBitPos = 11;
constexpr uint32_t kCharTypeBitCount = 4;
constexpr uint32_t kCharTypeBitMask =
    (((1u << kCharTypeBitCount) - 1) << kCharTypeBitPos);

// TODO(tsepez): Unknown, possibly unused field.
constexpr uint32_t kField2BitPos = 15;
constexpr uint32_t kField2BitCount = 8;
constexpr uint32_t kField2BitMask =
    (((1 << kField2BitCount) - 1) << kField2BitPos);

constexpr uint32_t kMirrorBitPos = 23;
constexpr uint32_t kMirrorBitCount = 9;
constexpr uint32_t kMirrorBitMask =
    (((1 << kMirrorBitCount) - 1) << kMirrorBitPos);

#undef CHARPROP____
#define CHARPROP____(mirror, f2, ct, bd, bt)                       \
  ((mirror << kMirrorBitPos) | (f2 << kField2BitPos) |             \
   (static_cast<uint32_t>(FX_CHARTYPE::ct) << kCharTypeBitPos) |   \
   (static_cast<uint32_t>(FX_BIDICLASS::bd) << kBidiClassBitPos) | \
   (static_cast<uint32_t>(FX_BREAKPROPERTY::bt) << kBreakTypeBitPos))

const uint32_t kTextLayoutCodeProperties[] = {
#include "core/fxcrt/fx_ucddata.inc"
};
#undef CHARPROP____

const size_t kTextLayoutCodePropertiesSize =
    FX_ArraySize(kTextLayoutCodeProperties);

static_assert(kTextLayoutCodePropertiesSize == 65536, "missing characters");

static_assert((kBreakTypeBitMask | kBidiClassBitMask | kCharTypeBitMask |
               kField2BitMask | kMirrorBitMask) == 0xffffffff,
              "missing bits in mask");

static_assert((kBreakTypeBitMask & kBidiClassBitMask) == 0, "overlapping bits");
static_assert((kBreakTypeBitMask & kCharTypeBitMask) == 0, "overlapping bits");
static_assert((kBreakTypeBitMask & kField2BitMask) == 0, "overlapping bits");
static_assert((kBreakTypeBitMask & kMirrorBitMask) == 0, "overlapping bits");
static_assert((kBidiClassBitMask & kCharTypeBitMask) == 0, "overlapping bits");
static_assert((kBidiClassBitMask & kField2BitMask) == 0, "overlapping bits");
static_assert((kBidiClassBitMask & kMirrorBitMask) == 0, "overlapping bits");
static_assert((kCharTypeBitMask & kField2BitMask) == 0, "overlapping bits");
static_assert((kCharTypeBitMask & kMirrorBitMask) == 0, "overlapping bits");
static_assert((kField2BitMask & kMirrorBitMask) == 0, "overlapping bits");

const uint16_t kFXTextLayoutBidiMirror[] = {
    0x0029, 0x0028, 0x003E, 0x003C, 0x005D, 0x005B, 0x007D, 0x007B, 0x00BB,
    0x00AB, 0x0F3B, 0x0F3A, 0x0F3D, 0x0F3C, 0x169C, 0x169B, 0x2019, 0x2018,
    0x201D, 0x201C, 0x203A, 0x2039, 0x2046, 0x2045, 0x207E, 0x207D, 0x208E,
    0x208D, 0x220B, 0x220C, 0x220D, 0x2208, 0x2209, 0x220A, 0x29F5, 0x223D,
    0x223C, 0x22CD, 0x2253, 0x2252, 0x2255, 0x2254, 0x2265, 0x2264, 0x2267,
    0x2266, 0x2269, 0x2268, 0x226B, 0x226A, 0x226F, 0x226E, 0x2271, 0x2270,
    0x2273, 0x2272, 0x2275, 0x2274, 0x2277, 0x2276, 0x2279, 0x2278, 0x227B,
    0x227A, 0x227D, 0x227C, 0x227F, 0x227E, 0x2281, 0x2280, 0x2283, 0x2282,
    0x2285, 0x2284, 0x2287, 0x2286, 0x2289, 0x2288, 0x228B, 0x228A, 0x2290,
    0x228F, 0x2292, 0x2291, 0x29B8, 0x22A3, 0x22A2, 0x2ADE, 0x2AE4, 0x2AE3,
    0x2AE5, 0x22B1, 0x22B0, 0x22B3, 0x22B2, 0x22B5, 0x22B4, 0x22B7, 0x22B6,
    0x22CA, 0x22C9, 0x22CC, 0x22CB, 0x2243, 0x22D1, 0x22D0, 0x22D7, 0x22D6,
    0x22D9, 0x22D8, 0x22DB, 0x22DA, 0x22DD, 0x22DC, 0x22DF, 0x22DE, 0x22E1,
    0x22E0, 0x22E3, 0x22E2, 0x22E5, 0x22E4, 0x22E7, 0x22E6, 0x22E9, 0x22E8,
    0x22EB, 0x22EA, 0x22ED, 0x22EC, 0x22F1, 0x22F0, 0x22FA, 0x22FB, 0x22FC,
    0x22FD, 0x22FE, 0x22F2, 0x22F3, 0x22F4, 0x22F6, 0x22F7, 0x2309, 0x2308,
    0x230B, 0x230A, 0x232A, 0x2329, 0x2769, 0x2768, 0x276B, 0x276A, 0x276D,
    0x276C, 0x276F, 0x276E, 0x2771, 0x2770, 0x2773, 0x2772, 0x2775, 0x2774,
    0x27C4, 0x27C3, 0x27C6, 0x27C5, 0x27C9, 0x27C8, 0x27D6, 0x27D5, 0x27DE,
    0x27DD, 0x27E3, 0x27E2, 0x27E5, 0x27E4, 0x27E7, 0x27E6, 0x27E9, 0x27E8,
    0x27EB, 0x27EA, 0x27ED, 0x27EC, 0x27EF, 0x27EE, 0x2984, 0x2983, 0x2986,
    0x2985, 0x2988, 0x2987, 0x298A, 0x2989, 0x298C, 0x298B, 0x2990, 0x298F,
    0x298E, 0x298D, 0x2992, 0x2991, 0x2994, 0x2993, 0x2996, 0x2995, 0x2998,
    0x2997, 0x2298, 0x29C1, 0x29C0, 0x29C5, 0x29C4, 0x29D0, 0x29CF, 0x29D2,
    0x29D1, 0x29D5, 0x29D4, 0x29D9, 0x29D8, 0x29DB, 0x29DA, 0x2215, 0x29F9,
    0x29F8, 0x29FD, 0x29FC, 0x2A2C, 0x2A2B, 0x2A2E, 0x2A2D, 0x2A35, 0x2A34,
    0x2A3D, 0x2A3C, 0x2A65, 0x2A64, 0x2A7A, 0x2A79, 0x2A7E, 0x2A7D, 0x2A80,
    0x2A7F, 0x2A82, 0x2A81, 0x2A84, 0x2A83, 0x2A8C, 0x2A8B, 0x2A92, 0x2A91,
    0x2A94, 0x2A93, 0x2A96, 0x2A95, 0x2A98, 0x2A97, 0x2A9A, 0x2A99, 0x2A9C,
    0x2A9B, 0x2AA2, 0x2AA1, 0x2AA7, 0x2AA6, 0x2AA9, 0x2AA8, 0x2AAB, 0x2AAA,
    0x2AAD, 0x2AAC, 0x2AB0, 0x2AAF, 0x2AB4, 0x2AB3, 0x2ABC, 0x2ABB, 0x2ABE,
    0x2ABD, 0x2AC0, 0x2ABF, 0x2AC2, 0x2AC1, 0x2AC4, 0x2AC3, 0x2AC6, 0x2AC5,
    0x2ACE, 0x2ACD, 0x2AD0, 0x2ACF, 0x2AD2, 0x2AD1, 0x2AD4, 0x2AD3, 0x2AD6,
    0x2AD5, 0x22A6, 0x22A9, 0x22A8, 0x22AB, 0x2AED, 0x2AEC, 0x2AF8, 0x2AF7,
    0x2AFA, 0x2AF9, 0x2E03, 0x2E02, 0x2E05, 0x2E04, 0x2E0A, 0x2E09, 0x2E0D,
    0x2E0C, 0x2E1D, 0x2E1C, 0x2E21, 0x2E20, 0x2E23, 0x2E22, 0x2E25, 0x2E24,
    0x2E27, 0x2E26, 0x2E29, 0x2E28, 0x3009, 0x3008, 0x300B, 0x300A, 0x300D,
    0x300C, 0x300F, 0x300E, 0x3011, 0x3010, 0x3015, 0x3014, 0x3017, 0x3016,
    0x3019, 0x3018, 0x301B, 0x301A, 0xFE5A, 0xFE59, 0xFE5C, 0xFE5B, 0xFE5E,
    0xFE5D, 0xFE65, 0xFE64, 0xFF09, 0xFF08, 0xFF1E, 0xFF1C, 0xFF3D, 0xFF3B,
    0xFF5D, 0xFF5B, 0xFF60, 0xFF5F, 0xFF63, 0xFF62, 0xFFFF, 0xFEFF, 0xFEFF,
    0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
    0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
    0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
    0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
    0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
    0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
    0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
    0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
    0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
    0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
    0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
    0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
    0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
    0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
    0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
    0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
};

const size_t kFXTextLayoutBidiMirrorSize =
    FX_ArraySize(kFXTextLayoutBidiMirror);

uint32_t GetUnicodeProperties(wchar_t wch) {
  size_t idx = static_cast<size_t>(wch);
  if (idx < kTextLayoutCodePropertiesSize)
    return kTextLayoutCodeProperties[idx];
  return 0;
}

}  // namespace

wchar_t FX_GetMirrorChar(wchar_t wch) {
  uint32_t dwProps = GetUnicodeProperties(wch);
  uint32_t dwTemp = (dwProps & kMirrorBitMask);
  if (dwTemp == kMirrorBitMask)
    return wch;
  size_t idx = dwTemp >> kMirrorBitPos;
  return idx < kFXTextLayoutBidiMirrorSize ? kFXTextLayoutBidiMirror[idx] : wch;
}

FX_BIDICLASS FX_GetBidiClass(wchar_t wch) {
  uint32_t prop = GetUnicodeProperties(wch);
  uint32_t result = (prop & kBidiClassBitMask) >> kBidiClassBitPos;
  ASSERT(result <= static_cast<uint32_t>(FX_BIDICLASS::kPDF));
  return static_cast<FX_BIDICLASS>(result);
}

#ifdef PDF_ENABLE_XFA
FX_CHARTYPE FX_GetCharType(wchar_t wch) {
  uint32_t prop = GetUnicodeProperties(wch);
  uint32_t result = (prop & kCharTypeBitMask) >> kCharTypeBitPos;
  ASSERT(result <= static_cast<uint32_t>(FX_CHARTYPE::kArabic));
  return static_cast<FX_CHARTYPE>(result);
}

FX_BREAKPROPERTY FX_GetBreakProperty(wchar_t wch) {
  uint32_t prop = GetUnicodeProperties(wch);
  uint32_t result = (prop & kBreakTypeBitMask) >> kBreakTypeBitPos;
  ASSERT(result <= static_cast<uint32_t>(FX_BREAKPROPERTY::kTB));
  return static_cast<FX_BREAKPROPERTY>(result);
}
#endif  // PDF_ENABLE_XFA
