/* Conversion from and to CP1258.
   Copyright (C) 1998, 2001, 2002, 2004 Free Software Foundation, Inc.
   This file is part of the GNU C Library.
   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998,
   and Bruno Haible <haible@clisp.cons.org>, 2001.

   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.  */

#include <dlfcn.h>
#include <stdint.h>
#include <assert.h>
#include <stdlib.h>

#define NELEMS(arr) (sizeof (arr) / sizeof (arr[0]))

/* Definitions used in the body of the `gconv' function.  */
#define CHARSET_NAME		"CP1258//"
#define FROM_LOOP		from_cp1258
#define TO_LOOP			to_cp1258
#define DEFINE_INIT		1
#define DEFINE_FINI		1
#define FROM_LOOP_MIN_NEEDED_FROM	1
#define FROM_LOOP_MAX_NEEDED_FROM	1
#define FROM_LOOP_MIN_NEEDED_TO		4
#define FROM_LOOP_MAX_NEEDED_TO		4
#define TO_LOOP_MIN_NEEDED_FROM		4
#define TO_LOOP_MAX_NEEDED_FROM		4
#define TO_LOOP_MIN_NEEDED_TO		1
#define TO_LOOP_MAX_NEEDED_TO		2
#define PREPARE_LOOP \
  int saved_state;							      \
  int *statep = &data->__statep->__count;
#define EXTRA_LOOP_ARGS		, statep


/* Since we might have to reset input pointer we must be able to save
   and restore the state.  */
#define SAVE_RESET_STATE(Save) \
  if (Save)								      \
    saved_state = *statep;						      \
  else									      \
    *statep = saved_state


/* During CP1258 to UCS4 conversion, the COUNT element of the state
   contains the last UCS4 character, shifted by 3 bits.  */


/* Since this is a stateful encoding we have to provide code which resets
   the output state to the initial state.  This has to be done during the
   flushing.  */
#define EMIT_SHIFT_TO_INIT \
  if (data->__statep->__count != 0)					      \
    {									      \
      if (FROM_DIRECTION)						      \
	{								      \
	  if (__builtin_expect (outbuf + 4 <= outend, 1))		      \
	    {								      \
	      /* Write out the last character.  */			      \
	      *((uint32_t *) outbuf) = data->__statep->__count >> 3;	      \
	      outbuf += sizeof (uint32_t);				      \
	      data->__statep->__count = 0;				      \
	    }								      \
	  else								      \
	    /* We don't have enough room in the output buffer.  */	      \
	    status = __GCONV_FULL_OUTPUT;				      \
	}								      \
      else								      \
	/* We don't use shift states in the TO_DIRECTION.  */		      \
	data->__statep->__count = 0;					      \
    }


/* First define the conversion function from CP1258 to UCS4.  */

static const uint16_t to_ucs4[128] =
  {
    /* 0x80 */
    0x20AC,      0, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
    0x02C6, 0x2030,      0, 0x2039, 0x0152,      0,      0,      0,
    /* 0x90 */
         0, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
    0x02DC, 0x2122,      0, 0x203A, 0x0153,      0,      0, 0x0178,
    /* 0xA0 */
    0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
    0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
    /* 0xB0 */
    0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
    0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
    /* 0xC0 */
    0x00C0, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
    0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x0300, 0x00CD, 0x00CE, 0x00CF,
    /* 0xD0 */
    0x0110, 0x00D1, 0x0309, 0x00D3, 0x00D4, 0x01A0, 0x00D6, 0x00D7,
    0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x01AF, 0x0303, 0x00DF,
    /* 0xE0 */
    0x00E0, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
    0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0301, 0x00ED, 0x00EE, 0x00EF,
    /* 0xF0 */
    0x0111, 0x00F1, 0x0323, 0x00F3, 0x00F4, 0x01A1, 0x00F6, 0x00F7,
    0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x01B0, 0x20AB, 0x00FF,
  };

/* CP1258 contains five combining characters:
   0x0300, 0x0301, 0x0303, 0x0309, 0x0323.  */

