1 /* 2 * Copyright 2021 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 #ifndef SkUnicode_icu_DEFINED 8 #define SkUnicode_icu_DEFINED 9 10 #include <unicode/ubidi.h> 11 #include <unicode/ubrk.h> 12 #include <unicode/uchar.h> 13 #include <unicode/uloc.h> 14 #include <unicode/uscript.h> 15 #include <unicode/ustring.h> 16 #include <unicode/utext.h> 17 #include <unicode/utypes.h> 18 #include <cstdint> 19 #include <memory> 20 21 #define SKICU_EMIT_FUNCS \ 22 SKICU_FUNC(u_errorName) \ 23 SKICU_FUNC(u_getIntPropertyValue) \ 24 SKICU_FUNC(u_iscntrl) \ 25 SKICU_FUNC(u_isspace) \ 26 SKICU_FUNC(u_isWhitespace) \ 27 SKICU_FUNC(u_strToUpper) \ 28 SKICU_FUNC(ubidi_close) \ 29 SKICU_FUNC(ubidi_getDirection) \ 30 SKICU_FUNC(ubidi_getLength) \ 31 SKICU_FUNC(ubidi_getLevelAt) \ 32 SKICU_FUNC(ubidi_openSized) \ 33 SKICU_FUNC(ubidi_reorderVisual) \ 34 SKICU_FUNC(ubidi_setPara) \ 35 SKICU_FUNC(ubrk_close) \ 36 SKICU_FUNC(ubrk_current) \ 37 SKICU_FUNC(ubrk_first) \ 38 SKICU_FUNC(ubrk_following) \ 39 SKICU_FUNC(ubrk_getRuleStatus) \ 40 SKICU_FUNC(ubrk_next) \ 41 SKICU_FUNC(ubrk_open) \ 42 SKICU_FUNC(ubrk_preceding) \ 43 SKICU_FUNC(ubrk_setText) \ 44 SKICU_FUNC(ubrk_setUText) \ 45 SKICU_FUNC(uloc_getDefault) \ 46 SKICU_FUNC(uscript_getScript) \ 47 SKICU_FUNC(utext_close) \ 48 SKICU_FUNC(utext_openUChars) \ 49 SKICU_FUNC(utext_openUTF8) \ 50 51 #define SKICU_FUNC(funcname) decltype(funcname)* f_##funcname; 52 struct SkICULib { 53 SKICU_EMIT_FUNCS 54 55 // ubrk_clone added as draft in ICU69 and Android API 31 (first ICU NDK). 56 // ubrk_safeClone deprecated in ICU69 and not exposed by Android. 57 UBreakIterator* (*f_ubrk_clone_)(const UBreakIterator*, UErrorCode*); 58 UBreakIterator* (*f_ubrk_safeClone_)(const UBreakIterator*, void*, int32_t*, UErrorCode*); 59 }; 60 #undef SKICU_FUNC 61 62 // Platform/config specific ICU factory. 63 std::unique_ptr<SkICULib> SkLoadICULib(); 64 65 #endif // SkUnicode_icu_DEFINED 66