1ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved.
2ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
3ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// found in the LICENSE file.
4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
5ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef _FX_CODEPAGE
8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define _FX_CODEPAGE
9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass IFX_CodePage;
10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_DefANSI 0
11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_DefOEM 1
12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_DefMAC 2
13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_Thread 3
14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_Symbol 42
15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSDOS_US 437
16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_Arabic_ASMO708 708
17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_Arabic_ASMO449Plus 709
18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_Arabic_Transparent 710
19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_Arabic_NafithaEnhanced 711
20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_Arabic_TransparentASMO 720
21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSDOS_Greek1 737
22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSDOS_Baltic 775
23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSWin31_WesternEuropean 819
24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSDOS_WesternEuropean 850
25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSDOS_EasternEuropean 852
26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSDOS_Latin3 853
27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSDOS_Cyrillic 855
28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSDOS_Turkish 857
29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSDOS_Latin1Euro 858
30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSDOS_Portuguese 860
31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSDOS_Icelandic 861
32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSDOS_Hebrew 862
33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSDOS_FrenchCanadian 863
34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSDOS_Arabic 864
35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSDOS_Norwegian 865
36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSDOS_Russian 866
37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSDOS_Greek2 869
38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSDOS_Thai 874
39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSDOS_KamenickyCS 895
40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ShiftJIS 932
41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ChineseSimplified 936
42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_Korean 949
43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ChineseTraditional 950
44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_UTF16LE 1200
45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_UTF16BE 1201
46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSWin_EasternEuropean 1250
47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSWin_Cyrillic 1251
48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSWin_WesternEuropean 1252
49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSWin_Greek 1253
50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSWin_Turkish 1254
51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSWin_Hebrew 1255
52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSWin_Arabic 1256
53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSWin_Baltic 1257
54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MSWin_Vietnamese 1258
55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_Johab 1361
56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MAC_Roman 10000
57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MAC_ShiftJIS 10001
58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MAC_ChineseTraditional 10002
59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MAC_Korean 10003
60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MAC_Arabic 10004
61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MAC_Hebrew 10005
62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MAC_Greek 10006
63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MAC_Cyrillic 10007
64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MAC_ChineseSimplified 10008
65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MAC_Thai 10021
66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MAC_EasternEuropean 10029
67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_MAC_Turkish 10081
68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_UTF32LE 12000
69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_UTF32BE 12001
70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISO8859_1 28591
71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISO8859_2 28592
72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISO8859_3 28593
73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISO8859_4 28594
74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISO8859_5 28595
75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISO8859_6 28596
76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISO8859_7 28597
77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISO8859_8 28598
78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISO8859_9 28599
79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISO8859_10 28600
80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISO8859_11 28601
81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISO8859_12 28602
82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISO8859_13 28603
83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISO8859_14 28604
84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISO8859_15 28605
85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISO8859_16 28606
86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISCII_Devanagari 57002
87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISCII_Bengali 57003
88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISCII_Tamil 57004
89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISCII_Telugu 57005
90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISCII_Assamese 57006
91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISCII_Oriya 57007
92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISCII_Kannada 57008
93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISCII_Malayalam 57009
94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISCII_Gujarati 57010
95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_ISCII_Punjabi 57011
96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_UTF7 65000
97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CODEPAGE_UTF8 65001
98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_ANSI 0
99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_Default 1
100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_Symbol 2
101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_MAC_Roman 77
102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_MAC_ShiftJIS 78
103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_MAC_Korean 79
104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_MAC_ChineseSimplified 80
105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_MAC_ChineseTriditional 81
106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_MAC_Johab 82
107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_MAC_Hebrew 83
108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_MAC_Arabic 84
109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_MAC_Greek 85
110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_MAC_Turkish 86
111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_MAC_Thai 87
112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_MAC_EasternEuropean 88
113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_MAC_Cyrillic 89
114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_ShiftJIS 128
115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_Korean 129
116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_Johab 130
117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_ChineseSimplified 134
118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_ChineseTriditional 136
119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_MSWin_Greek 161
120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_MSWin_Turkish 162
121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_MSWin_Vietnamese 163
122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_MSWin_Hebrew 177
123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_MSWin_Arabic 178
124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_ArabicTraditional 179
125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_ArabicUser 180
126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_HebrewUser 181
127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_MSWin_Baltic 186
128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_MSWin_Cyrillic 204
129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_Thai 222
130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_MSWin_EasterEuropean 238
131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_US 254
132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CHARSET_OEM 255
133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_WORD FX_GetCodePageFromCharset(uint8_t charset);
134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_WORD FX_GetCharsetFromCodePage(FX_WORD codepage);
135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_WORD FX_GetCodePageFromStringA(const FX_CHAR* pStr, int32_t iLength);
136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_WORD FX_GetCodePageFormStringW(const FX_WCHAR* pStr, int32_t iLength);
137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_WORD FX_GetDefCodePageByLanguage(FX_WORD wLanguage);
138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid FX_SwapByteOrder(FX_WCHAR* pStr, int32_t iLength);
139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid FX_SwapByteOrderCopy(const FX_WCHAR* pSrc,
140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                          FX_WCHAR* pDst,
141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                          int32_t iLength);
142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid FX_UTF16ToWChar(void* pBuffer, int32_t iLength);
143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid FX_UTF16ToWCharCopy(const FX_WORD* pUTF16,
144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         FX_WCHAR* pWChar,
145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         int32_t iLength);
146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid FX_WCharToUTF16(void* pBuffer, int32_t iLength);
147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid FX_WCharToUTF16Copy(const FX_WCHAR* pWChar,
148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         FX_WORD* pUTF16,
149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         int32_t iLength);
150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t FX_DecodeString(FX_WORD wCodePage,
151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        const FX_CHAR* pSrc,
152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        int32_t* pSrcLen,
153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        FX_WCHAR* pDst,
154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        int32_t* pDstLen,
155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        FX_BOOL bErrBreak = FALSE);
156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t FX_UTF8Decode(const FX_CHAR* pSrc,
157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                      int32_t* pSrcLen,
158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                      FX_WCHAR* pDst,
159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                      int32_t* pDstLen);
160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannenum FX_CODESYSTEM {
161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_MBCS = 0,
162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_SBCS,
163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DBCS,
164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann};
165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef struct _FX_CODEPAGE_HEADER {
166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint16_t uCPID;
167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint8_t uMinCharBytes;
168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint8_t uMaxCharBytes;
169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_CODESYSTEM eCPType;
170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bHasLeadByte;
171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_WCHAR wMinChar;
172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_WCHAR wMaxChar;
173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_WCHAR wDefChar;
174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_WCHAR wMinUnicode;
175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_WCHAR wMaxUnicode;
176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_WCHAR wDefUnicode;
177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} FX_CODEPAGE_HEADER;
178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CPMAPTYPE_Consecution 1
179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CPMAPTYPE_Strict 2
180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CPMAPTYPE_NoMapping 3
181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_CPMAPTYPE_Delta 4
182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef struct _FX_CPCU_MAPTABLE1 {
183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint16_t uMapType;
184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint16_t uUniocde;
185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} FX_CPCU_MAPTABLE1;
186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef struct _FX_CPCU_MAPTABLE2 {
187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint8_t uTrailByte;
188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint8_t uMapType;
189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint16_t uOffset;
190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} FX_CPCU_MAPTABLE2;
191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef struct _FX_CPCU_MAPINFO {
192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_CPCU_MAPTABLE1* pMapTable1;
193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_CPCU_MAPTABLE2* pMapTable2;
194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  const uint8_t* pMapData;
195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} FX_CPCU_MAPINFO;
196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef struct _FX_CPUC_MAPTABLE {
197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint16_t uStartUnicode;
198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint16_t uEndUnicode;
199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint16_t uMapType;
200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint16_t uOffset;
201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} FX_CPUC_MAPTABLE;
202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef struct _FX_CPUC_MAPINFO {
203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint32_t uMapCount;
204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_CPUC_MAPTABLE* pMapTable;
205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  const uint8_t* pMapData;
206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} FX_CPUC_MAPINFO;
207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef struct _FX_CODEPAGE {
208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_CODEPAGE_HEADER const* pCPHeader;
209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_CPCU_MAPINFO const* pCPCUMapInfo;
210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_CPUC_MAPINFO const* pCPUCMapInfo;
211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} FX_CODEPAGE, *FX_LPCODEPAGE;
212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef FX_CODEPAGE const* FX_LPCCODEPAGE;
213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef struct _FX_STR2CPHASH {
214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint32_t uHash;
215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint32_t uCodePage;
216ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} FX_STR2CPHASH;
217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef struct _FX_CHARSET_MAP {
218ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint16_t charset;
219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint16_t codepage;
220ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} FX_CHARSET_MAP;
221ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef struct _FX_LANG2CPMAP {
222ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_WORD wLanguage;
223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_WORD wCodepage;
224ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} FX_LANG2CPMAP;
225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
226ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass IFX_CodePage {
227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
228ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static IFX_CodePage* Create(FX_WORD wCodePage);
229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual ~IFX_CodePage() {}
230ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void Release() = 0;
231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_WORD GetCodePageNumber() const = 0;
232ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_CODESYSTEM GetCodeSystemType() const = 0;
233ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL HasLeadByte() const = 0;
234ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL IsLeadByte(uint8_t byte) const = 0;
235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual int32_t GetMinBytesPerChar() const = 0;
236ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual int32_t GetMaxBytesPerChar() const = 0;
237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_WCHAR GetMinCharcode() const = 0;
238ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_WCHAR GetMaxCharcode() const = 0;
239ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_WCHAR GetDefCharcode() const = 0;
240ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_WCHAR GetMinUnicode() const = 0;
241ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_WCHAR GetMaxUnicode() const = 0;
242ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_WCHAR GetDefUnicode() const = 0;
243ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL IsValidCharcode(FX_WORD wCharcode) const = 0;
244ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_WCHAR GetUnicode(FX_WORD wCharcode) const = 0;
245ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL IsValidUnicode(FX_WCHAR wUnicode) const = 0;
246ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_WORD GetCharcode(FX_WCHAR wUnicode) const = 0;
247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann};
248ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
249