1 /*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "i18n_breakIterator_ffi.h"
17 #include "i18n_breakIterator_impl.h"
18 #include "i18n_ffi.h"
19 #include "i18n_hilog.h"
20
21 namespace OHOS {
22 namespace Global {
23 namespace I18n {
24 using namespace OHOS::FFI;
25 constexpr int32_t OFF_BOUND = -1;
26 extern "C" {
FfiOHOSBreakIteratorSetLineBreakText(int64_t id,const char * text)27 void FfiOHOSBreakIteratorSetLineBreakText(int64_t id, const char* text)
28 {
29 auto instance = FFIData::GetData<CBreakIterator>(id);
30 if (!instance) {
31 HILOG_ERROR_I18N("The CBreakIterator instance is nullptr");
32 return;
33 }
34 instance->SetLineBreakText(text);
35 }
36
FfiOHOSBreakIteratorGetLineBreakText(int64_t id)37 char* FfiOHOSBreakIteratorGetLineBreakText(int64_t id)
38 {
39 auto instance = FFIData::GetData<CBreakIterator>(id);
40 if (!instance) {
41 HILOG_ERROR_I18N("The CBreakIterator instance is nullptr");
42 return nullptr;
43 }
44 return MallocCString(instance->GetLineBreakText());
45 }
46
FfiOHOSBreakIteratorCurrent(int64_t id)47 int32_t FfiOHOSBreakIteratorCurrent(int64_t id)
48 {
49 auto instance = FFIData::GetData<CBreakIterator>(id);
50 if (!instance) {
51 HILOG_ERROR_I18N("The CBreakIterator instance is nullptr");
52 return OFF_BOUND;
53 }
54 return instance->current();
55 }
56
FfiOHOSBreakIteratorFirst(int64_t id)57 int32_t FfiOHOSBreakIteratorFirst(int64_t id)
58 {
59 auto instance = FFIData::GetData<CBreakIterator>(id);
60 if (!instance) {
61 HILOG_ERROR_I18N("The CBreakIterator instance is nullptr");
62 return OFF_BOUND;
63 }
64 return instance->first();
65 }
66
FfiOHOSBreakIteratorFollowing(int64_t id,int32_t offset)67 int32_t FfiOHOSBreakIteratorFollowing(int64_t id, int32_t offset)
68 {
69 auto instance = FFIData::GetData<CBreakIterator>(id);
70 if (!instance) {
71 HILOG_ERROR_I18N("The CBreakIterator instance is nullptr");
72 return OFF_BOUND;
73 }
74 return instance->following(offset);
75 }
76
FfiOHOSBreakIteratorLast(int64_t id)77 int32_t FfiOHOSBreakIteratorLast(int64_t id)
78 {
79 auto instance = FFIData::GetData<CBreakIterator>(id);
80 if (!instance) {
81 HILOG_ERROR_I18N("The CBreakIterator instance is nullptr");
82 return OFF_BOUND;
83 }
84 return instance->last();
85 }
86
FfiOHOSBreakIteratorNext(int64_t id,int32_t number)87 int32_t FfiOHOSBreakIteratorNext(int64_t id, int32_t number)
88 {
89 auto instance = FFIData::GetData<CBreakIterator>(id);
90 if (!instance) {
91 HILOG_ERROR_I18N("The CBreakIterator instance is nullptr");
92 return OFF_BOUND;
93 }
94 return instance->next(number);
95 }
96
FfiOHOSBreakIteratorPrevious(int64_t id)97 int32_t FfiOHOSBreakIteratorPrevious(int64_t id)
98 {
99 auto instance = FFIData::GetData<CBreakIterator>(id);
100 if (!instance) {
101 HILOG_ERROR_I18N("The CBreakIterator instance is nullptr");
102 return OFF_BOUND;
103 }
104 return instance->previous();
105 }
106
FfiOHOSBreakIteratorIsBoundary(int64_t id,int32_t offset)107 bool FfiOHOSBreakIteratorIsBoundary(int64_t id, int32_t offset)
108 {
109 auto instance = FFIData::GetData<CBreakIterator>(id);
110 if (!instance) {
111 HILOG_ERROR_I18N("The CBreakIterator instance is nullptr");
112 return false;
113 }
114 return instance->IsBoundary(offset);
115 }
116
FfiOHOSGetLineInstance(const char * locale)117 int64_t FfiOHOSGetLineInstance(const char* locale)
118 {
119 std::string localeStr(locale);
120 auto instance = FFIData::Create<CBreakIterator>(localeStr);
121 if (instance == nullptr) {
122 HILOG_ERROR_I18N("Create CBreakIterator fail");
123 return -1;
124 }
125 return instance->GetID();
126 }
127 }
128 } // namespace I18n
129 } // namespace Global
130 } // namespace OHOS
131