/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * The contents of this file are subject to the Netscape Public
 * License Version 1.1 (the "License"); you may not use this file
 * except in compliance with the License. You may obtain a copy of
 * the License at http://www.mozilla.org/NPL/
 *
 * Software distributed under the License is distributed on an "AS
 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * rights and limitations under the License.
 *
 * The Original Code is mozilla.org code.
 *
 * The Initial Developer of the Original Code is Netscape
 * Communications Corporation.  Portions created by Netscape are
 * Copyright (C) 1998 Netscape Communications Corporation. All
 * Rights Reserved.
 *
 * Contributor(s): 
 */


/*	csid.h	*/

#ifndef _CSID_H_
#define _CSID_H_

/* Codeset type */
#define SINGLEBYTE   0x0000 /* 0000 0000 0000 0000 =    0 */
#define MULTIBYTE    0x0100 /* 0000 0001 0000 0000 =  256 */
#define STATEFUL     0x0200 /* 0000 0010 0000 0000 =  512 */
#define WIDECHAR     0x0300 /* 0000 0011 0000 0000 =  768 */
#define CODESET_MASK 0x0F00 /* 0000 1111 0000 0000 = 3840 */

/*
 * Check for double byte encodings
 * (should distinguish 2 byte from true multibyte)
 */
#define IS_16BIT_ENCODING(x) (((x)&CODESET_MASK) == MULTIBYTE)

/* line-break on spaces */
#define CS_SPACE   0x0400 /* 0000 0100 0000 0000 = 1024 */

/* Auto Detect Mode */
#define CS_AUTO    0x0800 /* 0000 1000 0000 0000 = 2048 */


/* Code Set IDs */
/* CS_DEFAULT: used if no charset param in header */
/* CS_UNKNOWN: used for unrecognized charset */

                    /* type                  id   */
#define CS_DEFAULT    (SINGLEBYTE         |   0) /*    0 */
#define CS_ASCII      (SINGLEBYTE         |   1) /*    1 */
#define CS_LATIN1     (SINGLEBYTE         |   2) /*    2 */
#define CS_JIS        (STATEFUL           |   3) /*  515 */
#define CS_SJIS       (MULTIBYTE          |   4) /*  260 */
#define CS_EUCJP      (MULTIBYTE          |   5) /*  261 */

#define CS_JIS_AUTO   (CS_AUTO|STATEFUL   |   3) /* 2563 */
#define CS_SJIS_AUTO  (CS_AUTO|MULTIBYTE  |   4) /* 2308 */
#define CS_EUCJP_AUTO (CS_AUTO|MULTIBYTE  |   5) /* 2309 */

#define CS_MAC_ROMAN  (SINGLEBYTE         |   6) /*    6 */
#define CS_BIG5       (MULTIBYTE          |   7) /*  263 */
#define CS_GB_8BIT    (MULTIBYTE          |   8) /*  264 */
#define CS_CNS_8BIT   (MULTIBYTE          |   9) /*  265 */
#define CS_LATIN2     (SINGLEBYTE         |  10) /*   10 */
#define CS_MAC_CE     (SINGLEBYTE         |  11) /*   11 */

#define CS_KSC_8BIT   (MULTIBYTE|CS_SPACE |  12) /* 1292 */
#define CS_KSC_8BIT_AUTO   (CS_AUTO | MULTIBYTE|CS_SPACE |  12)

#define CS_2022_KR    (STATEFUL           |  13) /*  525 */
#define CS_8859_3     (SINGLEBYTE         |  14) /*   14 */
#define CS_8859_4     (SINGLEBYTE         |  15) /*   15 */
#define CS_8859_5     (SINGLEBYTE         |  16) /*   16 ISO Cyrillic */
#define CS_8859_6     (SINGLEBYTE         |  17) /*   17 ISO Arabic */
#define CS_8859_7     (SINGLEBYTE         |  18) /*   18 ISO Greek */
#define CS_8859_8     (SINGLEBYTE         |  19) /*   19 ISO Hebrew */
#define CS_8859_9     (SINGLEBYTE         |  20) /*   20 */
#define CS_SYMBOL     (SINGLEBYTE         |  21) /*   21 */
#define CS_DINGBATS   (SINGLEBYTE         |  22) /*   22 */
#define CS_DECTECH    (SINGLEBYTE         |  23) /*   23 */
#define CS_CNS11643_1 (MULTIBYTE          |  24) /*  280 */
#define CS_CNS11643_2 (MULTIBYTE          |  25) /*  281 */
#define CS_JISX0208   (MULTIBYTE          |  26) /*  282 */
#define CS_JISX0201   (SINGLEBYTE         |  27) /*   27 */
#define CS_KSC5601    (MULTIBYTE          |  28) /*  284 */
#define CS_TIS620     (SINGLEBYTE         |  29) /*   29 */
#define CS_JISX0212   (MULTIBYTE          |  30) /*  286 */
#define CS_GB2312     (MULTIBYTE          |  31) /*  287 */
#define CS_UCS2       (WIDECHAR           |  32) /*  810 */
#define CS_UCS4       (WIDECHAR           |  33) /*  811 */
#define CS_UTF8       (MULTIBYTE          |  34) /*  290 */
#define CS_UTF7       (STATEFUL           |  35) /*   35 */
#define CS_NPC        (MULTIBYTE          |  36) /*  292 */
#define CS_X_BIG5     (MULTIBYTE          |  37) /*  293 */
#define CS_USRDEF2    (SINGLEBYTE         |  38) /*   38 */

