Blame src/regenc.c

Packit b89d10
/**********************************************************************
Packit b89d10
  regenc.c -  Oniguruma (regular expression library)
Packit b89d10
**********************************************************************/
Packit b89d10
/*-
Packit b89d10
 * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
Packit b89d10
 * All rights reserved.
Packit b89d10
 *
Packit b89d10
 * Redistribution and use in source and binary forms, with or without
Packit b89d10
 * modification, are permitted provided that the following conditions
Packit b89d10
 * are met:
Packit b89d10
 * 1. Redistributions of source code must retain the above copyright
Packit b89d10
 *    notice, this list of conditions and the following disclaimer.
Packit b89d10
 * 2. Redistributions in binary form must reproduce the above copyright
Packit b89d10
 *    notice, this list of conditions and the following disclaimer in the
Packit b89d10
 *    documentation and/or other materials provided with the distribution.
Packit b89d10
 *
Packit b89d10
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
Packit b89d10
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Packit b89d10
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
Packit b89d10
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
Packit b89d10
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Packit b89d10
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
Packit b89d10
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
Packit b89d10
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
Packit b89d10
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
Packit b89d10
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
Packit b89d10
 * SUCH DAMAGE.
Packit b89d10
 */
Packit b89d10
Packit b89d10
#include "regint.h"
Packit b89d10
Packit b89d10
OnigEncoding OnigEncDefaultCharEncoding = ONIG_ENCODING_INIT_DEFAULT;
Packit b89d10
Packit b89d10
#define INITED_LIST_SIZE  20
Packit b89d10
Packit b89d10
static int InitedListNum;
Packit b89d10
Packit b89d10
static struct {
Packit b89d10
  OnigEncoding enc;
Packit b89d10
  int          inited;
Packit b89d10
} InitedList[INITED_LIST_SIZE];
Packit b89d10
Packit b89d10
static int
Packit b89d10
enc_inited_entry(OnigEncoding enc)
Packit b89d10
{
Packit b89d10
  int i;
Packit b89d10
Packit b89d10
  for (i = 0; i < InitedListNum; i++) {
Packit b89d10
    if (InitedList[i].enc == enc) {
Packit b89d10
      InitedList[i].inited = 1;
Packit b89d10
      return i;
Packit b89d10
    }
Packit b89d10
  }
Packit b89d10
Packit b89d10
  i = InitedListNum;
Packit b89d10
  if (i < INITED_LIST_SIZE - 1) {
Packit b89d10
    InitedList[i].enc    = enc;
Packit b89d10
    InitedList[i].inited = 1;
Packit b89d10
    InitedListNum++;
Packit b89d10
    return i;
Packit b89d10
  }
Packit b89d10
Packit b89d10
  return -1;
Packit b89d10
}
Packit b89d10
Packit b89d10
static int
Packit b89d10
enc_is_inited(OnigEncoding enc)
Packit b89d10
{
Packit b89d10
  int i;
Packit b89d10
Packit b89d10
  for (i = 0; i < InitedListNum; i++) {
Packit b89d10
    if (InitedList[i].enc == enc) {
Packit b89d10
      return InitedList[i].inited;
Packit b89d10
    }
Packit b89d10
  }
Packit b89d10
Packit b89d10
  return 0;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_end(void)
Packit b89d10
{
Packit b89d10
  int i;
Packit b89d10
Packit b89d10
  for (i = 0; i < InitedListNum; i++) {
Packit b89d10
    InitedList[i].enc    = 0;
Packit b89d10
    InitedList[i].inited = 0;
Packit b89d10
  }
Packit b89d10
Packit b89d10
  InitedListNum = 0;
Packit b89d10
  return ONIG_NORMAL;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_init(void)
Packit b89d10
{
Packit b89d10
  return 0;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onig_initialize_encoding(OnigEncoding enc)
Packit b89d10
{
Packit b89d10
  int r;
Packit b89d10
Packit b89d10
  if (enc != ONIG_ENCODING_ASCII &&
Packit b89d10
      ONIGENC_IS_ASCII_COMPATIBLE_ENCODING(enc)) {
Packit b89d10
    OnigEncoding ascii = ONIG_ENCODING_ASCII;
Packit b89d10
    if (ascii->init != 0 && enc_is_inited(ascii) == 0) {
Packit b89d10
      r = ascii->init();
Packit b89d10
      if (r != ONIG_NORMAL) return r;
Packit b89d10
      enc_inited_entry(ascii);
Packit b89d10
    }
Packit b89d10
  }
Packit b89d10
Packit b89d10
  if (enc->init != 0 &&
Packit b89d10
      enc_is_inited(enc) == 0) {
Packit b89d10
    r = (enc->init)();
Packit b89d10
    if (r == ONIG_NORMAL)
Packit b89d10
      enc_inited_entry(enc);
Packit b89d10
    return r;
Packit b89d10
  }
Packit b89d10
Packit b89d10
  return 0;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern OnigEncoding
Packit b89d10
onigenc_get_default_encoding(void)
Packit b89d10
{
Packit b89d10
  return OnigEncDefaultCharEncoding;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_set_default_encoding(OnigEncoding enc)
Packit b89d10
{
Packit b89d10
  OnigEncDefaultCharEncoding = enc;
Packit b89d10
  return 0;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern UChar*
Packit b89d10
onigenc_strdup(OnigEncoding enc, const UChar* s, const UChar* end)
Packit b89d10
{
Packit b89d10
  int slen, term_len, i;
Packit b89d10
  UChar *r;
Packit b89d10
Packit b89d10
  slen = (int )(end - s);
Packit b89d10
  term_len = ONIGENC_MBC_MINLEN(enc);
Packit b89d10
Packit b89d10
  r = (UChar* )xmalloc(slen + term_len);
Packit b89d10
  CHECK_NULL_RETURN(r);
Packit b89d10
  xmemcpy(r, s, slen);
Packit b89d10
Packit b89d10
  for (i = 0; i < term_len; i++)
Packit b89d10
    r[slen + i] = (UChar )0;
Packit b89d10
Packit b89d10
  return r;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern UChar*
Packit b89d10
onigenc_get_right_adjust_char_head(OnigEncoding enc, const UChar* start, const UChar* s)
Packit b89d10
{
Packit b89d10
  UChar* p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s);
Packit b89d10
  if (p < s) {
Packit b89d10
    p += enclen(enc, p);
Packit b89d10
  }
Packit b89d10
  return p;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern UChar*
Packit b89d10
onigenc_get_right_adjust_char_head_with_prev(OnigEncoding enc,
Packit b89d10
				   const UChar* start, const UChar* s, const UChar** prev)
Packit b89d10
{
Packit b89d10
  UChar* p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s);
Packit b89d10
Packit b89d10
  if (p < s) {
Packit b89d10
    if (prev) *prev = (const UChar* )p;
Packit b89d10
    p += enclen(enc, p);
Packit b89d10
  }
Packit b89d10
  else {
Packit b89d10
    if (prev) *prev = (const UChar* )NULL; /* Sorry */
Packit b89d10
  }
Packit b89d10
  return p;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern UChar*
Packit b89d10
onigenc_get_prev_char_head(OnigEncoding enc, const UChar* start, const UChar* s)
Packit b89d10
{
Packit b89d10
  if (s <= start)
Packit b89d10
    return (UChar* )NULL;
Packit b89d10
Packit b89d10
  return ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s - 1);
Packit b89d10
}
Packit b89d10
Packit b89d10
extern UChar*
Packit b89d10
onigenc_step_back(OnigEncoding enc, const UChar* start, const UChar* s, int n)
Packit b89d10
{
Packit b89d10
  while (ONIG_IS_NOT_NULL(s) && n-- > 0) {
Packit b89d10
    if (s <= start)
Packit b89d10
      return (UChar* )NULL;
Packit b89d10
Packit b89d10
    s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s - 1);
Packit b89d10
  }
Packit b89d10
  return (UChar* )s;
Packit b89d10
}
Packit b89d10
Packit b89d10
#if 0
Packit b89d10
extern int
Packit b89d10
onigenc_mbc_enc_len_end(OnigEncoding enc, const UChar* p, const UChar* end)
Packit b89d10
{
Packit b89d10
  int len;
Packit b89d10
  int n;
Packit b89d10
Packit b89d10
  len = ONIGENC_MBC_ENC_LEN(enc, p);
Packit b89d10
  n = (int )(end - p);
Packit b89d10
Packit b89d10
  return (n < len ? n : len);
Packit b89d10
}
Packit b89d10
#endif
Packit b89d10
Packit b89d10
extern UChar*
Packit b89d10
onigenc_step(OnigEncoding enc, const UChar* p, const UChar* end, int n)
Packit b89d10
{
Packit b89d10
  UChar* q = (UChar* )p;
Packit b89d10
  while (n-- > 0) {
Packit b89d10
    q += ONIGENC_MBC_ENC_LEN(enc, q);
Packit b89d10
  }
Packit b89d10
  return (q <= end ? q : NULL);
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_strlen(OnigEncoding enc, const UChar* p, const UChar* end)
Packit b89d10
{
Packit b89d10
  int n = 0;
Packit b89d10
  UChar* q = (UChar* )p;
Packit b89d10
  
Packit b89d10
  while (q < end) {
Packit b89d10
    q += ONIGENC_MBC_ENC_LEN(enc, q);
Packit b89d10
    n++;
Packit b89d10
  }
Packit b89d10
  return n;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_strlen_null(OnigEncoding enc, const UChar* s)
Packit b89d10
{
Packit b89d10
  int n = 0;
Packit b89d10
  UChar* p = (UChar* )s;
Packit b89d10
  
Packit b89d10
  while (1) {
Packit b89d10
    if (*p == '\0') {
Packit b89d10
      UChar* q;
Packit b89d10
      int len = ONIGENC_MBC_MINLEN(enc);
Packit b89d10
Packit b89d10
      if (len == 1) return n;
Packit b89d10
      q = p + 1;
Packit b89d10
      while (len > 1) {
Packit b89d10
        if (*q != '\0') break;
Packit b89d10
        q++;
Packit b89d10
        len--;
Packit b89d10
      }
Packit b89d10
      if (len == 1) return n;
Packit b89d10
    }
Packit b89d10
    p += ONIGENC_MBC_ENC_LEN(enc, p);
Packit b89d10
    n++;
Packit b89d10
  }
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_str_bytelen_null(OnigEncoding enc, const UChar* s)
Packit b89d10
{
Packit b89d10
  UChar* start = (UChar* )s;
Packit b89d10
  UChar* p = (UChar* )s;
Packit b89d10
Packit b89d10
  while (1) {
Packit b89d10
    if (*p == '\0') {
Packit b89d10
      UChar* q;
Packit b89d10
      int len = ONIGENC_MBC_MINLEN(enc);
Packit b89d10
Packit b89d10
      if (len == 1) return (int )(p - start);
Packit b89d10
      q = p + 1;
Packit b89d10
      while (len > 1) {
Packit b89d10
        if (*q != '\0') break;
Packit b89d10
        q++;
Packit b89d10
        len--;
Packit b89d10
      }
Packit b89d10
      if (len == 1) return (int )(p - start);
Packit b89d10
    }
Packit b89d10
    p += ONIGENC_MBC_ENC_LEN(enc, p);
Packit b89d10
  }
Packit b89d10
}
Packit b89d10
Packit b89d10
const UChar OnigEncAsciiToLowerCaseTable[] = {
Packit b89d10
  '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
Packit b89d10
  '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
Packit b89d10
  '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
Packit b89d10
  '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
Packit b89d10
  '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
Packit b89d10
  '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
Packit b89d10
  '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
Packit b89d10
  '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
Packit b89d10
  '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
Packit b89d10
  '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
Packit b89d10
  '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
Packit b89d10
  '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
Packit b89d10
  '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
Packit b89d10
  '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
Packit b89d10
  '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
Packit b89d10
  '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
Packit b89d10
  '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
Packit b89d10
  '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
Packit b89d10
  '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
Packit b89d10
  '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
Packit b89d10
  '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
Packit b89d10
  '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
Packit b89d10
  '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
Packit b89d10
  '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
Packit b89d10
  '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
Packit b89d10
  '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
Packit b89d10
  '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
Packit b89d10
  '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
Packit b89d10
  '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
Packit b89d10
  '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
Packit b89d10
  '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
Packit b89d10
  '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
Packit b89d10
};
Packit b89d10
Packit b89d10
#ifdef USE_UPPER_CASE_TABLE
Packit b89d10
const UChar OnigEncAsciiToUpperCaseTable[256] = {
Packit b89d10
  '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
Packit b89d10
  '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
Packit b89d10
  '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
Packit b89d10
  '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
Packit b89d10
  '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
Packit b89d10
  '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
Packit b89d10
  '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
Packit b89d10
  '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
Packit b89d10
  '\100', '\101', '\102', '\103', '\104', '\105', '\106', '\107',
Packit b89d10
  '\110', '\111', '\112', '\113', '\114', '\115', '\116', '\117',
Packit b89d10
  '\120', '\121', '\122', '\123', '\124', '\125', '\126', '\127',
Packit b89d10
  '\130', '\131', '\132', '\133', '\134', '\135', '\136', '\137',
Packit b89d10
  '\140', '\101', '\102', '\103', '\104', '\105', '\106', '\107',
Packit b89d10
  '\110', '\111', '\112', '\113', '\114', '\115', '\116', '\117',
Packit b89d10
  '\120', '\121', '\122', '\123', '\124', '\125', '\126', '\127',
Packit b89d10
  '\130', '\131', '\132', '\173', '\174', '\175', '\176', '\177',
Packit b89d10
  '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
Packit b89d10
  '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
Packit b89d10
  '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
Packit b89d10
  '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
Packit b89d10
  '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
Packit b89d10
  '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
Packit b89d10
  '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
Packit b89d10
  '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
Packit b89d10
  '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
Packit b89d10
  '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
Packit b89d10
  '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
Packit b89d10
  '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
Packit b89d10
  '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
Packit b89d10
  '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
Packit b89d10
  '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
Packit b89d10
  '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
Packit b89d10
};
Packit b89d10
#endif
Packit b89d10
Packit b89d10
const unsigned short OnigEncAsciiCtypeTable[256] = {
Packit b89d10
  0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008,
Packit b89d10
  0x4008, 0x420c, 0x4209, 0x4208, 0x4208, 0x4208, 0x4008, 0x4008,
Packit b89d10
  0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008,
Packit b89d10
  0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008,
Packit b89d10
  0x4284, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0,
Packit b89d10
  0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0,
Packit b89d10
  0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0,
Packit b89d10
  0x78b0, 0x78b0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0,
Packit b89d10
  0x41a0, 0x7ca2, 0x7ca2, 0x7ca2, 0x7ca2, 0x7ca2, 0x7ca2, 0x74a2,
Packit b89d10
  0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2,
Packit b89d10
  0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2,
Packit b89d10
  0x74a2, 0x74a2, 0x74a2, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x51a0,
Packit b89d10
  0x41a0, 0x78e2, 0x78e2, 0x78e2, 0x78e2, 0x78e2, 0x78e2, 0x70e2,
Packit b89d10
  0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2,
Packit b89d10
  0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2,
Packit b89d10
  0x70e2, 0x70e2, 0x70e2, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x4008,
Packit b89d10
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
Packit b89d10
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
Packit b89d10
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
Packit b89d10
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
Packit b89d10
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
Packit b89d10
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
Packit b89d10
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
Packit b89d10
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
Packit b89d10
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
Packit b89d10
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
Packit b89d10
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
Packit b89d10
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
Packit b89d10
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
Packit b89d10
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
Packit b89d10
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
Packit b89d10
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
Packit b89d10
};
Packit b89d10
Packit b89d10
const UChar OnigEncISO_8859_1_ToLowerCaseTable[256] = {
Packit b89d10
  '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
Packit b89d10
  '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
Packit b89d10
  '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
Packit b89d10
  '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
Packit b89d10
  '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
Packit b89d10
  '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
Packit b89d10
  '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
Packit b89d10
  '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
Packit b89d10
  '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
Packit b89d10
  '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
Packit b89d10
  '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
Packit b89d10
  '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
Packit b89d10
  '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
Packit b89d10
  '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
Packit b89d10
  '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
Packit b89d10
  '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
Packit b89d10
  '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
Packit b89d10
  '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
Packit b89d10
  '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
Packit b89d10
  '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
Packit b89d10
  '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
Packit b89d10
  '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
Packit b89d10
  '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
Packit b89d10
  '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
Packit b89d10
  '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
Packit b89d10
  '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
Packit b89d10
  '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\327',
Packit b89d10
  '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337',
Packit b89d10
  '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
Packit b89d10
  '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
Packit b89d10
  '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
Packit b89d10
  '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377'
Packit b89d10
};
Packit b89d10
Packit b89d10
#ifdef USE_UPPER_CASE_TABLE
Packit b89d10
const UChar OnigEncISO_8859_1_ToUpperCaseTable[256] = {
Packit b89d10
  '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
Packit b89d10
  '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
Packit b89d10
  '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
Packit b89d10
  '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
Packit b89d10
  '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
Packit b89d10
  '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
Packit b89d10
  '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
Packit b89d10
  '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
Packit b89d10
  '\100', '\101', '\102', '\103', '\104', '\105', '\106', '\107',
Packit b89d10
  '\110', '\111', '\112', '\113', '\114', '\115', '\116', '\117',
Packit b89d10
  '\120', '\121', '\122', '\123', '\124', '\125', '\126', '\127',
Packit b89d10
  '\130', '\131', '\132', '\133', '\134', '\135', '\136', '\137',
Packit b89d10
  '\140', '\101', '\102', '\103', '\104', '\105', '\106', '\107',
Packit b89d10
  '\110', '\111', '\112', '\113', '\114', '\115', '\116', '\117',
Packit b89d10
  '\120', '\121', '\122', '\123', '\124', '\125', '\126', '\127',
Packit b89d10
  '\130', '\131', '\132', '\173', '\174', '\175', '\176', '\177',
Packit b89d10
  '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
Packit b89d10
  '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
Packit b89d10
  '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
Packit b89d10
  '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
Packit b89d10
  '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
Packit b89d10
  '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
Packit b89d10
  '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
Packit b89d10
  '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
Packit b89d10
  '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
Packit b89d10
  '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
Packit b89d10
  '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
Packit b89d10
  '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
Packit b89d10
  '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
Packit b89d10
  '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
Packit b89d10
  '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\367',
Packit b89d10
  '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\377',
Packit b89d10
};
Packit b89d10
#endif
Packit b89d10
Packit b89d10
extern void
Packit b89d10
onigenc_set_default_caseconv_table(const UChar* table ARG_UNUSED)
Packit b89d10
{
Packit b89d10
  /* nothing */
Packit b89d10
  /* obsoleted. */
Packit b89d10
}
Packit b89d10
Packit b89d10
extern UChar*
Packit b89d10
onigenc_get_left_adjust_char_head(OnigEncoding enc, const UChar* start, const UChar* s)
Packit b89d10
{
Packit b89d10
  return ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s);
Packit b89d10
}
Packit b89d10
Packit b89d10
const OnigPairCaseFoldCodes OnigAsciiLowerMap[] = {
Packit b89d10
  { 0x41, 0x61 },
Packit b89d10
  { 0x42, 0x62 },
Packit b89d10
  { 0x43, 0x63 },
Packit b89d10
  { 0x44, 0x64 },
Packit b89d10
  { 0x45, 0x65 },
Packit b89d10
  { 0x46, 0x66 },
Packit b89d10
  { 0x47, 0x67 },
Packit b89d10
  { 0x48, 0x68 },
Packit b89d10
  { 0x49, 0x69 },
Packit b89d10
  { 0x4a, 0x6a },
Packit b89d10
  { 0x4b, 0x6b },
Packit b89d10
  { 0x4c, 0x6c },
Packit b89d10
  { 0x4d, 0x6d },
Packit b89d10
  { 0x4e, 0x6e },
Packit b89d10
  { 0x4f, 0x6f },
Packit b89d10
  { 0x50, 0x70 },
Packit b89d10
  { 0x51, 0x71 },
Packit b89d10
  { 0x52, 0x72 },
Packit b89d10
  { 0x53, 0x73 },
Packit b89d10
  { 0x54, 0x74 },
Packit b89d10
  { 0x55, 0x75 },
Packit b89d10
  { 0x56, 0x76 },
Packit b89d10
  { 0x57, 0x77 },
Packit b89d10
  { 0x58, 0x78 },
Packit b89d10
  { 0x59, 0x79 },
Packit b89d10
  { 0x5a, 0x7a }
Packit b89d10
};
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_ascii_apply_all_case_fold(OnigCaseFoldType flag ARG_UNUSED,
Packit b89d10
				  OnigApplyAllCaseFoldFunc f, void* arg)
Packit b89d10
{
Packit b89d10
  OnigCodePoint code;
Packit b89d10
  int i, r;
Packit b89d10
Packit b89d10
  for (i = 0;
Packit b89d10
       i < (int )(sizeof(OnigAsciiLowerMap)/sizeof(OnigPairCaseFoldCodes));
Packit b89d10
       i++) {
Packit b89d10
    code = OnigAsciiLowerMap[i].to;
Packit b89d10
    r = (*f)(OnigAsciiLowerMap[i].from, &code, 1, arg);
Packit b89d10
    if (r != 0) return r;
Packit b89d10
Packit b89d10
    code = OnigAsciiLowerMap[i].from;
Packit b89d10
    r = (*f)(OnigAsciiLowerMap[i].to, &code, 1, arg);
Packit b89d10
    if (r != 0) return r;
Packit b89d10
  }
Packit b89d10
Packit b89d10
  return 0;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_ascii_get_case_fold_codes_by_str(OnigCaseFoldType flag ARG_UNUSED,
Packit b89d10
	 const OnigUChar* p, const OnigUChar* end ARG_UNUSED,
Packit b89d10
	 OnigCaseFoldCodeItem items[])
Packit b89d10
{
Packit b89d10
  if (0x41 <= *p && *p <= 0x5a) {
Packit b89d10
    items[0].byte_len = 1;
Packit b89d10
    items[0].code_len = 1;
Packit b89d10
    items[0].code[0] = (OnigCodePoint )(*p + 0x20);
Packit b89d10
    return 1;
Packit b89d10
  }
Packit b89d10
  else if (0x61 <= *p && *p <= 0x7a) {
Packit b89d10
    items[0].byte_len = 1;
Packit b89d10
    items[0].code_len = 1;
Packit b89d10
    items[0].code[0] = (OnigCodePoint )(*p - 0x20);
Packit b89d10
    return 1;
Packit b89d10
  }
Packit b89d10
  else
Packit b89d10
    return 0;
Packit b89d10
}
Packit b89d10
Packit b89d10
static int
Packit b89d10
ss_apply_all_case_fold(OnigCaseFoldType flag ARG_UNUSED,
Packit b89d10
		       OnigApplyAllCaseFoldFunc f, void* arg)
Packit b89d10
{
Packit b89d10
  static OnigCodePoint ss[] = { 0x73, 0x73 };
Packit b89d10
Packit b89d10
  return (*f)((OnigCodePoint )0xdf, ss, 2, arg);
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_apply_all_case_fold_with_map(int map_size,
Packit b89d10
    const OnigPairCaseFoldCodes map[],
Packit b89d10
    int ess_tsett_flag, OnigCaseFoldType flag,
Packit b89d10
    OnigApplyAllCaseFoldFunc f, void* arg)
Packit b89d10
{
Packit b89d10
  OnigCodePoint code;
Packit b89d10
  int i, r;
Packit b89d10
Packit b89d10
  r = onigenc_ascii_apply_all_case_fold(flag, f, arg);
Packit b89d10
  if (r != 0) return r;
Packit b89d10
Packit b89d10
  for (i = 0; i < map_size; i++) {
Packit b89d10
    code = map[i].to;
Packit b89d10
    r = (*f)(map[i].from, &code, 1, arg);
Packit b89d10
    if (r != 0) return r;
Packit b89d10
Packit b89d10
    code = map[i].from;
Packit b89d10
    r = (*f)(map[i].to, &code, 1, arg);
Packit b89d10
    if (r != 0) return r;
Packit b89d10
  }
Packit b89d10
Packit b89d10
  if (ess_tsett_flag != 0)
Packit b89d10
    return ss_apply_all_case_fold(flag, f, arg);
Packit b89d10
Packit b89d10
  return 0;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_get_case_fold_codes_by_str_with_map(int map_size,
Packit b89d10
    const OnigPairCaseFoldCodes map[],
Packit b89d10
    int ess_tsett_flag, OnigCaseFoldType flag ARG_UNUSED,
Packit b89d10
    const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])
Packit b89d10
{
Packit b89d10
  if (0x41 <= *p && *p <= 0x5a) {
Packit b89d10
    items[0].byte_len = 1;
Packit b89d10
    items[0].code_len = 1;
Packit b89d10
    items[0].code[0] = (OnigCodePoint )(*p + 0x20);
Packit b89d10
    if (*p == 0x53 && ess_tsett_flag != 0 && end > p + 1
Packit b89d10
	&& (*(p+1) == 0x53 || *(p+1) == 0x73)) {
Packit b89d10
      /* SS */
Packit b89d10
      items[1].byte_len = 2;
Packit b89d10
      items[1].code_len = 1;
Packit b89d10
      items[1].code[0] = (OnigCodePoint )0xdf;
Packit b89d10
      return 2;
Packit b89d10
    }
Packit b89d10
    else
Packit b89d10
      return 1;
Packit b89d10
  }
Packit b89d10
  else if (0x61 <= *p && *p <= 0x7a) {
Packit b89d10
    items[0].byte_len = 1;
Packit b89d10
    items[0].code_len = 1;
Packit b89d10
    items[0].code[0] = (OnigCodePoint )(*p - 0x20);
Packit b89d10
    if (*p == 0x73 && ess_tsett_flag != 0 && end > p + 1
Packit b89d10
	&& (*(p+1) == 0x73 || *(p+1) == 0x53)) {
Packit b89d10
      /* ss */
Packit b89d10
      items[1].byte_len = 2;
Packit b89d10
      items[1].code_len = 1;
Packit b89d10
      items[1].code[0] = (OnigCodePoint )0xdf;
Packit b89d10
      return 2;
Packit b89d10
    }
Packit b89d10
    else
Packit b89d10
      return 1;
Packit b89d10
  }
Packit b89d10
  else if (*p == 0xdf && ess_tsett_flag != 0) {
Packit b89d10
    items[0].byte_len = 1;
Packit b89d10
    items[0].code_len = 2;
Packit b89d10
    items[0].code[0] = (OnigCodePoint )'s';
Packit b89d10
    items[0].code[1] = (OnigCodePoint )'s';
Packit b89d10
Packit b89d10
    items[1].byte_len = 1;
Packit b89d10
    items[1].code_len = 2;
Packit b89d10
    items[1].code[0] = (OnigCodePoint )'S';
Packit b89d10
    items[1].code[1] = (OnigCodePoint )'S';
Packit b89d10
Packit b89d10
    items[2].byte_len = 1;
Packit b89d10
    items[2].code_len = 2;
Packit b89d10
    items[2].code[0] = (OnigCodePoint )'s';
Packit b89d10
    items[2].code[1] = (OnigCodePoint )'S';
Packit b89d10
Packit b89d10
    items[3].byte_len = 1;
Packit b89d10
    items[3].code_len = 2;
Packit b89d10
    items[3].code[0] = (OnigCodePoint )'S';
Packit b89d10
    items[3].code[1] = (OnigCodePoint )'s';
Packit b89d10
Packit b89d10
    return 4;
Packit b89d10
  }
Packit b89d10
  else {
Packit b89d10
    int i;
Packit b89d10
Packit b89d10
    for (i = 0; i < map_size; i++) {
Packit b89d10
      if (*p == map[i].from) {
Packit b89d10
	items[0].byte_len = 1;
Packit b89d10
	items[0].code_len = 1;
Packit b89d10
	items[0].code[0] = map[i].to;
Packit b89d10
	return 1;
Packit b89d10
      }
Packit b89d10
      else if (*p == map[i].to) {
Packit b89d10
	items[0].byte_len = 1;
Packit b89d10
	items[0].code_len = 1;
Packit b89d10
	items[0].code[0] = map[i].from;
Packit b89d10
	return 1;
Packit b89d10
      }
Packit b89d10
    }
Packit b89d10
  }
Packit b89d10
Packit b89d10
  return 0;
Packit b89d10
}
Packit b89d10
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_not_support_get_ctype_code_range(OnigCtype ctype ARG_UNUSED,
Packit b89d10
	 OnigCodePoint* sb_out ARG_UNUSED,
Packit b89d10
	 const OnigCodePoint* ranges[] ARG_UNUSED)
Packit b89d10
{
Packit b89d10
  return ONIG_NO_SUPPORT_CONFIG;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_is_mbc_newline_0x0a(const UChar* p, const UChar* end)
Packit b89d10
{
Packit b89d10
  if (p < end) {
Packit b89d10
    if (*p == 0x0a) return 1;
Packit b89d10
  }
Packit b89d10
  return 0;
Packit b89d10
}
Packit b89d10
Packit b89d10
/* for single byte encodings */
Packit b89d10
extern int
Packit b89d10
onigenc_ascii_mbc_case_fold(OnigCaseFoldType flag ARG_UNUSED, const UChar** p,
Packit b89d10
	    const UChar*end ARG_UNUSED, UChar* lower)
Packit b89d10
{
Packit b89d10
  *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(**p);
Packit b89d10
Packit b89d10
  (*p)++;
Packit b89d10
  return 1; /* return byte length of converted char to lower */
Packit b89d10
}
Packit b89d10
Packit b89d10
#if 0
Packit b89d10
extern int
Packit b89d10
onigenc_ascii_is_mbc_ambiguous(OnigCaseFoldType flag,
Packit b89d10
			       const UChar** pp, const UChar* end)
Packit b89d10
{
Packit b89d10
  const UChar* p = *pp;
Packit b89d10
Packit b89d10
  (*pp)++;
Packit b89d10
  return ONIGENC_IS_ASCII_CODE_CASE_AMBIG(*p);
Packit b89d10
}
Packit b89d10
#endif
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_single_byte_mbc_enc_len(const UChar* p ARG_UNUSED)
Packit b89d10
{
Packit b89d10
  return 1;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern OnigCodePoint
Packit b89d10
onigenc_single_byte_mbc_to_code(const UChar* p, const UChar* end ARG_UNUSED)
Packit b89d10
{
Packit b89d10
  return (OnigCodePoint )(*p);
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_single_byte_code_to_mbclen(OnigCodePoint code ARG_UNUSED)
Packit b89d10
{
Packit b89d10
  return (code < 0x100 ? 1 : ONIGERR_INVALID_CODE_POINT_VALUE);
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_single_byte_code_to_mbc(OnigCodePoint code, UChar *buf)
Packit b89d10
{
Packit b89d10
  *buf = (UChar )(code & 0xff);
Packit b89d10
  return 1;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern UChar*
Packit b89d10
onigenc_single_byte_left_adjust_char_head(const UChar* start ARG_UNUSED,
Packit b89d10
					  const UChar* s)
Packit b89d10
{
Packit b89d10
  return (UChar* )s;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_always_true_is_allowed_reverse_match(const UChar* s   ARG_UNUSED,
Packit b89d10
					     const UChar* end ARG_UNUSED)
Packit b89d10
{
Packit b89d10
  return TRUE;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_always_false_is_allowed_reverse_match(const UChar* s   ARG_UNUSED,
Packit b89d10
					      const UChar* end ARG_UNUSED)
Packit b89d10
{
Packit b89d10
  return FALSE;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_always_true_is_valid_mbc_string(const UChar* s   ARG_UNUSED,
Packit b89d10
					const UChar* end ARG_UNUSED)
Packit b89d10
{
Packit b89d10
  return TRUE;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_length_check_is_valid_mbc_string(OnigEncoding enc,
Packit b89d10
					 const UChar* p, const UChar* end)
Packit b89d10
{
Packit b89d10
  while (p < end) {
Packit b89d10
    p += enclen(enc, p);
Packit b89d10
  }
Packit b89d10
Packit b89d10
  if (p != end)
Packit b89d10
    return FALSE;
Packit b89d10
  else
Packit b89d10
    return TRUE;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_is_valid_mbc_string(OnigEncoding enc, const UChar* s, const UChar* end)
Packit b89d10
{
Packit b89d10
  return ONIGENC_IS_VALID_MBC_STRING(enc, s, end);
Packit b89d10
}
Packit b89d10
Packit b89d10
extern OnigCodePoint
Packit b89d10
onigenc_mbn_mbc_to_code(OnigEncoding enc, const UChar* p, const UChar* end)
Packit b89d10
{
Packit b89d10
  int c, i, len;
Packit b89d10
  OnigCodePoint n;
Packit b89d10
Packit b89d10
  len = enclen(enc, p);
Packit b89d10
  n = (OnigCodePoint )(*p++);
Packit b89d10
  if (len == 1) return n;
Packit b89d10
Packit b89d10
  for (i = 1; i < len; i++) {
Packit b89d10
    if (p >= end) break;
Packit b89d10
    c = *p++;
Packit b89d10
    n <<= 8;  n += c;
Packit b89d10
  }
Packit b89d10
  return n;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_mbn_mbc_case_fold(OnigEncoding enc, OnigCaseFoldType flag ARG_UNUSED,
Packit b89d10
                          const UChar** pp, const UChar* end ARG_UNUSED,
Packit b89d10
			  UChar* lower)
Packit b89d10
{
Packit b89d10
  int len;
Packit b89d10
  const UChar *p = *pp;
Packit b89d10
Packit b89d10
  if (ONIGENC_IS_MBC_ASCII(p)) {
Packit b89d10
    *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p);
Packit b89d10
    (*pp)++;
Packit b89d10
    return 1;
Packit b89d10
  }
Packit b89d10
  else {
Packit b89d10
    int i;
Packit b89d10
Packit b89d10
    len = enclen(enc, p);
Packit b89d10
    for (i = 0; i < len; i++) {
Packit b89d10
      *lower++ = *p++;
Packit b89d10
    }
Packit b89d10
    (*pp) += len;
Packit b89d10
    return len; /* return byte length of converted to lower char */
Packit b89d10
  }
Packit b89d10
}
Packit b89d10
Packit b89d10
#if 0
Packit b89d10
extern int
Packit b89d10
onigenc_mbn_is_mbc_ambiguous(OnigEncoding enc, OnigCaseFoldType flag,
Packit b89d10
                             const UChar** pp, const UChar* end)
Packit b89d10
{
Packit b89d10
  const UChar* p = *pp;
Packit b89d10
Packit b89d10
  if (ONIGENC_IS_MBC_ASCII(p)) {
Packit b89d10
    (*pp)++;
Packit b89d10
    return ONIGENC_IS_ASCII_CODE_CASE_AMBIG(*p);
Packit b89d10
  }
Packit b89d10
Packit b89d10
  (*pp) += enclen(enc, p);
Packit b89d10
  return FALSE;
Packit b89d10
}
Packit b89d10
#endif
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_mb2_code_to_mbclen(OnigCodePoint code)
Packit b89d10
{
Packit b89d10
  if ((code & 0xff00) != 0) return 2;
Packit b89d10
  else return 1;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_mb4_code_to_mbclen(OnigCodePoint code)
Packit b89d10
{
Packit b89d10
       if ((code & 0xff000000) != 0) return 4;
Packit b89d10
  else if ((code & 0xff0000) != 0) return 3;
Packit b89d10
  else if ((code & 0xff00) != 0) return 2;
Packit b89d10
  else return 1;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_mb2_code_to_mbc(OnigEncoding enc, OnigCodePoint code, UChar *buf)
Packit b89d10
{
Packit b89d10
  UChar *p = buf;
Packit b89d10
Packit b89d10
  if ((code & 0xff00) != 0) {
Packit b89d10
    *p++ = (UChar )((code >>  8) & 0xff);
Packit b89d10
  }
Packit b89d10
  *p++ = (UChar )(code & 0xff);
Packit b89d10
Packit b89d10
#if 1
Packit b89d10
  if (enclen(enc, buf) != (p - buf))
Packit b89d10
    return ONIGERR_INVALID_CODE_POINT_VALUE;
Packit b89d10
#endif
Packit b89d10
  return (int )(p - buf);
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_mb4_code_to_mbc(OnigEncoding enc, OnigCodePoint code, UChar *buf)
Packit b89d10
{
Packit b89d10
  UChar *p = buf;
Packit b89d10
Packit b89d10
  if ((code & 0xff000000) != 0) {
Packit b89d10
    *p++ = (UChar )((code >> 24) & 0xff);
Packit b89d10
  }
Packit b89d10
  if ((code & 0xff0000) != 0 || p != buf) {
Packit b89d10
    *p++ = (UChar )((code >> 16) & 0xff);
Packit b89d10
  }
Packit b89d10
  if ((code & 0xff00) != 0 || p != buf) {
Packit b89d10
    *p++ = (UChar )((code >> 8) & 0xff);
Packit b89d10
  }
Packit b89d10
  *p++ = (UChar )(code & 0xff);
Packit b89d10
Packit b89d10
#if 1
Packit b89d10
  if (enclen(enc, buf) != (p - buf))
Packit b89d10
    return ONIGERR_INVALID_CODE_POINT_VALUE;
Packit b89d10
#endif
Packit b89d10
  return (int )(p - buf);
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_minimum_property_name_to_ctype(OnigEncoding enc, UChar* p, UChar* end)
Packit b89d10
{
Packit b89d10
  static PosixBracketEntryType PBS[] = {
Packit b89d10
    { (UChar* )"Alnum",  ONIGENC_CTYPE_ALNUM,  5 },
Packit b89d10
    { (UChar* )"Alpha",  ONIGENC_CTYPE_ALPHA,  5 },
Packit b89d10
    { (UChar* )"Blank",  ONIGENC_CTYPE_BLANK,  5 },
Packit b89d10
    { (UChar* )"Cntrl",  ONIGENC_CTYPE_CNTRL,  5 },
Packit b89d10
    { (UChar* )"Digit",  ONIGENC_CTYPE_DIGIT,  5 },
Packit b89d10
    { (UChar* )"Graph",  ONIGENC_CTYPE_GRAPH,  5 },
Packit b89d10
    { (UChar* )"Lower",  ONIGENC_CTYPE_LOWER,  5 },
Packit b89d10
    { (UChar* )"Print",  ONIGENC_CTYPE_PRINT,  5 },
Packit b89d10
    { (UChar* )"Punct",  ONIGENC_CTYPE_PUNCT,  5 },
Packit b89d10
    { (UChar* )"Space",  ONIGENC_CTYPE_SPACE,  5 },
Packit b89d10
    { (UChar* )"Upper",  ONIGENC_CTYPE_UPPER,  5 },
Packit b89d10
    { (UChar* )"XDigit", ONIGENC_CTYPE_XDIGIT, 6 },
Packit b89d10
    { (UChar* )"ASCII",  ONIGENC_CTYPE_ASCII,  5 },
Packit b89d10
    { (UChar* )"Word",   ONIGENC_CTYPE_WORD,   4 },
Packit b89d10
    { (UChar* )NULL, -1, 0 }
Packit b89d10
  };
Packit b89d10
Packit b89d10
  PosixBracketEntryType *pb;
Packit b89d10
  int len;
Packit b89d10
Packit b89d10
  len = onigenc_strlen(enc, p, end);
Packit b89d10
  for (pb = PBS; IS_NOT_NULL(pb->name); pb++) {
Packit b89d10
    if (len == pb->len &&
Packit b89d10
        onigenc_with_ascii_strncmp(enc, p, end, pb->name, pb->len) == 0)
Packit b89d10
      return pb->ctype;
Packit b89d10
  }
Packit b89d10
Packit b89d10
  return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_is_mbc_word_ascii(OnigEncoding enc, UChar* s, const UChar* end)
Packit b89d10
{
Packit b89d10
  OnigCodePoint code = ONIGENC_MBC_TO_CODE(enc, s, end);
Packit b89d10
Packit b89d10
  if (code > 127) return 0;
Packit b89d10
Packit b89d10
  return ONIGENC_IS_ASCII_CODE_WORD(code);
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_mb2_is_code_ctype(OnigEncoding enc, OnigCodePoint code,
Packit b89d10
			  unsigned int ctype)
Packit b89d10
{
Packit b89d10
  if (code < 128)
Packit b89d10
    return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);
Packit b89d10
  else {
Packit b89d10
    if (CTYPE_IS_WORD_GRAPH_PRINT(ctype)) {
Packit b89d10
      return (ONIGENC_CODE_TO_MBCLEN(enc, code) > 1 ? TRUE : FALSE);
Packit b89d10
    }
Packit b89d10
  }
Packit b89d10
Packit b89d10
  return FALSE;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_mb4_is_code_ctype(OnigEncoding enc, OnigCodePoint code,
Packit b89d10
			  unsigned int ctype)
Packit b89d10
{
Packit b89d10
  if (code < 128)
Packit b89d10
    return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);
Packit b89d10
  else {
Packit b89d10
    if (CTYPE_IS_WORD_GRAPH_PRINT(ctype)) {
Packit b89d10
      return (ONIGENC_CODE_TO_MBCLEN(enc, code) > 1 ? TRUE : FALSE);
Packit b89d10
    }
Packit b89d10
  }
Packit b89d10
Packit b89d10
  return FALSE;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onigenc_with_ascii_strncmp(OnigEncoding enc, const UChar* p, const UChar* end,
Packit b89d10
                           const UChar* sascii /* ascii */, int n)
Packit b89d10
{
Packit b89d10
  int x, c;
Packit b89d10
Packit b89d10
  while (n-- > 0) {
Packit b89d10
    if (p >= end) return (int )(*sascii);
Packit b89d10
Packit b89d10
    c = (int )ONIGENC_MBC_TO_CODE(enc, p, end);
Packit b89d10
    x = *sascii - c;
Packit b89d10
    if (x) return x;
Packit b89d10
Packit b89d10
    sascii++;
Packit b89d10
    p += enclen(enc, p);
Packit b89d10
  }
Packit b89d10
  return 0;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onig_codes_cmp(OnigCodePoint a[], OnigCodePoint b[], int n)
Packit b89d10
{
Packit b89d10
  int i;
Packit b89d10
Packit b89d10
  for (i = 0; i < n; i++) {
Packit b89d10
    if (a[i] != b[i])
Packit b89d10
      return -1;
Packit b89d10
  }
Packit b89d10
Packit b89d10
  return 0;
Packit b89d10
}
Packit b89d10
Packit b89d10
extern int
Packit b89d10
onig_codes_byte_at(OnigCodePoint codes[], int at)
Packit b89d10
{
Packit b89d10
  int index;
Packit b89d10
  int b;
Packit b89d10
  OnigCodePoint code;
Packit b89d10
Packit b89d10
  index = at / 3;
Packit b89d10
  b     = at % 3;
Packit b89d10
  code = codes[index];
Packit b89d10
Packit b89d10
  return ((code >> ((2 - b) * 8)) & 0xff);
Packit b89d10
}