1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2021 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "modules/skunicode/src/SkUnicode_icu.h" 9cb93a386Sopenharmony_ci 10cb93a386Sopenharmony_ci#include <memory> 11cb93a386Sopenharmony_ci#include <unicode/ubrk.h> 12cb93a386Sopenharmony_ci#include <unicode/utypes.h> 13cb93a386Sopenharmony_ci#include <utility> 14cb93a386Sopenharmony_ci 15cb93a386Sopenharmony_ci#define SKICU_FUNC(funcname) funcname, 16cb93a386Sopenharmony_ci 17cb93a386Sopenharmony_ci// ubrk_clone added as draft in ICU69 and Android API 31 (first ICU NDK). 18cb93a386Sopenharmony_ci// ubrk_safeClone deprecated in ICU69 and not exposed by Android. 19cb93a386Sopenharmony_citemplate<typename...> using void_t = void; 20cb93a386Sopenharmony_citemplate<typename T, typename = void> 21cb93a386Sopenharmony_cistruct SkUbrkClone { 22cb93a386Sopenharmony_ci static UBreakIterator* clone(T bi, UErrorCode* status) { 23cb93a386Sopenharmony_ci return ubrk_safeClone(bi, nullptr, nullptr, status); 24cb93a386Sopenharmony_ci } 25cb93a386Sopenharmony_ci}; 26cb93a386Sopenharmony_citemplate<typename T> 27cb93a386Sopenharmony_cistruct SkUbrkClone<T, void_t<decltype(ubrk_clone(std::declval<T>(), nullptr))>> { 28cb93a386Sopenharmony_ci static UBreakIterator* clone(T bi, UErrorCode* status) { 29cb93a386Sopenharmony_ci return ubrk_clone(bi, status); 30cb93a386Sopenharmony_ci } 31cb93a386Sopenharmony_ci}; 32cb93a386Sopenharmony_ci 33cb93a386Sopenharmony_cistd::unique_ptr<SkICULib> SkLoadICULib() { 34cb93a386Sopenharmony_ci 35cb93a386Sopenharmony_ci return std::make_unique<SkICULib>(SkICULib{ 36cb93a386Sopenharmony_ci SKICU_EMIT_FUNCS 37cb93a386Sopenharmony_ci 38cb93a386Sopenharmony_ci &SkUbrkClone<const UBreakIterator*>::clone, 39cb93a386Sopenharmony_ci nullptr, 40cb93a386Sopenharmony_ci }); 41cb93a386Sopenharmony_ci} 42