libiconv/1.15: add some files new in the llibiconv sources

This commit is contained in:
Uwe Stöhr 2017-09-10 15:05:28 +02:00
parent cf214f8263
commit 39f15a6b0b
6 changed files with 1437 additions and 0 deletions

372
3rdparty/libiconv/1.15/lib/Makefile.in vendored Normal file
View File

@ -0,0 +1,372 @@
# Makefile for libiconv/lib
#### Start of system configuration section. ####
# Directories used by "make":
srcdir = @srcdir@
# Directories used by "make install":
prefix = @prefix@
local_prefix = /usr/local
exec_prefix = @exec_prefix@
libdir = @libdir@
# Programs used by "make":
CC = @CC@
CFLAGS = @CFLAGS@ @CFLAG_VISIBILITY@
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@ $(LDFLAGS_@WOE32DLL@)
LDFLAGS_yes = -Wl,--export-all-symbols
LDFLAGS_no =
INCLUDES = -I. -I$(srcdir) -I../include -I$(srcdir)/../include -I.. -I$(srcdir)/..
# -DBUILDING_LIBICONV: Change expansion of LIBICONV_DLL_EXPORTED macro.
# -DBUILDING_DLL: Change expansion of RELOCATABLE_DLL_EXPORTED macro.
DEFS = -DLIBDIR=\"$(libdir)\" -DBUILDING_LIBICONV -DBUILDING_DLL \
-DENABLE_RELOCATABLE=1 -DIN_LIBRARY -DINSTALLDIR=\"$(libdir)\" -DNO_XMALLOC \
-Dset_relocation_prefix=libiconv_set_relocation_prefix \
-Drelocate=libiconv_relocate @DEFS@
LIBTOOL = @LIBTOOL@
LIBTOOL_COMPILE = $(LIBTOOL) --mode=compile
LIBTOOL_LINK = $(LIBTOOL) --mode=link
LIBTOOL_INSTALL = $(LIBTOOL) --mode=install
LIBTOOL_UNINSTALL = $(LIBTOOL) --mode=uninstall
# Windows resource compiler (windres). Used via libtool.
RC = @RC@
CP = cp
MV = mv
LN = @LN@
LN_S = @LN_S@
RM = rm -f
# Programs used by "make install":
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
mkinstalldirs = $(SHELL) @top_srcdir@/build-aux/mkinstalldirs
#### End of system configuration section. ####
SHELL = /bin/sh
# Before making a release, change this according to the libtool documentation,
# section "Library interface versions".
LIBICONV_VERSION_INFO = 8:0:6
PACKAGE_VERSION = @VERSION@
# Needed by $(LIBTOOL).
top_builddir = ..
SOURCES = $(srcdir)/iconv.c $(srcdir)/../libcharset/lib/localcharset.c $(srcdir)/relocatable.c
OBJECTS = iconv.lo localcharset.lo relocatable.lo $(OBJECTS_EXP_@WOE32DLL@) $(OBJECTS_RES_@WOE32@)
OBJECTS_EXP_yes = iconv-exports.lo
OBJECTS_EXP_no =
OBJECTS_RES_yes = libiconv.res.lo
OBJECTS_RES_no =
all : libiconv.la
libiconv.la : $(OBJECTS)
$(LIBTOOL_LINK) $(CC) $(LDFLAGS) $(CFLAGS) -o libiconv.la -rpath $(libdir) -version-info $(LIBICONV_VERSION_INFO) -no-undefined $(OBJECTS)
iconv.lo : $(srcdir)/iconv.c $(srcdir)/converters.h \
$(srcdir)/encodings.def $(srcdir)/encodings_aix.def $(srcdir)/encodings_osf1.def $(srcdir)/encodings_dos.def $(srcdir)/encodings_local.def \
$(srcdir)/aliases.h $(srcdir)/aliases_sysaix.h $(srcdir)/aliases_syshpux.h $(srcdir)/aliases_sysosf1.h $(srcdir)/aliases_syssolaris.h \
$(srcdir)/aliases_aix.h $(srcdir)/aliases_aix_sysaix.h \
$(srcdir)/aliases_osf1.h $(srcdir)/aliases_osf1_sysosf1.h \
$(srcdir)/aliases_dos.h \
$(srcdir)/aliases_extra.h \
$(srcdir)/flags.h $(srcdir)/translit.h
$(LIBTOOL_COMPILE) $(CC) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEFS) -c $(srcdir)/iconv.c
localcharset.lo : $(srcdir)/../libcharset/lib/localcharset.c $(srcdir)/relocatable.h
$(LIBTOOL_COMPILE) $(CC) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEFS) -c $(srcdir)/../libcharset/lib/localcharset.c
relocatable.lo : $(srcdir)/relocatable.c $(srcdir)/relocatable.h
$(LIBTOOL_COMPILE) $(CC) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEFS) -c $(srcdir)/relocatable.c
iconv-exports.lo : $(srcdir)/../woe32dll/iconv-exports.c
$(LIBTOOL_COMPILE) $(CC) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEFS) -c $(srcdir)/../woe32dll/iconv-exports.c
libiconv.res.lo : $(srcdir)/../windows/libiconv.rc
$(LIBTOOL_COMPILE) --tag=RC $(RC) `$(SHELL) $(srcdir)/../windows/windres-options --escape $(PACKAGE_VERSION)` -i $(srcdir)/../windows/libiconv.rc -o libiconv.res.lo --output-format=coff
# Installs the library and include files only. Typically called with only
# $(libdir) and $(includedir) - don't use $(prefix) and $(exec_prefix) here.
install-lib : all force
if [ ! -d $(libdir) ] ; then $(mkinstalldirs) $(libdir) ; fi
$(LIBTOOL_INSTALL) $(INSTALL) libiconv.la $(libdir)/libiconv.la
# On AIX, libiconv.a must include the object files of /lib/libiconv.a,
# otherwise the setlocale() call fails when invoked from executables linked
# with -rpath $(libdir), even if linked without -liconv.
install : all force
if [ ! -d $(DESTDIR)$(libdir) ] ; then $(mkinstalldirs) $(DESTDIR)$(libdir) ; fi
$(LIBTOOL_INSTALL) $(INSTALL) libiconv.la $(DESTDIR)$(libdir)/libiconv.la
case "@host_os@" in \
aix*) (cd $(DESTDIR)$(libdir) && \
objects=`ar t libiconv.a`" "`ar t /lib/libiconv.a` && \
ar x libiconv.a && ar x /lib/libiconv.a && \
ar q libiconv.new.a $$objects && \
rm -f $$objects && \
mv -f libiconv.new.a libiconv.a) ;; \
esac
install-strip : install
installdirs : force
if [ ! -d $(DESTDIR)$(libdir) ] ; then $(mkinstalldirs) $(DESTDIR)$(libdir) ; fi
uninstall : force
$(LIBTOOL_UNINSTALL) $(RM) $(DESTDIR)$(libdir)/libiconv.la
check : all
mostlyclean : clean
clean : force
$(RM) *.o *.lo *.a *.la core *.stackdump so_locations
$(RM) -r .libs _libs
distclean : clean
$(RM) Makefile config.h
maintainer-clean : distclean
# List of source files.
SOURCE_FILES = \
Makefile.in config.h.in \
encodings.def \
encodings_aix.def \
encodings_osf1.def \
encodings_dos.def \
encodings_extra.def \
encodings_local.def \
translit.def \
genaliases.c \
genaliases2.c \
genflags.c \
gentranslit.c \
iconv.c \
converters.h \
ascii.h \
utf8.h \
ucs2.h \
ucs2be.h \
ucs2le.h \
ucs4.h \
ucs4be.h \
ucs4le.h \
utf16.h \
utf16be.h \
utf16le.h \
utf32.h \
utf32be.h \
utf32le.h \
utf7.h \
ucs2internal.h \
ucs2swapped.h \
ucs4internal.h \
ucs4swapped.h \
c99.h \
java.h \
iso8859_1.h \
iso8859_2.h \
iso8859_3.h \
iso8859_4.h \
iso8859_5.h \
iso8859_6.h \
iso8859_7.h \
iso8859_8.h \
iso8859_9.h \
iso8859_10.h \
iso8859_11.h \
iso8859_13.h \
iso8859_14.h \
iso8859_15.h \
iso8859_16.h \
koi8_r.h \
koi8_u.h \
koi8_ru.h \
cp1250.h \
cp1251.h \
cp1252.h \
cp1253.h \
cp1254.h \
cp1255.h \
cp1256.h \
cp1257.h \
cp1258.h \
vietcomb.h \
cp850.h \
cp862.h \
cp866.h \
cp1131.h \
mac_roman.h \
mac_centraleurope.h \
mac_iceland.h \
mac_croatian.h \
mac_romania.h \
mac_cyrillic.h \
mac_ukraine.h \
mac_greek.h \
mac_turkish.h \
mac_hebrew.h \
mac_arabic.h \
mac_thai.h \
hp_roman8.h \
nextstep.h \
armscii_8.h \
georgian_academy.h \
georgian_ps.h \
koi8_t.h \
pt154.h \
rk1048.h \
mulelao.h \
cp1133.h \
tis620.h \
cp874.h \
viscii.h \
tcvn.h \
iso646_jp.h \
jisx0201.h \
jisx0208.h \
jisx0212.h \
iso646_cn.h \
gb2312.h \
isoir165.h \
isoir165ext.h \
gb12345.h \
gb12345ext.h \
gbk.h \
gbkext1.h \
gbkext2.h \
gbkext_inv.h \
cp936ext.h \
cns11643.h \
cns11643_1.h \
cns11643_2.h \
cns11643_3.h \
cns11643_4.h \
cns11643_4a.h \
cns11643_4b.h \
cns11643_5.h \
cns11643_6.h \
cns11643_7.h \
cns11643_15.h \
cns11643_inv.h \
big5.h \
ksc5601.h \
johab_hangul.h \
euc_jp.h \
sjis.h \
cp932.h \
cp932ext.h \
iso2022_jp.h \
iso2022_jp1.h \
iso2022_jp2.h \
iso2022_jpms.h \
cp50221_0208_ext.h \
cp50221_0212_ext.h \
euc_cn.h \
ces_gbk.h \
cp936.h \
gb18030.h \
gb18030ext.h \
gb18030uni.h \
iso2022_cn.h \
iso2022_cnext.h \
hz.h \
euc_tw.h \
ces_big5.h \
cp950.h \
cp950ext.h \
big5hkscs1999.h \
hkscs1999.h \
big5hkscs2001.h \
hkscs2001.h \
big5hkscs2004.h \
hkscs2004.h \
big5hkscs2008.h \
hkscs2008.h \
euc_kr.h \
cp949.h \
uhc_1.h \
uhc_2.h \
johab.h \
iso2022_kr.h \
cp856.h \
cp922.h \
cp943.h \
cp1046.h \
cp1124.h \
cp1129.h \
cp1161.h \
cp1162.h \
cp1163.h \
dec_kanji.h \
dec_hanyu.h \
cp437.h \
cp737.h \
cp775.h \
cp852.h \
cp853.h \
cp855.h \
cp857.h \
cp858.h \
cp860.h \
cp861.h \
cp863.h \
cp864.h \
cp865.h \
cp869.h \
cp1125.h \
euc_jisx0213.h \
jisx0213.h \
shift_jisx0213.h \
iso2022_jp3.h \
big5_2003.h \
tds565.h \
atarist.h \
riscos1.h \
flushwc.h \
cjk_variants.h \
loops.h \
loop_unicode.h \
loop_wchar.h \
aliases2.h \
iconv_open1.h \
iconv_open2.h \
relocatable.h relocatable.c
# List of distributed files imported from other packages.
IMPORTED_FILES =
# List of distributed files generated by autotools or Makefile.devel.
GENERATED_FILES = \
aliases.gperf aliases_sysaix.gperf aliases_syshpux.gperf aliases_sysosf1.gperf aliases_syssolaris.gperf \
aliases.h aliases_sysaix.h aliases_syshpux.h aliases_sysosf1.h aliases_syssolaris.h \
aliases_aix.h aliases_aix_sysaix.h \
aliases_osf1.h aliases_osf1_sysosf1.h \
aliases_dos.h \
aliases_extra.h \
canonical.h canonical_sysaix.h canonical_syshpux.h canonical_sysosf1.h canonical_syssolaris.h \
canonical_aix.h canonical_aix_sysaix.h \
canonical_osf1.h canonical_osf1_sysosf1.h \
canonical_dos.h \
canonical_extra.h \
canonical_local.h canonical_local_sysaix.h canonical_local_syshpux.h canonical_local_sysosf1.h canonical_local_syssolaris.h \
flags.h \
translit.h
# List of distributed files generated by "make".
DISTRIBUTED_BUILT_FILES =
# List of distributed files.
DISTFILES = $(SOURCE_FILES) $(IMPORTED_FILES) $(GENERATED_FILES) $(DISTRIBUTED_BUILT_FILES)
distdir : $(DISTFILES)
for file in $(DISTFILES); do \
if test -f $$file; then dir='.'; else dir='$(srcdir)'; fi; \
cp -p "$$dir/$$file" '$(distdir)'/$$file || exit 1; \
done
force :

