static void setTextImpl(JNIEnv* env, jclass, jint address, jstring text) {
    UErrorCode status = U_ZERO_ERROR;
    const UChar* chars = env->GetStringChars(text, NULL);
    ubrk_setText(breakIterator(address), chars, env->GetStringLength(text), &status);
    env->ReleaseStringChars(text, chars);
    icu4jni_error(env, status);
}
Esempio n. 2
0
static void NativeBreakIterator_setTextImpl(JNIEnv* env, jclass, jint address, jstring javaText) {
    ScopedJavaUnicodeString text(env, javaText);
    UnicodeString& s(text.unicodeString());
    UErrorCode status = U_ZERO_ERROR;
    ubrk_setText(breakIterator(address), s.getBuffer(), s.length(), &status);
    icu4jni_error(env, status);
}
static jint cloneImpl(JNIEnv* env, jclass, jint address) {
    UErrorCode status = U_ZERO_ERROR;
    jint bufferSize = U_BRK_SAFECLONE_BUFFERSIZE;
    UBreakIterator* it = ubrk_safeClone(breakIterator(address), NULL, &bufferSize, &status);
    icu4jni_error(env, status);
    return reinterpret_cast<uintptr_t>(it);
}
static jint nextImpl(JNIEnv* env, jclass, jint address, jint n) {
    UBreakIterator* bi = breakIterator(address);
    if (n < 0) {
        while (n++ < -1) {
            ubrk_previous(bi);
        }
        return ubrk_previous(bi);
    } else if (n == 0) {
        return ubrk_current(bi);
    } else {
        while (n-- > 1) {
            ubrk_next(bi);
        }
        return ubrk_next(bi);
    }
    return -1;
}
QPointF CustomEdit::startPoint(const QPointF &hitPoint) const
{
    // Prefer to select something even though the tap hit between words

    MBreakIterator breakIterator(text());
    if (breakIterator.isBoundary(cursorPosition(hitPoint))) {
        // Hit the boundary -> try to find a word nearby
        QList<QPoint> baseOffsets;
        baseOffsets << QPoint(3,0) << QPoint(-3,0) << QPoint(0,-3) << QPoint(0,3);
        for (int i=1; i<=4; i++) { // Check each direction at 3,6,9 and 12 pixel distances -> a change to get the closest one
            Q_FOREACH(QPoint offset, baseOffsets) {
                QPointF checkPoint = hitPoint + i*offset;
                int checkPos = cursorPosition(checkPoint);
                if (checkPos >= 0 && !breakIterator.isBoundary(checkPos)) {
                    return checkPoint;
                }
            }
        }
static jintArray nLineBreakOpportunities(JNIEnv* env, jclass, jstring javaLocaleName,
                                        jcharArray inputText, jint length,
                                        jintArray recycle) {
    jintArray ret;
    std::vector<jint> breaks;

    ScopedIcuLocale icuLocale(env, javaLocaleName);
    if (icuLocale.valid()) {
        UErrorCode status = U_ZERO_ERROR;
        BreakIterator* it = BreakIterator::createLineInstance(icuLocale.locale(), status);
        if (!U_SUCCESS(status) || it == NULL) {
            if (it) {
                delete it;
            }
        } else {
            ScopedBreakIterator breakIterator(env, it, inputText, length);
            for (int loc = breakIterator->first(); loc != BreakIterator::DONE;
                    loc = breakIterator->next()) {
                breaks.push_back(loc);
            }
        }
    }

    breaks.push_back(-1); // sentinel terminal value

    if (recycle != NULL && static_cast<size_t>(env->GetArrayLength(recycle)) >= breaks.size()) {
        ret = recycle;
    } else {
        ret = env->NewIntArray(breaks.size());
    }

    if (ret != NULL) {
        env->SetIntArrayRegion(ret, 0, breaks.size(), &breaks.front());
    }

    return ret;
}
static jboolean isBoundaryImpl(JNIEnv*, jclass, jint address, jint offset) {
    return ubrk_isBoundary(breakIterator(address), offset);
}
static void closeBreakIteratorImpl(JNIEnv* env, jclass, jint address) {
    ubrk_close(breakIterator(address));
}
static jint lastImpl(JNIEnv*, jclass, jint address) {
    return ubrk_last(breakIterator(address));
}
static jint previousImpl(JNIEnv*, jclass, jint address) {
    return ubrk_previous(breakIterator(address));
}
static jint currentImpl(JNIEnv*, jclass, jint address) {
    return ubrk_current(breakIterator(address));
}
static jint followingImpl(JNIEnv*, jclass, jint address, jint offset) {
    return ubrk_following(breakIterator(address), offset);
}
Esempio n. 13
0
static jint NativeBreakIterator_firstImpl(JNIEnv*, jclass, jint address) {
    return ubrk_first(breakIterator(address));
}
Esempio n. 14
0
static jint NativeBreakIterator_precedingImpl(JNIEnv*, jclass, jint address, jint offset) {
    return ubrk_preceding(breakIterator(address), offset);
}