glibc/iconvdata/jisx0213.h
Ulrich Drepper 5d32be9a0a Update.
2004-08-02  Jakub Jelinek  <jakub@redhat.com>

	* iconvdata/ibm932.c (BODY): Avoid binary search for ch >= 0xffff.
	Always treat high as highest number in range + 1.
	* iconvdata/ibm943.c (BODY): Likewise.

2004-07-31  Bruno Haible  <bruno@clisp.org>

	* iconvdata/JISX0213.TXT: Updated to JISX0213 plane 1 version 2004.
	* iconvdata/jisx0213.c (__jisx0213_to_ucs_main,
	__jisx0213_to_ucs_pagestart, __jisx0213_from_ucs_level1,
	__jisx0213_from_ucs_level2): Regenerated.
	* iconvdata/jisx0213.h (jisx0213_added_in_2004_p): New function.
	* iconvdata/iso-2022-jp-3.c (JISX0213_1_2000_set): Renamed from
	JISX0213_1_set.
	(JISX0213_1_2004_set): New enum value.
	(BODY for FROM_LOOP): Treat ESC $ ( Q like ESC $ ( O.
	(BODY for TO_LOOP): For JISX 0213 plane 1 characters, emit ESC $ ( O
	when possible, ESC $ ( Q when needed.
	* iconvdata/testdata/EUC-JISX0213: Add the 10 new characters.
	* iconvdata/testdata/EUC-JISX0213..UTF8: Update.
	* iconvdata/testdata/SHIFT_JISX0213: Add the 10 new characters.
	* iconvdata/testdata/SHIFT_JISX0213..UTF8: Update.
	* iconvdata/testdata/ISO-2022-JP-3: Add the 10 new JISX0213 characters.
	* iconvdata/testdata/ISO-2022-JP-3..UTF8: Update.

2004-07-22  Bruno Haible  <bruno@clisp.org>

	* iconvdata/gconv-modules (ISO-8859-7): Add alias ISO_8859-7:2003.
2004-08-02 22:33:57 +00:00

104 lines
2.9 KiB
C

/* Functions for JISX0213 conversion.
Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Bruno Haible <bruno@clisp.org>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#ifndef _JISX0213_H
#define _JISX0213_H 1
#include <stdint.h>
extern const uint16_t __jisx0213_to_ucs_combining[][2];
extern const uint16_t __jisx0213_to_ucs_main[120 * 94];
extern const uint32_t __jisx0213_to_ucs_pagestart[];
extern const int16_t __jisx0213_from_ucs_level1[2715];
extern const uint16_t __jisx0213_from_ucs_level2[];
#define NELEMS(arr) (sizeof (arr) / sizeof (arr[0]))
static inline uint32_t
__attribute ((always_inline))
jisx0213_to_ucs4 (unsigned int row, unsigned int col)
{
uint32_t val;
if (row >= 0x121 && row <= 0x17e)
row -= 289;
else if (row == 0x221)
row -= 451;
else if (row >= 0x223 && row <= 0x225)
row -= 452;
else if (row == 0x228)
row -= 454;
else if (row >= 0x22c && row <= 0x22f)
row -= 457;
else if (row >= 0x26e && row <= 0x27e)
row -= 519;
else
return 0x0000;
if (col >= 0x21 && col <= 0x7e)
col -= 0x21;
else
return 0x0000;
val = __jisx0213_to_ucs_main[row * 94 + col];
val = __jisx0213_to_ucs_pagestart[val >> 8] + (val & 0xff);
if (val == 0xfffd)
val = 0x0000;
return val;
}
static inline uint16_t
__attribute ((always_inline))
ucs4_to_jisx0213 (uint32_t ucs)
{
if (ucs < NELEMS (__jisx0213_from_ucs_level1) << 6)
{
int index1 = __jisx0213_from_ucs_level1[ucs >> 6];
if (index1 >= 0)
return __jisx0213_from_ucs_level2[(index1 << 6) + (ucs & 0x3f)];
}
return 0x0000;
}
static inline int
__attribute ((always_inline))
jisx0213_added_in_2004_p (uint16_t val)
{
/* From JISX 0213:2000 to JISX 0213:2004, 10 characters were added to
plane 1, and plane 2 was left unchanged. See ISO-IR-233. */
switch (val >> 8)
{
case 0x2e:
return val == 0x2e21;
case 0x2f:
return val == 0x2f7e;
case 0x4f:
return val == 0x4f54 || 0x4f7e;
case 0x74:
return val == 0x7427;
case 0x7e:
return val >= 0x7e7a && val <= 0x7e7e;
default:
return 0;
}
}
#endif /* _JISX0213_H */