home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / evbl0627.zip / everblue_20010627.zip / x11 / XlcUTF.h < prev    next >
C/C++ Source or Header  |  1999-11-02  |  5KB  |  177 lines

  1. /* $TOG: XlcUTF.h /main/10 1998/05/20 14:47:44 kaleb $ */
  2. /******************************************************************
  3.  
  4.               Copyright 1993 by SunSoft, Inc.
  5.  
  6. Permission to use, copy, modify, distribute, and sell this software
  7. and its documentation for any purpose is hereby granted without fee,
  8. provided that the above copyright notice appear in all copies and
  9. that both that copyright notice and this permission notice appear
  10. in supporting documentation, and that the name of SunSoft, Inc.
  11. not be used in advertising or publicity pertaining to distribution
  12. of the software without specific, written prior permission.
  13. SunSoft, Inc. makes no representations about the suitability of
  14. this software for any purpose.  It is provided "as is" without
  15. express or implied warranty.
  16.  
  17. SunSoft Inc. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
  18. SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
  19. IN NO EVENT SHALL SunSoft, Inc. BE LIABLE FOR ANY SPECIAL, INDIRECT
  20. OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
  21. OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
  22. OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
  23. OR PERFORMANCE OF THIS SOFTWARE.
  24.  
  25.   Author: Hiromu Inukai (inukai@Japan.Sun.COM) SunSoft, inc.
  26.  
  27. ******************************************************************/
  28. /* $XFree86: xc/lib/X11/XlcUTF.h,v 1.1.1.1.12.2 1998/10/24 08:48:22 hohndel Exp $ */
  29. #include "Xlib_private.h"
  30. #include "XlcGeneric.h"
  31. #include <X11/Xos.h>
  32. #include <stdio.h>
  33.  
  34. typedef unsigned short Rune;        /* 16 bits */
  35. #define        Runeerror    0x80    /* decoding error in UTF */
  36. #define        Runeself    0x80    /* rune and UTF sequences are the same (<) */
  37. #define        UTFmax        3    /* maximum bytes per rune */
  38.  
  39. #define        BADMAP    (0xFFFD)
  40. #define        ESC    033
  41. #define        NRUNE    65536
  42. #define        NLATIN    0x6ff
  43. #define        LATINMAX 256
  44. #define        KUTENMAX 8407
  45. #define        KSCMAX    8743
  46. #define        GBMAX    8795
  47. #define        tab8859_1    "tab8859_1"
  48. #define        tab8859_2    "tab8859_2"
  49. #define        tab8859_3    "tab8859_3"
  50. #define        tab8859_4    "tab8859_4"
  51. #define        tab8859_5    "tab8859_5"
  52. #define        tab8859_6    "tab8859_6"
  53. #define        tab8859_7    "tab8859_7"
  54. #define        tab8859_8    "tab8859_8"
  55. #define        tab8859_9    "tab8859_9"
  56. #define        tab8859_10    "tab8859_10"
  57. #define        tab8859_15    "tab8859_15"
  58. #define        jis0208        "jis0208"
  59. #define        ksc5601        "ksc5601"
  60. #define        gb2312        "gb2312"
  61. #define        tabkoi8_r    "tabkoi8_r"
  62.  
  63. #define emit(x)    *r = (Rune)x;
  64.  
  65. typedef enum {
  66.     N11n_none,        /* No need to normalize (1byte) */
  67.     N11n_ja,        /* Normalize for ja */
  68.     N11n_ko,        /* Normalize for ko */
  69.     N11n_zh        /* Normalize for zh */
  70. } NormalizeType;
  71.  
  72. typedef struct  _UtfDataRec {
  73.     XlcCharSet    charset;
  74.     void        (*initialize)( /* Table Initializer */
  75. #if NeedNestedPrototypes
  76.     int*,
  77.     wchar_t
  78. #endif
  79.     );
  80.     int*        fromtbl;    /* UTF -> CharSet */
  81.     NormalizeType    type;        /* Normalize type */
  82.     void        (*cstorune)(    /* CharSet -> UTF */
  83. #if NeedNestedPrototypes
  84.     unsigned char,
  85.     Rune*
  86. #endif
  87.     );
  88.     Bool            already_init;
  89.     struct _UtfDataRec    *next;        /* next entry     */
  90. } UtfDataRec, *UtfData;
  91.  
  92. typedef struct _XlcUTFDataRec {
  93.     char    *name;
  94.     XlcSide    side;
  95.     void    (*initialize)(
  96. #if NeedNestedPrototypes
  97.     int*,
  98.     wchar_t
  99. #endif
  100.     );
  101.     void    (*cstorune)(
  102. #if NeedNestedPrototypes
  103.     unsigned char,
  104.     Rune*
  105. #endif
  106.     );
  107.     NormalizeType    type;
  108.     wchar_t        fallback_value;
  109. } XlcUTFDataRec, *XlcUTFData;
  110.  
  111. #define MAX_UTF_CHARSET    (sizeof(default_utf_data)/sizeof(XlcUTFDataRec))
  112.  
  113. #define Char1 Runeself
  114. #define Rune1 Runeself
  115. #define Char21 0xA1
  116. #define Rune21 0x0100
  117. #define Char22 0xF6
  118. #define Rune22 0x4016
  119. #define Char3 0xFC
  120. #define Rune3 0x10000    /* really 0x38E2E */
  121. #define Esc 0xBE
  122. #define Bad Runeerror
  123.  
  124. #define T1    0x00
  125. #define    Tx    0x80
  126. #define T2    0xC0
  127. #define T3    0xE0
  128. #define T4    0xF0
  129. #define T5    0xF8
  130. #define T6    0xFC
  131.  
  132. #define Bit1    7
  133. #define Bitx    6
  134. #define Bit2    5
  135. #define Bit3    4
  136. #define Bit4    3
  137. #define Bit5    2
  138. #define Bit6    2
  139.  
  140. #define Mask1    (1<<Bit1)-1
  141. #define Maskx    (1<<Bitx)-1
  142. #define Mask2    (1<<Bit2)-1
  143. #define Mask3    (1<<Bit3)-1
  144. #define Mask4    (1<<Bit4)-1
  145. #define Mask5    (1<<Bit5)-1
  146. #define Mask6    (1<<Bit6)-1
  147.  
  148. #define Wchar1    (1<<Bit1)-1
  149. #define Wchar2    (1<<(Bit2+Bitx))-1
  150. #define Wchar3    (1<<(Bit3+2*Bitx))-1
  151. #define Wchar4    (1<<(Bit4+3*Bitx))-1
  152. #define Wchar5    (1<<(Bit5+4*Bitx))-1
  153.  
  154. #ifndef    EILSEQ
  155. #define EILSEQ  123
  156. #endif
  157.  
  158. #define J2S(_h, _l) { \
  159.         /* lower: 21-7e >> 40-9d,9e-fb >> 40-7e,(skip 7f),80-fc */ \
  160.         if (((_l) += (((_h)-- % 2) ? 0x1f : 0x7d)) > 0x7e) (_l)++; \
  161.         /* upper: 21-7e >> 81-af >> 81-9f,(skip a0-df),e0-ef */ \
  162.         if (((_h) = ((_h) / 2 + 0x71)) > 0x9f) (_h) += 0x40; \
  163. }
  164. #define S2J(_h, _l) { \
  165.         /* lower: 40-7e,80-fc >> 21-5f,61-dd >> 21-7e,7f-dc */ \
  166.         if (((_l) -= 0x1f) > 0x60) (_l)--; \
  167.         /* upper: 81-9f,e0-ef >> 00-1e,5f-6e >> 00-2e >> 21-7d */ \
  168.         if (((_h) -= 0x81) > 0x5e) (_h) -= 0x40; (_h) *= 2, (_h) += 0x21; \
  169.         /* upper: ,21-7d >> ,22-7e ; lower: ,7f-dc >> ,21-7e */ \
  170.         if ((_l) > 0x7e) (_h)++, (_l) -= 0x5e; \
  171. }
  172. #define ISJKANA(_b)     (0xa0 <= (_b) && (_b) < 0xe0)
  173. #define CANS2JH(_h)     ((0x81 <= (_h) && (_h) < 0xf0) && !ISJKANA(_h))
  174. #define CANS2JL(_l)     (0x40 <= (_l) && (_l) < 0xfd && (_l) != 0x7f)
  175. #define CANS2J(_h, _l)  (CANS2JH(_h) && CANS2JL(_l))
  176.  
  177.