82
3rdparty/libiconv/1.15/lib/config.h.in vendored Normal file
View File

@ -0,0 +1,82 @@
/* Copyright (C) 1999-2003, 2005, 2007, 2010, 2012 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, see <http://www.gnu.org/licenses/>. */
/* Define to 1 to enable a few rarely used encodings. */
#undef ENABLE_EXTRA
/* Define to 1 if the package shall run at any location in the filesystem. */
#undef ENABLE_RELOCATABLE
/* Define to a type if <wchar.h> does not define. */
#undef mbstate_t
/* Define if you have <iconv.h>, the iconv_t type, and the
iconv_open, iconv, iconv_close functions. */
#undef HAVE_ICONV
/* Define as const if the declaration of iconv() needs const. */
#define ICONV_CONST /* empty by default */
/* Define to 1 if you have the getc_unlocked() function. */
#undef HAVE_GETC_UNLOCKED
/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
#undef HAVE_LANGINFO_CODESET
/* Define if you have the mbrtowc() function. */
#undef HAVE_MBRTOWC
/* Define to 1 if you have the setlocale() function. */
#undef HAVE_SETLOCALE
/* Define to 1 if you have the <stddef.h> header file. */
#undef HAVE_STDDEF_H
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Define to 1 or 0, depending whether the compiler supports simple visibility
declarations. */
#undef HAVE_VISIBILITY
/* Define if you have the wcrtomb() function. */
#undef HAVE_WCRTOMB
/* Define to 1 if O_NOFOLLOW works. */
#undef HAVE_WORKING_O_NOFOLLOW
/* Define if the machine's byte ordering is little endian. */
#undef WORDS_LITTLEENDIAN
/* Define to the value of ${prefix}, as a string. */
#undef INSTALLPREFIX
/* Define to '__inline__' or '__inline' if that's what the C compiler
calls it, or to nothing if 'inline' is not supported under any name. */
#ifndef __cplusplus
#undef inline
#endif
/* Define to 'int' if <sys/types.h> does not define. */
#undef mode_t
/* Define as a signed type of the same size as size_t. */
#undef ssize_t

