extern int onigenc_unicode_property_name_to_ctype(OnigEncoding enc, UChar* name, UChar* end) { int len; int ctype; UChar buf[PROPERTY_NAME_MAX_SIZE]; UChar *p; OnigCodePoint code; len = 0; for (p = name; p < end; p += enclen(enc, p)) { code = ONIGENC_MBC_TO_CODE(enc, p, end); if (code == ' ' || code == '-' || code == '_') continue; if (code >= 0x80) return ONIGERR_INVALID_CHAR_PROPERTY_NAME; buf[len++] = ONIGENC_ASCII_CODE_TO_LOWER_CASE(code); if (len >= PROPERTY_NAME_MAX_SIZE) return ONIGERR_INVALID_CHAR_PROPERTY_NAME; } buf[len] = 0; if ((ctype = uniname2ctype(buf, len)) < 0) { return ONIGERR_INVALID_CHAR_PROPERTY_NAME; } return ctype; }
extern int onigenc_mbn_mbc_to_normalize(OnigEncoding enc, OnigAmbigType flag, const UChar** pp, const UChar* end, UChar* lower) { int len; const UChar *p = *pp; if (ONIGENC_IS_MBC_ASCII(p)) { if ((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0) { *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p); } else { *lower = *p; } (*pp)++; return 1; } else { len = enc_len(enc, p); if (lower != p) { int i; for (i = 0; i < len; i++) { *lower++ = *p++; } } (*pp) += len; return len; /* return byte length of converted to lower char */ } }
/* for single byte encodings */ extern int onigenc_ascii_mbc_to_normalize(OnigAmbigType flag, const UChar** p, const UChar*end, UChar* lower) { if ((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0) { *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(**p); } else { *lower = **p; } (*p)++; return 1; /* return byte length of converted char to lower */ }
static int property_name_to_ctype(OnigEncoding enc, UChar* p, UChar* end) { hash_data_type ctype; UChar *s, *e; PROPERTY_LIST_INIT_CHECK; s = e = ALLOCA_N(UChar, end-p+1); for (; p < end; p++) { *e++ = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p); } if (onig_st_lookup_strend(PropertyNameTable, s, e, &ctype) == 0) { return onigenc_minimum_property_name_to_ctype(enc, s, e); } return (int)ctype; }
extern int onigenc_mbn_mbc_to_lower(OnigEncoding enc, UChar* p, UChar* lower) { int len; if (ONIGENC_IS_MBC_ASCII(p)) { *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p); return 1; } else { len = enc_len(enc, *p); if (lower != p) { /* memcpy(lower, p, len); */ int i; for (i = 0; i < len; i++) { *lower++ = *p++; } } return len; /* return byte length of converted to lower char */ } }
static int mbc_case_fold(OnigCaseFoldType flag, const UChar** pp, const UChar* end, UChar* lower, OnigEncoding enc) { const UChar* p = *pp; if (ONIGENC_IS_MBC_ASCII(p)) { *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p); (*pp)++; return 1; } else { OnigCodePoint code; int len; code = get_lower_case(mbc_to_code(p, end, enc)); len = code_to_mbc(code, lower, enc); (*pp) += len; return len; /* return byte length of converted char to lower */ } }
static int mbc_case_fold(OnigCaseFoldType flag, const UChar** pp, const UChar* end, UChar* lower, OnigEncoding enc) { const UChar* p = *pp; if (ONIGENC_IS_MBC_ASCII(p)) { *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p); (*pp)++; return 1; } else { int i; int len = enclen(enc, p, end); for (i = 0; i < len; i++) { *lower++ = *p++; } (*pp) += len; return len; /* return byte length of converted char to lower */ } }
int rb_enc_tolower(int c, rb_encoding *enc) { return (ONIGENC_IS_ASCII_CODE(c)?ONIGENC_ASCII_CODE_TO_LOWER_CASE(c):(c)); }
/* for single byte encodings */ extern int onigenc_ascii_mbc_to_lower(UChar* p, UChar* lower) { *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p); return 1; /* return byte length of converted char to lower */ }