/* Composition tables for each of the relevant combining characters.  */
static const struct
{
  uint16_t base;
  uint16_t composed;
} comp_table_data[] =
  {
#define COMP_TABLE_IDX_0300 0
#define COMP_TABLE_LEN_0300 31
    { 0x0041, 0x00C0 },
    { 0x0045, 0x00C8 },
    { 0x0049, 0x00CC },
    { 0x004E, 0x01F8 },
    { 0x004F, 0x00D2 },
    { 0x0055, 0x00D9 },
    { 0x0057, 0x1E80 },
    { 0x0059, 0x1EF2 },
    { 0x0061, 0x00E0 },
    { 0x0065, 0x00E8 },
    { 0x0069, 0x00EC },
    { 0x006E, 0x01F9 },
    { 0x006F, 0x00F2 },
    { 0x0075, 0x00F9 },
    { 0x0077, 0x1E81 },
    { 0x0079, 0x1EF3 },
    { 0x00A8, 0x1FED },
    { 0x00C2, 0x1EA6 },
    { 0x00CA, 0x1EC0 },
    { 0x00D4, 0x1ED2 },
    { 0x00DC, 0x01DB },
    { 0x00E2, 0x1EA7 },
    { 0x00EA, 0x1EC1 },
    { 0x00F4, 0x1ED3 },
    { 0x00FC, 0x01DC },
    { 0x0102, 0x1EB0 },
    { 0x0103, 0x1EB1 },
    /*{ 0x0112, 0x1E14 },*/
    /*{ 0x0113, 0x1E15 },*/
    /*{ 0x014C, 0x1E50 },*/
    /*{ 0x014D, 0x1E51 },*/
    { 0x01A0, 0x1EDC },
    { 0x01A1, 0x1EDD },
    { 0x01AF, 0x1EEA },
    { 0x01B0, 0x1EEB },
#define COMP_TABLE_IDX_0301 (COMP_TABLE_IDX_0300 + COMP_TABLE_LEN_0300)
#define COMP_TABLE_LEN_0301 60
    { 0x0041, 0x00C1 },
    { 0x0043, 0x0106 },
    { 0x0045, 0x00C9 },
    { 0x0047, 0x01F4 },
    { 0x0049, 0x00CD },
    { 0x004B, 0x1E30 },
    { 0x004C, 0x0139 },
    { 0x004D, 0x1E3E },
    { 0x004E, 0x0143 },
    { 0x004F, 0x00D3 },
    { 0x0050, 0x1E54 },
    { 0x0052, 0x0154 },
    { 0x0053, 0x015A },
    { 0x0055, 0x00DA },
    { 0x0057, 0x1E82 },
    { 0x0059, 0x00DD },
    { 0x005A, 0x0179 },
    { 0x0061, 0x00E1 },
    { 0x0063, 0x0107 },
    { 0x0065, 0x00E9 },
    { 0x0067, 0x01F5 },
    { 0x0069, 0x00ED },
    { 0x006B, 0x1E31 },
    { 0x006C, 0x013A },
    { 0x006D, 0x1E3F },
    { 0x006E, 0x0144 },
    { 0x006F, 0x00F3 },
    { 0x0070, 0x1E55 },
    { 0x0072, 0x0155 },
    { 0x0073, 0x015B },
    { 0x0075, 0x00FA },
    { 0x0077, 0x1E83 },
    { 0x0079, 0x00FD },
    { 0x007A, 0x017A },
    { 0x00A5, 0x0385 },
    { 0x00A8, 0x1FEE },
    { 0x00C2, 0x1EA4 },
    { 0x00C5, 0x01FA },
    { 0x00C6, 0x01FC },
    { 0x00C7, 0x1E08 },
    { 0x00CA, 0x1EBE },
    { 0x00CF, 0x1E2E },
    { 0x00D4, 0x1ED0 },
    /*{ 0x00D5, 0x1E4C },*/
    { 0x00D8, 0x01FE },
    { 0x00DC, 0x01D7 },
    { 0x00E2, 0x1EA5 },
    { 0x00E5, 0x01FB },
    { 0x00E6, 0x01FD },
    { 0x00E7, 0x1E09 },
    { 0x00EA, 0x1EBF },
    { 0x00EF, 0x1E2F },
    { 0x00F4, 0x1ED1 },
    /*{ 0x00F5, 0x1E4D },*/
    { 0x00F8, 0x01FF },
    { 0x00FC, 0x01D8 },
    { 0x0102, 0x1EAE },
    { 0x0103, 0x1EAF },
    /*{ 0x0112, 0x1E16 },*/
    /*{ 0x0113, 0x1E17 },*/
    /*{ 0x014C, 0x1E52 },*/
    /*{ 0x014D, 0x1E53 },*/
    /*{ 0x0168, 0x1E78 },*/
    /*{ 0x0169, 0x1E79 },*/
    { 0x01A0, 0x1EDA },
    { 0x01A1, 0x1EDB },
    { 0x01AF, 0x1EE8 },
    { 0x01B0, 0x1EE9 },
#define COMP_TABLE_IDX_0303 (COMP_TABLE_IDX_0301 + COMP_TABLE_LEN_0301)
#define COMP_TABLE_LEN_0303 34
    { 0x0041, 0x00C3 },
    { 0x0045, 0x1EBC },
    { 0x0049, 0x0128 },
    { 0x004E, 0x00D1 },
    { 0x004F, 0x00D5 },
    { 0x0055, 0x0168 },
    { 0x0056, 0x1E7C },
    { 0x0059, 0x1EF8 },
    { 0x0061, 0x00E3 },
    { 0x0065, 0x1EBD },
    { 0x0069, 0x0129 },
    { 0x006E, 0x00F1 },
    { 0x006F, 0x00F5 },
    { 0x0075, 0x0169 },
    { 0x0076, 0x1E7D },
    { 0x0079, 0x1EF9 },
    { 0x00C2, 0x1EAA },
    { 0x00CA, 0x1EC4 },
    { 0x00D3, 0x1E4C },
    { 0x00D4, 0x1ED6 },
    { 0x00D6, 0x1E4E },
    { 0x00DA, 0x1E78 },
    { 0x00E2, 0x1EAB },
    { 0x00EA, 0x1EC5 },
    { 0x00F3, 0x1E4D },
    { 0x00F4, 0x1ED7 },
    { 0x00F6, 0x1E4F },
    { 0x00FA, 0x1E79 },
    { 0x0102, 0x1EB4 },
    { 0x0103, 0x1EB5 },
    { 0x01A0, 0x1EE0 },
    { 0x01A1, 0x1EE1 },
    { 0x01AF, 0x1EEE },
    { 0x01B0, 0x1EEF },
#define COMP_TABLE_IDX_0309 (COMP_TABLE_IDX_0303 + COMP_TABLE_LEN_0303)
#define COMP_TABLE_LEN_0309 24
    { 0x0041, 0x1EA2 },
    { 0x0045, 0x1EBA },
    { 0x0049, 0x1EC8 },
    { 0x004F, 0x1ECE },
    { 0x0055, 0x1EE6 },
    { 0x0059, 0x1EF6 },
    { 0x0061, 0x1EA3 },
    { 0x0065, 0x1EBB },
    { 0x0069, 0x1EC9 },
    { 0x006F, 0x1ECF },
    { 0x0075, 0x1EE7 },
    { 0x0079, 0x1EF7 },
    { 0x00C2, 0x1EA8 },
    { 0x00CA, 0x1EC2 },
    { 0x00D4, 0x1ED4 },
    { 0x00E2, 0x1EA9 },
    { 0x00EA, 0x1EC3 },
    { 0x00F4, 0x1ED5 },
    { 0x0102, 0x1EB2 },
    { 0x0103, 0x1EB3 },
    { 0x01A0, 0x1EDE },
    { 0x01A1, 0x1EDF },
    { 0x01AF, 0x1EEC },
    { 0x01B0, 0x1EED },
#define COMP_TABLE_IDX_0323 (COMP_TABLE_IDX_0309 + COMP_TABLE_LEN_0309)
#define COMP_TABLE_LEN_0323 50
    { 0x0041, 0x1EA0 },
    { 0x0042, 0x1E04 },
    { 0x0044, 0x1E0C },
    { 0x0045, 0x1EB8 },
    { 0x0048, 0x1E24 },
    { 0x0049, 0x1ECA },
    { 0x004B, 0x1E32 },
    { 0x004C, 0x1E36 },
    { 0x004D, 0x1E42 },
    { 0x004E, 0x1E46 },
    { 0x004F, 0x1ECC },
    { 0x0052, 0x1E5A },
    { 0x0053, 0x1E62 },
    { 0x0054, 0x1E6C },
    { 0x0055, 0x1EE4 },
    { 0x0056, 0x1E7E },
    { 0x0057, 0x1E88 },
    { 0x0059, 0x1EF4 },
    { 0x005A, 0x1E92 },
    { 0x0061, 0x1EA1 },
    { 0x0062, 0x1E05 },
    { 0x0064, 0x1E0D },
    { 0x0065, 0x1EB9 },
    { 0x0068, 0x1E25 },
    { 0x0069, 0x1ECB },
    { 0x006B, 0x1E33 },
    { 0x006C, 0x1E37 },
    { 0x006D, 0x1E43 },
    { 0x006E, 0x1E47 },
    { 0x006F, 0x1ECD },
    { 0x0072, 0x1E5B },
    { 0x0073, 0x1E63 },
    { 0x0074, 0x1E6D },
    { 0x0075, 0x1EE5 },
    { 0x0076, 0x1E7F },
    { 0x0077, 0x1E89 },
    { 0x0079, 0x1EF5 },
    { 0x007A, 0x1E93 },
    { 0x00C2, 0x1EAC },
    { 0x00CA, 0x1EC6 },
    { 0x00D4, 0x1ED8 },
    { 0x00E2, 0x1EAD },
    { 0x00EA, 0x1EC7 },
    { 0x00F4, 0x1ED9 },
    { 0x0102, 0x1EB6 },
    { 0x0103, 0x1EB7 },
    { 0x01A0, 0x1EE2 },
    { 0x01A1, 0x1EE3 },
    { 0x01AF, 0x1EF0 },
    { 0x01B0, 0x1EF1 },
#define COMP_TABLE_IDX_END (COMP_TABLE_IDX_0323 + COMP_TABLE_LEN_0323)
  };
