Пример #1
0
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);
}
Пример #2
0
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);
}
Пример #3
0
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);
}
Пример #4
0
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;
}