extern int onigenc_str_bytelen_null(OnigEncoding enc, const UChar* s) { UChar* start = (UChar* )s; UChar* p = (UChar* )s; UChar* e; while (1) { if (*p == '\0') { UChar* q; int len = ONIGENC_MBC_MINLEN(enc); if (len == 1) return (int )(p - start); q = p + 1; while (len > 1) { if (*q != '\0') break; q++; len--; } if (len == 1) return (int )(p - start); } e = p + ONIGENC_MBC_MAXLEN(enc); p += ONIGENC_MBC_ENC_LEN(enc, p, e); } }
extern UChar* onigenc_step(OnigEncoding enc, const UChar* p, const UChar* end, int n) { UChar* q = (UChar* )p; while (n-- > 0) { q += ONIGENC_MBC_ENC_LEN(enc, q, end); } return (q <= end ? q : NULL); }
extern int onigenc_mbc_enc_len_end(OnigEncoding enc, const UChar* p, const UChar* end) { int len; int n; len = ONIGENC_MBC_ENC_LEN(enc, p); n = (int )(end - p); return (n < len ? n : len); }
extern int onigenc_strlen(OnigEncoding enc, const UChar* p, const UChar* end) { int n = 0; UChar* q = (UChar* )p; while (q < end) { q += ONIGENC_MBC_ENC_LEN(enc, q, end); n++; } return n; }
extern int onigenc_strlen_null(OnigEncoding enc, const UChar* s) { int n = 0; UChar* p = (UChar* )s; while (1) { if (*p == '\0') { UChar* q; int len = ONIGENC_MBC_MINLEN(enc); if (len == 1) return n; q = p + 1; while (len > 1) { if (*q != '\0') break; q++; len--; } if (len == 1) return n; } p += ONIGENC_MBC_ENC_LEN(enc, p); n++; } }
int rb_enc_fast_mbclen(const char *p, const char *e, rb_encoding *enc) { return ONIGENC_MBC_ENC_LEN(enc, (UChar*)p, (UChar*)e); }