xref: /aosp_15_r20/external/skia/modules/skunicode/src/SkBidiFactory_icu_full.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2024 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 SkBidiICUFactory_DEFINED
8 #define SkBidiICUFactory_DEFINED
9 
10 #include "modules/skunicode/include/SkUnicode.h"
11 #include "modules/skunicode/src/SkUnicode_icu_bidi.h"
12 
13 #include <unicode/ubidi.h>
14 #include <unicode/umachine.h>
15 #include <unicode/utypes.h>
16 
17 #include <cstdint>
18 
19 class SkBidiICUFactory : public SkBidiFactory {
20 public:
21     const char* errorName(UErrorCode status) const override;
22     SkBidiFactory::BidiCloseCallback bidi_close_callback() const override;
23     UBiDiDirection bidi_getDirection(const UBiDi* bidi) const override;
24     SkBidiIterator::Position bidi_getLength(const UBiDi* bidi) const override;
25     SkBidiIterator::Level bidi_getLevelAt(const UBiDi* bidi, int pos) const override;
26     UBiDi* bidi_openSized(int32_t maxLength,
27                           int32_t maxRunCount,
28                           UErrorCode* pErrorCode) const override;
29     void bidi_setPara(UBiDi* bidi,
30                       const UChar* text,
31                       int32_t length,
32                       UBiDiLevel paraLevel,
33                       UBiDiLevel* embeddingLevels,
34                       UErrorCode* status) const override;
35     void bidi_reorderVisual(const SkUnicode::BidiLevel runLevels[],
36                             int levelsCount,
37                             int32_t logicalFromVisual[]) const override;
38 };
39 
40 #endif
41