/* Compile-time verification of table size.  */
typedef int verify1[(NELEMS (comp_table_data) == COMP_TABLE_IDX_END) - 1];

static const struct
{
  unsigned int idx;
  unsigned int len;
} comp_table[5] =
  {
    { COMP_TABLE_IDX_0300, COMP_TABLE_LEN_0300 },
    { COMP_TABLE_IDX_0301, COMP_TABLE_LEN_0301 },
    { COMP_TABLE_IDX_0303, COMP_TABLE_LEN_0303 },
    { COMP_TABLE_IDX_0309, COMP_TABLE_LEN_0309 },
    { COMP_TABLE_IDX_0323, COMP_TABLE_LEN_0323 }
  };

#define MIN_NEEDED_INPUT	FROM_LOOP_MIN_NEEDED_FROM
#define MAX_NEEDED_INPUT	FROM_LOOP_MAX_NEEDED_FROM
#define MIN_NEEDED_OUTPUT	FROM_LOOP_MIN_NEEDED_TO
#define MAX_NEEDED_OUTPUT	FROM_LOOP_MAX_NEEDED_TO
#define LOOPFCT			FROM_LOOP
#define BODY \
  {									      \
    uint32_t ch = *inptr;						      \
    uint32_t last_ch;							      \
    int must_buffer_ch;							      \
									      \
    if (ch >= 0x80)							      \
      {									      \
	ch = to_ucs4[ch - 0x80];					      \
	if (__builtin_expect (ch == L'\0', 0))				      \
	  {								      \
	    /* This is an illegal character.  */			      \
	    STANDARD_FROM_LOOP_ERR_HANDLER (1);				      \
	  }								      \
      }									      \
									      \
    /* Determine whether there is a buffered character pending.  */	      \
    last_ch = *statep >> 3;						      \
									      \
    /* We have to buffer ch if it is a possible match in comp_table_data.  */ \
    must_buffer_ch = (ch >= 0x0041 && ch <= 0x01b0);			      \
									      \
    if (last_ch)							      \
      {									      \
	if (ch >= 0x0300 && ch < 0x0340)				      \
	  {								      \
	    /* See whether last_ch and ch can be combined.  */		      \
	    unsigned int i, i1, i2;					      \
									      \
	    switch (ch)							      \
	      {								      \
	      case 0x0300:						      \
		i = 0;							      \
		break;							      \
	      case 0x0301:						      \
		i = 1;							      \
		break;							      \
	      case 0x0303:						      \
		i = 2;							      \
		break;							      \
	      case 0x0309:						      \
		i = 3;							      \
		break;							      \
	      case 0x0323:						      \
		i = 4;							      \
		break;							      \
	      default:							      \
		abort ();						      \
	      }								      \
									      \
	    i1 = comp_table[i].idx;					      \
	    i2 = i1 + comp_table[i].len - 1;				      \
									      \
	    if (last_ch >= comp_table_data[i1].base			      \
		&& last_ch <= comp_table_data[i2].base)			      \
	      {								      \
		for (;;)						      \
		  {							      \
		    i = (i1 + i2) >> 1;					      \
		    if (last_ch == comp_table_data[i].base)		      \
		      break;						      \
		    if (last_ch < comp_table_data[i].base)		      \
		      {							      \
			if (i1 == i)					      \
			  goto not_combining;				      \
			i2 = i;						      \
		      }							      \
		    else						      \
		      {							      \
			if (i1 != i)					      \
			  i1 = i;					      \
			else						      \
			  {						      \
			    i = i2;					      \
			    if (last_ch == comp_table_data[i].base)	      \
			      break;					      \
			    goto not_combining;				      \
			  }						      \
		      }							      \
		  }							      \
		last_ch = comp_table_data[i].composed;			      \
		/* Output the combined character.  */			      \
		put32 (outptr, last_ch);				      \
		outptr += 4;						      \
		*statep = 0;						      \
		++inptr;						      \
		continue;						      \
	      }								      \
	  }								      \
									      \
      not_combining:							      \
	/* Output the buffered character.  */				      \
	put32 (outptr, last_ch);					      \
	outptr += 4;							      \
	*statep = 0;							      \
									      \
	/* If we don't have enough room to output ch as well, then deal	      \
	   with it in another round.  */				      \
	if (!must_buffer_ch && __builtin_expect (outptr + 4 > outend, 0))     \
	  continue;							      \
      }									      \
									      \
    if (must_buffer_ch)							      \
      *statep = ch << 3;						      \
    else								      \
      {									      \
	put32 (outptr, ch);						      \
	outptr += 4;							      \
      }									      \
    ++inptr;								      \
  }
