home *** CD-ROM | disk | FTP | other *** search
/ Tools / WinSN5.0Ver.iso / NETSCAP.50 / WIN1998.ZIP / ns / lib / libi18n / intlpriv.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-04-08  |  11.1 KB  |  315 lines

  1. /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
  2.  *
  3.  * The contents of this file are subject to the Netscape Public License
  4.  * Version 1.0 (the "NPL"); you may not use this file except in
  5.  * compliance with the NPL.  You may obtain a copy of the NPL at
  6.  * http://www.mozilla.org/NPL/
  7.  *
  8.  * Software distributed under the NPL is distributed on an "AS IS" basis,
  9.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
  10.  * for the specific language governing rights and limitations under the
  11.  * NPL.
  12.  *
  13.  * The Initial Developer of this code under the NPL is Netscape
  14.  * Communications Corporation.  Portions created by Netscape are
  15.  * Copyright (C) 1998 Netscape Communications Corporation.  All Rights
  16.  * Reserved.
  17.  */
  18. /*    intlpriv.h    */
  19.  
  20. #ifndef _INTLPRIV_H_
  21. #define _INTLPRIV_H_
  22.  
  23. #include "xp.h"
  24. #include "intl_csi.h"
  25. #include "libi18n.h"
  26.  
  27.  
  28. #define UNCVTBUF_SIZE 8    /* At least: longest ESC Seq + Char Bytes - 1 */
  29. #define DOC_CSID_KNOWN(x) (((x) != CS_DEFAULT) && ((x) != CS_UNKNOWN))
  30.  
  31. /* Some constants for UCS-2 detection */
  32. #define BYTE_ORDER_MARK               0xFEFF
  33. #define NEEDS_SWAP_MARK               0xFFFE    
  34.  
  35. /*
  36.  * UTF8 defines and macros
  37.  */
  38. #define ONE_OCTET_BASE            0x00    /* 0xxxxxxx */
  39. #define ONE_OCTET_MASK            0x7F    /* x1111111 */
  40. #define CONTINUING_OCTET_BASE    0x80    /* 10xxxxxx */
  41. #define CONTINUING_OCTET_MASK    0x3F    /* 00111111 */
  42. #define TWO_OCTET_BASE            0xC0    /* 110xxxxx */
  43. #define TWO_OCTET_MASK            0x1F    /* 00011111 */
  44. #define THREE_OCTET_BASE        0xE0    /* 1110xxxx */
  45. #define THREE_OCTET_MASK        0x0F    /* 00001111 */
  46. #define FOUR_OCTET_BASE            0xF0    /* 11110xxx */
  47. #define FOUR_OCTET_MASK            0x07    /* 00000111 */
  48. #define FIVE_OCTET_BASE            0xF8    /* 111110xx */
  49. #define FIVE_OCTET_MASK            0x03    /* 00000011 */
  50. #define SIX_OCTET_BASE            0xFC    /* 1111110x */
  51. #define SIX_OCTET_MASK            0x01    /* 00000001 */
  52.  
  53. #define IS_UTF8_1ST_OF_1(x)    (( (x)&~ONE_OCTET_MASK  ) == ONE_OCTET_BASE)
  54. #define IS_UTF8_1ST_OF_2(x)    (( (x)&~TWO_OCTET_MASK  ) == TWO_OCTET_BASE)
  55. #define IS_UTF8_1ST_OF_3(x)    (( (x)&~THREE_OCTET_MASK) == THREE_OCTET_BASE)
  56. #define IS_UTF8_1ST_OF_4(x)    (( (x)&~FOUR_OCTET_MASK ) == FOUR_OCTET_BASE)
  57. #define IS_UTF8_1ST_OF_5(x)    (( (x)&~FIVE_OCTET_MASK ) == FIVE_OCTET_BASE)
  58. #define IS_UTF8_1ST_OF_6(x)    (( (x)&~SIX_OCTET_MASK  ) == SIX_OCTET_BASE)
  59. #define IS_UTF8_2ND_THRU_6TH(x) \
  60.                     (( (x)&~CONTINUING_OCTET_MASK  ) == CONTINUING_OCTET_BASE)
  61. #define IS_UTF8_1ST_OF_UCS2(x) \
  62.             IS_UTF8_1ST_OF_1(x) \
  63.             || IS_UTF8_1ST_OF_2(x) \
  64.             || IS_UTF8_1ST_OF_3(x)
  65.  
  66.  
  67.  
  68. /* Some constants for UCS-2 detection */
  69. #define BYTE_ORDER_MARK               0xFEFF
  70. #define NEEDS_SWAP_MARK               0xFFFE
  71.  
  72. /* exported functions from unicvt.c */
  73.  
  74. MODULE_PRIVATE UNICVTAPI unsigned char *mz_ucs2utf8(CCCDataObject, const unsigned char *s, int32 l);
  75. MODULE_PRIVATE UNICVTAPI unsigned char *mz_ucs2utf7(CCCDataObject, const unsigned char *s, int32 l);
  76. MODULE_PRIVATE UNICVTAPI unsigned char *mz_utf82ucs(CCCDataObject, const unsigned char *s, int32 l);
  77. MODULE_PRIVATE UNICVTAPI unsigned char *mz_utf82ucsswap(CCCDataObject, const unsigned char *s, int32 l);
  78. MODULE_PRIVATE UNICVTAPI unsigned char *mz_utf72utf8(CCCDataObject, const unsigned char *s, int32 l);
  79. MODULE_PRIVATE UNICVTAPI unsigned char *mz_utf82utf7(CCCDataObject, const unsigned char *s, int32 l);
  80. MODULE_PRIVATE UNICVTAPI unsigned char *mz_imap4utf72utf8(CCCDataObject, const unsigned char *s, int32 l);
  81. MODULE_PRIVATE UNICVTAPI unsigned char *mz_utf82imap4utf7(CCCDataObject, const unsigned char *s, int32 l);
  82. MODULE_PRIVATE UNICVTAPI int16 utf8_to_ucs2_char(const unsigned char *utf8p, int16 buflen, uint16 *ucs2p);
  83. MODULE_PRIVATE UNICVTAPI int32 utf8_to_ucs2_buffer(const unsigned char *utf8p, int16 utf8len, int *parsed_cnt, int *invalid_cnt, uint16 *ucs2p, int32 ucs2len);
  84.  
  85.  
  86.                     /* values for ASCII chars    */
  87. #define ESC        0x1B        /* ESC character        */ 
  88. #define NL        0x0A        /* newline            */ 
  89. #undef CR
  90. #define CR        0x0D        /* carriage return        */
  91. #define DOLLAR        0x24        /* carriage return        */
  92.  
  93.                     /* values for EUC shift chars    */
  94. #define SS2        0x8E        /* Single Shift 2        */
  95. #define SS3        0x8F        /* Single Shift 3        */
  96.  
  97.                      /* JIS encoding mode flags    */
  98. #define JIS_Roman    0
  99. #define JIS_208_83    1
  100. #define JIS_HalfKana    2
  101. #define JIS_212_90    3
  102.  
  103. /* I am using low nibble for the ESC flag and the next high nibble for Shift */
  104. #define KSC_5601_87    0x04
  105.  
  106. /* Default state is SHIFT_OUT when we begin.
  107.  * So SHIFT_IN should have value 0x0- */
  108. #define SHIFT_IN    0x00
  109. #define SHIFT_OUT    0x10
  110.  
  111. /* The actual values to be output for SHIFTING */
  112. #define SO        0x0e
  113. #define SI        0x0f
  114.  
  115. /* Some masks for computation */
  116. #define ESC_MASK    0x0F
  117. #define SHIFT_MASK    0xF0
  118.  
  119.  
  120. /*
  121.  * Shift JIS Encoding
  122.  *                1st Byte Range    2nd Byte Range
  123.  * ASCII/JIS-Roman        0x21-0x7F    n/a
  124.  * 2-Byte Char(low range)    0x81-0x9F    0x40-0x7E, 0x80-0xFC
  125.  * Half-width space(non-std)    0xA0        n/a
  126.  * Half-width katakana        0xA1-0xDF    n/a
  127.  * 2-Byte Char(high range)    0xE0-0xEF    0x40-0x7E, 0x80-0xFC
  128.  * User Defined(non-std)    0xF0-0xFC    0x40-0x7E, 0x80-0xFC
  129.  *
  130.  * JIS Encoding
  131.  *                1st Byte Range    2nd Byte Range
  132.  * ASCII/JIS-Roman        0x21-0x7E    n/a
  133.  * Half-width katakana(non-std)    0x21-0x5F    n/a
  134.  * 2-Byte Char            0x21-7E        0x21-7E
  135.  *
  136.  * Japanese EUC Encoding
  137.  *                1st Byte Range    2nd Byte Range    3rd Byte Range
  138.  * ASCII/JIS-Roman        0x21-0x7E    n/a        n/a
  139.  * JIS X 0208-1990        0xA0-0xFF    0xA0-0xFF    n/a
  140.  * Half-width katakana        SS2        0xA0-0xFF    n/a
  141.  * JIS X 0212-1990        SS3        0xA0-0xFF    0xA0-0xFF
  142.  *
  143.  *
  144.  *    List of ISO2022-INT Escape Sequences:
  145.  *
  146.  *        SUPPORTED:
  147.  *        ASCII            ESC ( B        G0
  148.  *        JIS X 0201-Roman    ESC ( J        G0
  149.  *        Half-width Katakana    ESC ( I
  150.  *        JIS X 0208-1978        ESC $ @        G0
  151.  *        JIS X 0208-1983        ESC $ B        G0
  152.  *        JIS X 0212-1990        ESC $ ( D    G0    (to EUC only)
  153.  *        ISO8859-1        ESC - A        G1
  154.  *
  155.  *        UNSUPPORTED:
  156.  *        GB 2312-80        ESC $ A        G0
  157.  *        KS C 5601-1987        ESC $ ) C    G1
  158.  *        CNS 11643-1986-1    ESC $ ( G    G0
  159.  *        CNS 11643-1986-2    ESC $ ( H    G0
  160.  *        ISO8859-7(Greek)    ESC - F        G1
  161.  *
  162.  * Added right parens: ))))) to balance editors' showmatch...
  163.  */
  164.  
  165.  
  166.     /* JIS-Roman mode enabled by 3 char ESC sequence: <ESC> ( J    */
  167. #define InsRoman_ESC(cp, obj) {                \
  168.      INTL_SetCCCJismode(obj, JIS_Roman);            \
  169.      *cp++ = ESC;                    \
  170.      *cp++ = '(';                    \
  171.      *cp++ = 'J';                    \
  172. }
  173.     /* ASCII mode enabled by 3 char ESC sequence: <ESC> ( B    */
  174. #define InsASCII_ESC(cp, obj) {                \
  175.      INTL_SetCCCJismode(obj, JIS_Roman);            \
  176.      *cp++ = ESC;                    \
  177.      *cp++ = '(';                    \
  178.      *cp++ = 'B';                    \
  179. }
  180.     /* JIS x208-1983 mode enabled by 3 char ESC sequence: <ESC> $ B    */
  181. #define Ins208_83_ESC(cp, obj) {            \
  182.     INTL_SetCCCJismode(obj, JIS_208_83);            \
  183.      *cp++ = ESC;                    \
  184.      *cp++ = '$';                    \
  185.      *cp++ = 'B';                    \
  186. }
  187.     /* JIS Half-width katakana mode enabled by 3 char ESC seq.: ESC ( I */
  188. #define InsHalfKana_ESC(cp, obj) {            \
  189.      INTL_SetCCCJismode(obj, JIS_HalfKana);            \
  190.      *cp++ = ESC;                    \
  191.      *cp++ = '(';                    \
  192.      *cp++ = 'I';                    \
  193. }
  194.     /* JIS x212-1990 mode enabled by 4 char ESC sequence: <ESC> $ ( D */
  195. #define Ins212_90_ESC(cp, obj) {            \
  196.     INTL_SetCCCJismode(obj, JIS_212_90);            \
  197.      *cp++ = ESC;                    \
  198.      *cp++ = '$';                    \
  199.      *cp++ = '(';                    \
  200.      *cp++ = 'D';                    \
  201. }
  202.  
  203.     /* KSC 5601-1987 mode enabled by 4 char ESC sequence: <ESC> $ ) D */
  204. #define Ins5601_87_ESC(cp, obj) {    \
  205.     INTL_SetCCCJismode(obj, (INTL_GetCCCJismode(obj) & ~ESC_MASK) | KSC_5601_87);    \
  206.      *cp++ = ESC;                            \
  207.      *cp++ = '$';                            \
  208.      *cp++ = ')';                            \
  209.      *cp++ = 'C';                            \
  210. }
  211. #define Ins5601_87_SI(cp, obj)    {                    \
  212.     INTL_SetCCCJismode(obj, ((INTL_GetCCCJismode(obj) & ~SHIFT_MASK) | SHIFT_IN));    \
  213.     *cp++ = SI;                            \
  214. }
  215. #define Ins5601_87_SO(cp, obj)    {                    \
  216.     INTL_SetCCCJismode(obj, ((INTL_GetCCCJismode(obj) & ~SHIFT_MASK) | SHIFT_OUT));    \
  217.     *cp++ = SO;                            \
  218. }
  219. #define IsIns5601_87_ESC(obj)    ((INTL_GetCCCJismode(obj) & ESC_MASK) == KSC_5601_87)
  220. #define IsIns5601_87_SI(obj)    ((INTL_GetCCCJismode(obj) & SHIFT_MASK) == SHIFT_IN)
  221. #define IsIns5601_87_SO(obj)    ((INTL_GetCCCJismode(obj) & SHIFT_MASK) == SHIFT_OUT)
  222.  
  223.     /* Added right parens: )))))) to balance editors' showmatch...    */
  224.  
  225.     /* Maximum Length of Escape Sequence and Character Bytes per Encoding */
  226. #define MAX_SJIS    2
  227. #define MAX_EUC        3
  228. #define    MAX_JIS        6
  229.  
  230.  
  231.  
  232. #define MAX_CSNAME    64
  233. typedef struct _csname2id_t {
  234.     unsigned char    cs_name[MAX_CSNAME];
  235.     unsigned char    java_name[MAX_CSNAME];
  236.     int16        cs_id;
  237.     unsigned char    fill[3];
  238. } csname2id_t;
  239.  
  240. typedef struct {
  241.     int16        from_csid;    /* "from" codeset ID        */
  242.     int16        to_csid;    /* "to" codeset ID        */
  243.     int16        autoselect;    /* autoselectable        */
  244.     CCCFunc        cvtmethod;    /* char. codeset conv method    */
  245.     int32        cvtflag;    /* conv func dependent flag    */
  246. } cscvt_t;
  247.  
  248.  
  249. #ifdef XP_UNIX
  250. typedef struct {
  251.     int16    win_csid;
  252.     char    *locale;
  253.     char    *fontlist;
  254. } cslocale_t;
  255. #endif /* XP_UNIX */
  256.  
  257. XP_BEGIN_PROTOS
  258.  
  259. MODULE_PRIVATE int          net_1to1CCC(CCCDataObject, const unsigned char *s, int32 l);
  260. MODULE_PRIVATE int          net_sjis2jis(CCCDataObject,const unsigned char *s,int32 l);
  261. MODULE_PRIVATE int          net_sjis2euc(CCCDataObject,const unsigned char *s,int32 l);
  262. MODULE_PRIVATE int          net_euc2jis(CCCDataObject,const unsigned char *s, int32 l);
  263. MODULE_PRIVATE int          net_euc2sjis(CCCDataObject,const unsigned char *s,int32 l);
  264. MODULE_PRIVATE int          net_jis2other(CCCDataObject, const unsigned char *s, int32 l);
  265.  
  266. MODULE_PRIVATE unsigned char *mz_euc2jis(CCCDataObject, const unsigned char *s, int32 l);
  267. MODULE_PRIVATE unsigned char *mz_sjis2euc(CCCDataObject, const unsigned char *s, int32 l);
  268. MODULE_PRIVATE unsigned char *mz_sjis2jis(CCCDataObject, const unsigned char *s, int32 l);
  269. MODULE_PRIVATE unsigned char *One2OneCCC(CCCDataObject, const unsigned char *s, int32 l);
  270. MODULE_PRIVATE unsigned char *mz_euc2sjis(CCCDataObject, const unsigned char *s, int32 l);
  271. MODULE_PRIVATE unsigned char *mz_euckr2iso(CCCDataObject, const unsigned char *s, int32 l);
  272. MODULE_PRIVATE unsigned char *mz_iso2euckr(CCCDataObject, const unsigned char *s, int32 l);
  273. MODULE_PRIVATE unsigned char *mz_b52cns(CCCDataObject, const unsigned char *s, int32 l);
  274. MODULE_PRIVATE unsigned char *mz_cns2b5(CCCDataObject, const unsigned char *s, int32 l);
  275. MODULE_PRIVATE unsigned char *jis2other(CCCDataObject, const unsigned char *s, int32 l);
  276.  
  277.  
  278. MODULE_PRIVATE unsigned char *autoJCCC (CCCDataObject, const unsigned char *s, int32 l);
  279. MODULE_PRIVATE unsigned char *autoKCCC (CCCDataObject, const unsigned char *s, int32 l);
  280.  
  281. MODULE_PRIVATE int16          intl_detect_JCSID (uint16, const unsigned char *, int32);
  282. MODULE_PRIVATE int16          intl_detect_KCSID (uint16, const unsigned char *, int32);
  283.  
  284.  
  285.  
  286.  
  287. void          FE_fontchange(iDocumentContext window_id, int16  csid);
  288. void          FE_ChangeURLCharset(const char *newCharset);
  289. char **        FE_GetSingleByteTable(int16 from_csid, int16 to_csid, int32 resourceid);
  290. char *        FE_LockTable(char **cvthdl);
  291. void         FE_FreeSingleByteTable(char **cvthdl);
  292.  
  293. /* void CCCReportAutoDetect(CCCDataObject obj, uint16 detected_doc_csid); */
  294.  
  295. unsigned char *ConvHeader(unsigned char *subject);
  296.  
  297. #ifdef XP_UNIX
  298. int16          FE_WinCSID(iDocumentContext );
  299. #else /* XP_UNIX */
  300. #define          FE_WinCSID(window_id) 0
  301. #endif /* XP_UNIX */
  302.  
  303. int16 *intl_GetFontCharSets(void);
  304.  
  305.  
  306. XP_END_PROTOS
  307.  
  308.  
  309.  
  310. #define MAXCSIDINTBL    64
  311.  
  312.  
  313.  
  314. #endif /* _INTLPRIV_H_ */
  315.