• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifndef INTL_FFI_H
16 #define INTL_FFI_H
17 
18 #include "number_format.h"
19 #include "relative_time_format.h"
20 #include "plural_rules.h"
21 #include "collator.h"
22 #include "date_time_format.h"
23 #include "locale_info.h"
24 #include <cstdint>
25 #include <string>
26 #include "cj_common_ffi.h"
27 #include "ffi_remote_data.h"
28 #include "hilog/log.h"
29 #include "i18n_hilog.h"
30 
31 #define FFI_EXPORT __attribute__((visibility("default")))
32 
33 extern "C" {
34 struct CNumberOptions {
35     char *locale;
36     char *currency;
37     char *currencySign;
38     char *currencyDisplay;
39     char *unit;
40     char *unitDisplay;
41     char *unitUsage;
42     char *signDispaly;
43     char *compactDisplay;
44     char *notation;
45     char *localeMather;
46     char *style;
47     char *numberingSystem;
48     bool useGrouping;
49     int64_t minimumIntegerDigits;
50     int64_t minimumFractionDigits;
51     int64_t maximumFractionDigits;
52     int64_t minimumSignificantDigits;
53     int64_t maximumSignificantDigits;
54 };
55 
56 struct CRelativeTimeFormatInputOptions {
57     char *localeMatcher;
58     char *numeric;
59     char *style;
60 };
61 
62 struct CRelativeTimeFormatResolveOptions {
63     char *localeMatcher;
64     char *numeric;
65     char *style;
66     char *numberingSystem;
67 };
68 
69 struct CPluralRulesOptions {
70     char *localeMatcher;
71     char *type;
72     int32_t minimumIntegerDigits;
73     int32_t minimumFractionDigits;
74     int32_t maximumFractionDigits;
75     int32_t minimumSignificantDigits;
76     int32_t maximumSignificantDigits;
77 };
78 
79 struct CCollatorOptions {
80     char *localeMatcher;
81     char *usage;
82     char *sensitivity;
83     bool ignorePunctuation;
84     char *collation;
85     bool numeric;
86     char *caseFirst;
87 };
88 
89 struct CLocaleOptions {
90     char *calendar;
91     char *collation;
92     char *hourCycle;
93     char *numberingSystem;
94     bool numeric;
95     char *caseFirst;
96 };
97 
98 struct CDateTimeOptions {
99     char *locale;
100     char *dateStyle;
101     char *timeStyle;
102     char *hourCycle;
103     char *timeZone;
104     char *numberingSystem;
105     bool hour12;
106     char *weekday;
107     char *era;
108     char *year;
109     char *month;
110     char *day;
111     char *hour;
112     char *minute;
113     char *second;
114     char *timeZoneName;
115     char *dayPeriod;
116     char *localeMatcher;
117     char *formatMatcher;
118 };
119 
120 struct CArrArrString {
121     CArrString *head;
122     int64_t size;
123 };
124 
125 // NumberFormat
126 FFI_EXPORT int64_t FfiOHOSNumberFormatImplConstructor(int32_t *errCode);
127 FFI_EXPORT int64_t FfiOHOSNumberFormatImplConstructorwithLocale(
128     char *locale, CNumberOptions, int64_t flag, int32_t *errCode);
129 FFI_EXPORT int64_t FfiOHOSNumberFormatImplConstructorwithArrayLocale(
130     CArrString locale, CNumberOptions options, int64_t flag, int32_t *errCode);
131 FFI_EXPORT char *FfiOHOSNumberFormatImplFormat(int64_t id, double number);
132 FFI_EXPORT CNumberOptions FfiOHOSNumberFormatImplGetNumberResolvedOptions(int64_t id);
133 
134 // RelativeTimeFormat
135 FFI_EXPORT int64_t FfiOHOSRelativeTimeFormatImplConstructor(int32_t *errCode);
136 FFI_EXPORT int64_t FfiOHOSRelativeTimeFormatImplConstructorwithLocale(
137     char *locale, CRelativeTimeFormatInputOptions options, int64_t flag, int32_t *errCode);
138 FFI_EXPORT int64_t FfiOHOSRelativeTimeFormatImplConstructorwithArrayLocale(
139     CArrString locale, CRelativeTimeFormatInputOptions options, int64_t flag, int32_t *errCode);
140 FFI_EXPORT char *FfiOHOSRelativeTimeFormatImplFormat(int64_t id, double number, char *unit);
141 FFI_EXPORT CArrArrString FfiOHOSRelativeTimeFormatImplFormatToParts(int64_t id, double number, char *unit);
142 FFI_EXPORT CRelativeTimeFormatResolveOptions FfiOHOSRelativeTimeFormatImplResolvedOptions(int64_t id);
143 
144 //  PluralRules
145 FFI_EXPORT int64_t FfiOHOSPluralRulesImplConstructor(int32_t *errCode);
146 FFI_EXPORT int64_t FfiOHOSPluralRulesImplConstructorwithLocale(
147     char *locale, CPluralRulesOptions options, int64_t flag, int32_t *errCode);
148 FFI_EXPORT int64_t FfiOHOSPluralRulesImplConstructorwithArrayLocale(
149     CArrString locale, CPluralRulesOptions options, int64_t flag, int32_t *errCode);
150 FFI_EXPORT char *FfiOHOSPluralRulesImplSelect(int64_t id, double n);
151 
152 // Collator
153 FFI_EXPORT int64_t FfiOHOSCollatorImplConstructor(int32_t *errCode);
154 FFI_EXPORT int64_t FfiOHOSCollatorImplConstructorwithLocale(
155     char *locale, CCollatorOptions options, int64_t flag, int32_t *errCode);
156 FFI_EXPORT int64_t FfiOHOSCollatorImplConstructorwithArrayLocale(
157     CArrString locale, CCollatorOptions options, int64_t flag, int32_t *errCode);
158 FFI_EXPORT int32_t FfiOHOSCollatorImplCompare(int64_t id, char *first, char *second);
159 FFI_EXPORT CCollatorOptions FfiOHOSCollatorOptionsImplResolvedOptions(int64_t id);
160 
161 // DateTimeFormat
162 FFI_EXPORT int64_t FfiOHOSDateTimeFormatImplConstructor(int32_t *errCode);
163 FFI_EXPORT int64_t FfiOHOSDateTimeFormatImplConstructorwithLocale(
164     char *locale, CDateTimeOptions options, int64_t flag, int32_t *errCode);
165 FFI_EXPORT int64_t FfiOHOSDateTimeFormatImplConstructorwithArrayLocale(
166     CArrString locale, CDateTimeOptions options, int64_t flag, int32_t *errCode);
167 FFI_EXPORT CDateTimeOptions FfiOHOSDateTimeFormatOptionsImplResolvedOptions(int64_t id);
168 FFI_EXPORT char *FfiOHOSDateTimeFormatOptionsImplFormat(int64_t id, int64_t date);
169 FFI_EXPORT char *FfiOHOSDateTimeFormatOptionsImplFormatRange(int64_t id, int64_t startDate, int64_t endDate);
170 
171 // Locale
172 FFI_EXPORT int64_t FfiOHOSLocaleImplConstructor(int32_t *errCode);
173 FFI_EXPORT int64_t FfiOHOSLocaleImplConstructorwithLocale(
174     char *locale, CLocaleOptions options, int64_t flag, int32_t *errCode);
175 FFI_EXPORT char *FfiOHOSLocaleImplToString(int64_t id);
176 FFI_EXPORT char *FfiOHOSLocaleImplMinimize(int64_t id);
177 FFI_EXPORT char *FfiOHOSLocaleImplMaximize(int64_t id);
178 
179 FFI_EXPORT char *FfiOHOSLocaleImplGetLanguage(int64_t id);
180 FFI_EXPORT char *FfiOHOSLocaleImplGetScript(int64_t id);
181 FFI_EXPORT char *FfiOHOSLocaleImplGetRegion(int64_t id);
182 FFI_EXPORT char *FfiOHOSLocaleImplGetBaseName(int64_t id);
183 FFI_EXPORT char *FfiOHOSLocaleImplGetCaseFirst(int64_t id);
184 FFI_EXPORT char *FfiOHOSLocaleImplGetCalendar(int64_t id);
185 FFI_EXPORT char *FfiOHOSLocaleImplGetCollation(int64_t id);
186 FFI_EXPORT char *FfiOHOSLocaleImplGetHourCycle(int64_t id);
187 FFI_EXPORT char *FfiOHOSLocaleImplGetNumberingSystem(int64_t id);
188 FFI_EXPORT char *FfiOHOSLocaleImplGetNumeric(int64_t id);
189 }
190 
191 #endif