#define LOOP_NEED_FLAGS
#define EXTRA_LOOP_DECLS	, int *statep
#define ONEBYTE_BODY \
  {									      \
    uint32_t ch;							      \
									      \
    if (c < 0x80)							      \
      ch = c;								      \
    else								      \
      {									      \
	ch = to_ucs4[c - 0x80];						      \
	if (ch == L'\0')						      \
	  return WEOF;							      \
      }									      \
    if (ch >= 0x0041 && ch <= 0x01b0)					      \
      return WEOF;							      \
    return ch;								      \
  }
#include <iconv/loop.c>


/* Next, define the conversion function from UCS4 to CP1258.  */

static const unsigned char from_ucs4[] =
  {
#define FROM_IDX_00 0
                            0xc4, 0xc5, 0xc6, 0xc7, /* 0x00c4-0x00c7 */
    0xc8, 0xc9, 0xca, 0xcb, 0x00, 0xcd, 0xce, 0xcf, /* 0x00c8-0x00cf */
    0x00, 0xd1, 0x00, 0xd3, 0xd4, 0x00, 0xd6, 0xd7, /* 0x00d0-0x00d7 */
    0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0x00d8-0x00df */
    0xe0, 0xe1, 0xe2, 0x00, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x00e0-0x00e7 */
    0xe8, 0xe9, 0xea, 0xeb, 0x00, 0xed, 0xee, 0xef, /* 0x00e8-0x00ef */
    0x00, 0xf1, 0x00, 0xf3, 0xf4, 0x00, 0xf6, 0xf7, /* 0x00f0-0x00f7 */
    0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0xff, /* 0x00f8-0x00ff */
    0x00, 0x00, 0xc3, 0xe3, 0x00, 0x00, 0x00, 0x00, /* 0x0100-0x0107 */
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0108-0x010f */
    0xd0, 0xf0,                                     /* 0x0110-0x0111 */
#define FROM_IDX_01 (FROM_IDX_00 + 78)
                0x8c, 0x9c, 0x00, 0x00, 0x00, 0x00, /* 0x0152-0x0157 */
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0158-0x015f */
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0160-0x0167 */
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0168-0x016f */
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0170-0x0177 */
    0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0178-0x017f */
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0180-0x0187 */
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0188-0x018f */
    0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0190-0x0197 */
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0198-0x019f */
    0xd5, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01a0-0x01a7 */
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, /* 0x01a8-0x01af */
    0xfd,                                           /* 0x01b0-0x01b0 */
#define FROM_IDX_02 (FROM_IDX_01 + 95)
                                        0x88, 0x00, /* 0x02c6-0x02c7 */
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02c8-0x02cf */
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02d0-0x02d7 */
    0x00, 0x00, 0x00, 0x00, 0x98,                   /* 0x02d8-0x02dc */
#define FROM_IDX_03 (FROM_IDX_02 + 23)
    0xcc, 0xec, 0x00, 0xde, 0x00, 0x00, 0x00, 0x00, /* 0x0300-0x0307 */
    0x00, 0xd2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0308-0x030f */
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0310-0x0317 */
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0318-0x031f */
    0x00, 0x00, 0x00, 0xf2,                         /* 0x0320-0x0323 */
#define FROM_IDX_20 (FROM_IDX_03 + 36)
                      0x96, 0x97, 0x00, 0x00, 0x00, /* 0x2013-0x2017 */
    0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x2018-0x201f */
    0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x2020-0x2027 */
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2028-0x202f */
    0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2030-0x2037 */
    0x00, 0x8b, 0x9b,                               /* 0x2038-0x203a */
#define FROM_IDX_FF (FROM_IDX_20 + 40)
  };
