Add support for the Kazakh RK1048 encoding.
diff --git a/ChangeLog b/ChangeLog
index b219968..0fa83c8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2007-05-25 Bruno Haible <bruno@clisp.org>
+
+ * tools/Makefile (ALL): Add rk1048.h.
+ (rk1048.h): New rule.
+ * lib/encodings.def: Add RK1048.
+ * lib/rk1048.h: New file.
+ * lib/converters.h: Include it.
+ * README, man/iconv_open.3: Add RK1048.
+ * NOTES: Mention RK1048.
+ * tests/RK1048.TXT: New file.
+ * tests/Makefile.in (check): Also test RK1048.
+ Suggested by Timur Birsh <team9@host.kz>.
+
2007-04-24 Bruno Haible <bruno@clisp.org>
* man/iconv_open.3: Tweak explanation of TRANSLIT.
diff --git a/NEWS b/NEWS
index 808e5fe..e3c55bb 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,5 @@
New in 1.12:
+* Added RK1048 converter.
* On AIX, an libiconv no longer causes setlocale() to fail.
* Upgraded EUC-KR, JOHAB to include the Korean postal code sign.
diff --git a/NOTES b/NOTES
index d2382ba..02022af 100644
--- a/NOTES
+++ b/NOTES
@@ -164,6 +164,8 @@
* PT154
We implement this because it is the locale encoding in glibc's Kazakh
locale.
+ * RK1048
+ We implement this because it's a standard in Kazakhstan.
* CP{1250,1251,1252,1253,1254,1255,1256,1257}
We implement these because they are the predominant Windows encodings
in Europe.
diff --git a/README b/README
index d29dd4a..11b4530 100644
--- a/README
+++ b/README
@@ -28,7 +28,7 @@
Tajik
KOI8-T
Kazakh
- PT154
+ PT154, RK1048
Thai
ISO-8859-11, TIS-620, CP874, MacThai
Laotian
diff --git a/lib/converters.h b/lib/converters.h
index 896a5bc..7bc032b 100644
--- a/lib/converters.h
+++ b/lib/converters.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 1999-2002, 2004-2006 Free Software Foundation, Inc.
+ * Copyright (C) 1999-2002, 2004-2007 Free Software Foundation, Inc.
* This file is part of the GNU LIBICONV Library.
*
* The GNU LIBICONV Library is free software; you can redistribute it
@@ -182,6 +182,7 @@
#include "georgian_ps.h"
#include "koi8_t.h"
#include "pt154.h"
+#include "rk1048.h"
#include "mulelao.h"
#include "cp1133.h"
#include "tis620.h"
diff --git a/lib/encodings.def b/lib/encodings.def
index 55fbe37..7a5cdbb 100644
--- a/lib/encodings.def
+++ b/lib/encodings.def
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999-2006 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2007 Free Software Foundation, Inc.
This file is part of the GNU LIBICONV Library.
The GNU LIBICONV Library is free software; you can redistribute it
@@ -599,6 +599,14 @@
pt154,
{ pt154_mbtowc, NULL }, { pt154_wctomb, NULL })
+DEFENCODING(( "RK1048", /* IANA, glibc */
+ "STRK1048-2002", /* IANA */
+ "KZ-1048", /* IANA */
+ "csKZ1048", /* IANA */
+ ),
+ rk1048,
+ { rk1048_mbtowc, NULL }, { rk1048_wctomb, NULL })
+
DEFENCODING(( "MULELAO-1",
),
mulelao,
diff --git a/lib/rk1048.h b/lib/rk1048.h
new file mode 100644
index 0000000..0e1fde8
--- /dev/null
+++ b/lib/rk1048.h
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 1999-2007 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV Library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV Library is distributed in the hope that it will be
+ * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with the GNU LIBICONV Library; see the file COPYING.LIB.
+ * If not, write to the Free Software Foundation, Inc., 51 Franklin Street,
+ * Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/*
+ * RK1048
+ */
+
+static const unsigned short rk1048_2uni[128] = {
+ /* 0x80 */
+ 0x0402, 0x0403, 0x201a, 0x0453, 0x201e, 0x2026, 0x2020, 0x2021,
+ 0x20ac, 0x2030, 0x0409, 0x2039, 0x040a, 0x049a, 0x04ba, 0x040f,
+ /* 0x90 */
+ 0x0452, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
+ 0xfffd, 0x2122, 0x0459, 0x203a, 0x045a, 0x049b, 0x04bb, 0x045f,
+ /* 0xa0 */
+ 0x00a0, 0x04b0, 0x04b1, 0x04d8, 0x00a4, 0x04e8, 0x00a6, 0x00a7,
+ 0x0401, 0x00a9, 0x0492, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x04ae,
+ /* 0xb0 */
+ 0x00b0, 0x00b1, 0x0406, 0x0456, 0x04e9, 0x00b5, 0x00b6, 0x00b7,
+ 0x0451, 0x2116, 0x0493, 0x00bb, 0x04d9, 0x04a2, 0x04a3, 0x04af,
+ /* 0xc0 */
+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
+ 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
+ /* 0xd0 */
+ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
+ 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
+ /* 0xe0 */
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
+ 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
+ /* 0xf0 */
+ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
+ 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
+};
+
+static int
+rk1048_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
+{
+ unsigned char c = *s;
+ if (c < 0x80) {
+ *pwc = (ucs4_t) c;
+ return 1;
+ }
+ else {
+ unsigned short wc = rk1048_2uni[c-0x80];
+ if (wc != 0xfffd) {
+ *pwc = (ucs4_t) wc;
+ return 1;
+ }
+ }
+ return RET_ILSEQ;
+}
+
+static const unsigned char rk1048_page00[32] = {
+ 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */
+ 0x00, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00, /* 0xa8-0xaf */
+ 0xb0, 0xb1, 0x00, 0x00, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */
+ 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
+};
+static const unsigned char rk1048_page04[240] = {
+ 0x00, 0xa8, 0x80, 0x81, 0x00, 0x00, 0xb2, 0x00, /* 0x00-0x07 */
+ 0x00, 0x8a, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x8f, /* 0x08-0x0f */
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x10-0x17 */
+ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x18-0x1f */
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x20-0x27 */
+ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0x28-0x2f */
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x30-0x37 */
+ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x38-0x3f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x40-0x47 */
+ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0x48-0x4f */
+ 0x00, 0xb8, 0x90, 0x83, 0x00, 0x00, 0xb3, 0x00, /* 0x50-0x57 */
+ 0x00, 0x9a, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x9f, /* 0x58-0x5f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
+ 0x00, 0x00, 0xaa, 0xba, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
+ 0x00, 0x00, 0x8d, 0x9d, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
+ 0x00, 0x00, 0xbd, 0xbe, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0xbf, /* 0xa8-0xaf */
+ 0xa1, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
+ 0x00, 0x00, 0x8e, 0x9e, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
+ 0xa3, 0xbc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
+ 0xa5, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
+};
+static const unsigned char rk1048_page20[48] = {
+ 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */
+ 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */
+ 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
+ 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
+ 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
+};
+static const unsigned char rk1048_page21[24] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb9, 0x00, /* 0x10-0x17 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
+ 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
+};
+
+static int
+rk1048_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0080) {
+ *r = wc;
+ return 1;
+ }
+ else if (wc >= 0x00a0 && wc < 0x00c0)
+ c = rk1048_page00[wc-0x00a0];
+ else if (wc >= 0x0400 && wc < 0x04f0)
+ c = rk1048_page04[wc-0x0400];
+ else if (wc >= 0x2010 && wc < 0x2040)
+ c = rk1048_page20[wc-0x2010];
+ else if (wc == 0x20ac)
+ c = 0x88;
+ else if (wc >= 0x2110 && wc < 0x2128)
+ c = rk1048_page21[wc-0x2110];
+ if (c != 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/man/iconv_open.3 b/man/iconv_open.3
index 8c0f570..1165a88 100644
--- a/man/iconv_open.3
+++ b/man/iconv_open.3
@@ -9,7 +9,7 @@
.\" GNU glibc-2 source code and manual
.\" OpenGroup's Single Unix specification http://www.UNIX-systems.org/online.html
.\"
-.TH ICONV_OPEN 3 "April 24, 2007" "GNU" "Linux Programmer's Manual"
+.TH ICONV_OPEN 3 "May 25, 2007" "GNU" "Linux Programmer's Manual"
.SH NAME
iconv_open \- allocate descriptor for character set conversion
.SH SYNOPSIS
@@ -76,7 +76,7 @@
Kazakh
.nf
.fi
-PT154
+PT154, RK1048
.TP
Thai
.nf
diff --git a/tests/Makefile.in b/tests/Makefile.in
index e721c94..60c6749 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -98,6 +98,7 @@
$(srcdir)/check-stateless $(srcdir) Georgian-PS
$(srcdir)/check-stateless $(srcdir) KOI8-T
$(srcdir)/check-stateless $(srcdir) PT154
+ $(srcdir)/check-stateless $(srcdir) RK1048
$(srcdir)/check-stateless $(srcdir) MuleLao-1
$(srcdir)/check-stateless $(srcdir) CP1133
$(srcdir)/check-stateless $(srcdir) TIS-620
diff --git a/tests/RK1048.TXT b/tests/RK1048.TXT
new file mode 100644
index 0000000..06f185a
--- /dev/null
+++ b/tests/RK1048.TXT
@@ -0,0 +1,255 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x0004
+0x05 0x0005
+0x06 0x0006
+0x07 0x0007
+0x08 0x0008
+0x09 0x0009
+0x0A 0x000A
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x0014
+0x15 0x0015
+0x16 0x0016
+0x17 0x0017
+0x18 0x0018
+0x19 0x0019
+0x1A 0x001A
+0x1B 0x001B
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0020
+0x21 0x0021
+0x22 0x0022
+0x23 0x0023
+0x24 0x0024
+0x25 0x0025
+0x26 0x0026
+0x27 0x0027
+0x28 0x0028
+0x29 0x0029
+0x2A 0x002A
+0x2B 0x002B
+0x2C 0x002C
+0x2D 0x002D
+0x2E 0x002E
+0x2F 0x002F
+0x30 0x0030
+0x31 0x0031
+0x32 0x0032
+0x33 0x0033
+0x34 0x0034
+0x35 0x0035
+0x36 0x0036
+0x37 0x0037
+0x38 0x0038
+0x39 0x0039
+0x3A 0x003A
+0x3B 0x003B
+0x3C 0x003C
+0x3D 0x003D
+0x3E 0x003E
+0x3F 0x003F
+0x40 0x0040
+0x41 0x0041
+0x42 0x0042
+0x43 0x0043
+0x44 0x0044
+0x45 0x0045
+0x46 0x0046
+0x47 0x0047
+0x48 0x0048
+0x49 0x0049
+0x4A 0x004A
+0x4B 0x004B
+0x4C 0x004C
+0x4D 0x004D
+0x4E 0x004E
+0x4F 0x004F
+0x50 0x0050
+0x51 0x0051
+0x52 0x0052
+0x53 0x0053
+0x54 0x0054
+0x55 0x0055
+0x56 0x0056
+0x57 0x0057
+0x58 0x0058
+0x59 0x0059
+0x5A 0x005A
+0x5B 0x005B
+0x5C 0x005C
+0x5D 0x005D
+0x5E 0x005E
+0x5F 0x005F
+0x60 0x0060
+0x61 0x0061
+0x62 0x0062
+0x63 0x0063
+0x64 0x0064
+0x65 0x0065
+0x66 0x0066
+0x67 0x0067
+0x68 0x0068
+0x69 0x0069
+0x6A 0x006A
+0x6B 0x006B
+0x6C 0x006C
+0x6D 0x006D
+0x6E 0x006E
+0x6F 0x006F
+0x70 0x0070
+0x71 0x0071
+0x72 0x0072
+0x73 0x0073
+0x74 0x0074
+0x75 0x0075
+0x76 0x0076
+0x77 0x0077
+0x78 0x0078
+0x79 0x0079
+0x7A 0x007A
+0x7B 0x007B
+0x7C 0x007C
+0x7D 0x007D
+0x7E 0x007E
+0x7F 0x007F
+0x80 0x0402
+0x81 0x0403
+0x82 0x201A
+0x83 0x0453
+0x84 0x201E
+0x85 0x2026
+0x86 0x2020
+0x87 0x2021
+0x88 0x20AC
+0x89 0x2030
+0x8A 0x0409
+0x8B 0x2039
+0x8C 0x040A
+0x8D 0x049A
+0x8E 0x04BA
+0x8F 0x040F
+0x90 0x0452
+0x91 0x2018
+0x92 0x2019
+0x93 0x201C
+0x94 0x201D
+0x95 0x2022
+0x96 0x2013
+0x97 0x2014
+0x99 0x2122
+0x9A 0x0459
+0x9B 0x203A
+0x9C 0x045A
+0x9D 0x049B
+0x9E 0x04BB
+0x9F 0x045F
+0xA0 0x00A0
+0xA1 0x04B0
+0xA2 0x04B1
+0xA3 0x04D8
+0xA4 0x00A4
+0xA5 0x04E8
+0xA6 0x00A6
+0xA7 0x00A7
+0xA8 0x0401
+0xA9 0x00A9
+0xAA 0x0492
+0xAB 0x00AB
+0xAC 0x00AC
+0xAD 0x00AD
+0xAE 0x00AE
+0xAF 0x04AE
+0xB0 0x00B0
+0xB1 0x00B1
+0xB2 0x0406
+0xB3 0x0456
+0xB4 0x04E9
+0xB5 0x00B5
+0xB6 0x00B6
+0xB7 0x00B7
+0xB8 0x0451
+0xB9 0x2116
+0xBA 0x0493
+0xBB 0x00BB
+0xBC 0x04D9
+0xBD 0x04A2
+0xBE 0x04A3
+0xBF 0x04AF
+0xC0 0x0410
+0xC1 0x0411
+0xC2 0x0412
+0xC3 0x0413
+0xC4 0x0414
+0xC5 0x0415
+0xC6 0x0416
+0xC7 0x0417
+0xC8 0x0418
+0xC9 0x0419
+0xCA 0x041A
+0xCB 0x041B
+0xCC 0x041C
+0xCD 0x041D
+0xCE 0x041E
+0xCF 0x041F
+0xD0 0x0420
+0xD1 0x0421
+0xD2 0x0422
+0xD3 0x0423
+0xD4 0x0424
+0xD5 0x0425
+0xD6 0x0426
+0xD7 0x0427
+0xD8 0x0428
+0xD9 0x0429
+0xDA 0x042A
+0xDB 0x042B
+0xDC 0x042C
+0xDD 0x042D
+0xDE 0x042E
+0xDF 0x042F
+0xE0 0x0430
+0xE1 0x0431
+0xE2 0x0432
+0xE3 0x0433
+0xE4 0x0434
+0xE5 0x0435
+0xE6 0x0436
+0xE7 0x0437
+0xE8 0x0438
+0xE9 0x0439
+0xEA 0x043A
+0xEB 0x043B
+0xEC 0x043C
+0xED 0x043D
+0xEE 0x043E
+0xEF 0x043F
+0xF0 0x0440
+0xF1 0x0441
+0xF2 0x0442
+0xF3 0x0443
+0xF4 0x0444
+0xF5 0x0445
+0xF6 0x0446
+0xF7 0x0447
+0xF8 0x0448
+0xF9 0x0449
+0xFA 0x044A
+0xFB 0x044B
+0xFC 0x044C
+0xFD 0x044D
+0xFE 0x044E
+0xFF 0x044F
diff --git a/tools/Makefile b/tools/Makefile
index 27159a6..b0bdfad 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -54,6 +54,7 @@
georgian_ps.h \
koi8_t.h \
pt154.h \
+ rk1048.h \
mulelao.h \
cp1133.h \
tis620.h \
@@ -273,6 +274,9 @@
pt154.h : $(TABLESDIR)/IANA/PTCP154.TXT
./8bit_tab_to_h PT154 pt154 < $<
+rk1048.h : $(TABLESDIR)/IANA/KZ-1048.TXT
+ (echo '#' ; cat $<) | ./8bit_tab_to_h RK1048 rk1048
+
mulelao.h : $(TABLESDIR)/csets-new/MULELAO1.TXT 8bit_tab_to_h
./8bit_tab_to_h MULELAO-1 mulelao < $<