View File

@ -0,0 +1,149 @@
/*
* Copyright (C) 1999-2012, 2016 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, see <http://www.gnu.org/licenses/>.
*/
/*
* CP50221 JISX0208 extensions
*/
static const unsigned short cp50221_0208_ext_2uni[96] = {
/* 0x00 */
0xfffd, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466,
0x2467, 0x2468, 0x2469, 0x246a, 0x246b, 0x246c, 0x246d, 0x246e,
/* 0x10 */
0x246f, 0x2470, 0x2471, 0x2472, 0x2473, 0x2160, 0x2161, 0x2162,
0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0xfffd,
/* 0x20 */
0x3349, 0x3314, 0x3322, 0x334d, 0x3318, 0x3327, 0x3303, 0x3336,
0x3351, 0x3357, 0x330d, 0x3326, 0x3323, 0x332b, 0x334a, 0x333b,
/* 0x30 */
0x339c, 0x339d, 0x339e, 0x338e, 0x338f, 0x33c4, 0x33a1, 0xfffd,
0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x337b,
/* 0x40 */
0x301e, 0x301f, 0x2116, 0x33cd, 0x2121, 0x32a4, 0x32a5, 0x32a6,
0x32a7, 0x32a8, 0x3231, 0x3232, 0x3239, 0x337e, 0x337d, 0x337c,
/* 0x50 */
0xfffd, 0xfffd, 0xfffd, 0x222e, 0x2211, 0xfffd, 0xfffd, 0xfffd,
0x221f, 0x22bf, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
};
static int
cp50221_0208_ext_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
{
unsigned char c = *s;
if (c < 0x60) {
unsigned short wc = cp50221_0208_ext_2uni[c];
if (wc != 0xfffd) {
*pwc = (ucs4_t) wc;
return 1;
}
}
return RET_ILSEQ;
}
static const unsigned char cp50221_0208_ext_page21[96] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, /* 0x10-0x17 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, /* 0x60-0x67 */
0x1d, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
};
static const unsigned char cp50221_0208_ext_page22[32] = {
0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, /* 0x18-0x1f */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, /* 0x28-0x2f */
};
static const unsigned char cp50221_0208_ext_page24[24] = {
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, /* 0x60-0x67 */
0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, /* 0x68-0x6f */
0x11, 0x12, 0x13, 0x14, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
};
static const unsigned char cp50221_0208_ext_page30[8] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x41, /* 0x18-0x1f */
};
static const unsigned char cp50221_0208_ext_page32[16] = {
0x00, 0x4a, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
};
static const unsigned char cp50221_0208_ext_page32_1[16] = {
0x00, 0x00, 0x00, 0x00, 0x45, 0x46, 0x47, 0x48, /* 0xa0-0xa7 */
0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
};
static const unsigned char cp50221_0208_ext_page33[208] = {
0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, /* 0x08-0x0f */
0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, /* 0x10-0x17 */
0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
0x00, 0x00, 0x22, 0x2c, 0x00, 0x00, 0x2b, 0x25, /* 0x20-0x27 */
0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, /* 0x30-0x37 */
0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
0x00, 0x20, 0x2e, 0x00, 0x00, 0x23, 0x00, 0x00, /* 0x48-0x4f */
0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, /* 0x50-0x57 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 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, 0x3f, 0x4f, 0x4e, 0x4d, 0x00, /* 0x78-0x7f */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x34, /* 0x88-0x8f */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
0x00, 0x00, 0x00, 0x00, 0x30, 0x31, 0x32, 0x00, /* 0x98-0x9f */
0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, /* 0xc8-0xcf */
};
static int
cp50221_0208_ext_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
{
unsigned char c = 0;
if (wc >= 0x2110 && wc < 0x2170)
c = cp50221_0208_ext_page21[wc-0x2110];
else if (wc >= 0x2210 && wc < 0x2230)
c = cp50221_0208_ext_page22[wc-0x2210];
else if (wc == 0x22bf)
c = 0x59;
else if (wc >= 0x2460 && wc < 0x2478)
c = cp50221_0208_ext_page24[wc-0x2460];
else if (wc >= 0x3018 && wc < 0x3020)
c = cp50221_0208_ext_page30[wc-0x3018];
else if (wc >= 0x3230 && wc < 0x3240)
c = cp50221_0208_ext_page32[wc-0x3230];
else if (wc >= 0x32a0 && wc < 0x32b0)
c = cp50221_0208_ext_page32_1[wc-0x32a0];
else if (wc >= 0x3300 && wc < 0x33d0)
c = cp50221_0208_ext_page33[wc-0x3300];
if (c != 0) {
*r = c;
return 1;
}
return RET_ILUNI;
}

