ERL_NIF_TERM non_case_compare(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) { ErlNifBinary in, in2; UErrorCode status = U_ZERO_ERROR; int32_t res; if (argc != 2) return enif_make_badarg(env); if (!(enif_inspect_binary(env, argv[0], &in) && enif_inspect_binary(env, argv[1], &in2))) { return enif_make_badarg(env); } /* Case-sensitive comparison in code unit order, and the input strings are * quick-checked for FCD. */ res = unorm_compare( (const UChar *) in.data, TO_ULEN(in.size), (const UChar *) in2.data, TO_ULEN(in2.size), U_FOLD_CASE_DEFAULT, &status); CHECK(env, status); return compare_result_to_atom(env, res); }
ERL_NIF_TERM case_compare(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) { ErlNifBinary in, in2; char locale[LOCALE_LEN]; UErrorCode status = U_ZERO_ERROR; uint32_t options = U_COMPARE_IGNORE_CASE; int32_t res; if (argc != 3) return enif_make_badarg(env); if (!(enif_get_atom(env, argv[0], locale, LOCALE_LEN, ERL_NIF_LATIN1) && enif_inspect_binary(env, argv[1], &in) && enif_inspect_binary(env, argv[2], &in2))) { return enif_make_badarg(env); } /* Is the locale tr? */ if ((locale[0] == 't') && (locale[1] == 'r')) options |= U_FOLD_CASE_EXCLUDE_SPECIAL_I; /*res = u_strCaseCompare(*/ res = unorm_compare( (const UChar *) in.data, TO_ULEN(in.size), (const UChar *) in2.data, TO_ULEN(in2.size), options, &status); CHECK(env, status); return compare_result_to_atom(env, res); }
int32_t __hs_unorm_compare(const UChar *s1, int32_t length1, const UChar *s2, int32_t length2, uint32_t options, UErrorCode *pErrorCode) { return unorm_compare(s1, length1, s2, length2, options, pErrorCode); }
static int icu_normalizer_lessorequal(lua_State *L) { const UChar* left = icu4lua_checkustring(L,1,NORMALIZER_UV_USTRING_META); int32_t left_length = (int32_t)icu4lua_ustrlen(L,1); const UChar* right = icu4lua_checkustring(L,2,NORMALIZER_UV_USTRING_META); int32_t right_length = (int32_t)icu4lua_ustrlen(L,2); int32_t options = luaL_optint(L,3,0); UErrorCode status = U_ZERO_ERROR; lua_pushboolean(L, unorm_compare(left, left_length, right, right_length, options, &status) <= 0); if (U_FAILURE(status)) { lua_pushstring(L, u_errorName(status)); return lua_error(L); } return 1; }