static int get_case_fold_codes_by_str(OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]) { int len; OnigCodePoint code, code_lo, code_up; code = mbc_to_code(p, end); if (ONIGENC_IS_ASCII_CODE(code)) return onigenc_ascii_get_case_fold_codes_by_str(flag, p, end, items); len = mbc_enc_len(p); code_lo = get_lower_case(code); code_up = get_upper_case(code); if (code != code_lo) { items[0].byte_len = len; items[0].code_len = 1; items[0].code[0] = code_lo; return 1; } else if (code != code_up) { items[0].byte_len = len; items[0].code_len = 1; items[0].code[0] = code_up; return 1; } return 0; }
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 */ } }