View File

@ -0,0 +1,212 @@
/*
* Copyright (C) 1999-2011, 2016 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, see <http://www.gnu.org/licenses/>.
*/
/*
* CP50221 JISX0212 extensions
*/
static const unsigned short cp50221_0212_ext_2uni[112] = {
/* 0x00 */
0xfffd, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176,
0x2177, 0x2178, 0x2179, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
/* 0x10 */
0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xff07, 0xff02, 0xfffd,
0xfffd, 0xfffd, 0x70bb, 0x4efc, 0x50f4, 0x51ec, 0x5307, 0x5324,
/* 0x20 */
0xfa0e, 0x548a, 0x5759, 0xfa0f, 0xfa10, 0x589e, 0x5bec, 0x5cf5,
0x5d53, 0xfa11, 0x5fb7, 0x6085, 0x6120, 0x654e, 0xfffd, 0x6665,
/* 0x30 */
0xfa12, 0xf929, 0x6801, 0xfa13, 0xfa14, 0x6a6b, 0x6ae2, 0x6df8,
0x6df2, 0x7028, 0xfa15, 0xfa16, 0x7501, 0x7682, 0x769e, 0xfa17,
/* 0x40 */
0x7930, 0xfa18, 0xfa19, 0xfa1a, 0xfa1b, 0x7ae7, 0xfa1c, 0xfa1d,
0x7da0, 0x7dd6, 0xfa1e, 0x8362, 0xfa1f, 0x85b0, 0xfa20, 0xfa21,
/* 0x50 */
0x8807, 0xfa22, 0x8b7f, 0x8cf4, 0x8d76, 0xfa23, 0xfa24, 0xfa25,
0x90de, 0xfa26, 0x9115, 0xfa27, 0xfa28, 0x9592, 0xf9dc, 0xfa29,
/* 0x60 */
0x973b, 0xfffd, 0x9751, 0xfa2a, 0xfa2b, 0xfa2c, 0x999e, 0x9ad9,
0x9b72, 0xfa2d, 0x9ed1, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
};
static int
cp50221_0212_ext_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
{
unsigned char c = *s;
if (c < 0x70) {
unsigned short wc = cp50221_0212_ext_2uni[c];
if (wc != 0xfffd) {
*pwc = (ucs4_t) wc;
return 1;
}
}
else if (c == 0xa1) {
*pwc = 0x974d;
return 1;
}
return RET_ILSEQ;
}
static const unsigned char cp50221_0212_ext_page21[16] = {
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, /* 0x70-0x77 */
0x09, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
};
static const unsigned char cp50221_0212_ext_page53[40] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, /* 0x00-0x07 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, /* 0x20-0x27 */
};
static const unsigned char cp50221_0212_ext_page6d[16] = {
0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */
0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */
};
static const unsigned char cp50221_0212_ext_page76[32] = {
0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, /* 0x98-0x9f */
};
static const unsigned char cp50221_0212_ext_page7d[56] = {
0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
0x00, 0x00, 0x00, 0x00, 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, 0x49, 0x00, /* 0xd0-0xd7 */
};
static const unsigned char cp50221_0212_ext_page97[32] = {
0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, /* 0x48-0x4f */
0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
};
static const unsigned char cp50221_0212_ext_pagefa[40] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x23, /* 0x08-0x0f */
0x24, 0x29, 0x30, 0x33, 0x34, 0x3a, 0x3b, 0x3f, /* 0x10-0x17 */
0x41, 0x42, 0x43, 0x44, 0x46, 0x47, 0x4a, 0x4c, /* 0x18-0x1f */
0x4e, 0x4f, 0x51, 0x55, 0x56, 0x57, 0x59, 0x5b, /* 0x20-0x27 */
0x5c, 0x5f, 0x63, 0x64, 0x65, 0x69, 0x00, 0x00, /* 0x28-0x2f */
};
static const unsigned char cp50221_0212_ext_pageff[8] = {
0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x15, /* 0x00-0x07 */
};
static int
cp50221_0212_ext_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
{
unsigned char c = 0;
if (wc >= 0x2170 && wc < 0x2180)
c = cp50221_0212_ext_page21[wc-0x2170];
else if (wc == 0x4efc)
c = 0x1b;
else if (wc == 0x50f4)
c = 0x1c;
else if (wc == 0x51ec)
c = 0x1d;
else if (wc >= 0x5300 && wc < 0x5328)
c = cp50221_0212_ext_page53[wc-0x5300];
else if (wc == 0x548a)
c = 0x21;
else if (wc == 0x5759)
c = 0x22;
else if (wc == 0x589e)
c = 0x25;
else if (wc == 0x5bec)
c = 0x26;
else if (wc == 0x5cf5)
c = 0x27;
else if (wc == 0x5d53)
c = 0x28;
else if (wc == 0x5fb7)
c = 0x2a;
else if (wc == 0x6085)
c = 0x2b;
else if (wc == 0x6120)
c = 0x2c;
else if (wc == 0x654e)
c = 0x2d;
else if (wc == 0x6665)
c = 0x2f;
else if (wc == 0x6801)
c = 0x32;
else if (wc == 0x6a6b)
c = 0x35;
else if (wc == 0x6ae2)
c = 0x36;
else if (wc >= 0x6df0 && wc < 0x6e00)
c = cp50221_0212_ext_page6d[wc-0x6df0];
else if (wc == 0x7028)
c = 0x39;
else if (wc == 0x70bb)
c = 0x1a;
else if (wc == 0x7501)
c = 0x3c;
else if (wc >= 0x7680 && wc < 0x76a0)
c = cp50221_0212_ext_page76[wc-0x7680];
else if (wc == 0x7930)
c = 0x40;
else if (wc == 0x7ae7)
c = 0x45;
else if (wc >= 0x7da0 && wc < 0x7dd8)
c = cp50221_0212_ext_page7d[wc-0x7da0];
else if (wc == 0x8362)
c = 0x4b;
else if (wc == 0x85b0)
c = 0x4d;
else if (wc == 0x8807)
c = 0x50;
else if (wc == 0x8b7f)
c = 0x52;
else if (wc == 0x8cf4)
c = 0x53;
else if (wc == 0x8d76)
c = 0x54;
else if (wc == 0x90de)
c = 0x58;
else if (wc == 0x9115)
c = 0x5a;
else if (wc == 0x9592)
c = 0x5d;
else if (wc >= 0x9738 && wc < 0x9758)
c = cp50221_0212_ext_page97[wc-0x9738];
else if (wc == 0x999e)
c = 0x66;
else if (wc == 0x9ad9)
c = 0x67;
else if (wc == 0x9b72)
c = 0x68;
else if (wc == 0x9ed1)
c = 0x6a;
else if (wc == 0xf929)
c = 0x31;
else if (wc == 0xf9dc)
c = 0x5e;
else if (wc >= 0xfa08 && wc < 0xfa30)
c = cp50221_0212_ext_pagefa[wc-0xfa08];
else if (wc >= 0xff00 && wc < 0xff08)
c = cp50221_0212_ext_pageff[wc-0xff00];
if (c != 0) {
*r = c;
return 1;
}
return RET_ILUNI;
}

