home *** CD-ROM | disk | FTP | other *** search
/ Tools / WinSN5.0Ver.iso / NETSCAP.50 / WIN1998.ZIP / ns / lib / libi18n / dblower.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-04-08  |  10.3 KB  |  344 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. /*    dblower.c    */
  19. /*
  20.     This function contain the doublebyte to lower table which need to implement function in
  21.     intlcomp.c.
  22.     None of the function in this file should be made public
  23.     The interface function is INTL_GetDoubleByteToLowerMap() and it should only be called 
  24.     inside libi18n
  25. */
  26. #include "intlpriv.h"
  27. #include "pintlcmp.h"
  28.  
  29. PRIVATE DoubleByteToLowerMap lower_lookup_none[]=
  30. {    
  31.     { 0x00, 0x00, 0x00, 0x00, 0x00 }    /* Terminator */
  32. };
  33.  
  34. #ifndef XP_UNIX
  35. PRIVATE DoubleByteToLowerMap lower_lookup_sjis[]=
  36. {    
  37.     /*    Full-width Latin */
  38.     { 0x82, 0x60, 0x7a, 0x82, 0x81 },    
  39.     
  40.     /*    Map Full-width Hiragana to  Full-width Katakana */
  41.     { 0x82, 0x9f, 0x9f, 0x83, 0x41 },    /*    A    */
  42.     { 0x82, 0xa0, 0xa0, 0x83, 0x41 },
  43.  
  44.     { 0x82, 0xa1, 0xa1, 0x83, 0x43 },    /*    I    */
  45.     { 0x82, 0xa2, 0xa2, 0x83, 0x43 },
  46.  
  47.     { 0x82, 0xa3, 0xa3, 0x83, 0x45 },    /*    U    */
  48.     { 0x82, 0xa4, 0xa4, 0x83, 0x45 },
  49.  
  50.     { 0x82, 0xa5, 0xa5, 0x83, 0x47 },    /*    E    */
  51.     { 0x82, 0xa6, 0xa6, 0x83, 0x47 },
  52.  
  53.     { 0x82, 0xa7, 0xa7, 0x83, 0x49 },    /*    O    */
  54.     { 0x82, 0xa8, 0xa8, 0x83, 0x49 },
  55.     
  56.     { 0x82, 0xa9, 0xc0, 0x83, 0x4a },    /* KA - DI */
  57.  
  58.     { 0x82, 0xc1, 0xc1, 0x83, 0x63 },    /* TU */
  59.     { 0x82, 0xc2, 0xc2, 0x83, 0x63 },
  60.  
  61.     { 0x82, 0xc3, 0xdd, 0x83, 0x64 },    /* DU - MI */
  62.     { 0x82, 0xde, 0xe0, 0x83, 0x80 },    /* MU - MO */
  63.  
  64.     { 0x82, 0xe1, 0xe1, 0x83, 0x84 },    /* YA    */
  65.     { 0x82, 0xe2, 0xe2, 0x83, 0x84 },
  66.  
  67.     { 0x82, 0xe3, 0xe3, 0x83, 0x86 },    /* YU    */
  68.     { 0x82, 0xe4, 0xe4, 0x83, 0x86 },
  69.  
  70.     { 0x82, 0xe5, 0xe5, 0x83, 0x88 },    /* YO    */
  71.     { 0x82, 0xe6, 0xe6, 0x83, 0x88 },
  72.  
  73.     { 0x82, 0xe7, 0xeb, 0x83, 0x89 },    /* RA - RO */
  74.  
  75.     { 0x82, 0xec, 0xec, 0x83, 0x8f },    /* WA    */
  76.     { 0x82, 0xed, 0xed, 0x83, 0x8f },
  77.  
  78.     { 0x82, 0xee, 0xf1, 0x83, 0x90 },    /* WI - N */
  79.  
  80.     /*    Map SMALL Full-width Katakana to Full-width Katakana */
  81.     { 0x83, 0x40, 0x40, 0x83, 0x41 },    /*    A    */
  82.     { 0x83, 0x42, 0x42, 0x83, 0x43 },    /*    I    */
  83.     { 0x83, 0x43, 0x44, 0x83, 0x45 },    /*    U    */
  84.     { 0x83, 0x46, 0x46, 0x83, 0x47 },    /*    E    */
  85.     { 0x83, 0x48, 0x47, 0x83, 0x49 },    /*    O    */
  86.     { 0x83, 0x62, 0x62, 0x83, 0x63 },    /* TU    */
  87.     { 0x83, 0x83, 0x83, 0x83, 0x84 },    /* YA    */
  88.     { 0x83, 0x85, 0x85, 0x83, 0x86 },    /* YU    */
  89.     { 0x83, 0x87, 0x87, 0x83, 0x88 },    /* YO    */
  90.     { 0x83, 0x8e, 0x8e, 0x83, 0x8f },    /* WA    */
  91.  
  92.     /*    Full-width Greek */
  93.     { 0x83, 0x9f, 0xb6, 0x83, 0xbf },    
  94.     
  95.     /*    Full-width Cyrillic*/
  96.     { 0x84, 0x40, 0x4e, 0x84, 0x70 },    /* Part 1 */
  97.     { 0x84, 0x4f, 0x61, 0x84, 0x80 },    /* Part 2 */
  98.     
  99.     { 0x00, 0x00, 0x00, 0x00, 0x00 }    /* Terminator */
  100. };
  101. #endif
  102. /* Don't #ifdef XP_UNIX for lower_lookup_eucjp. It is also used by GB2312 */
  103. PRIVATE DoubleByteToLowerMap lower_lookup_eucjp[]=
  104. {    
  105.     /*    Half-width Katakana */
  106.     { SS2,  0xa6, 0xa6, 0xa5, 0xf2 },    /*    WO */
  107.     
  108.     { SS2,  0xa7, 0xa7, 0xa5, 0xa2 },    /*    A */
  109.     { SS2,  0xa8, 0xa8, 0xa5, 0xa4 },    /*    I */
  110.     { SS2,  0xa9, 0xa9, 0xa5, 0xa6 },    /*    U */
  111.     { SS2,  0xaa, 0xaa, 0xa5, 0xa8 },    /*    E */
  112.     { SS2,  0xab, 0xab, 0xa5, 0xaa },    /*    O */
  113.     
  114.     { SS2,  0xac, 0xac, 0xa5, 0xe4 },    /*    YA */
  115.     { SS2,  0xad, 0xad, 0xa5, 0xe6 },    /*    YU */
  116.     { SS2,  0xae, 0xae, 0xa5, 0xe8 },    /*    YO */
  117.     { SS2,  0xaf, 0xaf, 0xa5, 0xc4 },    /*    TU */
  118.     
  119.     { SS2,  0xb1, 0xb1, 0xa5, 0xa2 },    /*    A */
  120.     { SS2,  0xb2, 0xb2, 0xa5, 0xa4 },    /*    I */
  121.     { SS2,  0xb3, 0xb3, 0xa5, 0xa6 },    /*    U */
  122.     { SS2,  0xb4, 0xb4, 0xa5, 0xa8 },    /*    E */
  123.     { SS2,  0xb5, 0xb5, 0xa5, 0xaa },    /*    O */
  124.     
  125.     { SS2,  0xb6, 0xb6, 0xa5, 0xab },    /*    KA */
  126.     { SS2,  0xb7, 0xb7, 0xa5, 0xad },    /*    KI */
  127.     { SS2,  0xb8, 0xb8, 0xa5, 0xaf },    /*    KU */
  128.     { SS2,  0xb9, 0xb9, 0xa5, 0xb1 },    /*    KE */
  129.     { SS2,  0xba, 0xba, 0xa5, 0xb3 },    /*    KO */
  130.     
  131.     { SS2,  0xbb, 0xbb, 0xa5, 0xb5 },    /*    SA */
  132.     { SS2,  0xbc, 0xbc, 0xa5, 0xb7 },    /*    SI */
  133.     { SS2,  0xbd, 0xbd, 0xa5, 0xb9 },    /*    SU */
  134.     { SS2,  0xbe, 0xbe, 0xa5, 0xbb },    /*    SE */
  135.     { SS2,  0xbf, 0xbf, 0xa5, 0xbd },    /*    SO */
  136.     
  137.     { SS2,  0xc0, 0xc0, 0xa5, 0xbf },    /*    TA */
  138.     { SS2,  0xc1, 0xc1, 0xa5, 0xc1 },    /*    TI */
  139.     { SS2,  0xc2, 0xc2, 0xa5, 0xc4 },    /*    TU */
  140.     { SS2,  0xc3, 0xc3, 0xa5, 0xc6 },    /*    TE */
  141.     { SS2,  0xc4, 0xc4, 0xa5, 0xc8 },    /*    TO */
  142.     
  143.     { SS2,  0xc5, 0xc9, 0xa5, 0xca },    /*    NA - NO */
  144.     
  145.     { SS2,  0xca, 0xca, 0xa5, 0xcf },    /*    HA */
  146.     { SS2,  0xcb, 0xcb, 0xa5, 0xd2 },    /*    HI */
  147.     { SS2,  0xcc, 0xcc, 0xa5, 0xd5 },    /*    HU */
  148.     { SS2,  0xcd, 0xcd, 0xa5, 0xd8 },    /*    HE */
  149.     { SS2,  0xce, 0xce, 0xa5, 0xdb },    /*    HO */
  150.     
  151.     { SS2,  0xcf, 0xd3, 0xa5, 0xde },    /*    MA - MO */
  152.     
  153.     { SS2,  0xd4, 0xd4, 0xa5, 0xe4 },    /*    YA */
  154.     { SS2,  0xd5, 0xd5, 0xa5, 0xe6 },    /*    YU */
  155.     { SS2,  0xd6, 0xd6, 0xa5, 0xe8 },    /*    YO */
  156.  
  157.     { SS2,  0xd7, 0xdb, 0xa5, 0xe9 },    /*    RA - RO */
  158.  
  159.     { SS2,  0xdc, 0xdc, 0xa5, 0xef },    /*    WA */
  160.  
  161.     { SS2,  0xdd, 0xdd, 0xa5, 0xf3 },    /*    N */
  162.     
  163.     /*    Full-width Latin */
  164.     { 0xa3, 0xc1, 0xda, 0xa3, 0xe1 },    
  165.     
  166.     /*    Map Full-width Hiragana to  Full-width Katakana */
  167.     { 0xa4, 0xa1, 0xa1, 0xa5, 0xa2 },    /*    A    */
  168.     { 0xa4, 0xa2, 0xa2, 0xa5, 0xa2 },
  169.  
  170.     { 0xa4, 0xa3, 0xa3, 0xa5, 0xa4 },    /*    I    */
  171.     { 0xa4, 0xa4, 0xa4, 0xa5, 0xa4 },
  172.  
  173.     { 0xa4, 0xa5, 0xa5, 0xa5, 0xa6 },    /*    U    */
  174.     { 0xa4, 0xa6, 0xa6, 0xa5, 0xa6 },
  175.  
  176.     { 0xa4, 0xa7, 0xa7, 0xa5, 0xa8 },    /*    E    */
  177.     { 0xa4, 0xa8, 0xa8, 0xa5, 0xa8 },
  178.  
  179.     { 0xa4, 0xa9, 0xa9, 0xa5, 0xaa },    /*    O    */
  180.     { 0xa4, 0xaa, 0xaa, 0xa5, 0xaa },    
  181.     
  182.     { 0xa4, 0xab, 0xc2, 0xa5, 0xab},    /* KA - DI */
  183.  
  184.     { 0xa4, 0xc3, 0xc3, 0xa5, 0xc4 },    /* TU */
  185.     { 0xa4, 0xc4, 0xc4, 0xa5, 0xc4 },
  186.  
  187.     { 0xa4, 0xc5, 0xe2, 0xa5, 0xc5 },    /* DU - MO */
  188.  
  189.     { 0xa4, 0xe3, 0xe3, 0xa5, 0xe4 },    /* YA    */
  190.     { 0xa4, 0xe4, 0xe4, 0xa5, 0xe4 },
  191.  
  192.     { 0xa4, 0xe5, 0xe5, 0xa5, 0xe6 },    /* YU    */
  193.     { 0xa4, 0xe6, 0xe6, 0xa5, 0xe6 },
  194.  
  195.     { 0xa4, 0xe7, 0xe7, 0xa5, 0xe8 },    /* YO    */
  196.     { 0xa4, 0xe8, 0xe8, 0xa5, 0xe8 },
  197.  
  198.     { 0xa4, 0xe9, 0xed, 0xa5, 0xe9},    /* RA - RO */
  199.  
  200.     { 0xa4, 0xee, 0xee, 0xa5, 0xef },    /* WA    */
  201.     { 0xa4, 0xef, 0xef, 0xa5, 0xef },
  202.  
  203.     { 0xa4, 0xf0, 0xf3, 0xa5, 0xf0 },    /* WI - N */
  204.     
  205.     /*    Map SMALL Full-width Katakana to Full-width Katakana */
  206.     { 0xa5, 0xa1, 0xa1, 0xa5, 0xa2 },    /*    A    */
  207.     { 0xa5, 0xa3, 0xa3, 0xa5, 0xa4 },    /*    I    */
  208.     { 0xa5, 0xa5, 0xa5, 0xa5, 0xa6 },    /*    U    */
  209.     { 0xa5, 0xa7, 0xa7, 0xa5, 0xa8 },    /*    E    */
  210.     { 0xa5, 0xa9, 0xa9, 0xa5, 0xaa },    /*    O    */
  211.     { 0xa5, 0xc3, 0xc3, 0xa5, 0xc4 },    /* TU    */
  212.     { 0xa5, 0xe3, 0xe3, 0xa5, 0xe4 },    /* YA    */
  213.     { 0xa5, 0xe5, 0xe5, 0xa5, 0xe6 },    /* YU    */
  214.     { 0xa5, 0xe7, 0xe7, 0xa5, 0xe8 },    /* YO    */
  215.     { 0xa5, 0xee, 0xee, 0xa5, 0xef },    /* WA    */
  216.     
  217.     /*    Full-width Greek */
  218.     { 0xa6, 0xa1, 0xb8, 0xa6, 0xc1 },    
  219.     /*    Full-width Cyrillic*/
  220.     { 0xa7, 0xa1, 0xc1, 0xa7, 0xd1 },    
  221.  
  222.     { 0x00, 0x00, 0x00, 0x00, 0x00 }    /* Terminator */
  223. };    
  224. PRIVATE DoubleByteToLowerMap lower_lookup_big5[]=
  225. {    
  226.     /*    Full-width Latin */
  227.     { 0xa2, 0xcf, 0xe4, 0xa2, 0xe9 },    /* Part 1 A-V */
  228.     { 0xa2, 0xe5, 0xe8, 0xa3, 0x40 },    /* Part 2 W-Z */
  229.     
  230.     /*    Full-width Greek */
  231.     { 0xa3, 0x44, 0x5b, 0xa3, 0x5c },
  232.  
  233.     { 0x00, 0x00, 0x00, 0x00, 0x00 }    /* Terminator */
  234. };    
  235. PRIVATE DoubleByteToLowerMap lower_lookup_cns11643_1[]=
  236. {    
  237.     /*    Roman Number  */
  238.     { 0xa4, 0xab, 0xb4, 0xa6, 0xb5 },    
  239.     
  240.     /*    Full-width Latin */
  241.     { 0xa4, 0xc1, 0xda, 0xa4, 0xdb },    
  242.     
  243.     /*    Full-width Greek */
  244.     { 0xa4, 0xf5, 0xfe, 0xa5, 0xaf },    /* Part 1 Alpha - kappa */
  245.     { 0xa5, 0xa1, 0xae, 0xa5, 0xb9 },    /* Part 2 Lamda - Omega */
  246.  
  247.     { 0x00, 0x00, 0x00, 0x00, 0x00 }    /* Terminator */
  248. };    
  249. PRIVATE DoubleByteToLowerMap lower_lookup_ksc5601[]=
  250. {    
  251.     /*    Full-width Latin */
  252.     { 0xa3, 0xc1, 0xda, 0xa3, 0xe1 },    
  253.  
  254.     /*    Full-width Roman Number */
  255.     { 0xa5, 0xb0, 0xb9, 0xa5, 0xa1 },    
  256.  
  257.     /*    Full-width Greek */
  258.     { 0xa5, 0xc1, 0xd8, 0xa5, 0xe1 },    
  259.  
  260.     /*    Map Full-width Hiragana to  Full-width Katakana */
  261.     { 0xaa, 0xa1, 0xa1, 0xab, 0xa2 },    /*    A    */
  262.     { 0xaa, 0xa2, 0xa2, 0xab, 0xa2 },
  263.  
  264.     { 0xaa, 0xa3, 0xa3, 0xab, 0xa4 },    /*    I    */
  265.     { 0xaa, 0xa4, 0xa4, 0xab, 0xa4 },
  266.  
  267.     { 0xaa, 0xa5, 0xa5, 0xab, 0xa6 },    /*    U    */
  268.     { 0xaa, 0xa6, 0xa6, 0xab, 0xa6 },
  269.  
  270.     { 0xaa, 0xa7, 0xa7, 0xab, 0xa8 },    /*    E    */
  271.     { 0xaa, 0xa8, 0xa8, 0xab, 0xa8 },
  272.  
  273.     { 0xaa, 0xa9, 0xa9, 0xab, 0xaa },    /*    O    */
  274.     { 0xaa, 0xaa, 0xaa, 0xab, 0xaa },    
  275.     
  276.     { 0xaa, 0xab, 0xc2, 0xab, 0xab},    /* KA - DI */
  277.  
  278.     { 0xaa, 0xc3, 0xc3, 0xab, 0xc4 },    /* TU */
  279.     { 0xaa, 0xc4, 0xc4, 0xab, 0xc4 },
  280.  
  281.     { 0xaa, 0xc5, 0xe2, 0xab, 0xc5 },    /* DU - MO */
  282.  
  283.     { 0xaa, 0xe3, 0xe3, 0xab, 0xe4 },    /* YA    */
  284.     { 0xaa, 0xe4, 0xe4, 0xab, 0xe4 },
  285.  
  286.     { 0xaa, 0xe5, 0xe5, 0xab, 0xe6 },    /* YU    */
  287.     { 0xaa, 0xe6, 0xe6, 0xab, 0xe6 },
  288.  
  289.     { 0xaa, 0xe7, 0xe7, 0xab, 0xe8 },    /* YO    */
  290.     { 0xaa, 0xe8, 0xe8, 0xab, 0xe8 },
  291.  
  292.     { 0xaa, 0xe9, 0xed, 0xab, 0xe9},    /* RA - RO */
  293.  
  294.     { 0xaa, 0xee, 0xee, 0xab, 0xef },    /* WA    */
  295.     { 0xaa, 0xef, 0xef, 0xab, 0xef },
  296.  
  297.     { 0xaa, 0xf0, 0xf3, 0xab, 0xf0 },    /* WI - N */
  298.     
  299.     /*    Map SMALL Full-width Katakana to Full-width Katakana */
  300.     { 0xab, 0xa1, 0xa1, 0xab, 0xa2 },    /*    A    */
  301.     { 0xab, 0xa3, 0xa3, 0xab, 0xa4 },    /*    I    */
  302.     { 0xab, 0xa5, 0xa5, 0xab, 0xa6 },    /*    U    */
  303.     { 0xab, 0xa7, 0xa7, 0xab, 0xa8 },    /*    E    */
  304.     { 0xab, 0xa9, 0xa9, 0xab, 0xaa },    /*    O    */
  305.     { 0xab, 0xc3, 0xc3, 0xab, 0xc4 },    /* TU    */
  306.     { 0xab, 0xe3, 0xe3, 0xab, 0xe4 },    /* YA    */
  307.     { 0xab, 0xe5, 0xe5, 0xab, 0xe6 },    /* YU    */
  308.     { 0xab, 0xe7, 0xe7, 0xab, 0xe8 },    /* YO    */
  309.     { 0xab, 0xee, 0xee, 0xab, 0xef },    /* WA    */
  310.  
  311.     /*    Full-width Cyrillic*/
  312.     { 0xac, 0xa1, 0xc1, 0xac, 0xd1 },    
  313.     
  314.     { 0x00, 0x00, 0x00, 0x00, 0x00 }    /* Terminator */
  315. };
  316.  
  317. MODULE_PRIVATE DoubleByteToLowerMap *INTL_GetDoubleByteToLowerMap(int16 csid)
  318. {
  319.     switch(csid)
  320.     {
  321. #ifndef XP_UNIX
  322.         case CS_SJIS:
  323.             return lower_lookup_sjis;
  324. #else
  325.         case CS_EUCJP:
  326.             return lower_lookup_eucjp;
  327. #endif
  328.         case CS_BIG5:        
  329.             return lower_lookup_big5;
  330.         case CS_CNS_8BIT:        
  331.             return lower_lookup_cns11643_1;
  332.         case CS_GB_8BIT:    
  333.             return lower_lookup_eucjp;    /*    The to_lower mapping for GB 2312 and JIS0208 are exactly the same */
  334.                                         /*  We just use the same table here.                                  */
  335.         case CS_KSC_8BIT:    
  336.             return lower_lookup_ksc5601;
  337.         default:
  338.             return lower_lookup_none;
  339.     }
  340. }
  341.  
  342.  
  343.  
  344.