summaryrefslogtreecommitdiff
path: root/xfa/src/fgas/src/crt/fx_cpmgr.cpp
blob: 480351318027c9cab02f72d48d48fb95853e5f27 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// 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 "../fgas_base.h"
#include "fx_codepage.h"
#ifdef _FXCP
#ifdef __cplusplus
extern "C" {
#endif
extern const FX_CODEPAGE_HEADER g_CP936_MapHeader;
extern const FX_CODEPAGE_HEADER g_CP932_MapHeader;
extern const FX_CODEPAGE_HEADER g_CP949_MapHeader;
extern const FX_CODEPAGE_HEADER g_CP950_MapHeader;
extern const FX_CODEPAGE_HEADER g_CP874_MapHeader;
extern const FX_CODEPAGE_HEADER g_CP1250_MapHeader;
extern const FX_CODEPAGE_HEADER g_CP1251_MapHeader;
extern const FX_CODEPAGE_HEADER g_CP1252_MapHeader;
extern const FX_CODEPAGE_HEADER g_CP1253_MapHeader;
extern const FX_CODEPAGE_HEADER g_CP1254_MapHeader;
extern const FX_CODEPAGE_HEADER g_CP1255_MapHeader;
extern const FX_CODEPAGE_HEADER g_CP1256_MapHeader;
extern const FX_CODEPAGE_HEADER g_CP1257_MapHeader;
extern const FX_CODEPAGE_HEADER g_CP1258_MapHeader;
extern const FX_CPCU_MAPINFO g_CP936_CUMap;
extern const FX_CPCU_MAPINFO g_CP932_CUMap;
extern const FX_CPCU_MAPINFO g_CP949_CUMap;
extern const FX_CPCU_MAPINFO g_CP950_CUMap;
extern const FX_CPCU_MAPINFO g_CP874_CUMap;
extern const FX_CPCU_MAPINFO g_CP1250_CUMap;
extern const FX_CPCU_MAPINFO g_CP1251_CUMap;
extern const FX_CPCU_MAPINFO g_CP1252_CUMap;
extern const FX_CPCU_MAPINFO g_CP1253_CUMap;
extern const FX_CPCU_MAPINFO g_CP1254_CUMap;
extern const FX_CPCU_MAPINFO g_CP1255_CUMap;
extern const FX_CPCU_MAPINFO g_CP1256_CUMap;
extern const FX_CPCU_MAPINFO g_CP1257_CUMap;
extern const FX_CPCU_MAPINFO g_CP1258_CUMap;
FX_LPCCODEPAGE FX_GetCodePage(FX_WORD wCodePage) {
  int32_t iEnd = sizeof(g_FXCodePageMgr) / sizeof(FX_CODEPAGE) - 1;
  FXSYS_assert(iEnd >= 0);
  int32_t iStart = 0, iMid;
  uint16_t uCPID;
  do {
    iMid = (iStart + iEnd) / 2;
    const FX_CODEPAGE& cp = g_FXCodePageMgr[iMid];
    uCPID = cp.pCPHeader->uCPID;
    if (wCodePage == uCPID) {
      return g_FXCodePageMgr + iMid;
    } else if (wCodePage < uCPID) {
      iEnd = iMid - 1;
    } else {
      iStart = iMid + 1;
    }
  } while (iStart <= iEnd);
  return NULL;
}
#ifdef __cplusplus
}
#endif
#endif