View File

@ -0,0 +1,445 @@
/*
* Copyright (C) 1999-2001, 2008, 2011-2012, 2016 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, see <http://www.gnu.org/licenses/>.
*/
/*
* ISO-2022-JP-MS
* alias CP50221
*
* This is an extension of ISO-2022-JP-1 with larger character sets.
* It uses ESC $ B and ESC $ ( D to denote *extensions* of JIS X 0208 and
* JIS X 0212, respectively. This violates the principles of ISO 2022,
* where
* 1. character sets to be used by ISO 2022 have to be registered at the
* ISO IR registry <http://www.itscj.ipsj.or.jp/ISO-IR/>,
* 2. different character sets are designated by different escape
* sequences.
* It's a typical instance of the "embrace and extend" strategy by Microsoft
* <http://en.wikipedia.org/wiki/Embrace,_extend_and_extinguish>.
*/
/*
* Windows has three encodings CP50220, CP50221, CP50222.
* The common parts are:
* - US-ASCII (0x00..0x7F)
* - JIS X 0208 extended by
* - one row (0x2D),
* - a private use area (rows 0x75..0x7E = U+E000..U+E3AB),
* enabled with ESC $ B, disabled with ESC ( B.
* - JIS X 0212 extended by
* - two rows (0x73..0x74),
* - a private use area (rows 0x75..0x7E = U+E3AC..U+E757),
* enabled with ESC $ ( D, disabled with ESC ( B.
* They differ in the handling of JIS X 0201 characters (halfwidth Katakana)
* in the conversion direction Unicode -> CP5022x:
* * CP50220 maps the halfwidth Katakana to fullwidth Katakana characters.
* * CP50221 contains the JIS X 0201 halfwidth Katakana characters,
* enabled with ESC ( I, disabled with ESC ( B.
* * CP50222 contains the JIS X 0201 halfwidth Katakana characters,
* enabled with ESC ( J 0x0E, disabled with ESC ( B.
* In the conversion direction CP5022x -> Unicode, all three operate the same:
* - ESC ( I is supported and understood.
* - ESC ( J 0x0E is not accepted. (Tested on Windows XP SP3.)
* Conclusion:
* - CP50222 should not be used, because the multibyte sequence that it
* produces cannot be parsed by either of the three encodings.
* - CP50221 is preferrable to CP50220, because it can faithfully represent
* the halfwidth Katakana characters.
* We therefore implement CP50221. As an extension, in the mbtowc conversion
* direction, we support also ESC ( J 0x0E, just in case.
*/
#include "cp50221_0208_ext.h"
#include "cp50221_0212_ext.h"
#define ESC 0x1b
#define SO 0x0e
#define SI 0x0f
/*
* The state can be one of the following values.
*/
#define STATE_ASCII 0 /* Esc ( B */
#define STATE_JISX0201ROMAN 1 /* Esc ( J */ /* only in mbtowc direction */
#define STATE_JISX0201KATAKANA 2 /* Esc ( I */
#define STATE_JISX0208MS 3 /* Esc $ @ or Esc $ B */
#define STATE_JISX0212MS 4 /* Esc $ ( D */
static int
iso2022_jpms_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
{
state_t state = conv->istate;
int count = 0;
unsigned char c;
for (;;) {
c = *s;
if (c == ESC) {
if (n < count+3)
goto none;
if (s[1] == '(') {
if (s[2] == 'B') {
state = STATE_ASCII;
s += 3; count += 3;
if (n < count+1)
goto none;
continue;
}
if (s[2] == 'I') {
state = STATE_JISX0201KATAKANA;
s += 3; count += 3;
if (n < count+1)
goto none;
continue;
}
if (s[2] == 'J') {
state = STATE_JISX0201ROMAN;
s += 3; count += 3;
if (n < count+1)
goto none;
continue;
}
goto ilseq;
}
if (s[1] == '$') {
if (s[2] == '@' || s[2] == 'B') {
/* We don't distinguish JIS X 0208-1978 and JIS X 0208-1983. */
state = STATE_JISX0208MS;
s += 3; count += 3;
if (n < count+1)
goto none;
continue;
}
if (s[2] == '(') {
if (n < count+4)
goto none;
if (s[3] == 'D') {
state = STATE_JISX0212MS;
s += 4; count += 4;
if (n < count+1)
goto none;
continue;
}
}
goto ilseq;
}
goto ilseq;
}
if (c == SO) {
if (state == STATE_JISX0201ROMAN)
state = STATE_JISX0201KATAKANA;
s += 1; count += 1;
if (n < count+1)
goto none;
continue;
}
if (c == SI) {
if (state == STATE_JISX0201KATAKANA)
state = STATE_JISX0201ROMAN;
s += 1; count += 1;
if (n < count+1)
goto none;
continue;
}
break;
}
switch (state) {
case STATE_ASCII:
if (c < 0x80) {
int ret = ascii_mbtowc(conv,pwc,s,1);
if (ret == RET_ILSEQ)
goto ilseq;
if (ret != 1) abort();
conv->istate = state;
return count+1;
} else
goto ilseq;
case STATE_JISX0201ROMAN:
if (c < 0x80) {
int ret = jisx0201_mbtowc(conv,pwc,s,1);
if (ret == RET_ILSEQ)
goto ilseq;
if (ret != 1) abort();
conv->istate = state;
return count+1;
} else
goto ilseq;
case STATE_JISX0201KATAKANA:
if (c < 0x80) {
unsigned char buf = c+0x80;
int ret = jisx0201_mbtowc(conv,pwc,&buf,1);
if (ret == RET_ILSEQ)
goto ilseq;
if (ret != 1) abort();
conv->istate = state;
return count+1;
} else
goto ilseq;
case STATE_JISX0208MS:
if (n < count+2)
goto none;
if (s[0] < 0x80 && s[1] < 0x80) {
int ret;
if (s[0] < 0x75) {
if (s[0] == 0x2d) {
/* Extension of JIS X 0208. */
if (s[1] >= 0x21 && s[1] <= 0x79) {
unsigned char i = (s[1] - 0x21) + 1;
ret = cp50221_0208_ext_mbtowc(conv,pwc,&i,1);
if (ret == 1)
ret = 2;
} else
ret = RET_ILSEQ;
} else {
/* JIS X 0208. */
ret = jisx0208_mbtowc(conv,pwc,s,2);
}
} else {
/* Extension of JIS X 0208.
0x{75..7E}{21..8E} maps to U+E000..U+E3AB.
But some rows maps to characters present in CP932. */
if (s[0] <= 0x7e && (s[1] >= 0x21 && s[1] <= 0x7e)) {
unsigned short wc = 0xfffd;
if (s[0] >= 0x79 && s[0] <= 0x7c)
wc = cp932ext_2uni_pageed[(s[0] - 0x79) * 94 + (s[1] - 0x21)];
if (wc == 0xfffd)
wc = (s[0] - 0x75) * 94 + (s[1] - 0x21) + 0xe000;
*pwc = wc;
ret = 2;
} else
ret = RET_ILSEQ;
}
if (ret == RET_ILSEQ)
goto ilseq;
if (ret != 2) abort();
conv->istate = state;
return count+2;
} else
goto ilseq;
case STATE_JISX0212MS:
if (n < count+2)
goto none;
if (s[0] < 0x80 && s[1] < 0x80) {
int ret;
if (s[0] < 0x73) {
/* JIS X 0212. */
ret = jisx0212_mbtowc(conv,pwc,s,2);
} else {
if (s[0] < 0x75) {
/* Extension of JIS X 0212. */
if (s[1] >= 0x21 && s[1] <= 0x7e) {
unsigned char i = (s[0] - 0x73) * 94 + (s[1] - 0x21) + 1;
ret = cp50221_0212_ext_mbtowc(conv,pwc,&i,1);
if (ret == 1)
ret = 2;
} else
ret = RET_ILSEQ;
} else {
/* Extension of JIS X 0208.
0x{75..7E}{21..8E} maps to U+E3AC..U+E757. */
if (s[0] <= 0x7e && (s[1] >= 0x21 && s[1] <= 0x7e)) {
*pwc = (s[0] - 0x75) * 94 + (s[1] - 0x21) + 0xe3ac;
ret = 2;
} else
ret = RET_ILSEQ;
}
}
if (ret == RET_ILSEQ)
goto ilseq;
if (ret != 2) abort();
conv->istate = state;
return count+2;
} else
goto ilseq;
default: abort();
}
none:
conv->istate = state;
return RET_TOOFEW(count);
ilseq:
conv->istate = state;
return RET_SHIFT_ILSEQ(count);
}
static int
iso2022_jpms_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
{
state_t state = conv->ostate;
unsigned char buf[2];
int ret;
/* Try ASCII. */
ret = ascii_wctomb(conv,buf,wc,1);
if (ret != RET_ILUNI) {
if (ret != 1) abort();
if (buf[0] < 0x80) {
int count = (state == STATE_ASCII ? 1 : 4);
if (n < count)
return RET_TOOSMALL;
if (state != STATE_ASCII) {
r[0] = ESC;
r[1] = '(';
r[2] = 'B';
r += 3;
state = STATE_ASCII;
}
r[0] = buf[0];
conv->ostate = state;
return count;
}
}
/* Try JIS X 0201-1976 Katakana. */
ret = jisx0201_wctomb(conv,buf,wc,1);
if (ret != RET_ILUNI) {
if (ret != 1) abort();
if (buf[0] >= 0x80) {
int count = (state == STATE_JISX0201KATAKANA ? 1 : 4);
if (n < count)
return RET_TOOSMALL;
if (state != STATE_JISX0201KATAKANA) {
r[0] = ESC;
r[1] = '(';
r[2] = 'I';
r += 3;
state = STATE_JISX0201KATAKANA;
}
r[0] = buf[0]-0x80;
conv->ostate = state;
return count;
}
}
/* Try JIS X 0208-1990, in place of JIS X 0208-1978 and JIS X 0208-1983,
and the extensions mentioned above. */
if (wc >= 0xe000 && wc < 0xe3ac) {
unsigned short i = wc - 0xe000;
buf[0] = (i / 94) + 0x75;
buf[1] = (i % 94) + 0x21;
ret = 2;
} else {
ret = jisx0208_wctomb(conv,buf,wc,2);
if (ret == RET_ILUNI) {
/* Extension of JIS X 0208. */
unsigned char i;
ret = cp50221_0208_ext_wctomb(conv,&i,wc,1);
if (ret == 1) {
buf[0] = 0x2d;
buf[1] = i-1 + 0x21;
ret = 2;
} else if (wc == 0x663B) {
buf[0] = 0x7a;
buf[1] = 0x36;
ret = 2;
} else if (wc == 0xffe2) {
buf[0] = 0x7c;
buf[1] = 0x7b;
ret = 2;
} else if (wc == 0xffe4) {
buf[0] = 0x7c;
buf[1] = 0x7c;
ret = 2;
}
}
}
if (ret != RET_ILUNI) {
if (ret != 2) abort();
if (buf[0] < 0x80 && buf[1] < 0x80) {
int count = (state == STATE_JISX0208MS ? 2 : 5);
if (n < count)
return RET_TOOSMALL;
if (state != STATE_JISX0208MS) {
r[0] = ESC;
r[1] = '$';
r[2] = 'B';
r += 3;
state = STATE_JISX0208MS;
}
r[0] = buf[0];
r[1] = buf[1];
conv->ostate = state;
return count;
}
}
/* Try JIS X 0212-1990 and the extensions mentioned above. */
if (wc >= 0xe3ac && wc < 0xe758) {
unsigned short i = wc - 0xe3ac;
buf[0] = (i / 94) + 0x75;
buf[1] = (i % 94) + 0x21;
ret = 2;
} else {
ret = jisx0212_wctomb(conv,buf,wc,2);
if (ret == RET_ILUNI) {
/* Extension of JIS X 0212. */
unsigned char i;
ret = cp50221_0212_ext_wctomb(conv,&i,wc,1);
if (ret == 1) {
i -= 1;
buf[0] = (i / 94) + 0x73;
buf[1] = (i % 94) + 0x21;
ret = 2;
}
}
}
if (ret != RET_ILUNI) {
if (ret != 2) abort();
if (buf[0] < 0x80 && buf[1] < 0x80) {
int count = (state == STATE_JISX0212MS ? 2 : 6);
if (n < count)
return RET_TOOSMALL;
if (state != STATE_JISX0212MS) {
r[0] = ESC;
r[1] = '$';
r[2] = '(';
r[3] = 'D';
r += 4;
state = STATE_JISX0212MS;
}
r[0] = buf[0];
r[1] = buf[1];
conv->ostate = state;
return count;
}
}
return RET_ILUNI;
}
static int
iso2022_jpms_reset (conv_t conv, unsigned char *r, size_t n)
{
state_t state = conv->ostate;
if (state != STATE_ASCII) {
if (n < 3)
return RET_TOOSMALL;
r[0] = ESC;
r[1] = '(';
r[2] = 'B';
/* conv->ostate = 0; will be done by the caller */
return 3;
} else
return 0;
}
#undef STATE_JISX0212MS
#undef STATE_JISX0208MS
#undef STATE_JISX0201KATAKANA
#undef STATE_JISX0201ROMAN
#undef STATE_ASCII

