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