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