View File

@ -0,0 +1,177 @@
# Makefile for libcharset/lib
#### Start of system configuration section. ####
# Directories used by "make":
srcdir = @srcdir@
# Directories used by "make install":
prefix = @prefix@
local_prefix = /usr/local
exec_prefix = @exec_prefix@
libdir = @libdir@
# Programs used by "make":
CC = @CC@
CFLAGS = @CFLAGS@ @CFLAG_VISIBILITY@
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
INCLUDES = -I. -I$(srcdir) -I.. -I$(srcdir)/.. -I../include
# -DBUILDING_LIBCHARSET: Change expansion of LIBCHARSET_DLL_EXPORTED macro.
# -DBUILDING_DLL: Change expansion of RELOCATABLE_DLL_EXPORTED macro.
DEFS = -DLIBDIR=\"$(libdir)\" -DBUILDING_LIBCHARSET -DBUILDING_DLL \
-DENABLE_RELOCATABLE=1 -DIN_LIBRARY -DINSTALLDIR=\"$(libdir)\" -DNO_XMALLOC \
-Dset_relocation_prefix=libcharset_set_relocation_prefix \
-Drelocate=libcharset_relocate @DEFS@
LIBTOOL = @LIBTOOL@
LIBTOOL_COMPILE = $(LIBTOOL) --mode=compile
LIBTOOL_LINK = $(LIBTOOL) --mode=link
LIBTOOL_INSTALL = $(LIBTOOL) --mode=install
LIBTOOL_UNINSTALL = $(LIBTOOL) --mode=uninstall
RM = rm -f
# Programs used by "make install":
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
mkinstalldirs = $(SHELL) @top_srcdir@/build-aux/mkinstalldirs
#### End of system configuration section. ####
PACKAGE = @PACKAGE@
VERSION = @VERSION@
SHELL = /bin/sh
# Before making a release, change this according to the libtool documentation,
# section "Library interface versions".
LIBCHARSET_VERSION_INFO = 1:0:0
# Needed by $(LIBTOOL).
top_builddir = ..
SOURCES = $(srcdir)/localcharset.c $(srcdir)/relocatable.c
OBJECTS = localcharset.lo relocatable.lo
all : libcharset.la charset.alias ref-add.sed ref-del.sed
libcharset.la : $(OBJECTS)
$(LIBTOOL_LINK) $(CC) $(LDFLAGS) $(CFLAGS) -o libcharset.la -rpath $(libdir) -version-info $(LIBCHARSET_VERSION_INFO) -no-undefined $(OBJECTS)
localcharset.lo : $(srcdir)/localcharset.c
$(LIBTOOL_COMPILE) $(CC) $(INCLUDES) $(CFLAGS) $(CPPFLAGS) $(DEFS) -c $(srcdir)/localcharset.c
relocatable.lo : $(srcdir)/relocatable.c $(srcdir)/relocatable.h
$(LIBTOOL_COMPILE) $(CC) $(INCLUDES) $(CFLAGS) $(CPPFLAGS) $(DEFS) -c $(srcdir)/relocatable.c
charset.alias: $(srcdir)/config.charset
$(SHELL) $(srcdir)/config.charset '@host@' > t-$@
mv t-$@ $@
ref-add.sed : $(srcdir)/ref-add.sin
sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-add.sin > t-$@
mv t-$@ $@
ref-del.sed : $(srcdir)/ref-del.sin
sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-del.sin > t-$@
mv t-$@ $@
# Installs the library and include files only. Typically called with only
# $(libdir) and $(includedir) - don't use $(prefix) and $(exec_prefix) here.
install-lib : all force
$(mkinstalldirs) $(libdir)
$(LIBTOOL_INSTALL) $(INSTALL) libcharset.la $(libdir)/libcharset.la
test -f $(libdir)/charset.alias && orig=$(libdir)/charset.alias \
|| orig=charset.alias; \
sed -f ref-add.sed $$orig > $(libdir)/t-charset.alias; \
$(INSTALL_DATA) $(libdir)/t-charset.alias $(libdir)/charset.alias; \
rm -f $(libdir)/t-charset.alias
# The following is needed in order to install a simple file in $(libdir)
# which is shared with other installed packages. We use a list of referencing
# packages so that "make uninstall" will remove the file if and only if it
# is not used by another installed package.
# On systems with glibc-2.1 or newer, the file is redundant, therefore we
# avoid installing it.
install : all force
if test @GLIBC21@ = no; then \
case '@host_os@' in \
darwin[56]*) \
need_charset_alias=true ;; \
darwin* | cygwin* | mingw* | pw32* | cegcc*) \
need_charset_alias=false ;; \
*) \
need_charset_alias=true ;; \
esac ; \
else \
need_charset_alias=false ; \
fi ; \
$(mkinstalldirs) $(DESTDIR)$(libdir) ; \
$(LIBTOOL_INSTALL) $(INSTALL) libcharset.la $(DESTDIR)$(libdir)/libcharset.la
if test -f $(DESTDIR)$(libdir)/charset.alias; then \
sed -f ref-add.sed $(DESTDIR)$(libdir)/charset.alias > $(DESTDIR)$(libdir)/t-charset.alias; \
$(INSTALL_DATA) $(DESTDIR)$(libdir)/t-charset.alias $(DESTDIR)$(libdir)/charset.alias; \
rm -f $(DESTDIR)$(libdir)/t-charset.alias; \
else \
if $$need_charset_alias; then \
sed -f ref-add.sed charset.alias > $(DESTDIR)$(libdir)/t-charset.alias; \
$(INSTALL_DATA) $(DESTDIR)$(libdir)/t-charset.alias $(DESTDIR)$(libdir)/charset.alias; \
rm -f $(DESTDIR)$(libdir)/t-charset.alias; \
fi ; \
fi
install-strip : install
installdirs : force
$(mkinstalldirs) $(DESTDIR)$(libdir)
uninstall : force
$(LIBTOOL_UNINSTALL) $(RM) $(DESTDIR)$(libdir)/libcharset.la
if test -f $(DESTDIR)$(libdir)/charset.alias; then \
sed -f ref-del.sed $(DESTDIR)$(libdir)/charset.alias > $(DESTDIR)$(libdir)/t-charset.alias; \
if grep '^# Packages using this file: $$' $(DESTDIR)$(libdir)/t-charset.alias > /dev/null; then \
rm -f $(DESTDIR)$(libdir)/charset.alias; \
else \
$(INSTALL_DATA) $(DESTDIR)$(libdir)/t-charset.alias $(DESTDIR)$(libdir)/charset.alias; \
fi; \
rm -f $(DESTDIR)$(libdir)/t-charset.alias; \
fi
check : all
mostlyclean : clean
clean : force
$(RM) *.o *.lo *.a *.la *.o.lock core *.stackdump charset.alias ref-add.sed ref-del.sed
$(RM) -r .libs _libs
distclean : clean
$(RM) Makefile
maintainer-clean : distclean
# List of source files.
SOURCE_FILES = \
ChangeLog Makefile.in
# List of files bidirectionally synced with gnulib.
GNULIB_SYNCED_FILES = \
config.charset localcharset.c ref-add.sin ref-del.sin \
relocatable.h relocatable.c
# List of distributed files imported from other packages.
IMPORTED_FILES =
# List of distributed files generated by autotools or Makefile.devel.
GENERATED_FILES =
# List of distributed files generated by "make".
DISTRIBUTED_BUILT_FILES =
# List of distributed files.
DISTFILES = $(SOURCE_FILES) $(GNULIB_SYNCED_FILES) $(IMPORTED_FILES) $(GENERATED_FILES) $(DISTRIBUTED_BUILT_FILES)
distdir : $(DISTFILES)
for file in $(DISTFILES); do \
if test -f $$file; then dir='.'; else dir='$(srcdir)'; fi; \
cp -p "$$dir/$$file" '$(distdir)'/$$file || exit 1; \
done
force :