#define CS_KOI8_R     (SINGLEBYTE         |  39) /*   39 */
#define CS_MAC_CYRILLIC     (SINGLEBYTE   |  40) /*   40 */
#define CS_CP_1251    (SINGLEBYTE         |  41) /*   41 */
#define CS_MAC_GREEK  (SINGLEBYTE         |  42) /*   42 */
#define CS_CP_1253    (SINGLEBYTE         |  43) /*   43 */
#define CS_CP_1250    (SINGLEBYTE         |  44) /*   44 */
#define CS_CP_1254    (SINGLEBYTE         |  45) /*   45 */
#define CS_MAC_TURKISH (SINGLEBYTE        |  46) /*   46 */
#define CS_GB2312_11  (MULTIBYTE          |  47) /*  303 */
#define CS_JISX0208_11 (MULTIBYTE         |  48) /*  304 */
#define CS_KSC5601_11 (MULTIBYTE          |  49) /*  305 */
#define CS_CNS11643_1110 (MULTIBYTE       |  50) /*  306 */
#define CS_UCS2_SWAP    (WIDECHAR         |  51) /*  819 */
#define CS_IMAP4_UTF7       (STATEFUL     |  52) /*  564 */
#define CS_CP_850     (SINGLEBYTE         |  53) /*   53  PC Latin 1 */
#define CS_CP_852     (SINGLEBYTE         |  54) /*   54  PC Latin 2 */
#define CS_CP_855     (SINGLEBYTE         |  55) /*   55  PC Cyrillic */
#define CS_CP_857     (SINGLEBYTE         |  56) /*   56  PC Turkish */
#define CS_CP_862     (SINGLEBYTE         |  57) /*   57  PC Hebrew */
#define CS_CP_864     (SINGLEBYTE         |  58) /*   58  PC Arabic */
#define CS_CP_866     (SINGLEBYTE         |  59) /*   59  PC Russian */
#define CS_CP_874     (SINGLEBYTE         |  60) /*   60  PC Thai    */
#define CS_CP_1257    (SINGLEBYTE         |  61) /*   61  Windows Baltic */
#define CS_CP_1258    (SINGLEBYTE         |  62) /*   62  Windows Vietnamese */
#define CS_ARMSCII8   (SINGLEBYTE         |  63) /*   63  Armenian ArmSCII-8 */
#define CS_HZ         (STATEFUL           |  64) /*   576 */
#define CS_ISO_2022_CN (STATEFUL          |  65) /*   577 */
#define CS_GB13000    (MULTIBYTE          |  66) /*   322 */
#define CS_BIG5_PLUS  (MULTIBYTE          |  67) /*   323 */
#define CS_UHC        (MULTIBYTE|CS_SPACE |  68) /*   1348 cp949 */
#define CS_CNS11643_3 (MULTIBYTE          |  69) /*   325 */
#define CS_CNS11643_4 (MULTIBYTE          |  70) /*   326 */
#define CS_CNS11643_5 (MULTIBYTE          |  71) /*   327 */
#define CS_CNS11643_6 (MULTIBYTE          |  72) /*   328 */
#define CS_CNS11643_7 (MULTIBYTE          |  73) /*   329 */
#define CS_CNS11643_8 (MULTIBYTE          |  74) /*   330 */
#define CS_CNS11643_9 (MULTIBYTE          |  75) /*   331 */
#define CS_CNS11643_10 (MULTIBYTE         |  76) /*   332 */
#define CS_CNS11643_11 (MULTIBYTE         |  77) /*   333 */
#define CS_CNS11643_12 (MULTIBYTE         |  78) /*   334 */
#define CS_CNS11643_13 (MULTIBYTE         |  79) /*   335 */
#define CS_CNS11643_14 (MULTIBYTE         |  80) /*   336 */
#define CS_CNS11643_15 (MULTIBYTE         |  81) /*   337 */
#define CS_CNS11643_16 (MULTIBYTE         |  82) /*   338 */
#define CS_VIET_VISCII (SINGLEBYTE        |  83) /*   83 Vietnamese VISCII */
#define CS_VIET_VIQR   (                     84) /*   84 Vietnamese VIQR */
#define CS_KOI8_U      (SINGLEBYTE        |  85) /*   85 */
#define CS_ISO_IR_111  (SINGLEBYTE        |  86) /*   86 */
#define CS_8859_6_I    (                     87) /*   87 */
#define CS_8859_6_E    (                     88) /*   88 */
#define CS_8859_8_I    (                     89) /*   89 */
#define CS_8859_8_E    (                     90) /*   90 */
#define CS_JOHAB       (MULTIBYTE         |  91) /*   91 cp1361 */
#define CS_JOHABFONT   (MULTIBYTE         |  92) /*   92 hangterm font*/
#define CS_VIET_VPS    (SINGLEBYTE        |  93) /*   93 Vietnamese VPS */
#define CS_VIET_TCVN   (SINGLEBYTE        |  94) /*   94 Vietnamese TCVN */
#define CS_VIET_VNI    (                     95) /*   95 Vietnamese VNI */
#define CS_T61         (MULTIBYTE         |  96) /*   96 T61  */

