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 #include "intl_ffi.h"
16 #include "intl_impl.h"
17 #include <string>
18
19 using namespace OHOS::FFI;
20
21 namespace OHOS {
22 namespace Global {
23 namespace I18n {
24 namespace Intl {
25 extern "C" {
FfiOHOSNumberFormatImplFormat(int64_t id,double number)26 char *FfiOHOSNumberFormatImplFormat(int64_t id, double number)
27 {
28 auto instance = FFIData::GetData<NumberFormatImpl>(id);
29 if (!instance) {
30 HILOG_ERROR_I18N("The NumberFormatImpl instance is nullptr");
31 return nullptr;
32 }
33 return instance->Format(number);
34 }
35
FfiOHOSNumberFormatImplConstructor(int32_t * errCode)36 int64_t FfiOHOSNumberFormatImplConstructor(int32_t *errCode)
37 {
38 auto nativeCJNumberFormat = FFIData::Create<NumberFormatImpl>(errCode);
39 if (!nativeCJNumberFormat) {
40 return 0;
41 }
42 return nativeCJNumberFormat->GetID();
43 }
44
FfiOHOSNumberFormatImplConstructorwithLocale(char * locale,CNumberOptions options,int64_t flag,int32_t * errCode)45 int64_t FfiOHOSNumberFormatImplConstructorwithLocale(
46 char *locale, CNumberOptions options, int64_t flag, int32_t *errCode)
47 {
48 auto nativeCJNumberFormat = FFIData::Create<NumberFormatImpl>(locale, options, flag, errCode);
49 if (!nativeCJNumberFormat) {
50 return 0;
51 }
52 return nativeCJNumberFormat->GetID();
53 }
54
FfiOHOSNumberFormatImplConstructorwithArrayLocale(CArrString locale,CNumberOptions options,int64_t flag,int32_t * errCode)55 int64_t FfiOHOSNumberFormatImplConstructorwithArrayLocale(
56 CArrString locale, CNumberOptions options, int64_t flag, int32_t *errCode)
57 {
58 auto nativeCJNumberFormat = FFIData::Create<NumberFormatImpl>(locale, options, flag, errCode);
59 if (!nativeCJNumberFormat) {
60 return 0;
61 }
62 return nativeCJNumberFormat->GetID();
63 }
64
FfiOHOSNumberFormatImplGetNumberResolvedOptions(int64_t id)65 CNumberOptions FfiOHOSNumberFormatImplGetNumberResolvedOptions(int64_t id)
66 {
67 auto instance = FFIData::GetData<NumberFormatImpl>(id);
68 struct CNumberOptions numberOptions = { nullptr };
69 if (!instance) {
70 HILOG_ERROR_I18N("The NumberFormatImpl instance is nullptr");
71 return numberOptions;
72 }
73 return instance->ResolveOptions();
74 }
75
FfiOHOSRelativeTimeFormatImplConstructor(int32_t * errCode)76 int64_t FfiOHOSRelativeTimeFormatImplConstructor(int32_t *errCode)
77 {
78 auto nativeCJRelativeTimeFormat = FFIData::Create<RelativeTimeFormatImpl>(errCode);
79 if (!nativeCJRelativeTimeFormat) {
80 return 0;
81 }
82 return nativeCJRelativeTimeFormat->GetID();
83 }
84
FfiOHOSRelativeTimeFormatImplConstructorwithLocale(char * locale,CRelativeTimeFormatInputOptions options,int64_t flag,int32_t * errCode)85 int64_t FfiOHOSRelativeTimeFormatImplConstructorwithLocale(
86 char *locale, CRelativeTimeFormatInputOptions options, int64_t flag, int32_t *errCode)
87 {
88 auto nativeCJRelativeTimeFormat = FFIData::Create<RelativeTimeFormatImpl>(locale, options, flag, errCode);
89 if (!nativeCJRelativeTimeFormat) {
90 return 0;
91 }
92 return nativeCJRelativeTimeFormat->GetID();
93 }
94
FfiOHOSRelativeTimeFormatImplConstructorwithArrayLocale(CArrString locale,CRelativeTimeFormatInputOptions options,int64_t flag,int32_t * errCode)95 int64_t FfiOHOSRelativeTimeFormatImplConstructorwithArrayLocale(
96 CArrString locale, CRelativeTimeFormatInputOptions options, int64_t flag, int32_t *errCode)
97 {
98 auto nativeCJRelativeTimeFormat = FFIData::Create<RelativeTimeFormatImpl>(locale, options, flag, errCode);
99 if (!nativeCJRelativeTimeFormat) {
100 return 0;
101 }
102 return nativeCJRelativeTimeFormat->GetID();
103 }
104
FfiOHOSRelativeTimeFormatImplFormat(int64_t id,double number,char * unit)105 char *FfiOHOSRelativeTimeFormatImplFormat(int64_t id, double number, char *unit)
106 {
107 auto instance = FFIData::GetData<RelativeTimeFormatImpl>(id);
108 if (!instance) {
109 HILOG_ERROR_I18N("The RelativeTimeFormatImpl instance is nullptr");
110 return nullptr;
111 }
112 return instance->Format(number, unit);
113 }
114
FfiOHOSRelativeTimeFormatImplFormatToParts(int64_t id,double number,char * unit)115 CArrArrString FfiOHOSRelativeTimeFormatImplFormatToParts(int64_t id, double number, char *unit)
116 {
117 auto instance = FFIData::GetData<RelativeTimeFormatImpl>(id);
118 if (!instance) {
119 CArrArrString ret = { nullptr };
120 HILOG_ERROR_I18N("The RelativeTimeFormatImpl instance is nullptr");
121 return ret;
122 }
123 return instance->FormatToParts(number, unit);
124 }
125
FfiOHOSRelativeTimeFormatImplResolvedOptions(int64_t id)126 CRelativeTimeFormatResolveOptions FfiOHOSRelativeTimeFormatImplResolvedOptions(int64_t id)
127 {
128 auto instance = FFIData::GetData<RelativeTimeFormatImpl>(id);
129 if (!instance) {
130 struct CRelativeTimeFormatResolveOptions relativeTimeFormatResolveOptions = { nullptr };
131 HILOG_ERROR_I18N("The RelativeTimeFormatImpl instance is nullptr");
132 return relativeTimeFormatResolveOptions;
133 }
134 return instance->ResolveOptions();
135 }
136
FfiOHOSPluralRulesImplConstructor(int32_t * errCode)137 int64_t FfiOHOSPluralRulesImplConstructor(int32_t *errCode)
138 {
139 auto nativeCJPluralRules = FFIData::Create<PluralRulesImpl>(errCode);
140 if (!nativeCJPluralRules) {
141 return 0;
142 }
143 return nativeCJPluralRules->GetID();
144 }
145
FfiOHOSPluralRulesImplConstructorwithLocale(char * locale,CPluralRulesOptions options,int64_t flag,int32_t * errCode)146 int64_t FfiOHOSPluralRulesImplConstructorwithLocale(
147 char *locale, CPluralRulesOptions options, int64_t flag, int32_t *errCode)
148 {
149 auto nativeCJPluralRules = FFIData::Create<PluralRulesImpl>(locale, options, flag, errCode);
150 if (!nativeCJPluralRules) {
151 return 0;
152 }
153 return nativeCJPluralRules->GetID();
154 }
155
FfiOHOSPluralRulesImplConstructorwithArrayLocale(CArrString locale,CPluralRulesOptions options,int64_t flag,int32_t * errCode)156 int64_t FfiOHOSPluralRulesImplConstructorwithArrayLocale(
157 CArrString locale, CPluralRulesOptions options, int64_t flag, int32_t *errCode)
158 {
159 auto nativeCJPluralRules = FFIData::Create<PluralRulesImpl>(locale, options, flag, errCode);
160 if (!nativeCJPluralRules) {
161 return 0;
162 }
163 return nativeCJPluralRules->GetID();
164 }
165
FfiOHOSPluralRulesImplSelect(int64_t id,double n)166 char *FfiOHOSPluralRulesImplSelect(int64_t id, double n)
167 {
168 auto instance = FFIData::GetData<PluralRulesImpl>(id);
169 if (!instance) {
170 HILOG_ERROR_I18N("The PluralRulesImpl instance is nullptr");
171 return nullptr;
172 }
173 return instance->Select(n);
174 }
175
FfiOHOSCollatorImplConstructor(int32_t * errCode)176 int64_t FfiOHOSCollatorImplConstructor(int32_t *errCode)
177 {
178 auto nativeCJCollator = FFIData::Create<CollatorImpl>(errCode);
179 if (!nativeCJCollator) {
180 return 0;
181 }
182 return nativeCJCollator->GetID();
183 }
184
FfiOHOSCollatorImplConstructorwithLocale(char * locale,CCollatorOptions options,int64_t flag,int32_t * errCode)185 int64_t FfiOHOSCollatorImplConstructorwithLocale(char *locale, CCollatorOptions options, int64_t flag, int32_t *errCode)
186 {
187 auto nativeCJCollator = FFIData::Create<CollatorImpl>(locale, options, flag, errCode);
188 if (!nativeCJCollator) {
189 return 0;
190 }
191 return nativeCJCollator->GetID();
192 }
193
FfiOHOSCollatorImplConstructorwithArrayLocale(CArrString locale,CCollatorOptions options,int64_t flag,int32_t * errCode)194 int64_t FfiOHOSCollatorImplConstructorwithArrayLocale(
195 CArrString locale, CCollatorOptions options, int64_t flag, int32_t *errCode)
196 {
197 auto nativeCJCollator = FFIData::Create<CollatorImpl>(locale, options, flag, errCode);
198 if (!nativeCJCollator) {
199 return 0;
200 }
201 return nativeCJCollator->GetID();
202 }
203
FfiOHOSCollatorOptionsImplResolvedOptions(int64_t id)204 CCollatorOptions FfiOHOSCollatorOptionsImplResolvedOptions(int64_t id)
205 {
206 auto instance = FFIData::GetData<CollatorImpl>(id);
207 if (!instance) {
208 struct CCollatorOptions collatorResolveOptions = { nullptr };
209 HILOG_ERROR_I18N("The CollatorImpl instance is nullptr");
210 return collatorResolveOptions;
211 }
212 return instance->ResolveOptions();
213 }
214
FfiOHOSCollatorImplCompare(int64_t id,char * str1,char * str2)215 int32_t FfiOHOSCollatorImplCompare(int64_t id, char *str1, char *str2)
216 {
217 auto instance = FFIData::GetData<CollatorImpl>(id);
218 if (!instance) {
219 HILOG_ERROR_I18N("The CollatorImpl instance is nullptr");
220 return 0;
221 }
222 return instance->Compare(str1, str2);
223 }
224
FfiOHOSDateTimeFormatImplConstructor(int32_t * errCode)225 int64_t FfiOHOSDateTimeFormatImplConstructor(int32_t *errCode)
226 {
227 auto nativeCJDateTimeFormat = FFIData::Create<DateTimeFormatImpl>(errCode);
228 if (!nativeCJDateTimeFormat) {
229 return 0;
230 }
231 return nativeCJDateTimeFormat->GetID();
232 }
233
FfiOHOSDateTimeFormatImplConstructorwithLocale(char * locale,CDateTimeOptions options,int64_t flag,int32_t * errCode)234 int64_t FfiOHOSDateTimeFormatImplConstructorwithLocale(
235 char *locale, CDateTimeOptions options, int64_t flag, int32_t *errCode)
236 {
237 auto nativeCJDateTimeFormat = FFIData::Create<DateTimeFormatImpl>(locale, options, flag, errCode);
238 if (!nativeCJDateTimeFormat) {
239 return 0;
240 }
241 return nativeCJDateTimeFormat->GetID();
242 }
243
FfiOHOSDateTimeFormatImplConstructorwithArrayLocale(CArrString locale,CDateTimeOptions options,int64_t flag,int32_t * errCode)244 int64_t FfiOHOSDateTimeFormatImplConstructorwithArrayLocale(
245 CArrString locale, CDateTimeOptions options, int64_t flag, int32_t *errCode)
246 {
247 auto nativeCJDateTimeFormat = FFIData::Create<DateTimeFormatImpl>(locale, options, flag, errCode);
248 if (!nativeCJDateTimeFormat) {
249 return 0;
250 }
251 return nativeCJDateTimeFormat->GetID();
252 }
253
FfiOHOSDateTimeFormatOptionsImplResolvedOptions(int64_t id)254 CDateTimeOptions FfiOHOSDateTimeFormatOptionsImplResolvedOptions(int64_t id)
255 {
256 auto instance = FFIData::GetData<DateTimeFormatImpl>(id);
257 if (!instance) {
258 struct CDateTimeOptions dateTimeOptions = { nullptr };
259 HILOG_ERROR_I18N("The DateTimeFormatImpl instance is nullptr");
260 return dateTimeOptions;
261 }
262 return instance->ResolveOptions();
263 }
264
FfiOHOSDateTimeFormatOptionsImplFormat(int64_t id,int64_t date)265 char *FfiOHOSDateTimeFormatOptionsImplFormat(int64_t id, int64_t date)
266 {
267 auto instance = FFIData::GetData<DateTimeFormatImpl>(id);
268 if (!instance) {
269 HILOG_ERROR_I18N("The DateTimeFormatImpl instance is nullptr");
270 return nullptr;
271 }
272 return instance->Format(date);
273 }
274
FfiOHOSDateTimeFormatOptionsImplFormatRange(int64_t id,int64_t startDate,int64_t endDate)275 char *FfiOHOSDateTimeFormatOptionsImplFormatRange(int64_t id, int64_t startDate, int64_t endDate)
276 {
277 auto instance = FFIData::GetData<DateTimeFormatImpl>(id);
278 if (!instance) {
279 HILOG_ERROR_I18N("The DateTimeFormatImpl instance is nullptr");
280 return nullptr;
281 }
282 return instance->FormatRange(startDate, endDate);
283 }
284
FfiOHOSLocaleImplConstructor(int32_t * errCode)285 int64_t FfiOHOSLocaleImplConstructor(int32_t *errCode)
286 {
287 auto nativeCJLocale = FFIData::Create<LocaleImpl>(errCode);
288 if (!nativeCJLocale) {
289 return 0;
290 }
291
292 return nativeCJLocale->GetID();
293 }
294
FfiOHOSLocaleImplConstructorwithLocale(char * locale,CLocaleOptions options,int64_t flag,int32_t * errCode)295 int64_t FfiOHOSLocaleImplConstructorwithLocale(char *locale, CLocaleOptions options, int64_t flag, int32_t *errCode)
296 {
297 auto nativeCJLocale = FFIData::Create<LocaleImpl>(locale, options, flag, errCode);
298 if (!nativeCJLocale) {
299 return 0;
300 }
301 return nativeCJLocale->GetID();
302 }
303
FfiOHOSLocaleImplToString(int64_t id)304 char *FfiOHOSLocaleImplToString(int64_t id)
305 {
306 auto instance = FFIData::GetData<LocaleImpl>(id);
307 if (!instance) {
308 HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
309 return nullptr;
310 }
311 return instance->ToString();
312 }
313
FfiOHOSLocaleImplMaximize(int64_t id)314 char *FfiOHOSLocaleImplMaximize(int64_t id)
315 {
316 auto instance = FFIData::GetData<LocaleImpl>(id);
317 if (!instance) {
318 HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
319 return nullptr;
320 }
321 return instance->Maximize();
322 }
323
FfiOHOSLocaleImplMinimize(int64_t id)324 char *FfiOHOSLocaleImplMinimize(int64_t id)
325 {
326 auto instance = FFIData::GetData<LocaleImpl>(id);
327 if (!instance) {
328 HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
329 return nullptr;
330 }
331 return instance->Minimize();
332 }
333
FfiOHOSLocaleImplGetLanguage(int64_t id)334 char *FfiOHOSLocaleImplGetLanguage(int64_t id)
335 {
336 auto instance = FFIData::GetData<LocaleImpl>(id);
337 if (!instance) {
338 HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
339 return nullptr;
340 }
341 return instance->GetLanguage();
342 }
343
FfiOHOSLocaleImplGetRegion(int64_t id)344 char *FfiOHOSLocaleImplGetRegion(int64_t id)
345 {
346 auto instance = FFIData::GetData<LocaleImpl>(id);
347 if (!instance) {
348 HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
349 return nullptr;
350 }
351 return instance->GetRegion();
352 }
353
FfiOHOSLocaleImplGetScript(int64_t id)354 char *FfiOHOSLocaleImplGetScript(int64_t id)
355 {
356 auto instance = FFIData::GetData<LocaleImpl>(id);
357 if (!instance) {
358 HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
359 return nullptr;
360 }
361 return instance->GetScript();
362 }
363
FfiOHOSLocaleImplGetBaseName(int64_t id)364 char *FfiOHOSLocaleImplGetBaseName(int64_t id)
365 {
366 auto instance = FFIData::GetData<LocaleImpl>(id);
367 if (!instance) {
368 HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
369 return nullptr;
370 }
371 return instance->GetBaseName();
372 }
373
FfiOHOSLocaleImplGetCaseFirst(int64_t id)374 char *FfiOHOSLocaleImplGetCaseFirst(int64_t id)
375 {
376 auto instance = FFIData::GetData<LocaleImpl>(id);
377 if (!instance) {
378 HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
379 return nullptr;
380 }
381 return instance->GetCaseFirst();
382 }
383
FfiOHOSLocaleImplGetCalendar(int64_t id)384 char *FfiOHOSLocaleImplGetCalendar(int64_t id)
385 {
386 auto instance = FFIData::GetData<LocaleImpl>(id);
387 if (!instance) {
388 HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
389 return nullptr;
390 }
391 return instance->GetCalendar();
392 }
393
FfiOHOSLocaleImplGetCollation(int64_t id)394 char *FfiOHOSLocaleImplGetCollation(int64_t id)
395 {
396 auto instance = FFIData::GetData<LocaleImpl>(id);
397 if (!instance) {
398 HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
399 return nullptr;
400 }
401 return instance->GetCollation();
402 }
403
FfiOHOSLocaleImplGetHourCycle(int64_t id)404 char *FfiOHOSLocaleImplGetHourCycle(int64_t id)
405 {
406 auto instance = FFIData::GetData<LocaleImpl>(id);
407 if (!instance) {
408 HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
409 return nullptr;
410 }
411 return instance->GetHourCycle();
412 }
413
FfiOHOSLocaleImplGetNumberingSystem(int64_t id)414 char *FfiOHOSLocaleImplGetNumberingSystem(int64_t id)
415 {
416 auto instance = FFIData::GetData<LocaleImpl>(id);
417 if (!instance) {
418 HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
419 return nullptr;
420 }
421 return instance->GetNumberingSystem();
422 }
423
FfiOHOSLocaleImplGetNumeric(int64_t id)424 char *FfiOHOSLocaleImplGetNumeric(int64_t id)
425 {
426 auto instance = FFIData::GetData<LocaleImpl>(id);
427 if (!instance) {
428 HILOG_ERROR_I18N("The LocaleImpl instance is nullptr");
429 return nullptr;
430 }
431 return instance->GetNumeric();
432 }
433 }
434 } // namespace Intl
435 } // namespace I18n
436 } // namespace Global
437 } // namespace OHOS