/* Compile-time verification of table size.  */
typedef int verify2[(NELEMS (from_ucs4) == FROM_IDX_FF) - 1];

/* Decomposition table for the relevant Unicode characters. */
static const struct
{
  uint16_t composed;
  uint32_t base:8;
  uint32_t comb1:8;
} decomp_table[] =
  {
    { 0x00c0, 0x41, 0xcc },
    { 0x00c1, 0x41, 0xec },
    { 0x00c3, 0x41, 0xde },
    { 0x00c8, 0x45, 0xcc },
    { 0x00c9, 0x45, 0xec },
    { 0x00cc, 0x49, 0xcc },
    { 0x00cd, 0x49, 0xec },
    { 0x00d1, 0x4e, 0xde },
    { 0x00d2, 0x4f, 0xcc },
    { 0x00d3, 0x4f, 0xec },
    { 0x00d5, 0x4f, 0xde },
    { 0x00d9, 0x55, 0xcc },
    { 0x00da, 0x55, 0xec },
    { 0x00dd, 0x59, 0xec },
    { 0x00e0, 0x61, 0xcc },
    { 0x00e1, 0x61, 0xec },
    { 0x00e3, 0x61, 0xde },
    { 0x00e8, 0x65, 0xcc },
    { 0x00e9, 0x65, 0xec },
    { 0x00ec, 0x69, 0xcc },
    { 0x00ed, 0x69, 0xec },
    { 0x00f1, 0x6e, 0xde },
    { 0x00f2, 0x6f, 0xcc },
    { 0x00f3, 0x6f, 0xec },
    { 0x00f5, 0x6f, 0xde },
    { 0x00f9, 0x75, 0xcc },
    { 0x00fa, 0x75, 0xec },
    { 0x00fd, 0x79, 0xec },
    { 0x0106, 0x43, 0xec },
    { 0x0107, 0x63, 0xec },
    { 0x0128, 0x49, 0xde },
    { 0x0129, 0x69, 0xde },
    { 0x0139, 0x4c, 0xec },
    { 0x013a, 0x6c, 0xec },
    { 0x0143, 0x4e, 0xec },
    { 0x0144, 0x6e, 0xec },
    { 0x0154, 0x52, 0xec },
    { 0x0155, 0x72, 0xec },
    { 0x015a, 0x53, 0xec },
    { 0x015b, 0x73, 0xec },
    { 0x0168, 0x55, 0xde },
    { 0x0169, 0x75, 0xde },
    { 0x0179, 0x5a, 0xec },
    { 0x017a, 0x7a, 0xec },
    { 0x01d7, 0xdc, 0xec },
    { 0x01d8, 0xfc, 0xec },
    { 0x01db, 0xdc, 0xcc },
    { 0x01dc, 0xfc, 0xcc },
    { 0x01f4, 0x47, 0xec },
    { 0x01f5, 0x67, 0xec },
    { 0x01f8, 0x4e, 0xcc },
    { 0x01f9, 0x6e, 0xcc },
    { 0x01fa, 0xc5, 0xec },
    { 0x01fb, 0xe5, 0xec },
    { 0x01fc, 0xc6, 0xec },
    { 0x01fd, 0xe6, 0xec },
    { 0x01fe, 0xd8, 0xec },
    { 0x01ff, 0xf8, 0xec },
    { 0x0385, 0xa5, 0xec },
    { 0x1e04, 0x42, 0xf2 },
    { 0x1e05, 0x62, 0xf2 },
    { 0x1e08, 0xc7, 0xec },
    { 0x1e09, 0xe7, 0xec },
    { 0x1e0c, 0x44, 0xf2 },
    { 0x1e0d, 0x64, 0xf2 },
    { 0x1e24, 0x48, 0xf2 },
    { 0x1e25, 0x68, 0xf2 },
    { 0x1e2e, 0xcf, 0xec },
    { 0x1e2f, 0xef, 0xec },
    { 0x1e30, 0x4b, 0xec },
    { 0x1e31, 0x6b, 0xec },
    { 0x1e32, 0x4b, 0xf2 },
    { 0x1e33, 0x6b, 0xf2 },
    { 0x1e36, 0x4c, 0xf2 },
    { 0x1e37, 0x6c, 0xf2 },
    { 0x1e3e, 0x4d, 0xec },
    { 0x1e3f, 0x6d, 0xec },
    { 0x1e42, 0x4d, 0xf2 },
    { 0x1e43, 0x6d, 0xf2 },
    { 0x1e46, 0x4e, 0xf2 },
    { 0x1e47, 0x6e, 0xf2 },
    { 0x1e4c, 0xd3, 0xde }, /*{ 0x1e4c, 0x00d5, 0xec }, { 0x1e4c, 0x004f, 1, 0xde },*/
    { 0x1e4d, 0xf3, 0xde }, /*{ 0x1e4d, 0x00f5, 0xec }, { 0x1e4d, 0x006f, 1, 0xde },*/
    { 0x1e4e, 0xd6, 0xde },
    { 0x1e4f, 0xf6, 0xde },
    { 0x1e54, 0x50, 0xec },
    { 0x1e55, 0x70, 0xec },
    { 0x1e5a, 0x52, 0xf2 },
    { 0x1e5b, 0x72, 0xf2 },
    { 0x1e62, 0x53, 0xf2 },
    { 0x1e63, 0x73, 0xf2 },
    { 0x1e6c, 0x54, 0xf2 },
    { 0x1e6d, 0x74, 0xf2 },
    { 0x1e78, 0xda, 0xde }, /*{ 0x1e78, 0x0168, 0xec }, { 0x1e78, 0x0055, 1, 0xde },*/
    { 0x1e79, 0xfa, 0xde }, /*{ 0x1e79, 0x0169, 0xec }, { 0x1e79, 0x0075, 1, 0xde },*/
    { 0x1e7c, 0x56, 0xde },
    { 0x1e7d, 0x76, 0xde },
    { 0x1e7e, 0x56, 0xf2 },
    { 0x1e7f, 0x76, 0xf2 },
    { 0x1e80, 0x57, 0xcc },
    { 0x1e81, 0x77, 0xcc },
    { 0x1e82, 0x57, 0xec },
    { 0x1e83, 0x77, 0xec },
    { 0x1e88, 0x57, 0xf2 },
    { 0x1e89, 0x77, 0xf2 },
    { 0x1e92, 0x5a, 0xf2 },
    { 0x1e93, 0x7a, 0xf2 },
    { 0x1ea0, 0x41, 0xf2 },
    { 0x1ea1, 0x61, 0xf2 },
    { 0x1ea2, 0x41, 0xd2 },
    { 0x1ea3, 0x61, 0xd2 },
    { 0x1ea4, 0xc2, 0xec },
    { 0x1ea5, 0xe2, 0xec },
    { 0x1ea6, 0xc2, 0xcc },
    { 0x1ea7, 0xe2, 0xcc },
    { 0x1ea8, 0xc2, 0xd2 },
    { 0x1ea9, 0xe2, 0xd2 },
    { 0x1eaa, 0xc2, 0xde },
    { 0x1eab, 0xe2, 0xde },
    { 0x1eac, 0xc2, 0xf2 },
    { 0x1ead, 0xe2, 0xf2 },
    { 0x1eae, 0xc3, 0xec },
    { 0x1eaf, 0xe3, 0xec },
    { 0x1eb0, 0xc3, 0xcc },
    { 0x1eb1, 0xe3, 0xcc },
    { 0x1eb2, 0xc3, 0xd2 },
    { 0x1eb3, 0xe3, 0xd2 },
    { 0x1eb4, 0xc3, 0xde },
    { 0x1eb5, 0xe3, 0xde },
    { 0x1eb6, 0xc3, 0xf2 },
    { 0x1eb7, 0xe3, 0xf2 },
    { 0x1eb8, 0x45, 0xf2 },
    { 0x1eb9, 0x65, 0xf2 },
    { 0x1eba, 0x45, 0xd2 },
    { 0x1ebb, 0x65, 0xd2 },
    { 0x1ebc, 0x45, 0xde },
    { 0x1ebd, 0x65, 0xde },
    { 0x1ebe, 0xca, 0xec },
    { 0x1ebf, 0xea, 0xec },
    { 0x1ec0, 0xca, 0xcc },
    { 0x1ec1, 0xea, 0xcc },
    { 0x1ec2, 0xca, 0xd2 },
    { 0x1ec3, 0xea, 0xd2 },
    { 0x1ec4, 0xca, 0xde },
    { 0x1ec5, 0xea, 0xde },
    { 0x1ec6, 0xca, 0xf2 },
    { 0x1ec7, 0xea, 0xf2 },
    { 0x1ec8, 0x49, 0xd2 },
    { 0x1ec9, 0x69, 0xd2 },
    { 0x1eca, 0x49, 0xf2 },
    { 0x1ecb, 0x69, 0xf2 },
    { 0x1ecc, 0x4f, 0xf2 },
    { 0x1ecd, 0x6f, 0xf2 },
    { 0x1ece, 0x4f, 0xd2 },
    { 0x1ecf, 0x6f, 0xd2 },
    { 0x1ed0, 0xd4, 0xec },
    { 0x1ed1, 0xf4, 0xec },
    { 0x1ed2, 0xd4, 0xcc },
    { 0x1ed3, 0xf4, 0xcc },
    { 0x1ed4, 0xd4, 0xd2 },
    { 0x1ed5, 0xf4, 0xd2 },
    { 0x1ed6, 0xd4, 0xde },
    { 0x1ed7, 0xf4, 0xde },
    { 0x1ed8, 0xd4, 0xf2 },
    { 0x1ed9, 0xf4, 0xf2 },
    { 0x1eda, 0xd5, 0xec },
    { 0x1edb, 0xf5, 0xec },
    { 0x1edc, 0xd5, 0xcc },
    { 0x1edd, 0xf5, 0xcc },
    { 0x1ede, 0xd5, 0xd2 },
    { 0x1edf, 0xf5, 0xd2 },
    { 0x1ee0, 0xd5, 0xde },
    { 0x1ee1, 0xf5, 0xde },
    { 0x1ee2, 0xd5, 0xf2 },
    { 0x1ee3, 0xf5, 0xf2 },
    { 0x1ee4, 0x55, 0xf2 },
    { 0x1ee5, 0x75, 0xf2 },
    { 0x1ee6, 0x55, 0xd2 },
    { 0x1ee7, 0x75, 0xd2 },
    { 0x1ee8, 0xdd, 0xec },
    { 0x1ee9, 0xfd, 0xec },
    { 0x1eea, 0xdd, 0xcc },
    { 0x1eeb, 0xfd, 0xcc },
    { 0x1eec, 0xdd, 0xd2 },
    { 0x1eed, 0xfd, 0xd2 },
    { 0x1eee, 0xdd, 0xde },
    { 0x1eef, 0xfd, 0xde },
    { 0x1ef0, 0xdd, 0xf2 },
    { 0x1ef1, 0xfd, 0xf2 },
    { 0x1ef2, 0x59, 0xcc },
    { 0x1ef3, 0x79, 0xcc },
    { 0x1ef4, 0x59, 0xf2 },
    { 0x1ef5, 0x79, 0xf2 },
    { 0x1ef6, 0x59, 0xd2 },
    { 0x1ef7, 0x79, 0xd2 },
    { 0x1ef8, 0x59, 0xde },
    { 0x1ef9, 0x79, 0xde },
    { 0x1fed, 0xa8, 0xcc },
    { 0x1fee, 0xa8, 0xec },
  };