#define INTL_CHAR_SET_MAX                    97  /* must be highest + 1 */


#define CS_USER_DEFINED_ENCODING (SINGLEBYTE | 254) /* 254 */
#define CS_UNKNOWN    (SINGLEBYTE         | 255) /* 255 */

#define IS_UTF8_CSID(x) (((x)&0xFF)== (CS_UTF8&0xFF))
#define IS_UNICODE_CSID(x) \
			(   (((x)&0xFF)== (CS_UCS2&0xFF)) \
			 || (((x)&0xFF)== (CS_UTF8&0xFF)) \
			 || (((x)&0xFF)== (CS_UTF7&0xFF)) )

/* The trigger is passing the parameter to 
   PA_FetchParamValue() to satisfy its signature */
#ifdef XP_MAC
#define CS_FE_ASCII CS_MAC_ROMAN
#else
#define CS_FE_ASCII CS_LATIN1
#endif


/* Codeset # sorted by number */
#if 0

0    CS_DEFAULT     0
1    CS_ASCII     1
2    CS_LATIN1     2
6    CS_MAC_ROMAN     6
10   CS_LATIN2    10
11   CS_MAC_CE    11
14   CS_8859_3    14
15   CS_8859_4    15
16   CS_8859_5    16
17   CS_8859_6    17
18   CS_8859_7    18 
19   CS_8859_8    19
20   CS_8859_9    20
21   CS_SYMBOL    21
22   CS_DINGBATS    22
23   CS_DECTECH    23
27   CS_JISX0201    27
29   CS_TIS620    29
35   CS_UTF7    35
38   CS_USRDEF2    38
39   CS_KOI8_R    39
40   CS_MAC_CYRILLIC    40
41   CS_CP_1251    41
42   CS_MAC_GREEK    42
43   CS_CP_1253    43
44   CS_CP_1250    44
45   CS_CP_1254    45
46   CS_MAC_TURKISH    46
53   CS_CP_850  53
54   CS_CP_852  54
55   CS_CP_855  55
56   CS_CP_857  56
57   CS_CP_862  57
58   CS_CP_864  58
59   CS_CP_866  59
60   CS_CP_874  60
61   CS_CP_1257   61
62   CS_CP_1258   62
63   CS_ARMSCII8  63
64   INTL_CHAR_SET_MAX  64
254  CS_USER_DEFINED_ENCODING  254
255  CS_UNKNOWN  255
260  CS_SJIS   260
261  CS_EUCJP   261
263  CS_BIG5   263
264  CS_GB_8BIT   264
265  CS_CNS_8BIT   265
280  CS_CNS11643_1   280
281  CS_CNS11643_2   281
282  CS_JISX0208   282
284  CS_KSC5601   284
286  CS_JISX0212   286
287  CS_GB2312   287
290  CS_UTF8   290
292  CS_NPC   292
293  CS_X_BIG5   293
303  CS_GB2312_11   303
304  CS_JISX0208_11   304
305  CS_KSC5601_11   305
306  CS_CNS11643_1110   306
515  CS_JIS   515
525  CS_2022_KR   525
564  CS_IMAP4_UTF7 564
810  CS_UCS2   810
811  CS_UCS4   811
819  CS_UCS2_SWAP   819
1292 CS_KSC_8BIT  1292
2308 CS_SJIS_AUTO  2308
2309 CS_EUCJP_AUTO  2309
2563 CS_JIS_AUTO  2563

#endif

#endif /* _CSID_H_ */
