Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fgas / src / crt / fx_cpmgr.cpp
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4 \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 \r
7 #include "../fgas_base.h"\r
8 #include "fx_codepage.h"\r
9 #ifdef _FXCP\r
10 #ifdef __cplusplus\r
11 extern "C"\r
12 {\r
13 #endif\r
14 extern const FX_CODEPAGE_HEADER g_CP936_MapHeader;\r
15 extern const FX_CODEPAGE_HEADER g_CP932_MapHeader;\r
16 extern const FX_CODEPAGE_HEADER g_CP949_MapHeader;\r
17 extern const FX_CODEPAGE_HEADER g_CP950_MapHeader;\r
18 extern const FX_CODEPAGE_HEADER g_CP874_MapHeader;\r
19 extern const FX_CODEPAGE_HEADER g_CP1250_MapHeader;\r
20 extern const FX_CODEPAGE_HEADER g_CP1251_MapHeader;\r
21 extern const FX_CODEPAGE_HEADER g_CP1252_MapHeader;\r
22 extern const FX_CODEPAGE_HEADER g_CP1253_MapHeader;\r
23 extern const FX_CODEPAGE_HEADER g_CP1254_MapHeader;\r
24 extern const FX_CODEPAGE_HEADER g_CP1255_MapHeader;\r
25 extern const FX_CODEPAGE_HEADER g_CP1256_MapHeader;\r
26 extern const FX_CODEPAGE_HEADER g_CP1257_MapHeader;\r
27 extern const FX_CODEPAGE_HEADER g_CP1258_MapHeader;\r
28 extern const FX_CPCU_MAPINFO g_CP936_CUMap;\r
29 extern const FX_CPCU_MAPINFO g_CP932_CUMap;\r
30 extern const FX_CPCU_MAPINFO g_CP949_CUMap;\r
31 extern const FX_CPCU_MAPINFO g_CP950_CUMap;\r
32 extern const FX_CPCU_MAPINFO g_CP874_CUMap;\r
33 extern const FX_CPCU_MAPINFO g_CP1250_CUMap;\r
34 extern const FX_CPCU_MAPINFO g_CP1251_CUMap;\r
35 extern const FX_CPCU_MAPINFO g_CP1252_CUMap;\r
36 extern const FX_CPCU_MAPINFO g_CP1253_CUMap;\r
37 extern const FX_CPCU_MAPINFO g_CP1254_CUMap;\r
38 extern const FX_CPCU_MAPINFO g_CP1255_CUMap;\r
39 extern const FX_CPCU_MAPINFO g_CP1256_CUMap;\r
40 extern const FX_CPCU_MAPINFO g_CP1257_CUMap;\r
41 extern const FX_CPCU_MAPINFO g_CP1258_CUMap;\r
42 FX_LPCCODEPAGE FX_GetCodePage(FX_WORD wCodePage)\r
43 {\r
44     FX_INT32 iEnd = sizeof(g_FXCodePageMgr) / sizeof(FX_CODEPAGE) - 1;\r
45     FXSYS_assert(iEnd >= 0);\r
46     FX_INT32 iStart = 0, iMid;\r
47     FX_UINT16 uCPID;\r
48     do {\r
49         iMid = (iStart + iEnd) / 2;\r
50         const FX_CODEPAGE &cp = g_FXCodePageMgr[iMid];\r
51         uCPID = cp.pCPHeader->uCPID;\r
52         if (wCodePage == uCPID) {\r
53             return g_FXCodePageMgr + iMid;\r
54         } else if (wCodePage < uCPID) {\r
55             iEnd = iMid - 1;\r
56         } else {\r
57             iStart = iMid + 1;\r
58         }\r
59     } while (iStart <= iEnd);\r
60     return NULL;\r
61 }\r
62 #ifdef __cplusplus\r
63 }\r
64 #endif\r
65 #endif\r