#define MIN_NEEDED_INPUT	TO_LOOP_MIN_NEEDED_FROM
#define MAX_NEEDED_INPUT	TO_LOOP_MAX_NEEDED_FROM
#define MIN_NEEDED_OUTPUT	TO_LOOP_MIN_NEEDED_TO
#define MAX_NEEDED_OUTPUT	TO_LOOP_MAX_NEEDED_TO
#define LOOPFCT			TO_LOOP
#define BODY \
  {									      \
    uint32_t ch = get32 (inptr);					      \
									      \
    if (ch < 0x0080 || (ch >= 0x00a0 && ch < 0x00c3))			      \
      {									      \
	*outptr++ = ch;							      \
	inptr += 4;							      \
      }									      \
    else								      \
      {									      \
	unsigned char res;						      \
									      \
	if (ch >= 0x00c4 && ch < 0x0112)				      \
	  res = from_ucs4[ch - 0x00c4 + FROM_IDX_00];			      \
	else if (ch >= 0x0152 && ch < 0x01b1)				      \
	  res = from_ucs4[ch - 0x0152 + FROM_IDX_01];			      \
	else if (ch >= 0x02c6 && ch < 0x02dd)				      \
	  res = from_ucs4[ch - 0x02c6 + FROM_IDX_02];			      \
	else if (ch >= 0x0300 && ch < 0x0324)				      \
	  res = from_ucs4[ch - 0x0300 + FROM_IDX_03];			      \
	else if (ch >= 0x0340 && ch < 0x0342) /* Vietnamese tone marks */     \
	  res = from_ucs4[ch - 0x0340 + FROM_IDX_03];			      \
	else if (ch >= 0x2013 && ch < 0x203b)				      \
	  res = from_ucs4[ch - 0x2013 + FROM_IDX_20];			      \
	else if (ch == 0x20ab)						      \
	  res = 0xfe;							      \
	else if (ch == 0x20ac)						      \
	  res = 0x80;							      \
	else if (ch == 0x2122)						      \
	  res = 0x99;							      \
	else								      \
	  {								      \
	    UNICODE_TAG_HANDLER (ch, 4);				      \
	    res = 0;							      \
	  }								      \
									      \
	if (__builtin_expect (res != 0, 1))				      \
	  {								      \
	    *outptr++ = res;						      \
	    inptr += 4;							      \
	  }								      \
	else								      \
	  {								      \
	    /* Try canonical decomposition.  */				      \
	    unsigned int i1, i2;					      \
									      \
	    i1 = 0;							      \
	    i2 = sizeof (decomp_table) / sizeof (decomp_table[0]) - 1;	      \
	    if (ch >= decomp_table[i1].composed				      \
		&& ch <= decomp_table[i2].composed)			      \
	      {								      \
		unsigned int i;						      \
									      \
		for (;;)						      \
		  {							      \
		    i = (i1 + i2) >> 1;					      \
		    if (ch == decomp_table[i].composed)			      \
		      break;						      \
		    if (ch < decomp_table[i].composed)			      \
		      {							      \
			if (i1 == i)					      \
			  goto failed;					      \
			i2 = i;						      \
		      }							      \
		    else						      \
		      {							      \
			if (i1 != i)					      \
			  i1 = i;					      \
			else						      \
			  {						      \
			    i = i2;					      \
			    if (ch == decomp_table[i].composed)		      \
			      break;					      \
			    goto failed;				      \
			  }						      \
		      }							      \
		  }							      \
									      \
		/* See whether we have room for two bytes.  */		      \
		if (__builtin_expect (outptr + 1 >= outend, 0))		      \
		  {							      \
		    result = __GCONV_FULL_OUTPUT;			      \
		    break;						      \
		  }							      \
									      \
		/* Found a canonical decomposition.  */			      \
		*outptr++ = decomp_table[i].base;			      \
		*outptr++ = decomp_table[i].comb1;			      \
		inptr += 4;						      \
		continue;						      \
	      }								      \
									      \
	  failed:							      \
	    /* This is an illegal character.  */			      \
	    STANDARD_TO_LOOP_ERR_HANDLER (4);				      \
	  }								      \
      }									      \
  }
#define LOOP_NEED_FLAGS
#define EXTRA_LOOP_DECLS	, int *statep
#include <iconv/loop.c>


/* Now define the toplevel functions.  */
#include <iconv/skeleton.c>
