Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
SkUnicode_icu_bidi.h
Go to the documentation of this file.
1/*
2 * Copyright 2023 Google LLC
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_bidi_DEFINED
8#define SkUnicode_icu_bidi_DEFINED
9
12
13#include <unicode/ubidi.h>
14#include <unicode/umachine.h>
15#include <unicode/utypes.h>
16#include <cstdint>
17#include <memory>
18#include <vector>
19
20// Some versions of SkUnicode need a small subset of ICU to do bidi things. This
21// allows us to have the same API for the subset as well as the full ICU.
22class SkBidiFactory : public SkRefCnt {
23public:
24 std::unique_ptr<SkBidiIterator> MakeIterator(const uint16_t utf16[],
25 int utf16Units,
27 std::unique_ptr<SkBidiIterator> MakeIterator(const char utf8[],
28 int utf8Units,
30 bool ExtractBidi(const char utf8[],
31 int utf8Units,
33 std::vector<SkUnicode::BidiRegion>* bidiRegions) const;
34
35 virtual const char* errorName(UErrorCode status) const = 0;
36
37using BidiCloseCallback = void(*)(UBiDi* bidi);
39 virtual UBiDiDirection bidi_getDirection(const UBiDi* bidi) const = 0;
40 virtual SkBidiIterator::Position bidi_getLength(const UBiDi* bidi) const = 0;
41 virtual SkBidiIterator::Level bidi_getLevelAt(const UBiDi* bidi, int pos) const = 0;
42 virtual UBiDi* bidi_openSized(int32_t maxLength,
43 int32_t maxRunCount,
44 UErrorCode* pErrorCode) const = 0;
45 virtual void bidi_setPara(UBiDi* bidi,
46 const UChar* text,
47 int32_t length,
48 UBiDiLevel paraLevel,
49 UBiDiLevel* embeddingLevels,
50 UErrorCode* status) const = 0;
51 virtual void bidi_reorderVisual(const SkUnicode::BidiLevel runLevels[],
52 int levelsCount,
53 int32_t logicalFromVisual[]) const = 0;
54};
55
56#endif // SkUnicode_icu_bidi_DEFINED
SkPoint pos
bool ExtractBidi(const char utf8[], int utf8Units, SkUnicode::TextDirection dir, std::vector< SkUnicode::BidiRegion > *bidiRegions) const
virtual void bidi_reorderVisual(const SkUnicode::BidiLevel runLevels[], int levelsCount, int32_t logicalFromVisual[]) const =0
virtual void bidi_setPara(UBiDi *bidi, const UChar *text, int32_t length, UBiDiLevel paraLevel, UBiDiLevel *embeddingLevels, UErrorCode *status) const =0
virtual SkBidiIterator::Level bidi_getLevelAt(const UBiDi *bidi, int pos) const =0
virtual SkBidiIterator::Position bidi_getLength(const UBiDi *bidi) const =0
std::unique_ptr< SkBidiIterator > MakeIterator(const uint16_t utf16[], int utf16Units, SkBidiIterator::Direction dir) const
virtual UBiDi * bidi_openSized(int32_t maxLength, int32_t maxRunCount, UErrorCode *pErrorCode) const =0
virtual BidiCloseCallback bidi_close_callback() const =0
virtual UBiDiDirection bidi_getDirection(const UBiDi *bidi) const =0
virtual const char * errorName(UErrorCode status) const =0
void(*)(UBiDi *bidi) BidiCloseCallback
int32_t Position
Definition SkUnicode.h:45
uint8_t Level
Definition SkUnicode.h:46
uint8_t BidiLevel
Definition SkUnicode.h:99
size_t length
std::u16string text