mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-27 18:50:47 +00:00
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@23795 72102866-910b-0410-8b05-ffd578937521
336 lines
5.8 KiB
C
336 lines
5.8 KiB
C
/* Created by Richard Frith-Macdonald <rfm@gnu.org> on 2002 Jan 24 */
|
|
/*
|
|
Copyright (C) 2005 Free Software Foundation
|
|
|
|
Copying and distribution of this file, with or without modification,
|
|
are permitted in any medium without royalty provided the copyright
|
|
notice and this notice are preserved.
|
|
*/
|
|
|
|
|
|
// GSM0338 to Unicode maping
|
|
|
|
static const unsigned int GSM0338_conv_base = 0x00;
|
|
static unichar GSM0338_char_to_uni_table[] =
|
|
{
|
|
0x0040,
|
|
0x00A3,
|
|
0x0024,
|
|
0x00A5,
|
|
0x00E8,
|
|
0x00E9,
|
|
0x00F9,
|
|
0x00EC,
|
|
0x00F2,
|
|
0x00E7,
|
|
0x000A,
|
|
0x00D8,
|
|
0x00F8,
|
|
0x000D,
|
|
0x00C5,
|
|
0x00E5,
|
|
0x0394,
|
|
0x005F,
|
|
0x03A6,
|
|
0x0393,
|
|
0x039B,
|
|
0x03A9,
|
|
0x03A0,
|
|
0x03A8,
|
|
0x03A3,
|
|
0x0398,
|
|
0x039E,
|
|
0x00A0,
|
|
0x00C6,
|
|
0x00E6,
|
|
0x00DF,
|
|
0x00C9,
|
|
0x0020,
|
|
0x0021,
|
|
0x0022,
|
|
0x0023,
|
|
0x00A4,
|
|
0x0025,
|
|
0x0026,
|
|
0x0027,
|
|
0x0028,
|
|
0x0029,
|
|
0x002A,
|
|
0x002B,
|
|
0x002C,
|
|
0x002D,
|
|
0x002E,
|
|
0x002F,
|
|
0x0030,
|
|
0x0031,
|
|
0x0032,
|
|
0x0033,
|
|
0x0034,
|
|
0x0035,
|
|
0x0036,
|
|
0x0037,
|
|
0x0038,
|
|
0x0039,
|
|
0x003A,
|
|
0x003B,
|
|
0x003C,
|
|
0x003D,
|
|
0x003E,
|
|
0x003F,
|
|
0x00A1,
|
|
0x0041,
|
|
0x0042,
|
|
0x0043,
|
|
0x0044,
|
|
0x0045,
|
|
0x0046,
|
|
0x0047,
|
|
0x0048,
|
|
0x0049,
|
|
0x004A,
|
|
0x004B,
|
|
0x004C,
|
|
0x004D,
|
|
0x004E,
|
|
0x004F,
|
|
0x0050,
|
|
0x0051,
|
|
0x0052,
|
|
0x0053,
|
|
0x0054,
|
|
0x0055,
|
|
0x0056,
|
|
0x0057,
|
|
0x0058,
|
|
0x0059,
|
|
0x005A,
|
|
0x00C4,
|
|
0x00D6,
|
|
0x00D1,
|
|
0x00DC,
|
|
0x00A7,
|
|
0x00BF,
|
|
0x0061,
|
|
0x0062,
|
|
0x0063,
|
|
0x0064,
|
|
0x0065,
|
|
0x0066,
|
|
0x0067,
|
|
0x0068,
|
|
0x0069,
|
|
0x006A,
|
|
0x006B,
|
|
0x006C,
|
|
0x006D,
|
|
0x006E,
|
|
0x006F,
|
|
0x0070,
|
|
0x0071,
|
|
0x0072,
|
|
0x0073,
|
|
0x0074,
|
|
0x0075,
|
|
0x0076,
|
|
0x0077,
|
|
0x0078,
|
|
0x0079,
|
|
0x007A,
|
|
0x00E4,
|
|
0x00F6,
|
|
0x00F1,
|
|
0x00FC,
|
|
0x00E0
|
|
};
|
|
|
|
static _ucc_ GSM0338_uni_to_char_table[] =
|
|
{
|
|
{0x000A,0x0A,},
|
|
{0x000D,0x0D,},
|
|
{0x0020,0x20,},
|
|
{0x0021,0x21,},
|
|
{0x0022,0x22,},
|
|
{0x0023,0x23,},
|
|
{0x0024,0x02,},
|
|
{0x0025,0x25,},
|
|
{0x0026,0x26,},
|
|
{0x0027,0x27,},
|
|
{0x0028,0x28,},
|
|
{0x0029,0x29,},
|
|
{0x002A,0x2A,},
|
|
{0x002B,0x2B,},
|
|
{0x002C,0x2C,},
|
|
{0x002D,0x2D,},
|
|
{0x002E,0x2E,},
|
|
{0x002F,0x2F,},
|
|
{0x0030,0x30,},
|
|
{0x0031,0x31,},
|
|
{0x0032,0x32,},
|
|
{0x0033,0x33,},
|
|
{0x0034,0x34,},
|
|
{0x0035,0x35,},
|
|
{0x0036,0x36,},
|
|
{0x0037,0x37,},
|
|
{0x0038,0x38,},
|
|
{0x0039,0x39,},
|
|
{0x003A,0x3A,},
|
|
{0x003B,0x3B,},
|
|
{0x003C,0x3C,},
|
|
{0x003D,0x3D,},
|
|
{0x003E,0x3E,},
|
|
{0x003F,0x3F,},
|
|
{0x0040,0x00,},
|
|
{0x0041,0x41,},
|
|
{0x0042,0x42,},
|
|
{0x0043,0x43,},
|
|
{0x0044,0x44,},
|
|
{0x0045,0x45,},
|
|
{0x0046,0x46,},
|
|
{0x0047,0x47,},
|
|
{0x0048,0x48,},
|
|
{0x0049,0x49,},
|
|
{0x004A,0x4A,},
|
|
{0x004B,0x4B,},
|
|
{0x004C,0x4C,},
|
|
{0x004D,0x4D,},
|
|
{0x004E,0x4E,},
|
|
{0x004F,0x4F,},
|
|
{0x0050,0x50,},
|
|
{0x0051,0x51,},
|
|
{0x0052,0x52,},
|
|
{0x0053,0x53,},
|
|
{0x0054,0x54,},
|
|
{0x0055,0x55,},
|
|
{0x0056,0x56,},
|
|
{0x0057,0x57,},
|
|
{0x0058,0x58,},
|
|
{0x0059,0x59,},
|
|
{0x005A,0x5A,},
|
|
{0x005F,0x11,},
|
|
{0x0061,0x61,},
|
|
{0x0062,0x62,},
|
|
{0x0063,0x63,},
|
|
{0x0064,0x64,},
|
|
{0x0065,0x65,},
|
|
{0x0066,0x66,},
|
|
{0x0067,0x67,},
|
|
{0x0068,0x68,},
|
|
{0x0069,0x69,},
|
|
{0x006A,0x6A,},
|
|
{0x006B,0x6B,},
|
|
{0x006C,0x6C,},
|
|
{0x006D,0x6D,},
|
|
{0x006E,0x6E,},
|
|
{0x006F,0x6F,},
|
|
{0x0070,0x70,},
|
|
{0x0071,0x71,},
|
|
{0x0072,0x72,},
|
|
{0x0073,0x73,},
|
|
{0x0074,0x74,},
|
|
{0x0075,0x75,},
|
|
{0x0076,0x76,},
|
|
{0x0077,0x77,},
|
|
{0x0078,0x78,},
|
|
{0x0079,0x79,},
|
|
{0x007A,0x7A,},
|
|
{0x00A0,0x20,}, /* Map unicode no-break-space to gsm space */
|
|
{0x00A1,0x40,},
|
|
{0x00A3,0x01,},
|
|
{0x00A4,0x24,},
|
|
{0x00A5,0x03,},
|
|
{0x00A7,0x5F,},
|
|
{0x00BF,0x60,},
|
|
{0x00C4,0x5B,},
|
|
{0x00C5,0x0E,},
|
|
{0x00C6,0x1C,},
|
|
{0x00C9,0x1F,},
|
|
{0x00D1,0x5D,},
|
|
{0x00D6,0x5C,},
|
|
{0x00D8,0x0B,},
|
|
{0x00DC,0x5E,},
|
|
{0x00DF,0x1E,},
|
|
{0x00E0,0x7F,},
|
|
{0x00E4,0x7B,},
|
|
{0x00E5,0x0F,},
|
|
{0x00E6,0x1D,},
|
|
{0x00E7,0x09,},
|
|
{0x00E8,0x04,},
|
|
{0x00E9,0x05,},
|
|
{0x00EC,0x07,},
|
|
{0x00F1,0x7D,},
|
|
{0x00F2,0x08,},
|
|
{0x00F6,0x7C,},
|
|
{0x00F8,0x0C,},
|
|
{0x00F9,0x06,},
|
|
{0x00FC,0x7E,},
|
|
{0x0393,0x13,},
|
|
{0x0394,0x10,},
|
|
{0x0398,0x19,},
|
|
{0x039B,0x14,},
|
|
{0x039E,0x1A,},
|
|
{0x03A0,0x16,},
|
|
{0x03A3,0x18,},
|
|
{0x03A6,0x12,},
|
|
{0x03A8,0x17,},
|
|
{0x03A9,0x15,}
|
|
};
|
|
#define GSM0338_tsize (sizeof(GSM0338_uni_to_char_table)/sizeof(_ucc_))
|
|
|
|
static _ucc_ GSM0338_escapes[] =
|
|
{
|
|
{0x000C,0x0A}, /* Form feed */
|
|
{0x005B,0x3C}, /* '[' */
|
|
{0x005C,0x2F}, /* '\\' */
|
|
{0x005D,0x3E}, /* ']' */
|
|
{0x005E,0x14}, /* '^' */
|
|
{0x007B,0x28}, /* '{' */
|
|
{0x007C,0x40}, /* '|' */
|
|
{0x007D,0x29}, /* '}' */
|
|
{0x007E,0x3D}, /* '~' */
|
|
{0x20AC,0x65} /* Euro symbol */
|
|
};
|
|
|
|
#define GSM0338_esize (sizeof(GSM0338_escapes)/sizeof(_ucc_))
|
|
|
|
/*
|
|
* Some of these conversions should not be needed because they are
|
|
* already handled by escape sequences ... I put them here so we can
|
|
* support two varieties of the GSM alphabet. The official one, and
|
|
* a cut down version suitable for use when delivering data to phones
|
|
* which don't support escape sequences.
|
|
*/
|
|
static _ucc_ GSM0338_lossy[] =
|
|
{
|
|
{0x005B,0x3C}, /* '[' => '<' */
|
|
{0x005C,0x2F}, /* '\\' => '/' */
|
|
{0x005D,0x3E}, /* ']' => '>' */
|
|
{0x005E,0x14}, /* '^' => lambda */
|
|
{0x0060,0x27}, /* '`' => '\'' */
|
|
{0x007B,0x28}, /* '{' => '(' */
|
|
{0x007C,0x40}, /* '|' => 'i' */
|
|
{0x007D,0x29}, /* '}' => ')' */
|
|
{0x007E,0x3D}, /* '~' => '=' */
|
|
{0x00C7,0x09}, /* C cedilla */
|
|
{0x0391,0x41}, /* Alpha */
|
|
{0x0392,0x42}, /* Beta */
|
|
{0x0395,0x45}, /* Epsilon */
|
|
{0x0396,0x5A}, /* Zeta */
|
|
{0x0397,0x48}, /* Eta */
|
|
{0x0399,0x49}, /* Iota */
|
|
{0x039A,0x4B}, /* Kappa */
|
|
{0x039C,0x4D}, /* Mu */
|
|
{0x039D,0x4E}, /* Nu */
|
|
{0x039F,0x4F}, /* Omicron */
|
|
{0x03A1,0x50}, /* Rho */
|
|
{0x03A4,0x54}, /* Tau */
|
|
{0x03A5,0x55}, /* Upsilon */
|
|
{0x03A7,0x58}, /* Chi */
|
|
{0x2014,0x2D}, /* Em-dash */
|
|
{0x2018,0x27}, /* left single quote */
|
|
{0x2019,0x27}, /* right single quote */
|
|
{0x201C,0x22}, /* left double quote */
|
|
{0x201D,0x22} /* right double quote */
|
|
};
|
|
|
|
#define GSM0338_lsize (sizeof(GSM0338_lossy)/sizeof(_ucc_))
|
|
|