Unverified Commit 4783e8a3 authored by Ivan Matkov's avatar Ivan Matkov Committed by GitHub

Expose ICU's `u_charDirection` function (#694)

* Expose u_charDirection

* Move CharDirection to icu package

* Add doc comment for CharDirection
parent 67eb37ac
package org.jetbrains.skia.icu
import org.jetbrains.skia.ExternalSymbolName
import org.jetbrains.skia.impl.Library.Companion.staticLoad
/**
* CharDirection represents Bidi_Class Unicode character property.
* Numeric constant values match to ICU's UCharDirection enum.
*
* See https://unicode-org.github.io/icu-docs/apidoc/dev/icu4c/uchar_8h.html
* See https://www.unicode.org/reports/tr9/
*/
object CharDirection {
init {
staticLoad()
}
const val LEFT_TO_RIGHT = 0
const val RIGHT_TO_LEFT = 1
const val EUROPEAN_NUMBER = 2
const val EUROPEAN_NUMBER_SEPARATOR = 3
const val EUROPEAN_NUMBER_TERMINATOR = 4
const val ARABIC_NUMBER = 5
const val COMMON_NUMBER_SEPARATOR = 6
const val BLOCK_SEPARATOR = 7
const val SEGMENT_SEPARATOR = 8
const val WHITE_SPACE_NEUTRAL = 9
const val OTHER_NEUTRAL = 10
const val LEFT_TO_RIGHT_EMBEDDING = 11
const val LEFT_TO_RIGHT_OVERRIDE = 12
const val RIGHT_TO_LEFT_ARABIC = 13
const val RIGHT_TO_LEFT_EMBEDDING = 14
const val RIGHT_TO_LEFT_OVERRIDE = 15
const val POP_DIRECTIONAL_FORMAT = 16
const val DIR_NON_SPACING_MARK = 17
const val BOUNDARY_NEUTRAL = 18
const val FIRST_STRONG_ISOLATE = 19
const val LEFT_TO_RIGHT_ISOLATE = 20
const val RIGHT_TO_LEFT_ISOLATE = 21
const val POP_DIRECTIONAL_ISOLATE = 22
/**
* Returns the bidirectional category value for the code point.
* Same as java.lang.Character.getDirectionality()
*/
fun of(codePoint: Int): Int = charDirection(codePoint)
}
@ExternalSymbolName("org_jetbrains_skia_icu_Unicode_charDirection")
private external fun charDirection(codePoint: Int): Int
package org.jetbrains.skia.icu
import kotlin.test.Test
import kotlin.test.assertEquals
class UnicodeTest {
@Test
fun directionality() {
assertEquals(CharDirection.EUROPEAN_NUMBER, CharDirection.of('0'.code)) // Number
assertEquals(CharDirection.LEFT_TO_RIGHT, CharDirection.of('A'.code)) // Latin
assertEquals(CharDirection.RIGHT_TO_LEFT, CharDirection.of('א'.code)) // Hebrew
assertEquals(CharDirection.RIGHT_TO_LEFT_ARABIC, CharDirection.of('؈'.code)) // Arabic
}
}
\ No newline at end of file
#include <jni.h>
#include "third_party/externals/icu/source/common/unicode/uchar.h"
extern "C" JNIEXPORT jint JNICALL Java_org_jetbrains_skia_icu_UnicodeKt_charDirection
(JNIEnv* env, jclass jclass, jint codePoint) {
return u_charDirection(codePoint);
}
#include "common.h"
#include "third_party/externals/icu/source/common/unicode/uchar.h"
SKIKO_EXPORT KInt org_jetbrains_skia_icu_Unicode_charDirection(KInt codePoint) {
return u_charDirection(codePoint);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment