From 2d7e0b6912bd04b44ed652bc0f40bb343652d926 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Zasso?= Date: Fri, 20 Nov 2020 12:57:06 +0100 Subject: [PATCH] deps: update ICU to 68.1 Refs: https://github.com/unicode-org/icu/releases/tag/release-68-1 PR-URL: https://github.com/nodejs/node/pull/36187 Reviewed-By: Richard Lau Reviewed-By: Gireesh Punathil Reviewed-By: Michael Dawson Reviewed-By: Rich Trott Reviewed-By: Jiawen Geng --- LICENSE | 6 +- deps/icu-small/LICENSE | 6 +- deps/icu-small/README-FULL-ICU.txt | 4 +- deps/icu-small/source/.clang-format | 11 + deps/icu-small/source/common/bmpset.h | 2 +- deps/icu-small/source/common/brkeng.h | 4 +- deps/icu-small/source/common/bytesinkutil.h | 4 +- deps/icu-small/source/common/charstr.cpp | 28 +- deps/icu-small/source/common/charstr.h | 26 +- deps/icu-small/source/common/charstrmap.h | 55 + deps/icu-small/source/common/cmemory.h | 89 +- deps/icu-small/source/common/dictbe.h | 2 +- deps/icu-small/source/common/icuplug.cpp | 12 +- deps/icu-small/source/common/icuplugimp.h | 12 +- .../icu-small/source/common/localematcher.cpp | 84 +- .../source/common/localeprioritylist.cpp | 2 +- .../source/common/localeprioritylist.h | 2 +- deps/icu-small/source/common/locdispnames.cpp | 55 +- deps/icu-small/source/common/locdistance.cpp | 2 +- deps/icu-small/source/common/locdistance.h | 10 +- deps/icu-small/source/common/locid.cpp | 1417 +++++++++++++---- deps/icu-small/source/common/loclikely.cpp | 112 +- .../source/common/loclikelysubtags.cpp | 68 +- .../source/common/loclikelysubtags.h | 40 +- deps/icu-small/source/common/locmap.cpp | 12 +- deps/icu-small/source/common/lsr.cpp | 2 +- deps/icu-small/source/common/lsr.h | 2 +- deps/icu-small/source/common/messageimpl.h | 2 +- deps/icu-small/source/common/norm2allmodes.h | 34 +- .../icu-small/source/common/normalizer2impl.h | 10 +- deps/icu-small/source/common/patternprops.h | 8 +- deps/icu-small/source/common/pluralmap.h | 8 +- deps/icu-small/source/common/punycode.cpp | 87 +- deps/icu-small/source/common/punycode.h | 10 +- deps/icu-small/source/common/putil.cpp | 74 +- deps/icu-small/source/common/putilimp.h | 78 +- deps/icu-small/source/common/rbbi.cpp | 207 +-- deps/icu-small/source/common/rbbi_cache.cpp | 10 +- deps/icu-small/source/common/rbbi_cache.h | 6 +- deps/icu-small/source/common/rbbicst.pl | 2 +- deps/icu-small/source/common/rbbidata.cpp | 101 +- deps/icu-small/source/common/rbbidata.h | 99 +- deps/icu-small/source/common/rbbinode.h | 2 +- deps/icu-small/source/common/rbbirb.cpp | 36 +- deps/icu-small/source/common/rbbiscan.cpp | 4 +- deps/icu-small/source/common/rbbiscan.h | 2 +- deps/icu-small/source/common/rbbisetb.cpp | 218 +-- deps/icu-small/source/common/rbbisetb.h | 48 +- deps/icu-small/source/common/rbbitblb.cpp | 114 +- deps/icu-small/source/common/rbbitblb.h | 20 +- deps/icu-small/source/common/resource.h | 12 +- deps/icu-small/source/common/ruleiter.h | 2 +- deps/icu-small/source/common/serv.h | 38 +- deps/icu-small/source/common/servnotf.h | 2 +- deps/icu-small/source/common/sharedobject.h | 4 +- .../source/common/simpleformatter.cpp | 2 + deps/icu-small/source/common/uassert.h | 2 +- deps/icu-small/source/common/ubidi_props.cpp | 2 +- deps/icu-small/source/common/ubidiimp.h | 20 +- .../source/common/ubiditransform.cpp | 6 +- deps/icu-small/source/common/ucase.cpp | 36 + deps/icu-small/source/common/ucase.h | 5 +- .../source/common/ucase_props_data.h | 268 ++-- deps/icu-small/source/common/ucasemap_imp.h | 8 +- deps/icu-small/source/common/ucln_cmn.h | 2 + deps/icu-small/source/common/ucln_imp.h | 6 +- deps/icu-small/source/common/ucnv_bld.cpp | 2 +- deps/icu-small/source/common/ucnv_bld.h | 14 +- deps/icu-small/source/common/ucnv_cnv.h | 6 +- deps/icu-small/source/common/ucnv_u8.cpp | 4 +- deps/icu-small/source/common/ucnvmbcs.h | 2 +- deps/icu-small/source/common/ucol_swp.h | 2 +- deps/icu-small/source/common/ucurr.cpp | 27 +- deps/icu-small/source/common/uelement.h | 2 +- deps/icu-small/source/common/uinvchar.cpp | 4 +- deps/icu-small/source/common/uinvchar.h | 18 +- deps/icu-small/source/common/uloc.cpp | 307 ++-- deps/icu-small/source/common/uloc_tag.cpp | 137 +- deps/icu-small/source/common/ulocimp.h | 77 +- deps/icu-small/source/common/umutex.h | 4 +- .../source/common/unicode/appendable.h | 20 +- .../icu-small/source/common/unicode/brkiter.h | 4 +- .../source/common/unicode/bytestream.h | 4 +- .../source/common/unicode/bytestrie.h | 16 +- .../source/common/unicode/bytestriebuilder.h | 9 +- .../icu-small/source/common/unicode/caniter.h | 4 +- .../source/common/unicode/chariter.h | 12 +- .../icu-small/source/common/unicode/docmain.h | 10 +- .../icu-small/source/common/unicode/dtintrv.h | 4 +- deps/icu-small/source/common/unicode/edits.h | 34 +- .../source/common/unicode/filteredbrk.h | 8 +- .../source/common/unicode/icudataver.h | 2 +- .../icu-small/source/common/unicode/icuplug.h | 34 +- deps/icu-small/source/common/unicode/idna.h | 22 +- .../source/common/unicode/localebuilder.h | 19 +- .../source/common/unicode/localematcher.h | 167 +- .../source/common/unicode/localpointer.h | 4 +- deps/icu-small/source/common/unicode/locid.h | 58 +- .../source/common/unicode/messagepattern.h | 24 +- .../source/common/unicode/normalizer2.h | 32 +- .../icu-small/source/common/unicode/normlzr.h | 18 +- .../source/common/unicode/parsepos.h | 8 +- deps/icu-small/source/common/unicode/putil.h | 12 +- deps/icu-small/source/common/unicode/rbbi.h | 38 +- .../icu-small/source/common/unicode/resbund.h | 2 +- .../source/common/unicode/simpleformatter.h | 4 +- .../icu-small/source/common/unicode/strenum.h | 4 +- .../source/common/unicode/stringpiece.h | 10 +- .../source/common/unicode/stringtriebuilder.h | 4 +- deps/icu-small/source/common/unicode/ubidi.h | 107 +- .../source/common/unicode/ubiditransform.h | 13 +- deps/icu-small/source/common/unicode/ubrk.h | 47 +- .../source/common/unicode/ucasemap.h | 31 +- deps/icu-small/source/common/unicode/ucat.h | 6 +- deps/icu-small/source/common/unicode/uchar.h | 184 +-- .../source/common/unicode/ucharstrie.h | 18 +- .../source/common/unicode/ucharstriebuilder.h | 9 +- .../source/common/unicode/uchriter.h | 8 +- deps/icu-small/source/common/unicode/uclean.h | 6 +- deps/icu-small/source/common/unicode/ucnv.h | 165 +- .../icu-small/source/common/unicode/ucnv_cb.h | 10 +- .../source/common/unicode/ucnv_err.h | 20 +- .../icu-small/source/common/unicode/ucnvsel.h | 15 +- .../icu-small/source/common/unicode/ucptrie.h | 12 +- deps/icu-small/source/common/unicode/ucurr.h | 62 +- deps/icu-small/source/common/unicode/udata.h | 29 +- .../source/common/unicode/udisplaycontext.h | 3 +- deps/icu-small/source/common/unicode/uenum.h | 21 +- deps/icu-small/source/common/unicode/uidna.h | 30 +- deps/icu-small/source/common/unicode/uiter.h | 20 +- .../source/common/unicode/uldnames.h | 33 +- deps/icu-small/source/common/unicode/uloc.h | 240 +-- .../source/common/unicode/umachine.h | 66 +- .../source/common/unicode/umutablecptrie.h | 5 +- .../source/common/unicode/unimatch.h | 10 +- deps/icu-small/source/common/unicode/uniset.h | 12 +- deps/icu-small/source/common/unicode/unistr.h | 94 +- deps/icu-small/source/common/unicode/unorm.h | 14 +- deps/icu-small/source/common/unicode/unorm2.h | 57 +- .../icu-small/source/common/unicode/urename.h | 20 +- deps/icu-small/source/common/unicode/ures.h | 91 +- .../icu-small/source/common/unicode/uscript.h | 36 +- deps/icu-small/source/common/unicode/uset.h | 149 +- .../source/common/unicode/usetiter.h | 6 +- deps/icu-small/source/common/unicode/ushape.h | 2 +- deps/icu-small/source/common/unicode/usprep.h | 11 +- .../icu-small/source/common/unicode/ustring.h | 134 +- deps/icu-small/source/common/unicode/utext.h | 94 +- deps/icu-small/source/common/unicode/utf.h | 20 +- deps/icu-small/source/common/unicode/utf16.h | 21 +- deps/icu-small/source/common/unicode/utf8.h | 31 +- .../icu-small/source/common/unicode/utf_old.h | 4 +- deps/icu-small/source/common/unicode/utrace.h | 28 +- deps/icu-small/source/common/unicode/utypes.h | 14 +- .../icu-small/source/common/unicode/uvernum.h | 12 +- .../source/common/unicode/uversion.h | 8 +- deps/icu-small/source/common/unifiedcache.cpp | 14 +- deps/icu-small/source/common/unifiedcache.h | 30 +- deps/icu-small/source/common/uniquecharstr.h | 98 ++ deps/icu-small/source/common/unisetspan.h | 4 +- deps/icu-small/source/common/unormimp.h | 2 +- deps/icu-small/source/common/uresbund.cpp | 18 +- deps/icu-small/source/common/uresdata.cpp | 2 +- deps/icu-small/source/common/uresdata.h | 22 +- deps/icu-small/source/common/uresimp.h | 4 +- deps/icu-small/source/common/ustr_imp.h | 20 +- deps/icu-small/source/common/ustring.cpp | 12 +- deps/icu-small/source/common/util.h | 6 +- deps/icu-small/source/common/utrie.h | 12 +- deps/icu-small/source/common/utrie2.h | 14 +- deps/icu-small/source/common/utrie_swap.cpp | 18 +- deps/icu-small/source/common/uts46.cpp | 18 +- deps/icu-small/source/common/utypes.cpp | 3 +- deps/icu-small/source/common/uvector.h | 2 +- deps/icu-small/source/common/uvectr32.h | 4 +- deps/icu-small/source/common/uvectr64.h | 4 +- deps/icu-small/source/common/wintz.cpp | 143 +- deps/icu-small/source/common/wintz.h | 2 +- .../in/{icudt67l.dat.bz2 => icudt68l.dat.bz2} | Bin 10042879 -> 10124683 bytes deps/icu-small/source/i18n/buddhcal.h | 2 +- deps/icu-small/source/i18n/calendar.cpp | 4 +- deps/icu-small/source/i18n/cecal.cpp | 2 +- deps/icu-small/source/i18n/cecal.h | 2 +- deps/icu-small/source/i18n/chnsecal.cpp | 4 +- deps/icu-small/source/i18n/chnsecal.h | 2 +- deps/icu-small/source/i18n/collation.h | 2 +- deps/icu-small/source/i18n/collationbuilder.h | 2 +- .../source/i18n/collationdatabuilder.h | 8 +- deps/icu-small/source/i18n/collationfcd.h | 6 +- .../icu-small/source/i18n/collationiterator.h | 8 +- deps/icu-small/source/i18n/collationkeys.h | 8 +- .../source/i18n/collationtailoring.h | 2 +- deps/icu-small/source/i18n/collationweights.h | 2 +- deps/icu-small/source/i18n/cpdtrans.h | 2 +- deps/icu-small/source/i18n/csrecog.h | 4 +- deps/icu-small/source/i18n/dayperiodrules.h | 2 +- deps/icu-small/source/i18n/decContext.h | 32 +- deps/icu-small/source/i18n/decNumber.h | 122 +- deps/icu-small/source/i18n/dtitv_impl.h | 2 + deps/icu-small/source/i18n/dtitvfmt.cpp | 220 ++- deps/icu-small/source/i18n/dtitvinf.cpp | 28 +- deps/icu-small/source/i18n/dtptngen.cpp | 22 +- deps/icu-small/source/i18n/dtptngen_impl.h | 2 +- deps/icu-small/source/i18n/fmtable.cpp | 26 +- deps/icu-small/source/i18n/fmtable_cnv.cpp | 2 - deps/icu-small/source/i18n/format.cpp | 2 +- .../source/i18n/formatted_string_builder.h | 3 +- .../icu-small/source/i18n/formattedval_impl.h | 24 +- .../source/i18n/formattedval_sbimpl.cpp | 75 +- deps/icu-small/source/i18n/formattedvalue.cpp | 4 +- deps/icu-small/source/i18n/fphdlimp.h | 4 +- deps/icu-small/source/i18n/gregocal.cpp | 2 +- deps/icu-small/source/i18n/gregoimp.h | 4 +- deps/icu-small/source/i18n/hebrwcal.cpp | 9 +- deps/icu-small/source/i18n/hebrwcal.h | 2 +- deps/icu-small/source/i18n/indiancal.cpp | 57 +- deps/icu-small/source/i18n/indiancal.h | 4 +- deps/icu-small/source/i18n/islamcal.cpp | 16 +- deps/icu-small/source/i18n/islamcal.h | 2 +- deps/icu-small/source/i18n/japancal.h | 2 +- deps/icu-small/source/i18n/listformatter.cpp | 359 ++--- deps/icu-small/source/i18n/measfmt.cpp | 2 +- deps/icu-small/source/i18n/measunit.cpp | 483 +++--- deps/icu-small/source/i18n/measunit_extra.cpp | 342 ++-- deps/icu-small/source/i18n/measunit_impl.h | 48 +- deps/icu-small/source/i18n/measure.cpp | 10 +- deps/icu-small/source/i18n/nfrs.cpp | 28 +- deps/icu-small/source/i18n/nfrs.h | 6 +- deps/icu-small/source/i18n/nfrule.cpp | 26 +- deps/icu-small/source/i18n/nfrule.h | 2 +- deps/icu-small/source/i18n/nfsubs.cpp | 4 +- deps/icu-small/source/i18n/nounit.cpp | 42 - deps/icu-small/source/i18n/number_asformat.h | 1 - deps/icu-small/source/i18n/number_capi.cpp | 18 + deps/icu-small/source/i18n/number_compact.cpp | 5 + .../source/i18n/number_currencysymbols.cpp | 10 + .../source/i18n/number_currencysymbols.h | 4 + .../source/i18n/number_decimalquantity.cpp | 24 +- .../source/i18n/number_decimalquantity.h | 12 +- deps/icu-small/source/i18n/number_decnum.h | 8 + deps/icu-small/source/i18n/number_fluent.cpp | 213 +-- .../source/i18n/number_formatimpl.cpp | 123 +- .../icu-small/source/i18n/number_formatimpl.h | 22 +- .../icu-small/source/i18n/number_grouping.cpp | 14 +- .../source/i18n/number_integerwidth.cpp | 3 + .../source/i18n/number_longnames.cpp | 337 +++- deps/icu-small/source/i18n/number_longnames.h | 194 ++- deps/icu-small/source/i18n/number_mapper.cpp | 6 +- deps/icu-small/source/i18n/number_mapper.h | 14 +- .../icu-small/source/i18n/number_microprops.h | 97 +- .../source/i18n/number_modifiers.cpp | 16 +- deps/icu-small/source/i18n/number_output.cpp | 43 + .../source/i18n/number_patternmodifier.cpp | 18 +- .../icu-small/source/i18n/number_rounding.cpp | 55 +- .../source/i18n/number_roundingutils.h | 18 + .../source/i18n/number_skeletons.cpp | 178 +-- deps/icu-small/source/i18n/number_skeletons.h | 45 +- .../source/i18n/number_symbolswrapper.cpp | 131 ++ deps/icu-small/source/i18n/number_types.h | 18 +- .../source/i18n/number_usageprefs.cpp | 208 +++ .../icu-small/source/i18n/number_usageprefs.h | 125 ++ deps/icu-small/source/i18n/number_utils.cpp | 5 +- deps/icu-small/source/i18n/number_utils.h | 4 +- deps/icu-small/source/i18n/number_utypes.h | 9 +- .../source/i18n/numparse_affixes.cpp | 11 +- deps/icu-small/source/i18n/numparse_affixes.h | 5 +- deps/icu-small/source/i18n/numparse_types.h | 7 +- deps/icu-small/source/i18n/numrange_capi.cpp | 193 +++ .../icu-small/source/i18n/numrange_fluent.cpp | 25 +- deps/icu-small/source/i18n/numrange_impl.cpp | 86 +- deps/icu-small/source/i18n/numrange_impl.h | 36 +- deps/icu-small/source/i18n/olsontz.cpp | 90 +- deps/icu-small/source/i18n/olsontz.h | 6 +- deps/icu-small/source/i18n/persncal.cpp | 2 +- deps/icu-small/source/i18n/persncal.h | 2 +- deps/icu-small/source/i18n/pluralranges.cpp | 144 ++ deps/icu-small/source/i18n/pluralranges.h | 67 + deps/icu-small/source/i18n/plurfmt.cpp | 12 +- deps/icu-small/source/i18n/plurrule.cpp | 232 ++- deps/icu-small/source/i18n/plurrule_impl.h | 27 +- deps/icu-small/source/i18n/quant.h | 6 +- .../icu-small/source/i18n/quantityformatter.h | 8 +- deps/icu-small/source/i18n/rbt.h | 2 +- deps/icu-small/source/i18n/rbt_pars.cpp | 2 +- deps/icu-small/source/i18n/rbt_pars.h | 2 +- deps/icu-small/source/i18n/rbt_rule.h | 8 +- deps/icu-small/source/i18n/rbt_set.h | 12 +- deps/icu-small/source/i18n/regexcmp.h | 2 +- deps/icu-small/source/i18n/regextxt.h | 2 +- deps/icu-small/source/i18n/region.cpp | 2 +- deps/icu-small/source/i18n/reldatefmt.cpp | 4 +- deps/icu-small/source/i18n/rematch.cpp | 2 +- .../source/i18n/rulebasedcollator.cpp | 5 +- deps/icu-small/source/i18n/smpdtfmt.cpp | 131 +- deps/icu-small/source/i18n/strmatch.h | 12 +- deps/icu-small/source/i18n/taiwncal.h | 2 +- deps/icu-small/source/i18n/timezone.cpp | 18 + deps/icu-small/source/i18n/transreg.h | 8 +- deps/icu-small/source/i18n/tridpars.h | 2 +- deps/icu-small/source/i18n/tznames_impl.h | 6 +- deps/icu-small/source/i18n/ucal.cpp | 2 +- deps/icu-small/source/i18n/ucol_imp.h | 4 +- deps/icu-small/source/i18n/ucol_sit.cpp | 5 +- deps/icu-small/source/i18n/ucsdet.cpp | 2 +- deps/icu-small/source/i18n/udat.cpp | 23 +- .../source/i18n/udateintervalformat.cpp | 25 +- .../source/i18n/uitercollationiterator.h | 4 +- deps/icu-small/source/i18n/ulocdata.cpp | 2 +- .../source/i18n/unicode/alphaindex.h | 6 +- deps/icu-small/source/i18n/unicode/basictz.h | 4 +- deps/icu-small/source/i18n/unicode/calendar.h | 26 +- deps/icu-small/source/i18n/unicode/choicfmt.h | 16 +- deps/icu-small/source/i18n/unicode/coleitr.h | 2 +- deps/icu-small/source/i18n/unicode/coll.h | 20 +- deps/icu-small/source/i18n/unicode/curramt.h | 2 +- deps/icu-small/source/i18n/unicode/dcfmtsym.h | 10 +- deps/icu-small/source/i18n/unicode/decimfmt.h | 43 +- deps/icu-small/source/i18n/unicode/dtfmtsym.h | 7 +- deps/icu-small/source/i18n/unicode/dtitvfmt.h | 59 +- deps/icu-small/source/i18n/unicode/dtitvinf.h | 4 +- deps/icu-small/source/i18n/unicode/dtptngen.h | 11 +- deps/icu-small/source/i18n/unicode/fieldpos.h | 4 +- deps/icu-small/source/i18n/unicode/fmtable.h | 8 +- .../source/i18n/unicode/formattedvalue.h | 12 +- deps/icu-small/source/i18n/unicode/fpositer.h | 2 +- deps/icu-small/source/i18n/unicode/gregocal.h | 4 +- deps/icu-small/source/i18n/unicode/measfmt.h | 2 +- deps/icu-small/source/i18n/unicode/measunit.h | 376 +++-- deps/icu-small/source/i18n/unicode/measure.h | 2 +- deps/icu-small/source/i18n/unicode/msgfmt.h | 4 +- deps/icu-small/source/i18n/unicode/nounit.h | 89 +- .../source/i18n/unicode/numberformatter.h | 220 ++- .../i18n/unicode/numberrangeformatter.h | 199 +-- deps/icu-small/source/i18n/unicode/numfmt.h | 18 +- deps/icu-small/source/i18n/unicode/numsys.h | 8 +- deps/icu-small/source/i18n/unicode/plurfmt.h | 2 +- deps/icu-small/source/i18n/unicode/plurrule.h | 68 +- deps/icu-small/source/i18n/unicode/rbnf.h | 14 +- deps/icu-small/source/i18n/unicode/rbtz.h | 4 +- deps/icu-small/source/i18n/unicode/regex.h | 38 +- .../source/i18n/unicode/reldatefmt.h | 6 +- deps/icu-small/source/i18n/unicode/search.h | 6 +- deps/icu-small/source/i18n/unicode/simpletz.h | 4 +- deps/icu-small/source/i18n/unicode/smpdtfmt.h | 26 +- deps/icu-small/source/i18n/unicode/sortkey.h | 4 +- deps/icu-small/source/i18n/unicode/stsearch.h | 2 +- deps/icu-small/source/i18n/unicode/tblcoll.h | 12 +- deps/icu-small/source/i18n/unicode/timezone.h | 25 +- deps/icu-small/source/i18n/unicode/tmutamt.h | 2 +- deps/icu-small/source/i18n/unicode/translit.h | 16 +- deps/icu-small/source/i18n/unicode/tzfmt.h | 8 +- deps/icu-small/source/i18n/unicode/tznames.h | 8 +- deps/icu-small/source/i18n/unicode/ucal.h | 127 +- deps/icu-small/source/i18n/unicode/ucol.h | 127 +- deps/icu-small/source/i18n/unicode/ucoleitr.h | 50 +- deps/icu-small/source/i18n/unicode/ucsdet.h | 39 +- deps/icu-small/source/i18n/unicode/udat.h | 46 +- .../source/i18n/unicode/udateintervalformat.h | 44 +- deps/icu-small/source/i18n/unicode/udatpg.h | 51 +- .../source/i18n/unicode/ufieldpositer.h | 8 +- .../source/i18n/unicode/uformattable.h | 28 +- .../source/i18n/unicode/uformattedvalue.h | 36 +- deps/icu-small/source/i18n/unicode/ugender.h | 6 +- .../source/i18n/unicode/ulistformatter.h | 7 +- deps/icu-small/source/i18n/unicode/ulocdata.h | 25 +- deps/icu-small/source/i18n/unicode/umsg.h | 45 +- deps/icu-small/source/i18n/unicode/unirepl.h | 2 +- deps/icu-small/source/i18n/unicode/unum.h | 99 +- .../source/i18n/unicode/unumberformatter.h | 88 +- .../i18n/unicode/unumberrangeformatter.h | 477 ++++++ deps/icu-small/source/i18n/unicode/unumsys.h | 21 +- .../source/i18n/unicode/upluralrules.h | 36 +- deps/icu-small/source/i18n/unicode/uregex.h | 175 +- deps/icu-small/source/i18n/unicode/uregion.h | 26 +- .../source/i18n/unicode/ureldatefmt.h | 25 +- deps/icu-small/source/i18n/unicode/usearch.h | 234 +-- deps/icu-small/source/i18n/unicode/uspoof.h | 89 +- deps/icu-small/source/i18n/unicode/utmscale.h | 6 +- deps/icu-small/source/i18n/unicode/utrans.h | 43 +- deps/icu-small/source/i18n/unicode/vtzone.h | 8 +- .../source/i18n/units_complexconverter.cpp | 253 +++ .../source/i18n/units_complexconverter.h | 93 ++ .../icu-small/source/i18n/units_converter.cpp | 546 +++++++ deps/icu-small/source/i18n/units_converter.h | 173 ++ deps/icu-small/source/i18n/units_data.cpp | 428 +++++ deps/icu-small/source/i18n/units_data.h | 229 +++ deps/icu-small/source/i18n/units_router.cpp | 132 ++ deps/icu-small/source/i18n/units_router.h | 162 ++ deps/icu-small/source/i18n/unum.cpp | 4 +- deps/icu-small/source/i18n/upluralrules.cpp | 20 + deps/icu-small/source/i18n/uspoof_impl.h | 2 +- deps/icu-small/source/i18n/usrchimp.h | 8 +- .../source/i18n/utf16collationiterator.h | 4 +- .../source/i18n/utf8collationiterator.h | 6 +- deps/icu-small/source/i18n/vzone.h | 10 +- deps/icu-small/source/i18n/zonemeta.h | 2 +- .../databuilder/filtration_schema.json | 43 +- .../test/sample_data/brkitr/LOCALE_DEPS.json | 2 +- .../test/sample_data/locales/LOCALE_DEPS.json | 2 +- .../test/sample_data/rbnf/LOCALE_DEPS.json | 2 +- deps/icu-small/source/tools/genrb/errmsg.c | 1 + deps/icu-small/source/tools/genrb/read.c | 1 + deps/icu-small/source/tools/genrb/reslist.cpp | 1 + deps/icu-small/source/tools/genrb/reslist.h | 2 +- deps/icu-small/source/tools/genrb/rle.c | 7 +- deps/icu-small/source/tools/icupkg/icupkg.cpp | 11 +- .../icu-small/source/tools/pkgdata/pkgtypes.c | 5 +- .../source/tools/toolutil/dbgutil.cpp | 2 +- .../source/tools/toolutil/filetools.h | 2 +- .../icu-small/source/tools/toolutil/package.h | 8 +- .../source/tools/toolutil/pkg_genc.cpp | 4 +- .../source/tools/toolutil/pkg_genc.h | 10 +- .../source/tools/toolutil/pkgitems.cpp | 2 + .../source/tools/toolutil/toolutil.cpp | 15 +- .../source/tools/toolutil/toolutil.h | 6 + .../source/tools/toolutil/udbgutil.cpp | 54 +- .../source/tools/toolutil/udbgutil.h | 8 - .../source/tools/toolutil/unewdata.cpp | 16 +- tools/icu/current_ver.dep | 4 +- 419 files changed, 12539 insertions(+), 5755 deletions(-) create mode 100644 deps/icu-small/source/.clang-format create mode 100644 deps/icu-small/source/common/charstrmap.h create mode 100644 deps/icu-small/source/common/uniquecharstr.h rename deps/icu-small/source/data/in/{icudt67l.dat.bz2 => icudt68l.dat.bz2} (55%) delete mode 100644 deps/icu-small/source/i18n/nounit.cpp create mode 100644 deps/icu-small/source/i18n/number_symbolswrapper.cpp create mode 100644 deps/icu-small/source/i18n/number_usageprefs.cpp create mode 100644 deps/icu-small/source/i18n/number_usageprefs.h create mode 100644 deps/icu-small/source/i18n/numrange_capi.cpp create mode 100644 deps/icu-small/source/i18n/pluralranges.cpp create mode 100644 deps/icu-small/source/i18n/pluralranges.h create mode 100644 deps/icu-small/source/i18n/unicode/unumberrangeformatter.h create mode 100644 deps/icu-small/source/i18n/units_complexconverter.cpp create mode 100644 deps/icu-small/source/i18n/units_complexconverter.h create mode 100644 deps/icu-small/source/i18n/units_converter.cpp create mode 100644 deps/icu-small/source/i18n/units_converter.h create mode 100644 deps/icu-small/source/i18n/units_data.cpp create mode 100644 deps/icu-small/source/i18n/units_data.h create mode 100644 deps/icu-small/source/i18n/units_router.cpp create mode 100644 deps/icu-small/source/i18n/units_router.h diff --git a/LICENSE b/LICENSE index cedae41d607e2f..a7f7e92f9d272e 100644 --- a/LICENSE +++ b/LICENSE @@ -418,9 +418,9 @@ The externally maintained libraries used by Node.js are: # Copyright (c) 2013 International Business Machines Corporation # and others. All Rights Reserved. # - # Project: http://code.google.com/p/lao-dictionary/ - # Dictionary: http://lao-dictionary.googlecode.com/git/Lao-Dictionary.txt - # License: http://lao-dictionary.googlecode.com/git/Lao-Dictionary-LICENSE.txt + # Project: https://github.com/veer66/lao-dictionary + # Dictionary: https://github.com/veer66/lao-dictionary/blob/master/Lao-Dictionary.txt + # License: https://github.com/veer66/lao-dictionary/blob/master/Lao-Dictionary-LICENSE.txt # (copied below) # # This file is derived from the above dictionary, with slight diff --git a/deps/icu-small/LICENSE b/deps/icu-small/LICENSE index e7f98ed18391b8..5d664a083b986f 100644 --- a/deps/icu-small/LICENSE +++ b/deps/icu-small/LICENSE @@ -284,9 +284,9 @@ property of their respective owners. # Copyright (c) 2013 International Business Machines Corporation # and others. All Rights Reserved. # - # Project: http://code.google.com/p/lao-dictionary/ - # Dictionary: http://lao-dictionary.googlecode.com/git/Lao-Dictionary.txt - # License: http://lao-dictionary.googlecode.com/git/Lao-Dictionary-LICENSE.txt + # Project: https://github.com/veer66/lao-dictionary + # Dictionary: https://github.com/veer66/lao-dictionary/blob/master/Lao-Dictionary.txt + # License: https://github.com/veer66/lao-dictionary/blob/master/Lao-Dictionary-LICENSE.txt # (copied below) # # This file is derived from the above dictionary, with slight diff --git a/deps/icu-small/README-FULL-ICU.txt b/deps/icu-small/README-FULL-ICU.txt index bad8b0346d3e98..df63187d3ae6e4 100644 --- a/deps/icu-small/README-FULL-ICU.txt +++ b/deps/icu-small/README-FULL-ICU.txt @@ -1,8 +1,8 @@ ICU sources - auto generated by shrink-icu-src.py This directory contains the ICU subset used by --with-intl=full-icu -It is a strict subset of ICU 67 source files with the following exception(s): -* deps/icu-small/source/data/in/icudt67l.dat.bz2 : compressed data file +It is a strict subset of ICU 68 source files with the following exception(s): +* deps/icu-small/source/data/in/icudt68l.dat.bz2 : compressed data file To rebuild this directory, see ../../tools/icu/README.md diff --git a/deps/icu-small/source/.clang-format b/deps/icu-small/source/.clang-format new file mode 100644 index 00000000000000..06bd4885a10a21 --- /dev/null +++ b/deps/icu-small/source/.clang-format @@ -0,0 +1,11 @@ +# © 2020 and later: Unicode, Inc. and others. +# License & terms of use: http://www.unicode.org/copyright.html + +--- +Language: Cpp +BasedOnStyle: LLVM +IndentWidth: 4 +ColumnLimit: 105 +AllowShortBlocksOnASingleLine: false +AllowShortIfStatementsOnASingleLine: true +... diff --git a/deps/icu-small/source/common/bmpset.h b/deps/icu-small/source/common/bmpset.h index 018aeb7f95b078..e1982ac669db85 100644 --- a/deps/icu-small/source/common/bmpset.h +++ b/deps/icu-small/source/common/bmpset.h @@ -101,7 +101,7 @@ class BMPSet : public UMemory { */ UBool latin1Contains[0x100]; - /* TRUE if contains(U+FFFD). */ + /* true if contains(U+FFFD). */ UBool containsFFFD; /* diff --git a/deps/icu-small/source/common/brkeng.h b/deps/icu-small/source/common/brkeng.h index e40fce13f64b8a..155433b89a86ac 100644 --- a/deps/icu-small/source/common/brkeng.h +++ b/deps/icu-small/source/common/brkeng.h @@ -54,7 +54,7 @@ class LanguageBreakEngine : public UMemory { * a particular kind of break.

* * @param c A character which begins a run that the engine might handle - * @return TRUE if this engine handles the particular character and break + * @return true if this engine handles the particular character and break * type. */ virtual UBool handles(UChar32 c) const = 0; @@ -171,7 +171,7 @@ class UnhandledEngine : public LanguageBreakEngine { * a particular kind of break.

* * @param c A character which begins a run that the engine might handle - * @return TRUE if this engine handles the particular character and break + * @return true if this engine handles the particular character and break * type. */ virtual UBool handles(UChar32 c) const; diff --git a/deps/icu-small/source/common/bytesinkutil.h b/deps/icu-small/source/common/bytesinkutil.h index 6808fbe6777837..ab2516432d3111 100644 --- a/deps/icu-small/source/common/bytesinkutil.h +++ b/deps/icu-small/source/common/bytesinkutil.h @@ -45,9 +45,9 @@ class U_COMMON_API ByteSinkUtil { static UBool appendUnchanged(const uint8_t *s, int32_t length, ByteSink &sink, uint32_t options, Edits *edits, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return FALSE; } + if (U_FAILURE(errorCode)) { return false; } if (length > 0) { appendNonEmptyUnchanged(s, length, sink, options, edits); } - return TRUE; + return true; } static UBool appendUnchanged(const uint8_t *s, const uint8_t *limit, diff --git a/deps/icu-small/source/common/charstr.cpp b/deps/icu-small/source/common/charstr.cpp index dda29dac63273c..318a185b3f1d64 100644 --- a/deps/icu-small/source/common/charstr.cpp +++ b/deps/icu-small/source/common/charstr.cpp @@ -20,6 +20,7 @@ #include "cmemory.h" #include "cstring.h" #include "uinvchar.h" +#include "ustr_imp.h" U_NAMESPACE_BEGIN @@ -46,6 +47,19 @@ char *CharString::cloneData(UErrorCode &errorCode) const { return p; } +int32_t CharString::extract(char *dest, int32_t capacity, UErrorCode &errorCode) const { + if (U_FAILURE(errorCode)) { return len; } + if (capacity < 0 || (capacity > 0 && dest == nullptr)) { + errorCode = U_ILLEGAL_ARGUMENT_ERROR; + return len; + } + const char *src = buffer.getAlias(); + if (0 < len && len <= capacity && src != dest) { + uprv_memcpy(dest, src, len); + } + return u_terminateChars(dest, capacity, len, &errorCode); +} + CharString &CharString::copyFrom(const CharString &s, UErrorCode &errorCode) { if(U_SUCCESS(errorCode) && this!=&s && ensureCapacity(s.len+1, 0, errorCode)) { len=s.len; @@ -197,7 +211,7 @@ CharString &CharString::appendPathPart(StringPiece s, UErrorCode &errorCode) { } char c; if(len>0 && (c=buffer[len-1])!=U_FILE_SEP_CHAR && c!=U_FILE_ALT_SEP_CHAR) { - append(U_FILE_SEP_CHAR, errorCode); + append(getDirSepChar(), errorCode); } append(s, errorCode); return *this; @@ -207,9 +221,19 @@ CharString &CharString::ensureEndsWithFileSeparator(UErrorCode &errorCode) { char c; if(U_SUCCESS(errorCode) && len>0 && (c=buffer[len-1])!=U_FILE_SEP_CHAR && c!=U_FILE_ALT_SEP_CHAR) { - append(U_FILE_SEP_CHAR, errorCode); + append(getDirSepChar(), errorCode); } return *this; } +char CharString::getDirSepChar() const { + char dirSepChar = U_FILE_SEP_CHAR; +#if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR) + // We may need to return a different directory separator when building for Cygwin or MSYS2. + if(len>0 && !uprv_strchr(data(), U_FILE_SEP_CHAR) && uprv_strchr(data(), U_FILE_ALT_SEP_CHAR)) + dirSepChar = U_FILE_ALT_SEP_CHAR; +#endif + return dirSepChar; +} + U_NAMESPACE_END diff --git a/deps/icu-small/source/common/charstr.h b/deps/icu-small/source/common/charstr.h index 23b950ed6ecc76..6619faac618193 100644 --- a/deps/icu-small/source/common/charstr.h +++ b/deps/icu-small/source/common/charstr.h @@ -87,6 +87,22 @@ class U_COMMON_API CharString : public UMemory { * The caller must uprv_free() the result. */ char *cloneData(UErrorCode &errorCode) const; + /** + * Copies the contents of the string into dest. + * Checks if there is enough space in dest, extracts the entire string if possible, + * and NUL-terminates dest if possible. + * + * If the string fits into dest but cannot be NUL-terminated (length()==capacity), + * then the error code is set to U_STRING_NOT_TERMINATED_WARNING. + * If the string itself does not fit into dest (length()>capacity), + * then the error code is set to U_BUFFER_OVERFLOW_ERROR. + * + * @param dest Destination string buffer. + * @param capacity Size of the dest buffer (number of chars). + * @param errorCode ICU error code. + * @return length() + */ + int32_t extract(char *dest, int32_t capacity, UErrorCode &errorCode) const; bool operator==(StringPiece other) const { return len == other.length() && (len == 0 || uprv_memcmp(data(), other.data(), len) == 0); @@ -141,13 +157,13 @@ class U_COMMON_API CharString : public UMemory { /** * Appends a filename/path part, e.g., a directory name. - * First appends a U_FILE_SEP_CHAR if necessary. + * First appends a U_FILE_SEP_CHAR or U_FILE_ALT_SEP_CHAR if necessary. * Does nothing if s is empty. */ CharString &appendPathPart(StringPiece s, UErrorCode &errorCode); /** - * Appends a U_FILE_SEP_CHAR if this string is not empty + * Appends a U_FILE_SEP_CHAR or U_FILE_ALT_SEP_CHAR if this string is not empty * and does not already end with a U_FILE_SEP_CHAR or U_FILE_ALT_SEP_CHAR. */ CharString &ensureEndsWithFileSeparator(UErrorCode &errorCode); @@ -160,6 +176,12 @@ class U_COMMON_API CharString : public UMemory { CharString(const CharString &other); // forbid copying of this class CharString &operator=(const CharString &other); // forbid copying of this class + + /** + * Returns U_FILE_ALT_SEP_CHAR if found in string, and U_FILE_SEP_CHAR is not found. + * Otherwise returns U_FILE_SEP_CHAR. + */ + char getDirSepChar() const; }; U_NAMESPACE_END diff --git a/deps/icu-small/source/common/charstrmap.h b/deps/icu-small/source/common/charstrmap.h new file mode 100644 index 00000000000000..3320a4620852ce --- /dev/null +++ b/deps/icu-small/source/common/charstrmap.h @@ -0,0 +1,55 @@ +// © 2020 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html + +// charstrmap.h +// created: 2020sep01 Frank Yung-Fong Tang + +#ifndef __CHARSTRMAP_H__ +#define __CHARSTRMAP_H__ + +#include +#include "unicode/utypes.h" +#include "unicode/uobject.h" +#include "uhash.h" + +U_NAMESPACE_BEGIN + +/** + * Map of const char * keys & values. + * Stores pointers as is: Does not own/copy/adopt/release strings. + */ +class CharStringMap final : public UMemory { +public: + /** Constructs an unusable non-map. */ + CharStringMap() : map(nullptr) {} + CharStringMap(int32_t size, UErrorCode &errorCode) { + map = uhash_openSize(uhash_hashChars, uhash_compareChars, uhash_compareChars, + size, &errorCode); + } + CharStringMap(CharStringMap &&other) U_NOEXCEPT : map(other.map) { + other.map = nullptr; + } + CharStringMap(const CharStringMap &other) = delete; + ~CharStringMap() { + uhash_close(map); + } + + CharStringMap &operator=(CharStringMap &&other) U_NOEXCEPT { + map = other.map; + other.map = nullptr; + return *this; + } + CharStringMap &operator=(const CharStringMap &other) = delete; + + const char *get(const char *key) const { return static_cast(uhash_get(map, key)); } + void put(const char *key, const char *value, UErrorCode &errorCode) { + uhash_put(map, const_cast(key), const_cast(value), &errorCode); + } + +private: + UHashtable *map; +}; + +U_NAMESPACE_END + +#endif // __CHARSTRMAP_H__ diff --git a/deps/icu-small/source/common/cmemory.h b/deps/icu-small/source/common/cmemory.h index 38f99179631b10..b5e0c2b7a17296 100644 --- a/deps/icu-small/source/common/cmemory.h +++ b/deps/icu-small/source/common/cmemory.h @@ -292,14 +292,21 @@ class MaybeStackArray { /** * Default constructor initializes with internal T[stackCapacity] buffer. */ - MaybeStackArray() : ptr(stackArray), capacity(stackCapacity), needToRelease(FALSE) {} + MaybeStackArray() : ptr(stackArray), capacity(stackCapacity), needToRelease(false) {} /** * Automatically allocates the heap array if the argument is larger than the stack capacity. * Intended for use when an approximate capacity is known at compile time but the true * capacity is not known until runtime. */ - MaybeStackArray(int32_t newCapacity) : MaybeStackArray() { - if (capacity < newCapacity) { resize(newCapacity); } + MaybeStackArray(int32_t newCapacity, UErrorCode status) : MaybeStackArray() { + if (U_FAILURE(status)) { + return; + } + if (capacity < newCapacity) { + if (resize(newCapacity) == nullptr) { + status = U_MEMORY_ALLOCATION_ERROR; + } + } } /** * Destructor deletes the array (if owned). @@ -355,7 +362,7 @@ class MaybeStackArray { releaseArray(); ptr=otherArray; capacity=otherCapacity; - needToRelease=FALSE; + needToRelease=false; } } /** @@ -380,6 +387,20 @@ class MaybeStackArray { * caller becomes responsible for deleting the array */ inline T *orphanOrClone(int32_t length, int32_t &resultCapacity); + +protected: + // Resizes the array to the size of src, then copies the contents of src. + void copyFrom(const MaybeStackArray &src, UErrorCode &status) { + if (U_FAILURE(status)) { + return; + } + if (this->resize(src.capacity, 0) == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + uprv_memcpy(this->ptr, src.ptr, (size_t)capacity * sizeof(T)); + } + private: T *ptr; int32_t capacity; @@ -393,14 +414,14 @@ class MaybeStackArray { void resetToStackArray() { ptr=stackArray; capacity=stackCapacity; - needToRelease=FALSE; + needToRelease=false; } /* No comparison operators with other MaybeStackArray's. */ - bool operator==(const MaybeStackArray & /*other*/) {return FALSE;} - bool operator!=(const MaybeStackArray & /*other*/) {return TRUE;} + bool operator==(const MaybeStackArray & /*other*/) = delete; + bool operator!=(const MaybeStackArray & /*other*/) = delete; /* No ownership transfer: No copy constructor, no assignment operator. */ - MaybeStackArray(const MaybeStackArray & /*other*/) {} - void operator=(const MaybeStackArray & /*other*/) {} + MaybeStackArray(const MaybeStackArray & /*other*/) = delete; + void operator=(const MaybeStackArray & /*other*/) = delete; }; template @@ -435,7 +456,7 @@ template inline T *MaybeStackArray::resize(int32_t newCapacity, int32_t length) { if(newCapacity>0) { #if U_DEBUG && defined(UPRV_MALLOC_COUNT) - ::fprintf(::stderr,"MaybeStacArray (resize) alloc %d * %lu\n", newCapacity,sizeof(T)); + ::fprintf(::stderr, "MaybeStackArray (resize) alloc %d * %lu\n", newCapacity, sizeof(T)); #endif T *p=(T *)uprv_malloc(newCapacity*sizeof(T)); if(p!=NULL) { @@ -451,7 +472,7 @@ inline T *MaybeStackArray::resize(int32_t newCapacity, int32_t releaseArray(); ptr=p; capacity=newCapacity; - needToRelease=TRUE; + needToRelease=true; } return p; } else { @@ -507,7 +528,7 @@ class MaybeStackHeaderAndArray { /** * Default constructor initializes with internal H+T[stackCapacity] buffer. */ - MaybeStackHeaderAndArray() : ptr(&stackHeader), capacity(stackCapacity), needToRelease(FALSE) {} + MaybeStackHeaderAndArray() : ptr(&stackHeader), capacity(stackCapacity), needToRelease(false) {} /** * Destructor deletes the memory (if owned). */ @@ -556,7 +577,7 @@ class MaybeStackHeaderAndArray { releaseMemory(); ptr=otherMemory; capacity=otherCapacity; - needToRelease=FALSE; + needToRelease=false; } } /** @@ -595,8 +616,8 @@ class MaybeStackHeaderAndArray { } } /* No comparison operators with other MaybeStackHeaderAndArray's. */ - bool operator==(const MaybeStackHeaderAndArray & /*other*/) {return FALSE;} - bool operator!=(const MaybeStackHeaderAndArray & /*other*/) {return TRUE;} + bool operator==(const MaybeStackHeaderAndArray & /*other*/) {return false;} + bool operator!=(const MaybeStackHeaderAndArray & /*other*/) {return true;} /* No ownership transfer: No copy constructor, no assignment operator. */ MaybeStackHeaderAndArray(const MaybeStackHeaderAndArray & /*other*/) {} void operator=(const MaybeStackHeaderAndArray & /*other*/) {} @@ -625,7 +646,7 @@ inline H *MaybeStackHeaderAndArray::resize(int32_t newCapac releaseMemory(); ptr=p; capacity=newCapacity; - needToRelease=TRUE; + needToRelease=true; } return p; } else { @@ -657,7 +678,7 @@ inline H *MaybeStackHeaderAndArray::orphanOrClone(int32_t l resultCapacity=length; ptr=&stackHeader; capacity=stackCapacity; - needToRelease=FALSE; + needToRelease=false; return p; } @@ -728,6 +749,18 @@ class MemoryPool : public UMemory { return fPool[fCount++] = new T(std::forward(args)...); } + template + T* createAndCheckErrorCode(UErrorCode &status, Args &&... args) { + if (U_FAILURE(status)) { + return nullptr; + } + T *pointer = this->create(args...); + if (U_SUCCESS(status) && pointer == nullptr) { + status = U_MEMORY_ALLOCATION_ERROR; + } + return pointer; + } + /** * @return Number of elements that have been allocated. */ @@ -771,6 +804,11 @@ class MaybeStackVector : protected MemoryPool { return this->create(args...); } + template + T *emplaceBackAndCheckErrorCode(UErrorCode &status, Args &&... args) { + return this->createAndCheckErrorCode(status, args...); + } + int32_t length() const { return this->fCount; } @@ -779,6 +817,10 @@ class MaybeStackVector : protected MemoryPool { return this->fPool.getAlias(); } + const T *const *getAlias() const { + return this->fPool.getAlias(); + } + /** * Array item access (read-only). * No index bounds check. @@ -798,19 +840,6 @@ class MaybeStackVector : protected MemoryPool { T* operator[](ptrdiff_t i) { return this->fPool[i]; } - - /** - * Append all the items from another MaybeStackVector to this one. - */ - void appendAll(const MaybeStackVector& other, UErrorCode& status) { - for (int32_t i = 0; i < other.fCount; i++) { - T* item = emplaceBack(*other[i]); - if (!item) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } - } - } }; diff --git a/deps/icu-small/source/common/dictbe.h b/deps/icu-small/source/common/dictbe.h index 99d176cc2e7bcf..246c1dc6935fbd 100644 --- a/deps/icu-small/source/common/dictbe.h +++ b/deps/icu-small/source/common/dictbe.h @@ -59,7 +59,7 @@ class DictionaryBreakEngine : public LanguageBreakEngine { * a particular kind of break.

* * @param c A character which begins a run that the engine might handle - * @return TRUE if this engine handles the particular character and break + * @return true if this engine handles the particular character and break * type. */ virtual UBool handles(UChar32 c) const; diff --git a/deps/icu-small/source/common/icuplug.cpp b/deps/icu-small/source/common/icuplug.cpp index c3c8231b77d572..944df5465d0dd2 100644 --- a/deps/icu-small/source/common/icuplug.cpp +++ b/deps/icu-small/source/common/icuplug.cpp @@ -145,7 +145,7 @@ static int32_t searchForLibrary(void *lib) { return -1; } -U_INTERNAL char * U_EXPORT2 +U_CAPI char * U_EXPORT2 uplug_findLibrary(void *lib, UErrorCode *status) { int32_t libEnt; char *ret = NULL; @@ -161,7 +161,7 @@ uplug_findLibrary(void *lib, UErrorCode *status) { return ret; } -U_INTERNAL void * U_EXPORT2 +U_CAPI void * U_EXPORT2 uplug_openLibrary(const char *libName, UErrorCode *status) { int32_t libEntry = -1; void *lib = NULL; @@ -209,7 +209,7 @@ uplug_openLibrary(const char *libName, UErrorCode *status) { return lib; } -U_INTERNAL void U_EXPORT2 +U_CAPI void U_EXPORT2 uplug_closeLibrary(void *lib, UErrorCode *status) { int32_t i; @@ -507,7 +507,7 @@ uplug_getConfiguration(UPlugData *data) { return data->config; } -U_INTERNAL UPlugData* U_EXPORT2 +U_CAPI UPlugData* U_EXPORT2 uplug_getPlugInternal(int32_t n) { if(n <0 || n >= pluginCount) { return NULL; @@ -707,7 +707,7 @@ static void uplug_loadWaitingPlugs(UErrorCode *status) { static char plugin_file[2048] = ""; #endif -U_INTERNAL const char* U_EXPORT2 +U_CAPI const char* U_EXPORT2 uplug_getPluginFile() { #if U_ENABLE_DYLOAD && !UCONFIG_NO_FILE_IO return plugin_file; @@ -782,7 +782,7 @@ uplug_init(UErrorCode *status) { /* plugin_file is not used for processing - it is only used so that uplug_getPluginFile() works (i.e. icuinfo) */ - uprv_strncpy(plugin_file, pluginFile.data(), sizeof(plugin_file)); + pluginFile.extract(plugin_file, sizeof(plugin_file), *status); #if UPLUG_TRACE DBG((stderr, "pluginfile= %s len %d/%d\n", plugin_file, (int)strlen(plugin_file), (int)sizeof(plugin_file))); diff --git a/deps/icu-small/source/common/icuplugimp.h b/deps/icu-small/source/common/icuplugimp.h index 282c639b40e271..712fdb236fde35 100644 --- a/deps/icu-small/source/common/icuplugimp.h +++ b/deps/icu-small/source/common/icuplugimp.h @@ -36,7 +36,7 @@ * @return the library pointer, or NULL * @internal internal use only */ -U_INTERNAL void * U_EXPORT2 +U_CAPI void * U_EXPORT2 uplug_openLibrary(const char *libName, UErrorCode *status); /** @@ -45,7 +45,7 @@ uplug_openLibrary(const char *libName, UErrorCode *status); * @param status error code * @internal internal use only */ -U_INTERNAL void U_EXPORT2 +U_CAPI void U_EXPORT2 uplug_closeLibrary(void *lib, UErrorCode *status); /** @@ -55,7 +55,7 @@ uplug_closeLibrary(void *lib, UErrorCode *status); * @return the library name, or NULL if not found. * @internal internal use only */ -U_INTERNAL char * U_EXPORT2 +U_CAPI char * U_EXPORT2 uplug_findLibrary(void *lib, UErrorCode *status); /** @} */ @@ -69,21 +69,21 @@ uplug_findLibrary(void *lib, UErrorCode *status); * @param status error result * @internal - Internal use only. */ -U_INTERNAL void U_EXPORT2 +U_CAPI void U_EXPORT2 uplug_init(UErrorCode *status); /** * Get raw plug N * @internal - Internal use only */ -U_INTERNAL UPlugData* U_EXPORT2 +U_CAPI UPlugData* U_EXPORT2 uplug_getPlugInternal(int32_t n); /** * Get the name of the plugin file. * @internal - Internal use only. */ -U_INTERNAL const char* U_EXPORT2 +U_CAPI const char* U_EXPORT2 uplug_getPluginFile(void); /** @} */ diff --git a/deps/icu-small/source/common/localematcher.cpp b/deps/icu-small/source/common/localematcher.cpp index 85db8c8bf3246d..5795cbf87e633a 100644 --- a/deps/icu-small/source/common/localematcher.cpp +++ b/deps/icu-small/source/common/localematcher.cpp @@ -1,12 +1,9 @@ // © 2019 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html#License +// License & terms of use: http://www.unicode.org/copyright.html // localematcher.cpp // created: 2019may08 Markus W. Scherer -#ifndef __LOCMATCHER_H__ -#define __LOCMATCHER_H__ - #include "unicode/utypes.h" #include "unicode/localebuilder.h" #include "unicode/localematcher.h" @@ -131,6 +128,7 @@ LocaleMatcher::Builder::Builder(LocaleMatcher::Builder &&src) U_NOEXCEPT : thresholdDistance_(src.thresholdDistance_), demotion_(src.demotion_), defaultLocale_(src.defaultLocale_), + withDefault_(src.withDefault_), favor_(src.favor_), direction_(src.direction_) { src.supportedLocales_ = nullptr; @@ -140,6 +138,8 @@ LocaleMatcher::Builder::Builder(LocaleMatcher::Builder &&src) U_NOEXCEPT : LocaleMatcher::Builder::~Builder() { delete supportedLocales_; delete defaultLocale_; + delete maxDistanceDesired_; + delete maxDistanceSupported_; } LocaleMatcher::Builder &LocaleMatcher::Builder::operator=(LocaleMatcher::Builder &&src) U_NOEXCEPT { @@ -150,6 +150,7 @@ LocaleMatcher::Builder &LocaleMatcher::Builder::operator=(LocaleMatcher::Builder thresholdDistance_ = src.thresholdDistance_; demotion_ = src.demotion_; defaultLocale_ = src.defaultLocale_; + withDefault_ = src.withDefault_, favor_ = src.favor_; direction_ = src.direction_; @@ -229,6 +230,14 @@ LocaleMatcher::Builder &LocaleMatcher::Builder::addSupportedLocale(const Locale return *this; } +LocaleMatcher::Builder &LocaleMatcher::Builder::setNoDefaultLocale() { + if (U_FAILURE(errorCode_)) { return *this; } + delete defaultLocale_; + defaultLocale_ = nullptr; + withDefault_ = false; + return *this; +} + LocaleMatcher::Builder &LocaleMatcher::Builder::setDefaultLocale(const Locale *defaultLocale) { if (U_FAILURE(errorCode_)) { return *this; } Locale *clone = nullptr; @@ -241,6 +250,7 @@ LocaleMatcher::Builder &LocaleMatcher::Builder::setDefaultLocale(const Locale *d } delete defaultLocale_; defaultLocale_ = clone; + withDefault_ = true; return *this; } @@ -256,6 +266,24 @@ LocaleMatcher::Builder &LocaleMatcher::Builder::setDemotionPerDesiredLocale(ULoc return *this; } +LocaleMatcher::Builder &LocaleMatcher::Builder::setMaxDistance(const Locale &desired, + const Locale &supported) { + if (U_FAILURE(errorCode_)) { return *this; } + Locale *desiredClone = desired.clone(); + Locale *supportedClone = supported.clone(); + if (desiredClone == nullptr || supportedClone == nullptr) { + delete desiredClone; // in case only one could not be allocated + delete supportedClone; + errorCode_ = U_MEMORY_ALLOCATION_ERROR; + return *this; + } + delete maxDistanceDesired_; + delete maxDistanceSupported_; + maxDistanceDesired_ = desiredClone; + maxDistanceSupported_ = supportedClone; + return *this; +} + #if 0 /** * Internal only! @@ -340,9 +368,6 @@ LocaleMatcher::LocaleMatcher(const Builder &builder, UErrorCode &errorCode) : supportedLSRs(nullptr), supportedIndexes(nullptr), supportedLSRsLength(0), ownedDefaultLocale(nullptr), defaultLocale(nullptr) { if (U_FAILURE(errorCode)) { return; } - if (thresholdDistance < 0) { - thresholdDistance = localeDistance.getDefaultScriptDistance(); - } const Locale *def = builder.defaultLocale_; LSR builderDefaultLSR; const LSR *defLSR = nullptr; @@ -408,22 +433,20 @@ LocaleMatcher::LocaleMatcher(const Builder &builder, UErrorCode &errorCode) : int32_t suppLength = 0; // Determine insertion order. // Add locales immediately that are equivalent to the default. - MaybeStackArray order(supportedLocalesLength); - if (order.getAlias() == nullptr) { - errorCode = U_MEMORY_ALLOCATION_ERROR; - return; - } + MaybeStackArray order(supportedLocalesLength, errorCode); + if (U_FAILURE(errorCode)) { return; } int32_t numParadigms = 0; for (int32_t i = 0; i < supportedLocalesLength; ++i) { const Locale &locale = *supportedLocales[i]; const LSR &lsr = lsrs[i]; - if (defLSR == nullptr) { + if (defLSR == nullptr && builder.withDefault_) { + // Implicit default locale = first supported locale, if not turned off. U_ASSERT(i == 0); def = &locale; defLSR = &lsr; order[i] = 1; suppLength = putIfAbsent(lsr, 0, suppLength, errorCode); - } else if (lsr.isEquivalentTo(*defLSR)) { + } else if (defLSR != nullptr && lsr.isEquivalentTo(*defLSR)) { order[i] = 1; suppLength = putIfAbsent(lsr, i, suppLength, errorCode); } else if (localeDistance.isParadigmLSR(lsr)) { @@ -458,6 +481,25 @@ LocaleMatcher::LocaleMatcher(const Builder &builder, UErrorCode &errorCode) : if (builder.demotion_ == ULOCMATCH_DEMOTION_REGION) { demotionPerDesiredLocale = localeDistance.getDefaultDemotionPerDesiredLocale(); } + + if (thresholdDistance >= 0) { + // already copied + } else if (builder.maxDistanceDesired_ != nullptr) { + LSR suppLSR = getMaximalLsrOrUnd(likelySubtags, *builder.maxDistanceSupported_, errorCode); + const LSR *pSuppLSR = &suppLSR; + int32_t indexAndDistance = localeDistance.getBestIndexAndDistance( + getMaximalLsrOrUnd(likelySubtags, *builder.maxDistanceDesired_, errorCode), + &pSuppLSR, 1, + LocaleDistance::shiftDistance(100), favorSubtag, direction); + if (U_SUCCESS(errorCode)) { + // +1 for an exclusive threshold from an inclusive max. + thresholdDistance = LocaleDistance::getDistanceFloor(indexAndDistance) + 1; + } else { + thresholdDistance = 0; + } + } else { + thresholdDistance = localeDistance.getDefaultScriptDistance(); + } } LocaleMatcher::LocaleMatcher(LocaleMatcher &&src) U_NOEXCEPT : @@ -683,6 +725,18 @@ int32_t LocaleMatcher::getBestSuppIndex(LSR desiredLSR, LocaleLsrIterator *remai return supportedIndexes[bestSupportedLsrIndex]; } +UBool LocaleMatcher::isMatch(const Locale &desired, const Locale &supported, + UErrorCode &errorCode) const { + LSR suppLSR = getMaximalLsrOrUnd(likelySubtags, supported, errorCode); + if (U_FAILURE(errorCode)) { return 0; } + const LSR *pSuppLSR = &suppLSR; + int32_t indexAndDistance = localeDistance.getBestIndexAndDistance( + getMaximalLsrOrUnd(likelySubtags, desired, errorCode), + &pSuppLSR, 1, + LocaleDistance::shiftDistance(thresholdDistance), favorSubtag, direction); + return indexAndDistance >= 0; +} + double LocaleMatcher::internalMatch(const Locale &desired, const Locale &supported, UErrorCode &errorCode) const { // Returns the inverse of the distance: That is, 1-distance(desired, supported). LSR suppLSR = getMaximalLsrOrUnd(likelySubtags, supported, errorCode); @@ -790,5 +844,3 @@ uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, return acceptLanguage(*availableLocales, desiredLocales, result, resultAvailable, outResult, *status); } - -#endif // __LOCMATCHER_H__ diff --git a/deps/icu-small/source/common/localeprioritylist.cpp b/deps/icu-small/source/common/localeprioritylist.cpp index cee408269c9b39..8916b121be3057 100644 --- a/deps/icu-small/source/common/localeprioritylist.cpp +++ b/deps/icu-small/source/common/localeprioritylist.cpp @@ -1,5 +1,5 @@ // © 2019 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html#License +// License & terms of use: http://www.unicode.org/copyright.html // localeprioritylist.cpp // created: 2019jul11 Markus W. Scherer diff --git a/deps/icu-small/source/common/localeprioritylist.h b/deps/icu-small/source/common/localeprioritylist.h index 80ca38a7b52892..41e9d3ea081f56 100644 --- a/deps/icu-small/source/common/localeprioritylist.h +++ b/deps/icu-small/source/common/localeprioritylist.h @@ -1,5 +1,5 @@ // © 2019 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html#License +// License & terms of use: http://www.unicode.org/copyright.html // localeprioritylist.h // created: 2019jul11 Markus W. Scherer diff --git a/deps/icu-small/source/common/locdispnames.cpp b/deps/icu-small/source/common/locdispnames.cpp index 7216a3a3083e3d..a60dd0c9c1ffa7 100644 --- a/deps/icu-small/source/common/locdispnames.cpp +++ b/deps/icu-small/source/common/locdispnames.cpp @@ -26,6 +26,8 @@ #include "unicode/uloc.h" #include "unicode/ures.h" #include "unicode/ustring.h" +#include "bytesinkutil.h" +#include "charstr.h" #include "cmemory.h" #include "cstring.h" #include "putilimp.h" @@ -406,20 +408,26 @@ uloc_getDisplayScript(const char* locale, UChar *dest, int32_t destCapacity, UErrorCode *pErrorCode) { - UErrorCode err = U_ZERO_ERROR; - int32_t res = _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity, + UErrorCode err = U_ZERO_ERROR; + int32_t res = _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity, uloc_getScript, _kScriptsStandAlone, &err); - if ( err == U_USING_DEFAULT_WARNING ) { + if (destCapacity == 0 && err == U_BUFFER_OVERFLOW_ERROR) { + // For preflight, return the max of the value and the fallback. + int32_t fallback_res = _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity, + uloc_getScript, _kScripts, pErrorCode); + return (fallback_res > res) ? fallback_res : res; + } + if ( err == U_USING_DEFAULT_WARNING ) { return _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity, - uloc_getScript, _kScripts, pErrorCode); - } else { - *pErrorCode = err; - return res; - } + uloc_getScript, _kScripts, pErrorCode); + } else { + *pErrorCode = err; + return res; + } } -U_INTERNAL int32_t U_EXPORT2 +static int32_t uloc_getDisplayScriptInContext(const char* locale, const char* displayLocale, UChar *dest, int32_t destCapacity, @@ -727,7 +735,7 @@ uloc_getDisplayName(const char *locale, int32_t padLen; patPos+=subLen; padLen=(subi==0 ? sub1Pos : patLen)-patPos; - if(length+padLen < destCapacity) { + if(length+padLen <= destCapacity) { p=dest+length; for(int32_t i=0;i> DISTANCE_SHIFT; + } + static int32_t getIndex(int32_t indexAndDistance) { // assert indexAndDistance >= 0; return indexAndDistance >> INDEX_SHIFT; @@ -79,10 +83,6 @@ class LocaleDistance final : public UMemory { // tic constexpr int32_t MAX_INDEX = 0x1fffff; // avoids sign bit static constexpr int32_t INDEX_NEG_1 = 0xfffffc00; - static int32_t getDistanceFloor(int32_t indexAndDistance) { - return (indexAndDistance & DISTANCE_MASK) >> DISTANCE_SHIFT; - } - LocaleDistance(const LocaleDistanceData &data, const XLikelySubtags &likely); LocaleDistance(const LocaleDistance &other) = delete; LocaleDistance &operator=(const LocaleDistance &other) = delete; diff --git a/deps/icu-small/source/common/locid.cpp b/deps/icu-small/source/common/locid.cpp index 753a452120ee62..2804e36bf62cb1 100644 --- a/deps/icu-small/source/common/locid.cpp +++ b/deps/icu-small/source/common/locid.cpp @@ -42,6 +42,7 @@ #include "bytesinkutil.h" #include "charstr.h" +#include "charstrmap.h" #include "cmemory.h" #include "cstring.h" #include "mutex.h" @@ -51,7 +52,9 @@ #include "uhash.h" #include "ulocimp.h" #include "umutex.h" +#include "uniquecharstr.h" #include "ustr_imp.h" +#include "uvector.h" U_CDECL_BEGIN static UBool U_CALLCONV locale_cleanup(void); @@ -102,12 +105,6 @@ typedef enum ELocalePos { eMAX_LOCALES } ELocalePos; -U_CFUNC int32_t locale_getKeywords(const char *localeID, - char prev, - char *keywords, int32_t keywordCapacity, - UBool valuesToo, - UErrorCode *status); - U_CDECL_BEGIN // // Deleter function for Locales owned by the default Locale hash table/ @@ -252,6 +249,7 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(Locale) // '_' // In the platform codepage. #define SEP_CHAR '_' +#define NULL_CHAR '\0' Locale::~Locale() { @@ -506,38 +504,1127 @@ Locale::operator==( const Locale& other) const return (uprv_strcmp(other.fullName, fullName) == 0); } -#define ISASCIIALPHA(c) (((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && (c) <= 'Z')) - namespace { -CharString& AppendLSCVE(CharString& out, const char* language, const char* script, - const char* country, const char* variants, const char* extension, - UErrorCode& status) { +UInitOnce gKnownCanonicalizedInitOnce = U_INITONCE_INITIALIZER; +UHashtable *gKnownCanonicalized = nullptr; + +static const char* const KNOWN_CANONICALIZED[] = { + "c", + // Commonly used locales known are already canonicalized + "af", "af_ZA", "am", "am_ET", "ar", "ar_001", "as", "as_IN", "az", "az_AZ", + "be", "be_BY", "bg", "bg_BG", "bn", "bn_IN", "bs", "bs_BA", "ca", "ca_ES", + "cs", "cs_CZ", "cy", "cy_GB", "da", "da_DK", "de", "de_DE", "el", "el_GR", + "en", "en_GB", "en_US", "es", "es_419", "es_ES", "et", "et_EE", "eu", + "eu_ES", "fa", "fa_IR", "fi", "fi_FI", "fil", "fil_PH", "fr", "fr_FR", + "ga", "ga_IE", "gl", "gl_ES", "gu", "gu_IN", "he", "he_IL", "hi", "hi_IN", + "hr", "hr_HR", "hu", "hu_HU", "hy", "hy_AM", "id", "id_ID", "is", "is_IS", + "it", "it_IT", "ja", "ja_JP", "jv", "jv_ID", "ka", "ka_GE", "kk", "kk_KZ", + "km", "km_KH", "kn", "kn_IN", "ko", "ko_KR", "ky", "ky_KG", "lo", "lo_LA", + "lt", "lt_LT", "lv", "lv_LV", "mk", "mk_MK", "ml", "ml_IN", "mn", "mn_MN", + "mr", "mr_IN", "ms", "ms_MY", "my", "my_MM", "nb", "nb_NO", "ne", "ne_NP", + "nl", "nl_NL", "or", "or_IN", "pa", "pa_IN", "pl", "pl_PL", "ps", "ps_AF", + "pt", "pt_BR", "pt_PT", "ro", "ro_RO", "ru", "ru_RU", "sd", "sd_IN", "si", + "si_LK", "sk", "sk_SK", "sl", "sl_SI", "so", "so_SO", "sq", "sq_AL", "sr", + "sr_Cyrl_RS", "sr_Latn", "sr_RS", "sv", "sv_SE", "sw", "sw_TZ", "ta", + "ta_IN", "te", "te_IN", "th", "th_TH", "tk", "tk_TM", "tr", "tr_TR", "uk", + "uk_UA", "ur", "ur_PK", "uz", "uz_UZ", "vi", "vi_VN", "yue", "yue_Hant", + "yue_Hant_HK", "yue_HK", "zh", "zh_CN", "zh_Hans", "zh_Hans_CN", "zh_Hant", + "zh_Hant_TW", "zh_TW", "zu", "zu_ZA" +}; + +static UBool U_CALLCONV cleanupKnownCanonicalized() { + gKnownCanonicalizedInitOnce.reset(); + if (gKnownCanonicalized) { uhash_close(gKnownCanonicalized); } + return TRUE; +} + +static void U_CALLCONV loadKnownCanonicalized(UErrorCode &status) { + ucln_common_registerCleanup(UCLN_COMMON_LOCALE_KNOWN_CANONICALIZED, + cleanupKnownCanonicalized); + LocalUHashtablePointer newKnownCanonicalizedMap( + uhash_open(uhash_hashChars, uhash_compareChars, nullptr, &status)); + for (int32_t i = 0; + U_SUCCESS(status) && i < UPRV_LENGTHOF(KNOWN_CANONICALIZED); + i++) { + uhash_puti(newKnownCanonicalizedMap.getAlias(), + (void*)KNOWN_CANONICALIZED[i], + 1, &status); + } + if (U_FAILURE(status)) { + return; + } + + gKnownCanonicalized = newKnownCanonicalizedMap.orphan(); +} + +class AliasData; + +/** + * A Builder class to build the alias data. + */ +class AliasDataBuilder { +public: + AliasDataBuilder() { + } + + // Build the AliasData from resource. + AliasData* build(UErrorCode &status); + +private: + void readAlias(UResourceBundle* alias, + UniqueCharStrings* strings, + LocalMemory& types, + LocalMemory& replacementIndexes, + int32_t &length, + void (*checkType)(const char* type), + void (*checkReplacement)(const UnicodeString& replacement), + UErrorCode &status); + + // Read the languageAlias data from alias to + // strings+types+replacementIndexes + // The number of record will be stored into length. + // Allocate length items for types, to store the type field. + // Allocate length items for replacementIndexes, + // to store the index in the strings for the replacement script. + void readLanguageAlias(UResourceBundle* alias, + UniqueCharStrings* strings, + LocalMemory& types, + LocalMemory& replacementIndexes, + int32_t &length, + UErrorCode &status); + + // Read the scriptAlias data from alias to + // strings+types+replacementIndexes + // Allocate length items for types, to store the type field. + // Allocate length items for replacementIndexes, + // to store the index in the strings for the replacement script. + void readScriptAlias(UResourceBundle* alias, + UniqueCharStrings* strings, + LocalMemory& types, + LocalMemory& replacementIndexes, + int32_t &length, UErrorCode &status); + + // Read the territoryAlias data from alias to + // strings+types+replacementIndexes + // Allocate length items for types, to store the type field. + // Allocate length items for replacementIndexes, + // to store the index in the strings for the replacement script. + void readTerritoryAlias(UResourceBundle* alias, + UniqueCharStrings* strings, + LocalMemory& types, + LocalMemory& replacementIndexes, + int32_t &length, UErrorCode &status); + + // Read the variantAlias data from alias to + // strings+types+replacementIndexes + // Allocate length items for types, to store the type field. + // Allocate length items for replacementIndexes, + // to store the index in the strings for the replacement variant. + void readVariantAlias(UResourceBundle* alias, + UniqueCharStrings* strings, + LocalMemory& types, + LocalMemory& replacementIndexes, + int32_t &length, UErrorCode &status); +}; + +/** + * A class to hold the Alias Data. + */ +class AliasData : public UMemory { +public: + static const AliasData* singleton(UErrorCode& status) { + if (U_FAILURE(status)) { + // Do not get into loadData if the status already has error. + return nullptr; + } + umtx_initOnce(AliasData::gInitOnce, &AliasData::loadData, status); + return gSingleton; + } + + const CharStringMap& languageMap() const { return language; } + const CharStringMap& scriptMap() const { return script; } + const CharStringMap& territoryMap() const { return territory; } + const CharStringMap& variantMap() const { return variant; } + + static void U_CALLCONV loadData(UErrorCode &status); + static UBool U_CALLCONV cleanup(); + + static UInitOnce gInitOnce; + +private: + AliasData(CharStringMap languageMap, + CharStringMap scriptMap, + CharStringMap territoryMap, + CharStringMap variantMap, + CharString* strings) + : language(std::move(languageMap)), + script(std::move(scriptMap)), + territory(std::move(territoryMap)), + variant(std::move(variantMap)), + strings(strings) { + } + + ~AliasData() { + delete strings; + } + + static const AliasData* gSingleton; + + CharStringMap language; + CharStringMap script; + CharStringMap territory; + CharStringMap variant; + CharString* strings; + + friend class AliasDataBuilder; +}; + + +const AliasData* AliasData::gSingleton = nullptr; +UInitOnce AliasData::gInitOnce = U_INITONCE_INITIALIZER; + +UBool U_CALLCONV +AliasData::cleanup() +{ + gInitOnce.reset(); + delete gSingleton; + return TRUE; +} + +void +AliasDataBuilder::readAlias( + UResourceBundle* alias, + UniqueCharStrings* strings, + LocalMemory& types, + LocalMemory& replacementIndexes, + int32_t &length, + void (*checkType)(const char* type), + void (*checkReplacement)(const UnicodeString& replacement), + UErrorCode &status) { + if (U_FAILURE(status)) { + return; + } + length = ures_getSize(alias); + const char** rawTypes = types.allocateInsteadAndCopy(length); + if (rawTypes == nullptr) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + int32_t* rawIndexes = replacementIndexes.allocateInsteadAndCopy(length); + if (rawIndexes == nullptr) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + int i = 0; + while (ures_hasNext(alias)) { + LocalUResourceBundlePointer res( + ures_getNextResource(alias, nullptr, &status)); + const char* aliasFrom = ures_getKey(res.getAlias()); + UnicodeString aliasTo = + ures_getUnicodeStringByKey(res.getAlias(), "replacement", &status); + + checkType(aliasFrom); + checkReplacement(aliasTo); + + rawTypes[i] = aliasFrom; + rawIndexes[i] = strings->add(aliasTo, status); + i++; + } +} + +/** + * Read the languageAlias data from alias to strings+types+replacementIndexes. + * Allocate length items for types, to store the type field. Allocate length + * items for replacementIndexes, to store the index in the strings for the + * replacement language. + */ +void +AliasDataBuilder::readLanguageAlias( + UResourceBundle* alias, + UniqueCharStrings* strings, + LocalMemory& types, + LocalMemory& replacementIndexes, + int32_t &length, + UErrorCode &status) +{ + return readAlias( + alias, strings, types, replacementIndexes, length, +#if U_DEBUG + [](const char* type) { + // Assert the aliasFrom only contains the following possibilties + // language_REGION_variant + // language_REGION + // language_variant + // language + // und_variant + Locale test(type); + // Assert no script in aliasFrom + U_ASSERT(test.getScript()[0] == '\0'); + // Assert when language is und, no REGION in aliasFrom. + U_ASSERT(test.getLanguage()[0] != '\0' || test.getCountry()[0] == '\0'); + }, +#else + [](const char*) {}, +#endif + [](const UnicodeString&) {}, status); +} + +/** + * Read the scriptAlias data from alias to strings+types+replacementIndexes. + * Allocate length items for types, to store the type field. Allocate length + * items for replacementIndexes, to store the index in the strings for the + * replacement script. + */ +void +AliasDataBuilder::readScriptAlias( + UResourceBundle* alias, + UniqueCharStrings* strings, + LocalMemory& types, + LocalMemory& replacementIndexes, + int32_t &length, + UErrorCode &status) +{ + return readAlias( + alias, strings, types, replacementIndexes, length, +#if U_DEBUG + [](const char* type) { + U_ASSERT(uprv_strlen(type) == 4); + }, + [](const UnicodeString& replacement) { + U_ASSERT(replacement.length() == 4); + }, +#else + [](const char*) {}, + [](const UnicodeString&) { }, +#endif + status); +} + +/** + * Read the territoryAlias data from alias to strings+types+replacementIndexes. + * Allocate length items for types, to store the type field. Allocate length + * items for replacementIndexes, to store the index in the strings for the + * replacement regions. + */ +void +AliasDataBuilder::readTerritoryAlias( + UResourceBundle* alias, + UniqueCharStrings* strings, + LocalMemory& types, + LocalMemory& replacementIndexes, + int32_t &length, + UErrorCode &status) +{ + return readAlias( + alias, strings, types, replacementIndexes, length, +#if U_DEBUG + [](const char* type) { + U_ASSERT(uprv_strlen(type) == 2 || uprv_strlen(type) == 3); + }, +#else + [](const char*) {}, +#endif + [](const UnicodeString&) { }, + status); +} + +/** + * Read the variantAlias data from alias to strings+types+replacementIndexes. + * Allocate length items for types, to store the type field. Allocate length + * items for replacementIndexes, to store the index in the strings for the + * replacement variant. + */ +void +AliasDataBuilder::readVariantAlias( + UResourceBundle* alias, + UniqueCharStrings* strings, + LocalMemory& types, + LocalMemory& replacementIndexes, + int32_t &length, + UErrorCode &status) +{ + return readAlias( + alias, strings, types, replacementIndexes, length, +#if U_DEBUG + [](const char* type) { + U_ASSERT(uprv_strlen(type) >= 4 && uprv_strlen(type) <= 8); + U_ASSERT(uprv_strlen(type) != 4 || + (type[0] >= '0' && type[0] <= '9')); + }, + [](const UnicodeString& replacement) { + U_ASSERT(replacement.length() >= 4 && replacement.length() <= 8); + U_ASSERT(replacement.length() != 4 || + (replacement.charAt(0) >= u'0' && + replacement.charAt(0) <= u'9')); + }, +#else + [](const char*) {}, + [](const UnicodeString&) { }, +#endif + status); +} + +/** + * Initializes the alias data from the ICU resource bundles. The alias data + * contains alias of language, country, script and variants. + * + * If the alias data has already loaded, then this method simply returns without + * doing anything meaningful. + */ +void U_CALLCONV +AliasData::loadData(UErrorCode &status) +{ +#ifdef LOCALE_CANONICALIZATION_DEBUG + UDate start = uprv_getRawUTCtime(); +#endif // LOCALE_CANONICALIZATION_DEBUG + ucln_common_registerCleanup(UCLN_COMMON_LOCALE_ALIAS, cleanup); + AliasDataBuilder builder; + gSingleton = builder.build(status); +#ifdef LOCALE_CANONICALIZATION_DEBUG + UDate end = uprv_getRawUTCtime(); + printf("AliasData::loadData took total %f ms\n", end - start); +#endif // LOCALE_CANONICALIZATION_DEBUG +} + +/** + * Build the alias data from resources. + */ +AliasData* +AliasDataBuilder::build(UErrorCode &status) { + LocalUResourceBundlePointer metadata( + ures_openDirect(nullptr, "metadata", &status)); + LocalUResourceBundlePointer metadataAlias( + ures_getByKey(metadata.getAlias(), "alias", nullptr, &status)); + LocalUResourceBundlePointer languageAlias( + ures_getByKey(metadataAlias.getAlias(), "language", nullptr, &status)); + LocalUResourceBundlePointer scriptAlias( + ures_getByKey(metadataAlias.getAlias(), "script", nullptr, &status)); + LocalUResourceBundlePointer territoryAlias( + ures_getByKey(metadataAlias.getAlias(), "territory", nullptr, &status)); + LocalUResourceBundlePointer variantAlias( + ures_getByKey(metadataAlias.getAlias(), "variant", nullptr, &status)); + + if (U_FAILURE(status)) { + return nullptr; + } + int32_t languagesLength = 0, scriptLength = 0, territoryLength = 0, + variantLength = 0; + + // Read the languageAlias into languageTypes, languageReplacementIndexes + // and strings + UniqueCharStrings strings(status); + LocalMemory languageTypes; + LocalMemory languageReplacementIndexes; + readLanguageAlias(languageAlias.getAlias(), + &strings, + languageTypes, + languageReplacementIndexes, + languagesLength, + status); + + // Read the scriptAlias into scriptTypes, scriptReplacementIndexes + // and strings + LocalMemory scriptTypes; + LocalMemory scriptReplacementIndexes; + readScriptAlias(scriptAlias.getAlias(), + &strings, + scriptTypes, + scriptReplacementIndexes, + scriptLength, + status); + + // Read the territoryAlias into territoryTypes, territoryReplacementIndexes + // and strings + LocalMemory territoryTypes; + LocalMemory territoryReplacementIndexes; + readTerritoryAlias(territoryAlias.getAlias(), + &strings, + territoryTypes, + territoryReplacementIndexes, + territoryLength, status); + + // Read the variantAlias into variantTypes, variantReplacementIndexes + // and strings + LocalMemory variantTypes; + LocalMemory variantReplacementIndexes; + readVariantAlias(variantAlias.getAlias(), + &strings, + variantTypes, + variantReplacementIndexes, + variantLength, status); + + if (U_FAILURE(status)) { + return nullptr; + } + + // We can only use strings after freeze it. + strings.freeze(); + + // Build the languageMap from languageTypes & languageReplacementIndexes + CharStringMap languageMap(490, status); + for (int32_t i = 0; U_SUCCESS(status) && i < languagesLength; i++) { + languageMap.put(languageTypes[i], + strings.get(languageReplacementIndexes[i]), + status); + } + + // Build the scriptMap from scriptTypes & scriptReplacementIndexes + CharStringMap scriptMap(1, status); + for (int32_t i = 0; U_SUCCESS(status) && i < scriptLength; i++) { + scriptMap.put(scriptTypes[i], + strings.get(scriptReplacementIndexes[i]), + status); + } + + // Build the territoryMap from territoryTypes & territoryReplacementIndexes + CharStringMap territoryMap(650, status); + for (int32_t i = 0; U_SUCCESS(status) && i < territoryLength; i++) { + territoryMap.put(territoryTypes[i], + strings.get(territoryReplacementIndexes[i]), + status); + } + + // Build the variantMap from variantTypes & variantReplacementIndexes. + CharStringMap variantMap(2, status); + for (int32_t i = 0; U_SUCCESS(status) && i < variantLength; i++) { + variantMap.put(variantTypes[i], + strings.get(variantReplacementIndexes[i]), + status); + } + + if (U_FAILURE(status)) { + return nullptr; + } + + // copy hashtables + auto *data = new AliasData( + std::move(languageMap), + std::move(scriptMap), + std::move(territoryMap), + std::move(variantMap), + strings.orphanCharStrings()); + + if (data == nullptr) { + status = U_MEMORY_ALLOCATION_ERROR; + } + return data; +} + +/** + * A class that find the replacement values of locale fields by using AliasData. + */ +class AliasReplacer { +public: + AliasReplacer(UErrorCode status) : + language(nullptr), script(nullptr), region(nullptr), + extensions(nullptr), variants(status), + data(nullptr) { + } + ~AliasReplacer() { + } + + // Check the fields inside locale, if need to replace fields, + // place the the replaced locale ID in out and return true. + // Otherwise return false for no replacement or error. + bool replace( + const Locale& locale, CharString& out, UErrorCode status); + +private: + const char* language; + const char* script; + const char* region; + const char* extensions; + UVector variants; + + const AliasData* data; + + inline bool notEmpty(const char* str) { + return str && str[0] != NULL_CHAR; + } + + /** + * If replacement is neither null nor empty and input is either null or empty, + * return replacement. + * If replacement is neither null nor empty but input is not empty, return input. + * If replacement is either null or empty and type is either null or empty, + * return input. + * Otherwise return null. + * replacement input type return + * AAA nullptr * AAA + * AAA BBB * BBB + * nullptr || "" CCC nullptr CCC + * nullptr || "" * DDD nullptr + */ + inline const char* deleteOrReplace( + const char* input, const char* type, const char* replacement) { + return notEmpty(replacement) ? + ((input == nullptr) ? replacement : input) : + ((type == nullptr) ? input : nullptr); + } + + inline bool same(const char* a, const char* b) { + if (a == nullptr && b == nullptr) { + return true; + } + if ((a == nullptr && b != nullptr) || + (a != nullptr && b == nullptr)) { + return false; + } + return uprv_strcmp(a, b) == 0; + } + + // Gather fields and generate locale ID into out. + CharString& outputToString(CharString& out, UErrorCode status); + + // Generate the lookup key. + CharString& generateKey(const char* language, const char* region, + const char* variant, CharString& out, + UErrorCode status); + + void parseLanguageReplacement(const char* replacement, + const char*& replaceLanguage, + const char*& replaceScript, + const char*& replaceRegion, + const char*& replaceVariant, + const char*& replaceExtensions, + UVector& toBeFreed, + UErrorCode& status); + + // Replace by using languageAlias. + bool replaceLanguage(bool checkLanguage, bool checkRegion, + bool checkVariants, UVector& toBeFreed, + UErrorCode& status); + + // Replace by using territoryAlias. + bool replaceTerritory(UVector& toBeFreed, UErrorCode& status); + + // Replace by using scriptAlias. + bool replaceScript(UErrorCode& status); + + // Replace by using variantAlias. + bool replaceVariant(UErrorCode& status); +}; + +CharString& +AliasReplacer::generateKey( + const char* language, const char* region, const char* variant, + CharString& out, UErrorCode status) +{ out.append(language, status); - if (script && script[0] != '\0') { - out.append('_', status); - out.append(script, status); - } - if (country && country[0] != '\0') { - out.append('_', status); - out.append(country, status); - } - if (variants && variants[0] != '\0') { - if ((script == nullptr || script[0] == '\0') && - (country == nullptr || country[0] == '\0')) { - out.append('_', status); + if (notEmpty(region)) { + out.append(SEP_CHAR, status) + .append(region, status); + } + if (notEmpty(variant)) { + out.append(SEP_CHAR, status) + .append(variant, status); + } + return out; +} + +void +AliasReplacer::parseLanguageReplacement( + const char* replacement, + const char*& replacedLanguage, + const char*& replacedScript, + const char*& replacedRegion, + const char*& replacedVariant, + const char*& replacedExtensions, + UVector& toBeFreed, + UErrorCode& status) +{ + if (U_FAILURE(status)) { + return; + } + replacedScript = replacedRegion = replacedVariant + = replacedExtensions = nullptr; + if (uprv_strchr(replacement, '_') == nullptr) { + replacedLanguage = replacement; + // reach the end, just return it. + return; + } + // We have multiple field so we have to allocate and parse + CharString* str = new CharString( + replacement, (int32_t)uprv_strlen(replacement), status); + if (U_FAILURE(status)) { + return; + } + if (str == nullptr) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + toBeFreed.addElement(str, status); + char* data = str->data(); + replacedLanguage = (const char*) data; + char* endOfField = uprv_strchr(data, '_'); + *endOfField = '\0'; // null terminiate it. + endOfField++; + const char* start = endOfField; + endOfField = (char*) uprv_strchr(start, '_'); + size_t len = 0; + if (endOfField == nullptr) { + len = uprv_strlen(start); + } else { + len = endOfField - start; + *endOfField = '\0'; // null terminiate it. + } + if (len == 4 && uprv_isASCIILetter(*start)) { + // Got a script + replacedScript = start; + if (endOfField == nullptr) { + return; + } + start = endOfField++; + endOfField = (char*)uprv_strchr(start, '_'); + if (endOfField == nullptr) { + len = uprv_strlen(start); + } else { + len = endOfField - start; + *endOfField = '\0'; // null terminiate it. + } + } + if (len >= 2 && len <= 3) { + // Got a region + replacedRegion = start; + if (endOfField == nullptr) { + return; + } + start = endOfField++; + endOfField = (char*)uprv_strchr(start, '_'); + if (endOfField == nullptr) { + len = uprv_strlen(start); + } else { + len = endOfField - start; + *endOfField = '\0'; // null terminiate it. + } + } + if (len >= 4) { + // Got a variant + replacedVariant = start; + if (endOfField == nullptr) { + return; } - out.append('_', status); - out.append(variants, status); + start = endOfField++; + } + replacedExtensions = start; +} + +bool +AliasReplacer::replaceLanguage( + bool checkLanguage, bool checkRegion, + bool checkVariants, UVector& toBeFreed, UErrorCode& status) +{ + if (U_FAILURE(status)) { + return false; + } + if ( (checkRegion && region == nullptr) || + (checkVariants && variants.size() == 0)) { + // Nothing to search. + return false; + } + int32_t variant_size = checkVariants ? variants.size() : 1; + // Since we may have more than one variant, we need to loop through them. + const char* searchLanguage = checkLanguage ? language : "und"; + const char* searchRegion = checkRegion ? region : nullptr; + const char* searchVariant = nullptr; + for (int32_t variant_index = 0; + variant_index < variant_size; + variant_index++) { + if (checkVariants) { + U_ASSERT(variant_index < variant_size); + searchVariant = (const char*)(variants.elementAt(variant_index)); + } + + if (searchVariant != nullptr && uprv_strlen(searchVariant) < 4) { + // Do not consider ill-formed variant subtag. + searchVariant = nullptr; + } + CharString typeKey; + generateKey(searchLanguage, searchRegion, searchVariant, typeKey, + status); + if (U_FAILURE(status)) { + return false; + } + const char *replacement = data->languageMap().get(typeKey.data()); + if (replacement == nullptr) { + // Found no replacement data. + continue; + } + + const char* replacedLanguage = nullptr; + const char* replacedScript = nullptr; + const char* replacedRegion = nullptr; + const char* replacedVariant = nullptr; + const char* replacedExtensions = nullptr; + parseLanguageReplacement(replacement, + replacedLanguage, + replacedScript, + replacedRegion, + replacedVariant, + replacedExtensions, + toBeFreed, + status); + replacedLanguage = + (replacedLanguage != nullptr && uprv_strcmp(replacedLanguage, "und") == 0) ? + language : replacedLanguage; + replacedScript = deleteOrReplace(script, nullptr, replacedScript); + replacedRegion = deleteOrReplace(region, searchRegion, replacedRegion); + replacedVariant = deleteOrReplace( + searchVariant, searchVariant, replacedVariant); + + if ( same(language, replacedLanguage) && + same(script, replacedScript) && + same(region, replacedRegion) && + same(searchVariant, replacedVariant) && + replacedExtensions == nullptr) { + // Replacement produce no changes. + continue; + } + + language = replacedLanguage; + region = replacedRegion; + script = replacedScript; + if (searchVariant != nullptr) { + if (notEmpty(replacedVariant)) { + variants.setElementAt((void*)replacedVariant, variant_index); + } else { + variants.removeElementAt(variant_index); + } + } + if (replacedExtensions != nullptr) { + // TODO(ICU-21292) + // DO NOTHING + // UTS35 does not specifiy what should we do if we have extensions in the + // replacement. Currently we know only the following 4 "BCP47 LegacyRules" have + // extensions in them languageAlias: + // i_default => en_x_i_default + // i_enochian => und_x_i_enochian + // i_mingo => see_x_i_mingo + // zh_min => nan_x_zh_min + // But all of them are already changed by code inside ultag_parse() before + // hitting this code. + } + + // Something changed by language alias data. + return true; + } + // Nothing changed by language alias data. + return false; +} + +bool +AliasReplacer::replaceTerritory(UVector& toBeFreed, UErrorCode& status) +{ + if (U_FAILURE(status)) { + return false; + } + if (region == nullptr) { + // No region to search. + return false; + } + const char *replacement = data->territoryMap().get(region); + if (replacement == nullptr) { + // Found no replacement data for this region. + return false; + } + const char* replacedRegion = replacement; + const char* firstSpace = uprv_strchr(replacement, ' '); + if (firstSpace != nullptr) { + // If there are are more than one region in the replacement. + // We need to check which one match based on the language. + // Cannot use nullptr for language because that will construct + // the default locale, in that case, use "und" to get the correct + // locale. + Locale l(language == nullptr ? "und" : language, nullptr, script); + l.addLikelySubtags(status); + const char* likelyRegion = l.getCountry(); + CharString* item = nullptr; + if (likelyRegion != nullptr && uprv_strlen(likelyRegion) > 0) { + size_t len = uprv_strlen(likelyRegion); + const char* foundInReplacement = uprv_strstr(replacement, + likelyRegion); + if (foundInReplacement != nullptr) { + // Assuming the case there are no three letter region code in + // the replacement of territoryAlias + U_ASSERT(foundInReplacement == replacement || + *(foundInReplacement-1) == ' '); + U_ASSERT(foundInReplacement[len] == ' ' || + foundInReplacement[len] == '\0'); + item = new CharString(foundInReplacement, (int32_t)len, status); + } + } + if (item == nullptr) { + item = new CharString(replacement, + (int32_t)(firstSpace - replacement), status); + } + if (U_FAILURE(status)) { return false; } + if (item == nullptr) { + status = U_MEMORY_ALLOCATION_ERROR; + return false; + } + replacedRegion = item->data(); + toBeFreed.addElement(item, status); + } + U_ASSERT(!same(region, replacedRegion)); + region = replacedRegion; + // The region is changed by data in territory alias. + return true; +} + +bool +AliasReplacer::replaceScript(UErrorCode& status) +{ + if (U_FAILURE(status)) { + return false; + } + if (script == nullptr) { + // No script to search. + return false; } - if (extension && extension[0] != '\0') { - out.append(extension, status); + const char *replacement = data->scriptMap().get(script); + if (replacement == nullptr) { + // Found no replacement data for this script. + return false; + } + U_ASSERT(!same(script, replacement)); + script = replacement; + // The script is changed by data in script alias. + return true; +} + +bool +AliasReplacer::replaceVariant(UErrorCode& status) +{ + if (U_FAILURE(status)) { + return false; + } + // Since we may have more than one variant, we need to loop through them. + for (int32_t i = 0; i < variants.size(); i++) { + const char *variant = (const char*)(variants.elementAt(i)); + const char *replacement = data->variantMap().get(variant); + if (replacement == nullptr) { + // Found no replacement data for this variant. + continue; + } + U_ASSERT((uprv_strlen(replacement) >= 5 && + uprv_strlen(replacement) <= 8) || + (uprv_strlen(replacement) == 4 && + replacement[0] >= '0' && + replacement[0] <= '9')); + if (!same(variant, replacement)) { + variants.setElementAt((void*)replacement, i); + // Special hack to handle hepburn-heploc => alalc97 + if (uprv_strcmp(variant, "heploc") == 0) { + for (int32_t j = 0; j < variants.size(); j++) { + if (uprv_strcmp((const char*)(variants.elementAt(j)), + "hepburn") == 0) { + variants.removeElementAt(j); + } + } + } + return true; + } + } + return false; +} + +CharString& +AliasReplacer::outputToString( + CharString& out, UErrorCode status) +{ + out.append(language, status); + if (notEmpty(script)) { + out.append(SEP_CHAR, status) + .append(script, status); + } + if (notEmpty(region)) { + out.append(SEP_CHAR, status) + .append(region, status); + } + if (variants.size() > 0) { + if (!notEmpty(script) && !notEmpty(region)) { + out.append(SEP_CHAR, status); + } + variants.sort([](UElement e1, UElement e2) -> int8_t { + return uprv_strcmp( + (const char*)e1.pointer, (const char*)e2.pointer); + }, status); + int32_t variantsStart = out.length(); + for (int32_t i = 0; i < variants.size(); i++) { + out.append(SEP_CHAR, status) + .append((const char*)((UVector*)variants.elementAt(i)), + status); + } + T_CString_toUpperCase(out.data() + variantsStart); + } + if (notEmpty(extensions)) { + CharString tmp("und_", status); + tmp.append(extensions, status); + Locale tmpLocale(tmp.data()); + // only support x extension inside CLDR for now. + U_ASSERT(extensions[0] == 'x'); + out.append(tmpLocale.getName() + 1, status); } return out; } +bool +AliasReplacer::replace(const Locale& locale, CharString& out, UErrorCode status) +{ + data = AliasData::singleton(status); + if (U_FAILURE(status)) { + return false; + } + U_ASSERT(data != nullptr); + out.clear(); + language = locale.getLanguage(); + if (!notEmpty(language)) { + language = nullptr; + } + script = locale.getScript(); + if (!notEmpty(script)) { + script = nullptr; + } + region = locale.getCountry(); + if (!notEmpty(region)) { + region = nullptr; + } + const char* variantsStr = locale.getVariant(); + const char* extensionsStr = locale_getKeywordsStart(locale.getName()); + CharString variantsBuff(variantsStr, -1, status); + if (!variantsBuff.isEmpty()) { + if (U_FAILURE(status)) { return false; } + char* start = variantsBuff.data(); + T_CString_toLowerCase(start); + char* end; + while ((end = uprv_strchr(start, SEP_CHAR)) != nullptr && + U_SUCCESS(status)) { + *end = NULL_CHAR; // null terminate inside variantsBuff + variants.addElement(start, status); + start = end + 1; + } + variants.addElement(start, status); + } + if (U_FAILURE(status)) { return false; } + + // Sort the variants + variants.sort([](UElement e1, UElement e2) -> int8_t { + return uprv_strcmp( + (const char*)e1.pointer, (const char*)e2.pointer); + }, status); + + // A changed count to assert when loop too many times. + int changed = 0; + // A UVector to to hold CharString allocated by the replace* method + // and freed when out of scope from his function. + UVector stringsToBeFreed([](void *obj){ delete ((CharString*) obj); }, + nullptr, 10, status); + while (U_SUCCESS(status)) { + // Something wrong with the data cause looping here more than 10 times + // already. + U_ASSERT(changed < 5); + // From observation of key in data/misc/metadata.txt + // we know currently we only need to search in the following combination + // of fields for type in languageAlias: + // * lang_region_variant + // * lang_region + // * lang_variant + // * lang + // * und_variant + // This assumption is ensured by the U_ASSERT in readLanguageAlias + // + // lang REGION variant + if ( replaceLanguage(true, true, true, stringsToBeFreed, status) || + replaceLanguage(true, true, false, stringsToBeFreed, status) || + replaceLanguage(true, false, true, stringsToBeFreed, status) || + replaceLanguage(true, false, false, stringsToBeFreed, status) || + replaceLanguage(false,false, true, stringsToBeFreed, status) || + replaceTerritory(stringsToBeFreed, status) || + replaceScript(status) || + replaceVariant(status)) { + // Some values in data is changed, try to match from the beginning + // again. + changed++; + continue; + } + // Nothing changed. Break out. + break; + } // while(1) + + if (U_FAILURE(status)) { return false; } + // Nothing changed and we know the order of the vaiants are not change + // because we have no variant or only one. + if (changed == 0 && variants.size() <= 1) { + return false; + } + outputToString(out, status); + if (extensionsStr != nullptr) { + out.append(extensionsStr, status); + } + if (U_FAILURE(status)) { + return false; + } + // If the tag is not changed, return. + if (uprv_strcmp(out.data(), locale.getName()) == 0) { + U_ASSERT(changed == 0); + U_ASSERT(variants.size() > 1); + out.clear(); + return false; + } + return true; +} + +// Return true if the locale is changed during canonicalization. +// The replaced value then will be put into out. +bool +canonicalizeLocale(const Locale& locale, CharString& out, UErrorCode& status) +{ + AliasReplacer replacer(status); + return replacer.replace(locale, out, status); +} + +// Function to optimize for known cases without so we can skip the loading +// of resources in the startup time until we really need it. +bool +isKnownCanonicalizedLocale(const char* locale, UErrorCode& status) +{ + if ( uprv_strcmp(locale, "c") == 0 || + uprv_strcmp(locale, "en") == 0 || + uprv_strcmp(locale, "en_US") == 0) { + return true; + } + + // common well-known Canonicalized. + umtx_initOnce(gKnownCanonicalizedInitOnce, + &loadKnownCanonicalized, status); + if (U_FAILURE(status)) { + return false; + } + U_ASSERT(gKnownCanonicalized != nullptr); + return uhash_geti(gKnownCanonicalized, locale) != 0; +} + } // namespace +// Function for testing. +U_CAPI const char* const* +ulocimp_getKnownCanonicalizedLocaleForTest(int32_t* length) +{ + *length = UPRV_LENGTHOF(KNOWN_CANONICALIZED); + return KNOWN_CANONICALIZED; +} + +// Function for testing. +U_CAPI bool +ulocimp_isCanonicalizedLocaleForTest(const char* localeName) +{ + Locale l(localeName); + UErrorCode status = U_ZERO_ERROR; + CharString temp; + return !canonicalizeLocale(l, temp, status) && U_SUCCESS(status); +} + /*This function initializes a Locale from a C locale ID*/ Locale& Locale::init(const char* localeID, UBool canonicalize) { @@ -632,9 +1719,9 @@ Locale& Locale::init(const char* localeID, UBool canonicalize) uprv_memcpy(language, fullName, fieldLen[0]); language[fieldLen[0]] = 0; } - if (fieldLen[1] == 4 && ISASCIIALPHA(field[1][0]) && - ISASCIIALPHA(field[1][1]) && ISASCIIALPHA(field[1][2]) && - ISASCIIALPHA(field[1][3])) { + if (fieldLen[1] == 4 && uprv_isASCIILetter(field[1][0]) && + uprv_isASCIILetter(field[1][1]) && uprv_isASCIILetter(field[1][2]) && + uprv_isASCIILetter(field[1][3])) { /* We have at least a script */ uprv_memcpy(script, field[1], fieldLen[1]); script[fieldLen[1]] = 0; @@ -662,192 +1749,18 @@ Locale& Locale::init(const char* localeID, UBool canonicalize) } if (canonicalize) { - UErrorCode status = U_ZERO_ERROR; - // TODO: Try to use ResourceDataValue and ures_getValueWithFallback() etc. - LocalUResourceBundlePointer metadata(ures_openDirect(NULL, "metadata", &status)); - LocalUResourceBundlePointer metadataAlias(ures_getByKey(metadata.getAlias(), "alias", NULL, &status)); - // Look up the metadata:alias:language:$key:replacement entries - // key could be one of the following: - // language - // language_Script_REGION - // language_REGION - // language_variant - do { - // The resource structure looks like - // metadata { - // alias { - // language { - // art_lojban { - // replacement{"jbo"} - // } - // ... - // ks_Arab_IN { - // replacement{"ks_IN"} - // } - // ... - // no { - // replacement{"nb"} - // } - // .... - // zh_CN { - // replacement{"zh_Hans_CN"} - // } - // } - // ... - // } - // } - LocalUResourceBundlePointer languageAlias(ures_getByKey(metadataAlias.getAlias(), "language", NULL, &status)); - if (U_FAILURE(status)) + if (!isKnownCanonicalizedLocale(fullName, err)) { + CharString replaced; + // Not sure it is already canonicalized + if (canonicalizeLocale(*this, replaced, err)) { + U_ASSERT(U_SUCCESS(err)); + // If need replacement, call init again. + init(replaced.data(), false); + } + if (U_FAILURE(err)) { break; - CharString temp; - // Handle cases of key pattern "language _ variant" - // ex: Map "art_lojban" to "jbo" - const char* variants = getVariant(); - if (variants != nullptr && variants[0] != '\0') { - const char* begin = variants; - const char* end = begin; - // We may have multiple variants, need to look at each of - // them. - do { - status = U_ZERO_ERROR; - end = uprv_strchr(begin, '_'); - int32_t len = (end == nullptr) ? int32_t(uprv_strlen(begin)) : int32_t(end - begin); - temp.clear().append(getLanguage(), status).append("_", status).append(begin, len, status); - LocalUResourceBundlePointer languageVariantAlias( - ures_getByKey(languageAlias.getAlias(), - temp.data(), - NULL, &status)); - temp.clear().appendInvariantChars( - UnicodeString(ures_getStringByKey(languageVariantAlias.getAlias(), "replacement", nullptr, &status)), status); - if (U_SUCCESS(status)) { - CharString newVar; - if (begin != variants) { - newVar.append(variants, static_cast(begin - variants - 1), status); - } - if (end != nullptr) { - if (begin != variants) { - newVar.append("_", status); - } - newVar.append(end + 1, status); - } - Locale l(temp.data()); - init(AppendLSCVE(temp.clear(), - l.getLanguage(), - (getScript() != nullptr && getScript()[0] != '\0') ? getScript() : l.getScript(), - (getCountry() != nullptr && getCountry()[0] != '\0') ? getCountry() : l.getCountry(), - newVar.data(), - uprv_strchr(fullName, '@'), status).data(), false); - break; - } - begin = end + 1; - } while (end != nullptr); - } // End of handle language _ variant - // Handle cases of key pattern "language _ Script _ REGION" - // ex: Map "ks_Arab_IN" to "ks_IN" - if (getScript() != nullptr && getScript()[0] != '\0' && - getCountry() != nullptr && getCountry()[0] != '\0') { - status = U_ZERO_ERROR; - LocalUResourceBundlePointer replacedAlias( - ures_getByKey(languageAlias.getAlias(), - AppendLSCVE(temp.clear(), getLanguage(), getScript(), getCountry(), - nullptr, nullptr, status).data(), NULL, &status)); - temp.clear().appendInvariantChars( - UnicodeString(ures_getStringByKey(replacedAlias.getAlias(), "replacement", nullptr, &status)), status); - if (U_SUCCESS(status)) { - Locale l(temp.data()); - init(AppendLSCVE(temp.clear(), - l.getLanguage(), - l.getScript(), - l.getCountry(), - getVariant(), - uprv_strchr(fullName, '@'), status).data(), false); - } - } // End of handle language _ Script _ REGION - // Handle cases of key pattern "language _ REGION" - // ex: Map "zh_CN" to "zh_Hans_CN" - if (getCountry() != nullptr && getCountry()[0] != '\0') { - status = U_ZERO_ERROR; - LocalUResourceBundlePointer replacedAlias( - ures_getByKey(languageAlias.getAlias(), - AppendLSCVE(temp.clear(), getLanguage(), nullptr, getCountry(), - nullptr, nullptr, status).data(), NULL, &status)); - temp.clear().appendInvariantChars( - UnicodeString(ures_getStringByKey(replacedAlias.getAlias(), "replacement", nullptr, &status)), status); - if (U_SUCCESS(status)) { - Locale l(temp.data()); - init(AppendLSCVE(temp.clear(), - l.getLanguage(), - (getScript() != nullptr && getScript()[0] != '\0') ? getScript() : l.getScript(), - l.getCountry(), - getVariant(), - uprv_strchr(fullName, '@'), status).data(), false); - } - } // End of handle "language _ REGION" - // Handle cases of key pattern "language" - // ex: Map "no" to "nb" - { - status = U_ZERO_ERROR; - LocalUResourceBundlePointer replaceLanguageAlias(ures_getByKey(languageAlias.getAlias(), getLanguage(), NULL, &status)); - temp.clear().appendInvariantChars( - UnicodeString(ures_getStringByKey(replaceLanguageAlias.getAlias(), "replacement", nullptr, &status)), status); - if (U_SUCCESS(status)) { - Locale l(temp.data()); - init(AppendLSCVE(temp.clear(), - l.getLanguage(), - (getScript() != nullptr && getScript()[0] != '\0') ? getScript() : l.getScript(), - (getCountry() != nullptr && getCountry()[0] != '\0') ? getCountry() : l.getCountry(), - getVariant(), - uprv_strchr(fullName, '@'), status).data(), false); - } - } // End of handle "language" - - // Look up the metadata:alias:territory:$key:replacement entries - // key is region code. - if (getCountry() != nullptr) { - status = U_ZERO_ERROR; - // The resource structure looks like - // metadata { - // alias { - // ... - // territory: { - // 172 { - // replacement{"RU AM AZ BY GE KG KZ MD TJ TM UA UZ"} - // } - // ... - // 554 { - // replacement{"NZ"} - // } - // } - // } - // } - LocalUResourceBundlePointer territoryAlias(ures_getByKey(metadataAlias.getAlias(), "territory", NULL, &status)); - LocalUResourceBundlePointer countryAlias(ures_getByKey(territoryAlias.getAlias(), getCountry(), NULL, &status)); - UnicodeString replacements( - ures_getStringByKey(countryAlias.getAlias(), "replacement", nullptr, &status)); - if (U_SUCCESS(status)) { - CharString replacedCountry; - int32_t delPos = replacements.indexOf(' '); - if (delPos == -1) { - replacedCountry.appendInvariantChars(replacements, status); - } else { - Locale l(AppendLSCVE(temp.clear(), getLanguage(), nullptr, getScript(), - nullptr, nullptr, status).data()); - l.addLikelySubtags(status); - if (replacements.indexOf(UnicodeString(l.getCountry())) != -1) { - replacedCountry.append(l.getCountry(), status); - } else { - replacedCountry.appendInvariantChars(replacements.getBuffer(), delPos, status); - } - } - init(AppendLSCVE(temp.clear(), - getLanguage(), - getScript(), - replacedCountry.data(), - getVariant(), - uprv_strchr(fullName, '@'), status).data(), false); - } - } // End of handle REGION - } while (0); + } + } } // if (canonicalize) { // successful end of init() @@ -1024,13 +1937,14 @@ Locale::forLanguageTag(StringPiece tag, UErrorCode& status) return result; } - // If a BCP-47 language tag is passed as the language parameter to the + // If a BCP 47 language tag is passed as the language parameter to the // normal Locale constructor, it will actually fall back to invoking // uloc_forLanguageTag() to parse it if it somehow is able to detect that - // the string actually is BCP-47. This works well for things like strings - // using BCP-47 extensions, but it does not at all work for things like - // BCP-47 grandfathered tags (eg. "en-GB-oed") which are possible to also - // interpret as ICU locale IDs and because of that won't trigger the BCP-47 + // the string actually is BCP 47. This works well for things like strings + // using BCP 47 extensions, but it does not at all work for things like + // legacy language tags (marked as “Type: grandfathered” in BCP 47, + // e.g., "en-GB-oed") which are possible to also + // interpret as ICU locale IDs and because of that won't trigger the BCP 47 // parsing. Therefore the code here explicitly calls uloc_forLanguageTag() // and then Locale::init(), instead of just calling the normal constructor. @@ -1414,8 +2328,6 @@ UnicodeKeywordEnumeration::~UnicodeKeywordEnumeration() = default; StringEnumeration * Locale::createKeywords(UErrorCode &status) const { - char keywords[256]; - int32_t keywordCapacity = sizeof keywords; StringEnumeration *result = NULL; if (U_FAILURE(status)) { @@ -1426,9 +2338,11 @@ Locale::createKeywords(UErrorCode &status) const const char* assignment = uprv_strchr(fullName, '='); if(variantStart) { if(assignment > variantStart) { - int32_t keyLen = locale_getKeywords(variantStart+1, '@', keywords, keywordCapacity, FALSE, &status); - if(U_SUCCESS(status) && keyLen) { - result = new KeywordEnumeration(keywords, keyLen, 0, status); + CharString keywords; + CharStringByteSink sink(&keywords); + ulocimp_getKeywords(variantStart+1, '@', sink, FALSE, &status); + if (U_SUCCESS(status) && !keywords.isEmpty()) { + result = new KeywordEnumeration(keywords.data(), keywords.length(), 0, status); if (!result) { status = U_MEMORY_ALLOCATION_ERROR; } @@ -1443,8 +2357,6 @@ Locale::createKeywords(UErrorCode &status) const StringEnumeration * Locale::createUnicodeKeywords(UErrorCode &status) const { - char keywords[256]; - int32_t keywordCapacity = sizeof keywords; StringEnumeration *result = NULL; if (U_FAILURE(status)) { @@ -1455,9 +2367,11 @@ Locale::createUnicodeKeywords(UErrorCode &status) const const char* assignment = uprv_strchr(fullName, '='); if(variantStart) { if(assignment > variantStart) { - int32_t keyLen = locale_getKeywords(variantStart+1, '@', keywords, keywordCapacity, FALSE, &status); - if(U_SUCCESS(status) && keyLen) { - result = new UnicodeKeywordEnumeration(keywords, keyLen, 0, status); + CharString keywords; + CharStringByteSink sink(&keywords); + ulocimp_getKeywords(variantStart+1, '@', sink, FALSE, &status); + if (U_SUCCESS(status) && !keywords.isEmpty()) { + result = new UnicodeKeywordEnumeration(keywords.data(), keywords.length(), 0, status); if (!result) { status = U_MEMORY_ALLOCATION_ERROR; } @@ -1492,48 +2406,7 @@ Locale::getKeywordValue(StringPiece keywordName, ByteSink& sink, UErrorCode& sta return; } - LocalMemory scratch; - int32_t scratch_capacity = 16; // Arbitrarily chosen default size. - - char* buffer; - int32_t result_capacity, reslen; - - for (;;) { - if (scratch.allocateInsteadAndReset(scratch_capacity) == nullptr) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } - - buffer = sink.GetAppendBuffer( - /*min_capacity=*/scratch_capacity, - /*desired_capacity_hint=*/scratch_capacity, - scratch.getAlias(), - scratch_capacity, - &result_capacity); - - reslen = uloc_getKeywordValue( - fullName, - keywordName_nul.data(), - buffer, - result_capacity, - &status); - - if (status != U_BUFFER_OVERFLOW_ERROR) { - break; - } - - scratch_capacity = reslen; - status = U_ZERO_ERROR; - } - - if (U_FAILURE(status)) { - return; - } - - sink.Append(buffer, reslen); - if (status == U_STRING_NOT_TERMINATED_WARNING) { - status = U_ZERO_ERROR; // Terminators not used. - } + ulocimp_getKeywordValue(fullName, keywordName_nul.data(), sink, &status); } void diff --git a/deps/icu-small/source/common/loclikely.cpp b/deps/icu-small/source/common/loclikely.cpp index 3b71708e549d5f..6a34bb42cecf3f 100644 --- a/deps/icu-small/source/common/loclikely.cpp +++ b/deps/icu-small/source/common/loclikely.cpp @@ -464,8 +464,7 @@ parseTagString( goto error; } - subtagLength = ulocimp_getLanguage(position, lang, *langLength, &position); - u_terminateChars(lang, *langLength, subtagLength, err); + subtagLength = ulocimp_getLanguage(position, &position, *err).extract(lang, *langLength, *err); /* * Note that we explicit consider U_STRING_NOT_TERMINATED_WARNING @@ -486,8 +485,7 @@ parseTagString( ++position; } - subtagLength = ulocimp_getScript(position, script, *scriptLength, &position); - u_terminateChars(script, *scriptLength, subtagLength, err); + subtagLength = ulocimp_getScript(position, &position, *err).extract(script, *scriptLength, *err); if(U_FAILURE(*err)) { goto error; @@ -511,8 +509,7 @@ parseTagString( } } - subtagLength = ulocimp_getCountry(position, region, *regionLength, &position); - u_terminateChars(region, *regionLength, subtagLength, err); + subtagLength = ulocimp_getCountry(position, &position, *err).extract(region, *regionLength, *err); if(U_FAILURE(*err)) { goto error; @@ -826,7 +823,7 @@ createLikelySubtagsString( } \ } UPRV_BLOCK_MACRO_END -static void +static UBool _uloc_addLikelySubtags(const char* localeID, icu::ByteSink& sink, UErrorCode* err) { @@ -897,15 +894,22 @@ _uloc_addLikelySubtags(const char* localeID, sink.Append(localeID, localIDLength); } - return; + return success; error: if (!U_FAILURE(*err)) { *err = U_ILLEGAL_ARGUMENT_ERROR; } + return FALSE; } +// Add likely subtags to the sink +// return true if the value in the sink is produced by a match during the lookup +// return false if the value in the sink is the same as input because there are +// no match after the lookup. +static UBool _ulocimp_addLikelySubtags(const char*, icu::ByteSink&, UErrorCode*); + static void _uloc_minimizeSubtags(const char* localeID, icu::ByteSink& sink, @@ -921,6 +925,7 @@ _uloc_minimizeSubtags(const char* localeID, const char* trailing = ""; int32_t trailingLength = 0; int32_t trailingIndex = 0; + UBool successGetMax = FALSE; if(U_FAILURE(*err)) { goto error; @@ -961,7 +966,7 @@ _uloc_minimizeSubtags(const char* localeID, { icu::CharString base; { - icu::CharStringByteSink sink(&base); + icu::CharStringByteSink baseSink(&base); createTagString( lang, langLength, @@ -971,7 +976,7 @@ _uloc_minimizeSubtags(const char* localeID, regionLength, NULL, 0, - sink, + baseSink, err); } @@ -980,8 +985,8 @@ _uloc_minimizeSubtags(const char* localeID, * from AddLikelySubtags. **/ { - icu::CharStringByteSink sink(&maximizedTagBuffer); - ulocimp_addLikelySubtags(base.data(), sink, err); + icu::CharStringByteSink maxSink(&maximizedTagBuffer); + successGetMax = _ulocimp_addLikelySubtags(base.data(), maxSink, err); } } @@ -989,13 +994,40 @@ _uloc_minimizeSubtags(const char* localeID, goto error; } + if (!successGetMax) { + /** + * If we got here, return the locale ID parameter unchanged. + **/ + const int32_t localeIDLength = (int32_t)uprv_strlen(localeID); + sink.Append(localeID, localeIDLength); + return; + } + + // In the following, the lang, script, region are referring to those in + // the maximizedTagBuffer, not the one in the localeID. + langLength = sizeof(lang); + scriptLength = sizeof(script); + regionLength = sizeof(region); + parseTagString( + maximizedTagBuffer.data(), + lang, + &langLength, + script, + &scriptLength, + region, + ®ionLength, + err); + if(U_FAILURE(*err)) { + goto error; + } + /** * Start first with just the language. **/ { icu::CharString tagBuffer; { - icu::CharStringByteSink sink(&tagBuffer); + icu::CharStringByteSink tagSink(&tagBuffer); createLikelySubtagsString( lang, langLength, @@ -1005,14 +1037,15 @@ _uloc_minimizeSubtags(const char* localeID, 0, NULL, 0, - sink, + tagSink, err); } if(U_FAILURE(*err)) { goto error; } - else if (!tagBuffer.isEmpty() && uprv_strnicmp( + else if (!tagBuffer.isEmpty() && + uprv_strnicmp( maximizedTagBuffer.data(), tagBuffer.data(), tagBuffer.length()) == 0) { @@ -1039,7 +1072,7 @@ _uloc_minimizeSubtags(const char* localeID, icu::CharString tagBuffer; { - icu::CharStringByteSink sink(&tagBuffer); + icu::CharStringByteSink tagSink(&tagBuffer); createLikelySubtagsString( lang, langLength, @@ -1049,14 +1082,15 @@ _uloc_minimizeSubtags(const char* localeID, regionLength, NULL, 0, - sink, + tagSink, err); } if(U_FAILURE(*err)) { goto error; } - else if (uprv_strnicmp( + else if (!tagBuffer.isEmpty() && + uprv_strnicmp( maximizedTagBuffer.data(), tagBuffer.data(), tagBuffer.length()) == 0) { @@ -1081,10 +1115,10 @@ _uloc_minimizeSubtags(const char* localeID, * since trying with all three subtags would only yield the * maximal version that we already have. **/ - if (scriptLength > 0 && regionLength > 0) { + if (scriptLength > 0) { icu::CharString tagBuffer; { - icu::CharStringByteSink sink(&tagBuffer); + icu::CharStringByteSink tagSink(&tagBuffer); createLikelySubtagsString( lang, langLength, @@ -1094,14 +1128,15 @@ _uloc_minimizeSubtags(const char* localeID, 0, NULL, 0, - sink, + tagSink, err); } if(U_FAILURE(*err)) { goto error; } - else if (uprv_strnicmp( + else if (!tagBuffer.isEmpty() && + uprv_strnicmp( maximizedTagBuffer.data(), tagBuffer.data(), tagBuffer.length()) == 0) { @@ -1123,10 +1158,19 @@ _uloc_minimizeSubtags(const char* localeID, { /** - * If we got here, return the locale ID parameter. + * If we got here, return the max + trail. **/ - const int32_t localeIDLength = (int32_t)uprv_strlen(localeID); - sink.Append(localeID, localeIDLength); + createTagString( + lang, + langLength, + script, + scriptLength, + region, + regionLength, + trailing, + trailingLength, + sink, + err); return; } @@ -1193,15 +1237,23 @@ uloc_addLikelySubtags(const char* localeID, return reslen; } -U_CAPI void U_EXPORT2 -ulocimp_addLikelySubtags(const char* localeID, - icu::ByteSink& sink, - UErrorCode* status) { +static UBool +_ulocimp_addLikelySubtags(const char* localeID, + icu::ByteSink& sink, + UErrorCode* status) { char localeBuffer[ULOC_FULLNAME_CAPACITY]; if (do_canonicalize(localeID, localeBuffer, sizeof localeBuffer, status)) { - _uloc_addLikelySubtags(localeBuffer, sink, status); + return _uloc_addLikelySubtags(localeBuffer, sink, status); } + return FALSE; +} + +U_CAPI void U_EXPORT2 +ulocimp_addLikelySubtags(const char* localeID, + icu::ByteSink& sink, + UErrorCode* status) { + _ulocimp_addLikelySubtags(localeID, sink, status); } U_CAPI int32_t U_EXPORT2 diff --git a/deps/icu-small/source/common/loclikelysubtags.cpp b/deps/icu-small/source/common/loclikelysubtags.cpp index 1fbf1a1463299f..a031bfa5872642 100644 --- a/deps/icu-small/source/common/loclikelysubtags.cpp +++ b/deps/icu-small/source/common/loclikelysubtags.cpp @@ -1,5 +1,5 @@ // © 2019 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html#License +// License & terms of use: http://www.unicode.org/copyright.html // loclikelysubtags.cpp // created: 2019may08 Markus W. Scherer @@ -20,6 +20,7 @@ #include "uhash.h" #include "uinvchar.h" #include "umutex.h" +#include "uniquecharstr.h" #include "uresdata.h" #include "uresimp.h" @@ -31,71 +32,6 @@ constexpr char PSEUDO_ACCENTS_PREFIX = '\''; // -XA, -PSACCENT constexpr char PSEUDO_BIDI_PREFIX = '+'; // -XB, -PSBIDI constexpr char PSEUDO_CRACKED_PREFIX = ','; // -XC, -PSCRACK -/** - * Stores NUL-terminated strings with duplicate elimination. - * Checks for unique UTF-16 string pointers and converts to invariant characters. - */ -class UniqueCharStrings { -public: - UniqueCharStrings(UErrorCode &errorCode) : strings(nullptr) { - uhash_init(&map, uhash_hashUChars, uhash_compareUChars, uhash_compareLong, &errorCode); - if (U_FAILURE(errorCode)) { return; } - strings = new CharString(); - if (strings == nullptr) { - errorCode = U_MEMORY_ALLOCATION_ERROR; - } - } - ~UniqueCharStrings() { - uhash_close(&map); - delete strings; - } - - /** Returns/orphans the CharString that contains all strings. */ - CharString *orphanCharStrings() { - CharString *result = strings; - strings = nullptr; - return result; - } - - /** Adds a string and returns a unique number for it. */ - int32_t add(const UnicodeString &s, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return 0; } - if (isFrozen) { - errorCode = U_NO_WRITE_PERMISSION; - return 0; - } - // The string points into the resource bundle. - const char16_t *p = s.getBuffer(); - int32_t oldIndex = uhash_geti(&map, p); - if (oldIndex != 0) { // found duplicate - return oldIndex; - } - // Explicit NUL terminator for the previous string. - // The strings object is also terminated with one implicit NUL. - strings->append(0, errorCode); - int32_t newIndex = strings->length(); - strings->appendInvariantChars(s, errorCode); - uhash_puti(&map, const_cast(p), newIndex, &errorCode); - return newIndex; - } - - void freeze() { isFrozen = true; } - - /** - * Returns a string pointer for its unique number, if this object is frozen. - * Otherwise nullptr. - */ - const char *get(int32_t i) const { - U_ASSERT(isFrozen); - return isFrozen && i > 0 ? strings->data() + i : nullptr; - } - -private: - UHashtable map; - CharString *strings; - bool isFrozen = false; -}; - } // namespace LocaleDistanceData::LocaleDistanceData(LocaleDistanceData &&data) : diff --git a/deps/icu-small/source/common/loclikelysubtags.h b/deps/icu-small/source/common/loclikelysubtags.h index 90ddfffaca672d..14a01a5eac7eba 100644 --- a/deps/icu-small/source/common/loclikelysubtags.h +++ b/deps/icu-small/source/common/loclikelysubtags.h @@ -1,5 +1,5 @@ // © 2019 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html#License +// License & terms of use: http://www.unicode.org/copyright.html // loclikelysubtags.h // created: 2019may08 Markus W. Scherer @@ -13,49 +13,13 @@ #include "unicode/locid.h" #include "unicode/uobject.h" #include "unicode/ures.h" +#include "charstrmap.h" #include "lsr.h" -#include "uhash.h" U_NAMESPACE_BEGIN struct XLikelySubtagsData; -/** - * Map of const char * keys & values. - * Stores pointers as is: Does not own/copy/adopt/release strings. - */ -class CharStringMap final : public UMemory { -public: - /** Constructs an unusable non-map. */ - CharStringMap() : map(nullptr) {} - CharStringMap(int32_t size, UErrorCode &errorCode) { - map = uhash_openSize(uhash_hashChars, uhash_compareChars, uhash_compareChars, - size, &errorCode); - } - CharStringMap(CharStringMap &&other) U_NOEXCEPT : map(other.map) { - other.map = nullptr; - } - CharStringMap(const CharStringMap &other) = delete; - ~CharStringMap() { - uhash_close(map); - } - - CharStringMap &operator=(CharStringMap &&other) U_NOEXCEPT { - map = other.map; - other.map = nullptr; - return *this; - } - CharStringMap &operator=(const CharStringMap &other) = delete; - - const char *get(const char *key) const { return static_cast(uhash_get(map, key)); } - void put(const char *key, const char *value, UErrorCode &errorCode) { - uhash_put(map, const_cast(key), const_cast(value), &errorCode); - } - -private: - UHashtable *map; -}; - struct LocaleDistanceData { LocaleDistanceData() = default; LocaleDistanceData(LocaleDistanceData &&data); diff --git a/deps/icu-small/source/common/locmap.cpp b/deps/icu-small/source/common/locmap.cpp index 46986399b23e7a..515205222a65ac 100644 --- a/deps/icu-small/source/common/locmap.cpp +++ b/deps/icu-small/source/common/locmap.cpp @@ -28,8 +28,11 @@ */ #include "locmap.h" +#include "bytesinkutil.h" +#include "charstr.h" #include "cstring.h" #include "cmemory.h" +#include "ulocimp.h" #include "unicode/uloc.h" #if U_PLATFORM_HAS_WIN32_API && UCONFIG_USE_WINDOWS_LCID_MAPPING_API @@ -1167,15 +1170,18 @@ uprv_convertToLCIDPlatform(const char* localeID, UErrorCode* status) // conversion functionality when available. #if U_PLATFORM_HAS_WIN32_API && UCONFIG_USE_WINDOWS_LCID_MAPPING_API int32_t len; - char collVal[ULOC_KEYWORDS_CAPACITY] = {}; char baseName[ULOC_FULLNAME_CAPACITY] = {}; const char * mylocaleID = localeID; // Check any for keywords. if (uprv_strchr(localeID, '@')) { - len = uloc_getKeywordValue(localeID, "collation", collVal, UPRV_LENGTHOF(collVal) - 1, status); - if (U_SUCCESS(*status) && len > 0) + icu::CharString collVal; + { + icu::CharStringByteSink sink(&collVal); + ulocimp_getKeywordValue(localeID, "collation", sink, status); + } + if (U_SUCCESS(*status) && !collVal.isEmpty()) { // If it contains the keyword collation, return 0 so that the LCID lookup table will be used. return 0; diff --git a/deps/icu-small/source/common/lsr.cpp b/deps/icu-small/source/common/lsr.cpp index d4308ad0275428..b81808f2c4aae1 100644 --- a/deps/icu-small/source/common/lsr.cpp +++ b/deps/icu-small/source/common/lsr.cpp @@ -1,5 +1,5 @@ // © 2019 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html#License +// License & terms of use: http://www.unicode.org/copyright.html // lsr.cpp // created: 2019may08 Markus W. Scherer diff --git a/deps/icu-small/source/common/lsr.h b/deps/icu-small/source/common/lsr.h index d535e5b0376cd3..a33f855245335e 100644 --- a/deps/icu-small/source/common/lsr.h +++ b/deps/icu-small/source/common/lsr.h @@ -1,5 +1,5 @@ // © 2019 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html#License +// License & terms of use: http://www.unicode.org/copyright.html // lsr.h // created: 2019may08 Markus W. Scherer diff --git a/deps/icu-small/source/common/messageimpl.h b/deps/icu-small/source/common/messageimpl.h index dc7a6edd6c0e5f..a56479066bc058 100644 --- a/deps/icu-small/source/common/messageimpl.h +++ b/deps/icu-small/source/common/messageimpl.h @@ -33,7 +33,7 @@ U_NAMESPACE_BEGIN class U_COMMON_API MessageImpl { public: /** - * @return TRUE if getApostropheMode()==UMSGPAT_APOS_DOUBLE_REQUIRED + * @return true if getApostropheMode()==UMSGPAT_APOS_DOUBLE_REQUIRED */ static UBool jdkAposMode(const MessagePattern &msgPattern) { return msgPattern.getApostropheMode()==UMSGPAT_APOS_DOUBLE_REQUIRED; diff --git a/deps/icu-small/source/common/norm2allmodes.h b/deps/icu-small/source/common/norm2allmodes.h index 682ece28f13092..e8bd52c6ae39d7 100644 --- a/deps/icu-small/source/common/norm2allmodes.h +++ b/deps/icu-small/source/common/norm2allmodes.h @@ -65,13 +65,13 @@ class Normalizer2WithImpl : public Normalizer2 { normalizeSecondAndAppend(UnicodeString &first, const UnicodeString &second, UErrorCode &errorCode) const { - return normalizeSecondAndAppend(first, second, TRUE, errorCode); + return normalizeSecondAndAppend(first, second, true, errorCode); } virtual UnicodeString & append(UnicodeString &first, const UnicodeString &second, UErrorCode &errorCode) const { - return normalizeSecondAndAppend(first, second, FALSE, errorCode); + return normalizeSecondAndAppend(first, second, false, errorCode); } UnicodeString & normalizeSecondAndAppend(UnicodeString &first, @@ -112,14 +112,14 @@ class Normalizer2WithImpl : public Normalizer2 { int32_t length; const UChar *d=impl.getDecomposition(c, buffer, length); if(d==NULL) { - return FALSE; + return false; } if(d==buffer) { decomposition.setTo(buffer, length); // copy the string (Jamos from Hangul syllable c) } else { - decomposition.setTo(FALSE, d, length); // read-only alias + decomposition.setTo(false, d, length); // read-only alias } - return TRUE; + return true; } virtual UBool getRawDecomposition(UChar32 c, UnicodeString &decomposition) const { @@ -127,14 +127,14 @@ class Normalizer2WithImpl : public Normalizer2 { int32_t length; const UChar *d=impl.getRawDecomposition(c, buffer, length); if(d==NULL) { - return FALSE; + return false; } if(d==buffer) { decomposition.setTo(buffer, length); // copy the string (algorithmic decomposition) } else { - decomposition.setTo(FALSE, d, length); // read-only alias + decomposition.setTo(false, d, length); // read-only alias } - return TRUE; + return true; } virtual UChar32 composePair(UChar32 a, UChar32 b) const { @@ -150,12 +150,12 @@ class Normalizer2WithImpl : public Normalizer2 { virtual UBool isNormalized(const UnicodeString &s, UErrorCode &errorCode) const { if(U_FAILURE(errorCode)) { - return FALSE; + return false; } const UChar *sArray=s.getBuffer(); if(sArray==NULL) { errorCode=U_ILLEGAL_ARGUMENT_ERROR; - return FALSE; + return false; } const UChar *sLimit=sArray+s.length(); return sLimit==spanQuickCheckYes(sArray, sLimit, errorCode); @@ -227,7 +227,7 @@ class ComposeNormalizer2 : public Normalizer2WithImpl { virtual void normalize(const UChar *src, const UChar *limit, ReorderingBuffer &buffer, UErrorCode &errorCode) const U_OVERRIDE { - impl.compose(src, limit, onlyContiguous, TRUE, buffer, errorCode); + impl.compose(src, limit, onlyContiguous, true, buffer, errorCode); } using Normalizer2WithImpl::normalize; // Avoid warning about hiding base class function. @@ -256,24 +256,24 @@ class ComposeNormalizer2 : public Normalizer2WithImpl { virtual UBool isNormalized(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE { if(U_FAILURE(errorCode)) { - return FALSE; + return false; } const UChar *sArray=s.getBuffer(); if(sArray==NULL) { errorCode=U_ILLEGAL_ARGUMENT_ERROR; - return FALSE; + return false; } UnicodeString temp; ReorderingBuffer buffer(impl, temp); if(!buffer.init(5, errorCode)) { // small destCapacity for substring normalization - return FALSE; + return false; } - return impl.compose(sArray, sArray+s.length(), onlyContiguous, FALSE, buffer, errorCode); + return impl.compose(sArray, sArray+s.length(), onlyContiguous, false, buffer, errorCode); } virtual UBool isNormalizedUTF8(StringPiece sp, UErrorCode &errorCode) const U_OVERRIDE { if(U_FAILURE(errorCode)) { - return FALSE; + return false; } const uint8_t *s = reinterpret_cast(sp.data()); return impl.composeUTF8(0, onlyContiguous, s, s + sp.length(), nullptr, nullptr, errorCode); @@ -343,7 +343,7 @@ class FCDNormalizer2 : public Normalizer2WithImpl { struct Norm2AllModes : public UMemory { Norm2AllModes(Normalizer2Impl *i) - : impl(i), comp(*i, FALSE), decomp(*i), fcd(*i), fcc(*i, TRUE) {} + : impl(i), comp(*i, false), decomp(*i), fcd(*i), fcc(*i, true) {} ~Norm2AllModes(); static Norm2AllModes *createInstance(Normalizer2Impl *impl, UErrorCode &errorCode); diff --git a/deps/icu-small/source/common/normalizer2impl.h b/deps/icu-small/source/common/normalizer2impl.h index cf3015ea881bfc..4218a30a3452df 100644 --- a/deps/icu-small/source/common/normalizer2impl.h +++ b/deps/icu-small/source/common/normalizer2impl.h @@ -171,7 +171,7 @@ class U_COMMON_API ReorderingBuffer : public UMemory { UErrorCode &errorCode); UBool appendBMP(UChar c, uint8_t cc, UErrorCode &errorCode) { if(remainingCapacity==0 && !resize(1, errorCode)) { - return FALSE; + return false; } if(lastCC<=cc || cc==0) { *limit++=c; @@ -183,7 +183,7 @@ class U_COMMON_API ReorderingBuffer : public UMemory { insert(c, cc); } --remainingCapacity; - return TRUE; + return true; } UBool appendZeroCC(UChar32 c, UErrorCode &errorCode); UBool appendZeroCC(const UChar *s, const UChar *sLimit, UErrorCode &errorCode); @@ -359,7 +359,7 @@ class U_COMMON_API Normalizer2Impl : public UObject { return getFCD16FromNormData(c); } - /** Returns TRUE if the single-or-lead code unit c might have non-zero FCD data. */ + /** Returns true if the single-or-lead code unit c might have non-zero FCD data. */ UBool singleLeadMightHaveNonZeroFCD16(UChar32 lead) const { // 0<=lead<=0xffff uint8_t bits=smallFCD[lead>>8]; @@ -397,8 +397,8 @@ class U_COMMON_API Normalizer2Impl : public UObject { MIN_YES_YES_WITH_CC=0xfe02, JAMO_VT=0xfe00, MIN_NORMAL_MAYBE_YES=0xfc00, - JAMO_L=2, // offset=1 hasCompBoundaryAfter=FALSE - INERT=1, // offset=0 hasCompBoundaryAfter=TRUE + JAMO_L=2, // offset=1 hasCompBoundaryAfter=false + INERT=1, // offset=0 hasCompBoundaryAfter=true // norm16 bit 0 is comp-boundary-after. HAS_COMP_BOUNDARY_AFTER=1, diff --git a/deps/icu-small/source/common/patternprops.h b/deps/icu-small/source/common/patternprops.h index b57cdeb6e534f6..95898d580c82f0 100644 --- a/deps/icu-small/source/common/patternprops.h +++ b/deps/icu-small/source/common/patternprops.h @@ -44,17 +44,17 @@ U_NAMESPACE_BEGIN class U_COMMON_API PatternProps { public: /** - * @return TRUE if c is a Pattern_Syntax code point. + * @return true if c is a Pattern_Syntax code point. */ static UBool isSyntax(UChar32 c); /** - * @return TRUE if c is a Pattern_Syntax or Pattern_White_Space code point. + * @return true if c is a Pattern_Syntax or Pattern_White_Space code point. */ static UBool isSyntaxOrWhiteSpace(UChar32 c); /** - * @return TRUE if c is a Pattern_White_Space character. + * @return true if c is a Pattern_White_Space character. */ static UBool isWhiteSpace(UChar32 c); @@ -78,7 +78,7 @@ class U_COMMON_API PatternProps { /** * Tests whether the string contains a "pattern identifier", that is, * whether it contains only non-Pattern_White_Space, non-Pattern_Syntax characters. - * @return TRUE if there are no Pattern_White_Space or Pattern_Syntax characters in s. + * @return true if there are no Pattern_White_Space or Pattern_Syntax characters in s. */ static UBool isIdentifier(const UChar *s, int32_t length); diff --git a/deps/icu-small/source/common/pluralmap.h b/deps/icu-small/source/common/pluralmap.h index db644093a1fc46..d898ac4671f797 100644 --- a/deps/icu-small/source/common/pluralmap.h +++ b/deps/icu-small/source/common/pluralmap.h @@ -234,7 +234,7 @@ class PluralMap : public PluralMapBase { } /** - * Returns TRUE if this object equals rhs. + * Returns true if this object equals rhs. */ UBool equals( const PluralMap &rhs, @@ -244,13 +244,13 @@ class PluralMap : public PluralMapBase { continue; } if (fVariants[i] == NULL || rhs.fVariants[i] == NULL) { - return FALSE; + return false; } if (!eqFunc(*fVariants[i], *rhs.fVariants[i])) { - return FALSE; + return false; } } - return TRUE; + return true; } private: diff --git a/deps/icu-small/source/common/punycode.cpp b/deps/icu-small/source/common/punycode.cpp index 4f0b9ea9cd385f..94d32a66d7678d 100644 --- a/deps/icu-small/source/common/punycode.cpp +++ b/deps/icu-small/source/common/punycode.cpp @@ -107,36 +107,26 @@ digitToBasic(int32_t digit, UBool uppercase) { } /** - * basicToDigit[] contains the numeric value of a basic code - * point (for use in representing integers) in the range 0 to - * BASE-1, or -1 if b is does not represent a value. + * @return the numeric value of a basic code point (for use in representing integers) + * in the range 0 to BASE-1, or a negative value if cp is invalid. */ -static const int8_t -basicToDigit[256]={ - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, -1, - - -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, - - -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, - - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 -}; +static int32_t decodeDigit(int32_t cp) { + if(cp<=u'Z') { + if(cp<=u'9') { + if(cp 26..35 + } + } else { + return cp-u'A'; // A-Z -> 0..25 + } + } else if(cp<=u'z') { + return cp-'a'; // a..z -> 0..25 + } else { + return -1; + } +} static inline char asciiCaseMap(char b, UBool uppercase) { @@ -178,15 +168,23 @@ adaptBias(int32_t delta, int32_t length, UBool firstTime) { return count+(((BASE-TMIN+1)*delta)/(delta+SKEW)); } -#define MAX_CP_COUNT 200 +namespace { -U_CFUNC int32_t +// ICU-13727: Limit input length for n^2 algorithm +// where well-formed strings are at most 59 characters long. +constexpr int32_t ENCODE_MAX_CODE_UNITS=1000; +constexpr int32_t DECODE_MAX_CHARS=2000; + +} // namespace + +// encode +U_CAPI int32_t u_strToPunycode(const UChar *src, int32_t srcLength, UChar *dest, int32_t destCapacity, const UBool *caseFlags, UErrorCode *pErrorCode) { - int32_t cpBuffer[MAX_CP_COUNT]; + int32_t cpBuffer[ENCODE_MAX_CODE_UNITS]; int32_t n, delta, handledCPCount, basicLength, destLength, bias, j, m, q, k, t, srcCPCount; UChar c, c2; @@ -199,6 +197,10 @@ u_strToPunycode(const UChar *src, int32_t srcLength, *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; return 0; } + if (srcLength>ENCODE_MAX_CODE_UNITS) { + *pErrorCode=U_INPUT_TOO_LONG_ERROR; + return 0; + } /* * Handle the basic code points and @@ -211,9 +213,8 @@ u_strToPunycode(const UChar *src, int32_t srcLength, if((c=src[j])==0) { break; } - if(srcCPCount==MAX_CP_COUNT) { - /* too many input code points */ - *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + if(j>=ENCODE_MAX_CODE_UNITS) { + *pErrorCode=U_INPUT_TOO_LONG_ERROR; return 0; } if(IS_BASIC(c)) { @@ -243,11 +244,6 @@ u_strToPunycode(const UChar *src, int32_t srcLength, } else { /* length-specified input */ for(j=0; j state to , but guard against overflow: */ - if(m-n>(0x7fffffff-MAX_CP_COUNT-delta)/(handledCPCount+1)) { + if(m-n>(0x7fffffff-handledCPCount-delta)/(handledCPCount+1)) { *pErrorCode=U_INTERNAL_PROGRAM_ERROR; return 0; } @@ -373,7 +369,8 @@ u_strToPunycode(const UChar *src, int32_t srcLength, return u_terminateUChars(dest, destCapacity, destLength, pErrorCode); } -U_CFUNC int32_t +// decode +U_CAPI int32_t u_strFromPunycode(const UChar *src, int32_t srcLength, UChar *dest, int32_t destCapacity, UBool *caseFlags, @@ -395,6 +392,10 @@ u_strFromPunycode(const UChar *src, int32_t srcLength, if(srcLength==-1) { srcLength=u_strlen(src); } + if (srcLength>DECODE_MAX_CHARS) { + *pErrorCode=U_INPUT_TOO_LONG_ERROR; + return 0; + } /* * Handle the basic code points: @@ -455,7 +456,7 @@ u_strFromPunycode(const UChar *src, int32_t srcLength, return 0; } - digit=basicToDigit[(uint8_t)src[in++]]; + digit=decodeDigit(src[in++]); if(digit<0) { *pErrorCode=U_INVALID_CHAR_FOUND; return 0; diff --git a/deps/icu-small/source/common/punycode.h b/deps/icu-small/source/common/punycode.h index 5d8a243175cca3..9e28f770c407ec 100644 --- a/deps/icu-small/source/common/punycode.h +++ b/deps/icu-small/source/common/punycode.h @@ -50,7 +50,7 @@ Adam M. Costello * @param caseFlags Vector of boolean values, one per input UChar, * indicating that the corresponding character is to be * marked for the decoder optionally - * uppercasing (TRUE) or lowercasing (FALSE) + * uppercasing (true) or lowercasing (false) * the character. * ASCII characters are output directly in the case as marked. * Flags corresponding to trail surrogates are ignored. @@ -65,7 +65,7 @@ Adam M. Costello * * @see u_strFromPunycode */ -U_CFUNC int32_t +U_CAPI int32_t u_strToPunycode(const UChar *src, int32_t srcLength, UChar *dest, int32_t destCapacity, const UBool *caseFlags, @@ -83,10 +83,10 @@ u_strToPunycode(const UChar *src, int32_t srcLength, * and of caseFlags in numbers of UBools. * @param caseFlags Output array for case flags as * defined by the Punycode string. - * The caller should uppercase (TRUE) or lowercase (FASLE) + * The caller should uppercase (true) or lowercase (FASLE) * the corresponding character in dest. * For supplementary characters, only the lead surrogate - * is marked, and FALSE is stored for the trail surrogate. + * is marked, and false is stored for the trail surrogate. * This is redundant and not necessary for ASCII characters * because they are already in the case indicated. * Can be NULL if the case flags are not needed. @@ -100,7 +100,7 @@ u_strToPunycode(const UChar *src, int32_t srcLength, * * @see u_strToPunycode */ -U_CFUNC int32_t +U_CAPI int32_t u_strFromPunycode(const UChar *src, int32_t srcLength, UChar *dest, int32_t destCapacity, UBool *caseFlags, diff --git a/deps/icu-small/source/common/putil.cpp b/deps/icu-small/source/common/putil.cpp index 51c2473c982d5d..3ed6a05d22d839 100644 --- a/deps/icu-small/source/common/putil.cpp +++ b/deps/icu-small/source/common/putil.cpp @@ -81,7 +81,7 @@ #include #ifndef U_COMMON_IMPLEMENTATION -#error U_COMMON_IMPLEMENTATION not set - must be set for all ICU source files in common/ - see http://userguide.icu-project.org/howtouseicu +#error U_COMMON_IMPLEMENTATION not set - must be set for all ICU source files in common/ - see https://unicode-org.github.io/icu/userguide/howtouseicu #endif @@ -118,11 +118,15 @@ # ifndef _XPG4_2 # define _XPG4_2 # endif +# elif U_PLATFORM == U_PF_ANDROID +# include +# include # endif #elif U_PLATFORM == U_PF_QNX # include #endif + /* * Only include langinfo.h if we have a way to get the codeset. If we later * depend on more feature, we can test on U_HAVE_NL_LANGINFO. @@ -1043,9 +1047,53 @@ static char* searchForTZFile(const char* path, DefaultTZInfo* tzInfo) { } #endif +#if U_PLATFORM == U_PF_ANDROID +typedef int(system_property_read_callback)(const prop_info* info, + void (*callback)(void* cookie, + const char* name, + const char* value, + uint32_t serial), + void* cookie); +typedef int(system_property_get)(const char*, char*); + +static char gAndroidTimeZone[PROP_VALUE_MAX] = { '\0' }; + +static void u_property_read(void* cookie, const char* name, const char* value, + uint32_t serial) { + uprv_strcpy((char* )cookie, value); +} +#endif + U_CAPI void U_EXPORT2 -uprv_tzname_clear_cache() +uprv_tzname_clear_cache(void) { +#if U_PLATFORM == U_PF_ANDROID + /* Android's timezone is stored in system property. */ + gAndroidTimeZone[0] = '\0'; + void* libc = dlopen("libc.so", RTLD_NOLOAD); + if (libc) { + /* Android API 26+ has new API to get system property and old API + * (__system_property_get) is deprecated */ + system_property_read_callback* property_read_callback = + (system_property_read_callback*)dlsym( + libc, "__system_property_read_callback"); + if (property_read_callback) { + const prop_info* info = + __system_property_find("persist.sys.timezone"); + if (info) { + property_read_callback(info, &u_property_read, gAndroidTimeZone); + } + } else { + system_property_get* property_get = + (system_property_get*)dlsym(libc, "__system_property_get"); + if (property_get) { + property_get("persist.sys.timezone", gAndroidTimeZone); + } + } + dlclose(libc); + } +#endif + #if defined(CHECK_LOCALTIME_LINK) && !defined(DEBUG_SKIP_LOCALTIME_LINK) gTimeZoneBufferPtr = NULL; #endif @@ -1084,7 +1132,11 @@ uprv_tzname(int n) /* This code can be temporarily disabled to test tzname resolution later on. */ #ifndef DEBUG_TZNAME +#if U_PLATFORM == U_PF_ANDROID + tzid = gAndroidTimeZone; +#else tzid = getenv("TZ"); +#endif if (tzid != NULL && isValidOlsonID(tzid) #if U_PLATFORM == U_PF_SOLARIS /* When TZ equals localtime on Solaris, check the /etc/localtime file. */ @@ -2299,7 +2351,7 @@ u_getVersion(UVersionInfo versionArray) { #include #endif /* HAVE_DLFCN_H */ -U_INTERNAL void * U_EXPORT2 +U_CAPI void * U_EXPORT2 uprv_dl_open(const char *libName, UErrorCode *status) { void *ret = NULL; if(U_FAILURE(*status)) return ret; @@ -2313,13 +2365,13 @@ uprv_dl_open(const char *libName, UErrorCode *status) { return ret; } -U_INTERNAL void U_EXPORT2 +U_CAPI void U_EXPORT2 uprv_dl_close(void *lib, UErrorCode *status) { if(U_FAILURE(*status)) return; dlclose(lib); } -U_INTERNAL UVoidFunction* U_EXPORT2 +U_CAPI UVoidFunction* U_EXPORT2 uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) { union { UVoidFunction *fp; @@ -2342,7 +2394,7 @@ uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) { /* Windows API implementation. */ // Note: UWP does not expose/allow these APIs, so the UWP version gets the null implementation. */ -U_INTERNAL void * U_EXPORT2 +U_CAPI void * U_EXPORT2 uprv_dl_open(const char *libName, UErrorCode *status) { HMODULE lib = NULL; @@ -2357,7 +2409,7 @@ uprv_dl_open(const char *libName, UErrorCode *status) { return (void*)lib; } -U_INTERNAL void U_EXPORT2 +U_CAPI void U_EXPORT2 uprv_dl_close(void *lib, UErrorCode *status) { HMODULE handle = (HMODULE)lib; if(U_FAILURE(*status)) return; @@ -2367,7 +2419,7 @@ uprv_dl_close(void *lib, UErrorCode *status) { return; } -U_INTERNAL UVoidFunction* U_EXPORT2 +U_CAPI UVoidFunction* U_EXPORT2 uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) { HMODULE handle = (HMODULE)lib; UVoidFunction* addr = NULL; @@ -2392,7 +2444,7 @@ uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) { /* No dynamic loading, null (nonexistent) implementation. */ -U_INTERNAL void * U_EXPORT2 +U_CAPI void * U_EXPORT2 uprv_dl_open(const char *libName, UErrorCode *status) { (void)libName; if(U_FAILURE(*status)) return NULL; @@ -2400,7 +2452,7 @@ uprv_dl_open(const char *libName, UErrorCode *status) { return NULL; } -U_INTERNAL void U_EXPORT2 +U_CAPI void U_EXPORT2 uprv_dl_close(void *lib, UErrorCode *status) { (void)lib; if(U_FAILURE(*status)) return; @@ -2408,7 +2460,7 @@ uprv_dl_close(void *lib, UErrorCode *status) { return; } -U_INTERNAL UVoidFunction* U_EXPORT2 +U_CAPI UVoidFunction* U_EXPORT2 uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) { (void)lib; (void)sym; diff --git a/deps/icu-small/source/common/putilimp.h b/deps/icu-small/source/common/putilimp.h index 2e9fbcc4837cd8..a325c6c359ad26 100644 --- a/deps/icu-small/source/common/putilimp.h +++ b/deps/icu-small/source/common/putilimp.h @@ -210,93 +210,93 @@ typedef size_t uintptr_t; * Floating point utility to determine if a double is Not a Number (NaN). * @internal */ -U_INTERNAL UBool U_EXPORT2 uprv_isNaN(double d); +U_CAPI UBool U_EXPORT2 uprv_isNaN(double d); /** * Floating point utility to determine if a double has an infinite value. * @internal */ -U_INTERNAL UBool U_EXPORT2 uprv_isInfinite(double d); +U_CAPI UBool U_EXPORT2 uprv_isInfinite(double d); /** * Floating point utility to determine if a double has a positive infinite value. * @internal */ -U_INTERNAL UBool U_EXPORT2 uprv_isPositiveInfinity(double d); +U_CAPI UBool U_EXPORT2 uprv_isPositiveInfinity(double d); /** * Floating point utility to determine if a double has a negative infinite value. * @internal */ -U_INTERNAL UBool U_EXPORT2 uprv_isNegativeInfinity(double d); +U_CAPI UBool U_EXPORT2 uprv_isNegativeInfinity(double d); /** * Floating point utility that returns a Not a Number (NaN) value. * @internal */ -U_INTERNAL double U_EXPORT2 uprv_getNaN(void); +U_CAPI double U_EXPORT2 uprv_getNaN(void); /** * Floating point utility that returns an infinite value. * @internal */ -U_INTERNAL double U_EXPORT2 uprv_getInfinity(void); +U_CAPI double U_EXPORT2 uprv_getInfinity(void); /** * Floating point utility to truncate a double. * @internal */ -U_INTERNAL double U_EXPORT2 uprv_trunc(double d); +U_CAPI double U_EXPORT2 uprv_trunc(double d); /** * Floating point utility to calculate the floor of a double. * @internal */ -U_INTERNAL double U_EXPORT2 uprv_floor(double d); +U_CAPI double U_EXPORT2 uprv_floor(double d); /** * Floating point utility to calculate the ceiling of a double. * @internal */ -U_INTERNAL double U_EXPORT2 uprv_ceil(double d); +U_CAPI double U_EXPORT2 uprv_ceil(double d); /** * Floating point utility to calculate the absolute value of a double. * @internal */ -U_INTERNAL double U_EXPORT2 uprv_fabs(double d); +U_CAPI double U_EXPORT2 uprv_fabs(double d); /** * Floating point utility to calculate the fractional and integer parts of a double. * @internal */ -U_INTERNAL double U_EXPORT2 uprv_modf(double d, double* pinteger); +U_CAPI double U_EXPORT2 uprv_modf(double d, double* pinteger); /** * Floating point utility to calculate the remainder of a double divided by another double. * @internal */ -U_INTERNAL double U_EXPORT2 uprv_fmod(double d, double y); +U_CAPI double U_EXPORT2 uprv_fmod(double d, double y); /** * Floating point utility to calculate d to the power of exponent (d^exponent). * @internal */ -U_INTERNAL double U_EXPORT2 uprv_pow(double d, double exponent); +U_CAPI double U_EXPORT2 uprv_pow(double d, double exponent); /** * Floating point utility to calculate 10 to the power of exponent (10^exponent). * @internal */ -U_INTERNAL double U_EXPORT2 uprv_pow10(int32_t exponent); +U_CAPI double U_EXPORT2 uprv_pow10(int32_t exponent); /** * Floating point utility to calculate the maximum value of two doubles. * @internal */ -U_INTERNAL double U_EXPORT2 uprv_fmax(double d, double y); +U_CAPI double U_EXPORT2 uprv_fmax(double d, double y); /** * Floating point utility to calculate the minimum value of two doubles. * @internal */ -U_INTERNAL double U_EXPORT2 uprv_fmin(double d, double y); +U_CAPI double U_EXPORT2 uprv_fmin(double d, double y); /** * Private utility to calculate the maximum value of two integers. * @internal */ -U_INTERNAL int32_t U_EXPORT2 uprv_max(int32_t d, int32_t y); +U_CAPI int32_t U_EXPORT2 uprv_max(int32_t d, int32_t y); /** * Private utility to calculate the minimum value of two integers. * @internal */ -U_INTERNAL int32_t U_EXPORT2 uprv_min(int32_t d, int32_t y); +U_CAPI int32_t U_EXPORT2 uprv_min(int32_t d, int32_t y); #if U_IS_BIG_ENDIAN # define uprv_isNegative(number) (*((signed char *)&(number))<0) @@ -309,13 +309,13 @@ U_INTERNAL int32_t U_EXPORT2 uprv_min(int32_t d, int32_t y); * type of arbitrary bit length. * @internal */ -U_INTERNAL double U_EXPORT2 uprv_maxMantissa(void); +U_CAPI double U_EXPORT2 uprv_maxMantissa(void); /** * Floating point utility to calculate the logarithm of a double. * @internal */ -U_INTERNAL double U_EXPORT2 uprv_log(double d); +U_CAPI double U_EXPORT2 uprv_log(double d); /** * Does common notion of rounding e.g. uprv_floor(x + 0.5); @@ -323,7 +323,7 @@ U_INTERNAL double U_EXPORT2 uprv_log(double d); * @return the rounded double * @internal */ -U_INTERNAL double U_EXPORT2 uprv_round(double x); +U_CAPI double U_EXPORT2 uprv_round(double x); /** * Adds the signed integers a and b, storing the result in res. @@ -336,7 +336,7 @@ U_INTERNAL double U_EXPORT2 uprv_round(double x); * @return true if overflow occurred; false if no overflow occurred. * @internal */ -U_INTERNAL UBool U_EXPORT2 uprv_add32_overflow(int32_t a, int32_t b, int32_t* res); +U_CAPI UBool U_EXPORT2 uprv_add32_overflow(int32_t a, int32_t b, int32_t* res); /** * Multiplies the signed integers a and b, storing the result in res. @@ -349,7 +349,7 @@ U_INTERNAL UBool U_EXPORT2 uprv_add32_overflow(int32_t a, int32_t b, int32_t* re * @return true if overflow occurred; false if no overflow occurred. * @internal */ -U_INTERNAL UBool U_EXPORT2 uprv_mul32_overflow(int32_t a, int32_t b, int32_t* res); +U_CAPI UBool U_EXPORT2 uprv_mul32_overflow(int32_t a, int32_t b, int32_t* res); #if 0 /** @@ -359,7 +359,7 @@ U_INTERNAL UBool U_EXPORT2 uprv_mul32_overflow(int32_t a, int32_t b, int32_t* re * @return the number of digits after the decimal point in a double number x. * @internal */ -/*U_INTERNAL int32_t U_EXPORT2 uprv_digitsAfterDecimal(double x);*/ +/*U_CAPI int32_t U_EXPORT2 uprv_digitsAfterDecimal(double x);*/ #endif #if !U_CHARSET_IS_UTF8 @@ -371,7 +371,7 @@ U_INTERNAL UBool U_EXPORT2 uprv_mul32_overflow(int32_t a, int32_t b, int32_t* re * @return the default codepage for this platform * @internal */ -U_INTERNAL const char* U_EXPORT2 uprv_getDefaultCodepage(void); +U_CAPI const char* U_EXPORT2 uprv_getDefaultCodepage(void); #endif /** @@ -383,7 +383,7 @@ U_INTERNAL const char* U_EXPORT2 uprv_getDefaultCodepage(void); * @return the default locale ID string * @internal */ -U_INTERNAL const char* U_EXPORT2 uprv_getDefaultLocaleID(void); +U_CAPI const char* U_EXPORT2 uprv_getDefaultLocaleID(void); /** * Time zone utilities @@ -417,7 +417,7 @@ U_INTERNAL const char* U_EXPORT2 uprv_getDefaultLocaleID(void); * Date/Time application. * @internal */ -U_INTERNAL void U_EXPORT2 uprv_tzset(void); +U_CAPI void U_EXPORT2 uprv_tzset(void); /** * Difference in seconds between coordinated universal @@ -425,7 +425,7 @@ U_INTERNAL void U_EXPORT2 uprv_tzset(void); * @return the difference in seconds between coordinated universal time and local time. * @internal */ -U_INTERNAL int32_t U_EXPORT2 uprv_timezone(void); +U_CAPI int32_t U_EXPORT2 uprv_timezone(void); /** * tzname(0) Three-letter time-zone name derived from TZ environment @@ -435,13 +435,13 @@ U_INTERNAL int32_t U_EXPORT2 uprv_timezone(void); * tzname(1) is an empty string. * @internal */ -U_INTERNAL const char* U_EXPORT2 uprv_tzname(int n); +U_CAPI const char* U_EXPORT2 uprv_tzname(int n); /** * Reset the global tzname cache. * @internal */ -U_INTERNAL void uprv_tzname_clear_cache(); +U_CAPI void uprv_tzname_clear_cache(void); /** * Get UTC (GMT) time measured in milliseconds since 0:00 on 1/1/1970. @@ -449,7 +449,7 @@ U_INTERNAL void uprv_tzname_clear_cache(); * @return the UTC time measured in milliseconds * @internal */ -U_INTERNAL UDate U_EXPORT2 uprv_getUTCtime(void); +U_CAPI UDate U_EXPORT2 uprv_getUTCtime(void); /** * Get UTC (GMT) time measured in milliseconds since 0:00 on 1/1/1970. @@ -458,15 +458,15 @@ U_INTERNAL UDate U_EXPORT2 uprv_getUTCtime(void); * @return the UTC time measured in milliseconds * @internal */ -U_INTERNAL UDate U_EXPORT2 uprv_getRawUTCtime(void); +U_CAPI UDate U_EXPORT2 uprv_getRawUTCtime(void); /** * Determine whether a pathname is absolute or not, as defined by the platform. * @param path Pathname to test - * @return TRUE if the path is absolute + * @return true if the path is absolute * @internal (ICU 3.0) */ -U_INTERNAL UBool U_EXPORT2 uprv_pathIsAbsolute(const char *path); +U_CAPI UBool U_EXPORT2 uprv_pathIsAbsolute(const char *path); /** * Use U_MAX_PTR instead of this function. @@ -474,7 +474,7 @@ U_INTERNAL UBool U_EXPORT2 uprv_pathIsAbsolute(const char *path); * @return the largest possible pointer greater than the base * @internal (ICU 3.8) */ -U_INTERNAL void * U_EXPORT2 uprv_maximumPtr(void *base); +U_CAPI void * U_EXPORT2 uprv_maximumPtr(void *base); /** * Maximum value of a (void*) - use to indicate the limit of an 'infinite' buffer. @@ -572,26 +572,26 @@ typedef void (UVoidFunction)(void); * Load a library * @internal (ICU 4.4) */ -U_INTERNAL void * U_EXPORT2 uprv_dl_open(const char *libName, UErrorCode *status); +U_CAPI void * U_EXPORT2 uprv_dl_open(const char *libName, UErrorCode *status); /** * Close a library * @internal (ICU 4.4) */ -U_INTERNAL void U_EXPORT2 uprv_dl_close( void *lib, UErrorCode *status); +U_CAPI void U_EXPORT2 uprv_dl_close( void *lib, UErrorCode *status); /** * Extract a symbol from a library (function) * @internal (ICU 4.8) */ -U_INTERNAL UVoidFunction* U_EXPORT2 uprv_dlsym_func( void *lib, const char *symbolName, UErrorCode *status); +U_CAPI UVoidFunction* U_EXPORT2 uprv_dlsym_func( void *lib, const char *symbolName, UErrorCode *status); /** * Extract a symbol from a library (function) * Not implemented, no clients. * @internal */ -/* U_INTERNAL void * U_EXPORT2 uprv_dlsym_data( void *lib, const char *symbolName, UErrorCode *status); */ +/* U_CAPI void * U_EXPORT2 uprv_dlsym_data( void *lib, const char *symbolName, UErrorCode *status); */ #endif diff --git a/deps/icu-small/source/common/rbbi.cpp b/deps/icu-small/source/common/rbbi.cpp index 43ba58ba9e6577..9b7e70c3cf419f 100644 --- a/deps/icu-small/source/common/rbbi.cpp +++ b/deps/icu-small/source/common/rbbi.cpp @@ -68,10 +68,18 @@ RuleBasedBreakIterator::RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode init(status); fData = new RBBIDataWrapper(data, status); // status checked in constructor if (U_FAILURE(status)) {return;} - if(fData == 0) { + if(fData == nullptr) { status = U_MEMORY_ALLOCATION_ERROR; return; } + if (fData->fForwardTable->fLookAheadResultsSize > 0) { + fLookAheadMatches = static_cast( + uprv_malloc(fData->fForwardTable->fLookAheadResultsSize * sizeof(int32_t))); + if (fLookAheadMatches == nullptr) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + } } // @@ -98,10 +106,18 @@ RuleBasedBreakIterator::RuleBasedBreakIterator(const uint8_t *compiledRules, } fData = new RBBIDataWrapper(data, RBBIDataWrapper::kDontAdopt, status); if (U_FAILURE(status)) {return;} - if(fData == 0) { + if(fData == nullptr) { status = U_MEMORY_ALLOCATION_ERROR; return; } + if (fData->fForwardTable->fLookAheadResultsSize > 0) { + fLookAheadMatches = static_cast( + uprv_malloc(fData->fForwardTable->fLookAheadResultsSize * sizeof(int32_t))); + if (fLookAheadMatches == nullptr) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + } } @@ -117,10 +133,18 @@ RuleBasedBreakIterator::RuleBasedBreakIterator(UDataMemory* udm, UErrorCode &sta init(status); fData = new RBBIDataWrapper(udm, status); // status checked in constructor if (U_FAILURE(status)) {return;} - if(fData == 0) { + if(fData == nullptr) { status = U_MEMORY_ALLOCATION_ERROR; return; } + if (fData->fForwardTable->fLookAheadResultsSize > 0) { + fLookAheadMatches = static_cast( + uprv_malloc(fData->fForwardTable->fLookAheadResultsSize * sizeof(int32_t))); + if (fLookAheadMatches == nullptr) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + } } @@ -188,30 +212,34 @@ RuleBasedBreakIterator::~RuleBasedBreakIterator() { // fCharIter was adopted from the outside. delete fCharIter; } - fCharIter = NULL; + fCharIter = nullptr; utext_close(&fText); - if (fData != NULL) { + if (fData != nullptr) { fData->removeReference(); - fData = NULL; + fData = nullptr; } delete fBreakCache; - fBreakCache = NULL; + fBreakCache = nullptr; delete fDictionaryCache; - fDictionaryCache = NULL; + fDictionaryCache = nullptr; delete fLanguageBreakEngines; - fLanguageBreakEngines = NULL; + fLanguageBreakEngines = nullptr; delete fUnhandledBreakEngine; - fUnhandledBreakEngine = NULL; + fUnhandledBreakEngine = nullptr; + + uprv_free(fLookAheadMatches); + fLookAheadMatches = nullptr; } /** * Assignment operator. Sets this iterator to have the same behavior, * and iterate over the same text, as the one passed in. + * TODO: needs better handling of memory allocation errors. */ RuleBasedBreakIterator& RuleBasedBreakIterator::operator=(const RuleBasedBreakIterator& that) { @@ -252,6 +280,14 @@ RuleBasedBreakIterator::operator=(const RuleBasedBreakIterator& that) { fData = that.fData->addReference(); } + uprv_free(fLookAheadMatches); + fLookAheadMatches = nullptr; + if (fData && fData->fForwardTable->fLookAheadResultsSize > 0) { + fLookAheadMatches = static_cast( + uprv_malloc(fData->fForwardTable->fLookAheadResultsSize * sizeof(int32_t))); + } + + fPosition = that.fPosition; fRuleStatusIndex = that.fRuleStatusIndex; fDone = that.fDone; @@ -275,16 +311,17 @@ RuleBasedBreakIterator::operator=(const RuleBasedBreakIterator& that) { // //----------------------------------------------------------------------------- void RuleBasedBreakIterator::init(UErrorCode &status) { - fCharIter = NULL; - fData = NULL; + fCharIter = nullptr; + fData = nullptr; fPosition = 0; fRuleStatusIndex = 0; fDone = false; fDictionaryCharCount = 0; - fLanguageBreakEngines = NULL; - fUnhandledBreakEngine = NULL; - fBreakCache = NULL; - fDictionaryCache = NULL; + fLanguageBreakEngines = nullptr; + fUnhandledBreakEngine = nullptr; + fBreakCache = nullptr; + fDictionaryCache = nullptr; + fLookAheadMatches = nullptr; // Note: IBM xlC is unable to assign or initialize member fText from UTEXT_INITIALIZER. // fText = UTEXT_INITIALIZER; @@ -700,50 +737,53 @@ enum RBBIRunMode { }; -// Map from look-ahead break states (corresponds to rules) to boundary positions. -// Allows multiple lookahead break rules to be in flight at the same time. +// Wrapper functions to select the appropriate handleNext() or handleSafePrevious() +// instantiation, based on whether an 8 or 16 bit table is required. // -// This is a temporary approach for ICU 57. A better fix is to make the look-ahead numbers -// in the state table be sequential, then we can just index an array. And the -// table could also tell us in advance how big that array needs to be. -// -// Before ICU 57 there was just a single simple variable for a look-ahead match that -// was in progress. Two rules at once did not work. - -static const int32_t kMaxLookaheads = 8; -struct LookAheadResults { - int32_t fUsedSlotLimit; - int32_t fPositions[8]; - int16_t fKeys[8]; +// These Trie access functions will be inlined within the handleNext()/Previous() instantions. +static inline uint16_t TrieFunc8(const UCPTrie *trie, UChar32 c) { + return UCPTRIE_FAST_GET(trie, UCPTRIE_8, c); +} - LookAheadResults() : fUsedSlotLimit(0), fPositions(), fKeys() {} +static inline uint16_t TrieFunc16(const UCPTrie *trie, UChar32 c) { + return UCPTRIE_FAST_GET(trie, UCPTRIE_16, c); +} - int32_t getPosition(int16_t key) { - for (int32_t i=0; ifForwardTable; + bool use8BitsTrie = ucptrie_getValueWidth(fData->fTrie) == UCPTRIE_VALUE_BITS_8; + if (statetable->fFlags & RBBI_8BITS_ROWS) { + if (use8BitsTrie) { + return handleNext(); + } else { + return handleNext(); + } + } else { + if (use8BitsTrie) { + return handleNext(); + } else { + return handleNext(); } - UPRV_UNREACHABLE; } +} - void setPosition(int16_t key, int32_t position) { - int32_t i; - for (i=0; ifReverseTable; + bool use8BitsTrie = ucptrie_getValueWidth(fData->fTrie) == UCPTRIE_VALUE_BITS_8; + if (statetable->fFlags & RBBI_8BITS_ROWS) { + if (use8BitsTrie) { + return handleSafePrevious(fromPosition); + } else { + return handleSafePrevious(fromPosition); } - if (i >= kMaxLookaheads) { - UPRV_UNREACHABLE; + } else { + if (use8BitsTrie) { + return handleSafePrevious(fromPosition); + } else { + return handleSafePrevious(fromPosition); } - fKeys[i] = key; - fPositions[i] = position; - U_ASSERT(fUsedSlotLimit == i); - fUsedSlotLimit = i + 1; } -}; +} //----------------------------------------------------------------------------------- @@ -752,19 +792,20 @@ struct LookAheadResults { // Run the state machine to find a boundary // //----------------------------------------------------------------------------------- +template int32_t RuleBasedBreakIterator::handleNext() { int32_t state; uint16_t category = 0; RBBIRunMode mode; - RBBIStateTableRow *row; + RowType *row; UChar32 c; - LookAheadResults lookAheadMatches; int32_t result = 0; int32_t initialPosition = 0; const RBBIStateTable *statetable = fData->fForwardTable; const char *tableData = statetable->fTableData; uint32_t tableRowLen = statetable->fRowLen; + uint32_t dictStart = statetable->fDictCategoriesStart; #ifdef RBBI_DEBUG if (gTrace) { RBBIDebugPuts("Handle Next pos char state category"); @@ -789,7 +830,7 @@ int32_t RuleBasedBreakIterator::handleNext() { // Set the initial state for the state machine state = START_STATE; - row = (RBBIStateTableRow *) + row = (RowType *) //(statetable->fTableData + (statetable->fRowLen * state)); (tableData + tableRowLen * state); @@ -825,21 +866,8 @@ int32_t RuleBasedBreakIterator::handleNext() { if (mode == RBBI_RUN) { // look up the current character's character category, which tells us // which column in the state table to look at. - // Note: the 16 in UTRIE_GET16 refers to the size of the data being returned, - // not the size of the character going in, which is a UChar32. - // - category = UTRIE2_GET16(fData->fTrie, c); - - // Check the dictionary bit in the character's category. - // Counter is only used by dictionary based iteration. - // Chars that need to be handled by a dictionary have a flag bit set - // in their category values. - // - if ((category & 0x4000) != 0) { - fDictionaryCharCount++; - // And off the dictionary flag bit. - category &= ~0x4000; - } + category = trieFunc(fData->fTrie, c); + fDictionaryCharCount += (category >= dictStart); } #ifdef RBBI_DEBUG @@ -860,25 +888,24 @@ int32_t RuleBasedBreakIterator::handleNext() { // fNextState is a variable-length array. U_ASSERT(categoryfHeader->fCatCount); state = row->fNextState[category]; /*Not accessing beyond memory*/ - row = (RBBIStateTableRow *) + row = (RowType *) // (statetable->fTableData + (statetable->fRowLen * state)); (tableData + tableRowLen * state); - if (row->fAccepting == -1) { + uint16_t accepting = row->fAccepting; + if (accepting == ACCEPTING_UNCONDITIONAL) { // Match found, common case. if (mode != RBBI_START) { result = (int32_t)UTEXT_GETNATIVEINDEX(&fText); } - fRuleStatusIndex = row->fTagIdx; // Remember the break status (tag) values. - } - - int16_t completedRule = row->fAccepting; - if (completedRule > 0) { + fRuleStatusIndex = row->fTagsIdx; // Remember the break status (tag) values. + } else if (accepting > ACCEPTING_UNCONDITIONAL) { // Lookahead match is completed. - int32_t lookaheadResult = lookAheadMatches.getPosition(completedRule); + U_ASSERT(accepting < fData->fForwardTable->fLookAheadResultsSize); + int32_t lookaheadResult = fLookAheadMatches[accepting]; if (lookaheadResult >= 0) { - fRuleStatusIndex = row->fTagIdx; + fRuleStatusIndex = row->fTagsIdx; fPosition = lookaheadResult; return lookaheadResult; } @@ -890,10 +917,12 @@ int32_t RuleBasedBreakIterator::handleNext() { // This would enable hard-break rules with no following context. // But there are line break test failures when trying this. Investigate. // Issue ICU-20837 - int16_t rule = row->fLookAhead; - if (rule != 0) { + uint16_t rule = row->fLookAhead; + U_ASSERT(rule == 0 || rule > ACCEPTING_UNCONDITIONAL); + U_ASSERT(rule == 0 || rule < fData->fForwardTable->fLookAheadResultsSize); + if (rule > ACCEPTING_UNCONDITIONAL) { int32_t pos = (int32_t)UTEXT_GETNATIVEINDEX(&fText); - lookAheadMatches.setPosition(rule, pos); + fLookAheadMatches[rule] = pos; } if (state == STOP_STATE) { @@ -948,10 +977,12 @@ int32_t RuleBasedBreakIterator::handleNext() { // because the safe table does not require as many options. // //----------------------------------------------------------------------------------- +template int32_t RuleBasedBreakIterator::handleSafePrevious(int32_t fromPosition) { + int32_t state; uint16_t category = 0; - RBBIStateTableRow *row; + RowType *row; UChar32 c; int32_t result = 0; @@ -971,7 +1002,7 @@ int32_t RuleBasedBreakIterator::handleSafePrevious(int32_t fromPosition) { // Set the initial state for the state machine c = UTEXT_PREVIOUS32(&fText); state = START_STATE; - row = (RBBIStateTableRow *) + row = (RowType *) (stateTable->fTableData + (stateTable->fRowLen * state)); // loop until we reach the start of the text or transition to state 0 @@ -980,12 +1011,9 @@ int32_t RuleBasedBreakIterator::handleSafePrevious(int32_t fromPosition) { // look up the current character's character category, which tells us // which column in the state table to look at. - // Note: the 16 in UTRIE_GET16 refers to the size of the data being returned, - // not the size of the character going in, which is a UChar32. // - // And off the dictionary flag bit. For reverse iteration it is not used. - category = UTRIE2_GET16(fData->fTrie, c); - category &= ~0x4000; + // Off the dictionary flag bit. For reverse iteration it is not used. + category = trieFunc(fData->fTrie, c); #ifdef RBBI_DEBUG if (gTrace) { @@ -1004,7 +1032,7 @@ int32_t RuleBasedBreakIterator::handleSafePrevious(int32_t fromPosition) { // fNextState is a variable-length array. U_ASSERT(categoryfHeader->fCatCount); state = row->fNextState[category]; /*Not accessing beyond memory*/ - row = (RBBIStateTableRow *) + row = (RowType *) (stateTable->fTableData + (stateTable->fRowLen * state)); if (state == STOP_STATE) { @@ -1024,6 +1052,7 @@ int32_t RuleBasedBreakIterator::handleSafePrevious(int32_t fromPosition) { return result; } + //------------------------------------------------------------------------------- // // getRuleStatus() Return the break rule tag associated with the current diff --git a/deps/icu-small/source/common/rbbi_cache.cpp b/deps/icu-small/source/common/rbbi_cache.cpp index 4f9e83360a2a32..63ff3001c7034e 100644 --- a/deps/icu-small/source/common/rbbi_cache.cpp +++ b/deps/icu-small/source/common/rbbi_cache.cpp @@ -142,13 +142,15 @@ void RuleBasedBreakIterator::DictionaryCache::populateDictionary(int32_t startPo utext_setNativeIndex(text, rangeStart); UChar32 c = utext_current32(text); - category = UTRIE2_GET16(fBI->fData->fTrie, c); + category = ucptrie_get(fBI->fData->fTrie, c); + uint32_t dictStart = fBI->fData->fForwardTable->fDictCategoriesStart; while(U_SUCCESS(status)) { - while((current = (int32_t)UTEXT_GETNATIVEINDEX(text)) < rangeEnd && (category & 0x4000) == 0) { + while((current = (int32_t)UTEXT_GETNATIVEINDEX(text)) < rangeEnd + && (category < dictStart)) { utext_next32(text); // TODO: cleaner loop structure. c = utext_current32(text); - category = UTRIE2_GET16(fBI->fData->fTrie, c); + category = ucptrie_get(fBI->fData->fTrie, c); } if (current >= rangeEnd) { break; @@ -166,7 +168,7 @@ void RuleBasedBreakIterator::DictionaryCache::populateDictionary(int32_t startPo // Reload the loop variables for the next go-round c = utext_current32(text); - category = UTRIE2_GET16(fBI->fData->fTrie, c); + category = ucptrie_get(fBI->fData->fTrie, c); } // If we found breaks, ensure that the first and last entries are diff --git a/deps/icu-small/source/common/rbbi_cache.h b/deps/icu-small/source/common/rbbi_cache.h index 864ff811aaaff3..8c1fa86e7d1aa1 100644 --- a/deps/icu-small/source/common/rbbi_cache.h +++ b/deps/icu-small/source/common/rbbi_cache.h @@ -126,13 +126,13 @@ class RuleBasedBreakIterator::BreakCache: public UMemory { * Additional boundaries, either preceding or following, may be added * to the cache as a side effect. * - * Return FALSE if the operation failed. + * Return false if the operation failed. */ UBool populateNear(int32_t position, UErrorCode &status); /** * Add boundary(s) to the cache following the current last boundary. - * Return FALSE if at the end of the text, and no more boundaries can be added. + * Return false if at the end of the text, and no more boundaries can be added. * Leave iteration position at the first newly added boundary, or unchanged if no boundary was added. */ UBool populateFollowing(); @@ -170,7 +170,7 @@ class RuleBasedBreakIterator::BreakCache: public UMemory { * Fails if the requested position is outside of the range of boundaries currently held by the cache. * The startPosition must be on a code point boundary. * - * Return TRUE if successful, FALSE if the specified position is after + * Return true if successful, false if the specified position is after * the last cached boundary or before the first. */ UBool seek(int32_t startPosition); diff --git a/deps/icu-small/source/common/rbbicst.pl b/deps/icu-small/source/common/rbbicst.pl index 839b9501dda953..29f575d7d09357 100755 --- a/deps/icu-small/source/common/rbbicst.pl +++ b/deps/icu-small/source/common/rbbicst.pl @@ -1,6 +1,6 @@ #************************************************************************** # Copyright (C) 2016 and later: Unicode, Inc. and others. -# License & terms of use: http://www.unicode.org/copyright.html#License +# License & terms of use: http://www.unicode.org/copyright.html #************************************************************************** #************************************************************************** # Copyright (C) 2002-2016 International Business Machines Corporation diff --git a/deps/icu-small/source/common/rbbidata.cpp b/deps/icu-small/source/common/rbbidata.cpp index fdcb564961362e..f78d9d06689178 100644 --- a/deps/icu-small/source/common/rbbidata.cpp +++ b/deps/icu-small/source/common/rbbidata.cpp @@ -11,10 +11,10 @@ #if !UCONFIG_NO_BREAK_ITERATION +#include "unicode/ucptrie.h" #include "unicode/utypes.h" #include "rbbidata.h" #include "rbbirb.h" -#include "utrie2.h" #include "udatamem.h" #include "cmemory.h" #include "cstring.h" @@ -110,17 +110,24 @@ void RBBIDataWrapper::init(const RBBIDataHeader *data, UErrorCode &status) { fReverseTable = (RBBIStateTable *)((char *)data + fHeader->fRTable); } - fTrie = utrie2_openFromSerialized(UTRIE2_16_VALUE_BITS, - (uint8_t *)data + fHeader->fTrie, - fHeader->fTrieLen, - NULL, // *actual length - &status); + fTrie = ucptrie_openFromBinary(UCPTRIE_TYPE_FAST, + UCPTRIE_VALUE_BITS_ANY, + (uint8_t *)data + fHeader->fTrie, + fHeader->fTrieLen, + nullptr, // *actual length + &status); if (U_FAILURE(status)) { return; } - fRuleSource = (UChar *)((char *)data + fHeader->fRuleSource); - fRuleString.setTo(TRUE, fRuleSource, -1); + UCPTrieValueWidth width = ucptrie_getValueWidth(fTrie); + if (!(width == UCPTRIE_VALUE_BITS_8 || width == UCPTRIE_VALUE_BITS_16)) { + status = U_INVALID_FORMAT_ERROR; + return; + } + + fRuleSource = ((char *)data + fHeader->fRuleSource); + fRuleString = UnicodeString::fromUTF8(StringPiece(fRuleSource, fHeader->fRuleSourceLen)); U_ASSERT(data->fRuleSourceLen > 0); fRuleStatusTable = (int32_t *)((char *)data + fHeader->fStatusTable); @@ -142,8 +149,8 @@ void RBBIDataWrapper::init(const RBBIDataHeader *data, UErrorCode &status) { //----------------------------------------------------------------------------- RBBIDataWrapper::~RBBIDataWrapper() { U_ASSERT(fRefCount == 0); - utrie2_close(fTrie); - fTrie = NULL; + ucptrie_close(fTrie); + fTrie = nullptr; if (fUDataMem) { udata_close(fUDataMem); } else if (!fDontFreeData) { @@ -223,9 +230,16 @@ void RBBIDataWrapper::printTable(const char *heading, const RBBIStateTable *tab uint32_t c; uint32_t s; - RBBIDebugPrintf(" %s\n", heading); + RBBIDebugPrintf("%s\n", heading); - RBBIDebugPrintf("State | Acc LA TagIx"); + RBBIDebugPrintf(" fDictCategoriesStart: %d\n", table->fDictCategoriesStart); + RBBIDebugPrintf(" fLookAheadResultsSize: %d\n", table->fLookAheadResultsSize); + RBBIDebugPrintf(" Flags: %4x RBBI_LOOKAHEAD_HARD_BREAK=%s RBBI_BOF_REQUIRED=%s RBBI_8BITS_ROWS=%s\n", + table->fFlags, + table->fFlags & RBBI_LOOKAHEAD_HARD_BREAK ? "T" : "F", + table->fFlags & RBBI_BOF_REQUIRED ? "T" : "F", + table->fFlags & RBBI_8BITS_ROWS ? "T" : "F"); + RBBIDebugPrintf("\nState | Acc LA TagIx"); for (c=0; cfCatCount; c++) {RBBIDebugPrintf("%3d ", c);} RBBIDebugPrintf("\n------|---------------"); for (c=0;cfCatCount; c++) { RBBIDebugPrintf("----"); @@ -236,12 +250,20 @@ void RBBIDataWrapper::printTable(const char *heading, const RBBIStateTable *tab RBBIDebugPrintf(" N U L L T A B L E\n\n"); return; } + UBool use8Bits = table->fFlags & RBBI_8BITS_ROWS; for (s=0; sfNumStates; s++) { RBBIStateTableRow *row = (RBBIStateTableRow *) (table->fTableData + (table->fRowLen * s)); - RBBIDebugPrintf("%4d | %3d %3d %3d ", s, row->fAccepting, row->fLookAhead, row->fTagIdx); - for (c=0; cfCatCount; c++) { - RBBIDebugPrintf("%3d ", row->fNextState[c]); + if (use8Bits) { + RBBIDebugPrintf("%4d | %3d %3d %3d ", s, row->r8.fAccepting, row->r8.fLookAhead, row->r8.fTagsIdx); + for (c=0; cfCatCount; c++) { + RBBIDebugPrintf("%3d ", row->r8.fNextState[c]); + } + } else { + RBBIDebugPrintf("%4d | %3d %3d %3d ", s, row->r16.fAccepting, row->r16.fLookAhead, row->r16.fTagsIdx); + for (c=0; cfCatCount; c++) { + RBBIDebugPrintf("%3d ", row->r16.fNextState[c]); + } } RBBIDebugPrintf("\n"); } @@ -382,10 +404,23 @@ ubrk_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outD tableLength = ds->readUInt32(rbbiDH->fFTableLen); if (tableLength > 0) { + RBBIStateTable *rbbiST = (RBBIStateTable *)(inBytes+tableStartOffset); + UBool use8Bits = ds->readUInt32(rbbiST->fFlags) & RBBI_8BITS_ROWS; + ds->swapArray32(ds, inBytes+tableStartOffset, topSize, outBytes+tableStartOffset, status); - ds->swapArray16(ds, inBytes+tableStartOffset+topSize, tableLength-topSize, - outBytes+tableStartOffset+topSize, status); + + // Swap the state table if the table is in 16 bits. + if (use8Bits) { + if (outBytes != inBytes) { + uprv_memmove(outBytes+tableStartOffset+topSize, + inBytes+tableStartOffset+topSize, + tableLength-topSize); + } + } else { + ds->swapArray16(ds, inBytes+tableStartOffset+topSize, tableLength-topSize, + outBytes+tableStartOffset+topSize, status); + } } // Reverse state table. Same layout as forward table, above. @@ -393,19 +428,35 @@ ubrk_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outD tableLength = ds->readUInt32(rbbiDH->fRTableLen); if (tableLength > 0) { + RBBIStateTable *rbbiST = (RBBIStateTable *)(inBytes+tableStartOffset); + UBool use8Bits = ds->readUInt32(rbbiST->fFlags) & RBBI_8BITS_ROWS; + ds->swapArray32(ds, inBytes+tableStartOffset, topSize, outBytes+tableStartOffset, status); - ds->swapArray16(ds, inBytes+tableStartOffset+topSize, tableLength-topSize, - outBytes+tableStartOffset+topSize, status); + + // Swap the state table if the table is in 16 bits. + if (use8Bits) { + if (outBytes != inBytes) { + uprv_memmove(outBytes+tableStartOffset+topSize, + inBytes+tableStartOffset+topSize, + tableLength-topSize); + } + } else { + ds->swapArray16(ds, inBytes+tableStartOffset+topSize, tableLength-topSize, + outBytes+tableStartOffset+topSize, status); + } } // Trie table for character categories - utrie2_swap(ds, inBytes+ds->readUInt32(rbbiDH->fTrie), ds->readUInt32(rbbiDH->fTrieLen), - outBytes+ds->readUInt32(rbbiDH->fTrie), status); - - // Source Rules Text. It's UChar data - ds->swapArray16(ds, inBytes+ds->readUInt32(rbbiDH->fRuleSource), ds->readUInt32(rbbiDH->fRuleSourceLen), - outBytes+ds->readUInt32(rbbiDH->fRuleSource), status); + ucptrie_swap(ds, inBytes+ds->readUInt32(rbbiDH->fTrie), ds->readUInt32(rbbiDH->fTrieLen), + outBytes+ds->readUInt32(rbbiDH->fTrie), status); + + // Source Rules Text. It's UTF8 data + if (outBytes != inBytes) { + uprv_memmove(outBytes+ds->readUInt32(rbbiDH->fRuleSource), + inBytes+ds->readUInt32(rbbiDH->fRuleSource), + ds->readUInt32(rbbiDH->fRuleSourceLen)); + } // Table of rule status values. It's all int_32 values ds->swapArray32(ds, inBytes+ds->readUInt32(rbbiDH->fStatusTable), ds->readUInt32(rbbiDH->fStatusTableLen), diff --git a/deps/icu-small/source/common/rbbidata.h b/deps/icu-small/source/common/rbbidata.h index 96e4649533f068..5d725deba4c262 100644 --- a/deps/icu-small/source/common/rbbidata.h +++ b/deps/icu-small/source/common/rbbidata.h @@ -49,16 +49,17 @@ ubrk_swap(const UDataSwapper *ds, #ifdef __cplusplus +#include "unicode/ucptrie.h" #include "unicode/uobject.h" #include "unicode/unistr.h" #include "unicode/uversion.h" #include "umutex.h" -#include "utrie2.h" + U_NAMESPACE_BEGIN // The current RBBI data format version. -static const uint8_t RBBI_DATA_FORMAT_VERSION[] = {5, 0, 0, 0}; +static const uint8_t RBBI_DATA_FORMAT_VERSION[] = {6, 0, 0, 0}; /* * The following structs map exactly onto the raw data from ICU common data file. @@ -94,49 +95,61 @@ struct RBBIDataHeader { -struct RBBIStateTableRow { - int16_t fAccepting; /* Non-zero if this row is for an accepting state. */ - /* Value 0: not an accepting state. */ - /* -1: Unconditional Accepting state. */ - /* positive: Look-ahead match has completed. */ - /* Actual boundary position happened earlier */ - /* Value here == fLookAhead in earlier */ - /* state, at actual boundary pos. */ - int16_t fLookAhead; /* Non-zero if this row is for a state that */ - /* corresponds to a '/' in the rule source. */ - /* Value is the same as the fAccepting */ - /* value for the rule (which will appear */ - /* in a different state. */ - int16_t fTagIdx; /* Non-zero if this row covers a {tagged} position */ - /* from a rule. Value is the index in the */ - /* StatusTable of the set of matching */ - /* tags (rule status values) */ - int16_t fReserved; - uint16_t fNextState[1]; /* Next State, indexed by char category. */ - /* Variable-length array declared with length 1 */ - /* to disable bounds checkers. */ - /* Array Size is actually fData->fHeader->fCatCount*/ - /* CAUTION: see RBBITableBuilder::getTableSize() */ - /* before changing anything here. */ +template +struct RBBIStateTableRowT { + T fAccepting; // Non-zero if this row is for an accepting state. + // Value 0: not an accepting state. + // 1: (ACCEPTING_UNCONDITIONAL) Unconditional Accepting state. + // >1: Look-ahead match has completed. + // Actual boundary position happened earlier. + // Value here == fLookAhead in earlier + // state, at actual boundary pos. + T fLookAhead; // Non-zero if this row is for a state that + // corresponds to a '/' in the rule source. + // Value is the same as the fAccepting + // value for the rule (which will appear + // in a different state. + T fTagsIdx; // Non-zero if this row covers a {tagged} position + // from a rule. Value is the index in the + // StatusTable of the set of matching + // tags (rule status values) + T fNextState[1]; // Next State, indexed by char category. + // Variable-length array declared with length 1 + // to disable bounds checkers. + // Array Size is actually fData->fHeader->fCatCount + // CAUTION: see RBBITableBuilder::getTableSize() + // before changing anything here. }; +typedef RBBIStateTableRowT RBBIStateTableRow8; +typedef RBBIStateTableRowT RBBIStateTableRow16; + +constexpr uint16_t ACCEPTING_UNCONDITIONAL = 1; // Value constant for RBBIStateTableRow::fAccepting + +union RBBIStateTableRow { + RBBIStateTableRow16 r16; + RBBIStateTableRow8 r8; +}; struct RBBIStateTable { - uint32_t fNumStates; /* Number of states. */ - uint32_t fRowLen; /* Length of a state table row, in bytes. */ - uint32_t fFlags; /* Option Flags for this state table */ - uint32_t fReserved; /* reserved */ - char fTableData[1]; /* First RBBIStateTableRow begins here. */ - /* Variable-length array declared with length 1 */ - /* to disable bounds checkers. */ - /* (making it char[] simplifies ugly address */ - /* arithmetic for indexing variable length rows.) */ + uint32_t fNumStates; // Number of states. + uint32_t fRowLen; // Length of a state table row, in bytes. + uint32_t fDictCategoriesStart; // Char category number of the first dictionary + // char class, or the the largest category number + 1 + // if there are no dictionary categories. + uint32_t fLookAheadResultsSize; // Size of run-time array required for holding + // look-ahead results. Indexed by row.fLookAhead. + uint32_t fFlags; // Option Flags for this state table. + char fTableData[1]; // First RBBIStateTableRow begins here. + // Variable-length array declared with length 1 + // to disable bounds checkers. + // (making it char[] simplifies ugly address + // arithmetic for indexing variable length rows.) }; -typedef enum { - RBBI_LOOKAHEAD_HARD_BREAK = 1, - RBBI_BOF_REQUIRED = 2 -} RBBIStateTableFlags; +constexpr uint32_t RBBI_LOOKAHEAD_HARD_BREAK = 1; +constexpr uint32_t RBBI_BOF_REQUIRED = 2; +constexpr uint32_t RBBI_8BITS_ROWS = 4; /* */ @@ -170,13 +183,13 @@ class RBBIDataWrapper : public UMemory { const RBBIDataHeader *fHeader; const RBBIStateTable *fForwardTable; const RBBIStateTable *fReverseTable; - const UChar *fRuleSource; + const char *fRuleSource; const int32_t *fRuleStatusTable; /* number of int32_t values in the rule status table. Used to sanity check indexing */ int32_t fStatusMaxIdx; - UTrie2 *fTrie; + UCPTrie *fTrie; private: u_atomic_int32_t fRefCount; @@ -184,8 +197,8 @@ class RBBIDataWrapper : public UMemory { UnicodeString fRuleString; UBool fDontFreeData; - RBBIDataWrapper(const RBBIDataWrapper &other); /* forbid copying of this class */ - RBBIDataWrapper &operator=(const RBBIDataWrapper &other); /* forbid copying of this class */ + RBBIDataWrapper(const RBBIDataWrapper &other) = delete; /* forbid copying of this class */ + RBBIDataWrapper &operator=(const RBBIDataWrapper &other) = delete; /* forbid copying of this class */ }; diff --git a/deps/icu-small/source/common/rbbinode.h b/deps/icu-small/source/common/rbbinode.h index e33662167fe3fd..ef4e4ccac7f08e 100644 --- a/deps/icu-small/source/common/rbbinode.h +++ b/deps/icu-small/source/common/rbbinode.h @@ -79,7 +79,7 @@ class RBBINode : public UMemory { // corresponds to columns in the final // state transition table. - UBool fLookAheadEnd; // For endMark nodes, set TRUE if + UBool fLookAheadEnd; // For endMark nodes, set true if // marking the end of a look-ahead rule. UBool fRuleRoot; // True if this node is the root of a rule. diff --git a/deps/icu-small/source/common/rbbirb.cpp b/deps/icu-small/source/common/rbbirb.cpp index 4df96532643d06..09c8d3de7e6687 100644 --- a/deps/icu-small/source/common/rbbirb.cpp +++ b/deps/icu-small/source/common/rbbirb.cpp @@ -22,6 +22,7 @@ #include "unicode/uniset.h" #include "unicode/uchar.h" #include "unicode/uchriter.h" +#include "unicode/ustring.h" #include "unicode/parsepos.h" #include "unicode/parseerr.h" @@ -154,7 +155,14 @@ RBBIDataHeader *RBBIRuleBuilder::flattenData() { int32_t reverseTableSize = align8(fForwardTable->getSafeTableSize()); int32_t trieSize = align8(fSetBuilder->getTrieSize()); int32_t statusTableSize = align8(fRuleStatusVals->size() * sizeof(int32_t)); - int32_t rulesSize = align8((fStrippedRules.length()+1) * sizeof(UChar)); + + int32_t rulesLengthInUTF8 = 0; + u_strToUTF8WithSub(0, 0, &rulesLengthInUTF8, + fStrippedRules.getBuffer(), fStrippedRules.length(), + 0xfffd, nullptr, fStatus); + *fStatus = U_ZERO_ERROR; + + int32_t rulesSize = align8((rulesLengthInUTF8+1)); int32_t totalSize = headerSize + forwardTableSize @@ -197,11 +205,11 @@ RBBIDataHeader *RBBIRuleBuilder::flattenData() { data->fRTableLen = reverseTableSize; data->fTrie = data->fRTable + data->fRTableLen; - data->fTrieLen = fSetBuilder->getTrieSize(); - data->fStatusTable = data->fTrie + trieSize; + data->fTrieLen = trieSize; + data->fStatusTable = data->fTrie + data->fTrieLen; data->fStatusTableLen= statusTableSize; data->fRuleSource = data->fStatusTable + statusTableSize; - data->fRuleSourceLen = fStrippedRules.length() * sizeof(UChar); + data->fRuleSourceLen = rulesLengthInUTF8; uprv_memset(data->fReserved, 0, sizeof(data->fReserved)); @@ -214,7 +222,12 @@ RBBIDataHeader *RBBIRuleBuilder::flattenData() { ruleStatusTable[i] = fRuleStatusVals->elementAti(i); } - fStrippedRules.extract((UChar *)((uint8_t *)data+data->fRuleSource), rulesSize/2+1, *fStatus); + u_strToUTF8WithSub((char *)data+data->fRuleSource, rulesSize, &rulesLengthInUTF8, + fStrippedRules.getBuffer(), fStrippedRules.length(), + 0xfffd, nullptr, fStatus); + if (U_FAILURE(*fStatus)) { + return NULL; + } return data; } @@ -274,9 +287,7 @@ RBBIDataHeader *RBBIRuleBuilder::build(UErrorCode &status) { // // UnicodeSet processing. - // Munge the Unicode Sets to create a set of character categories. - // Generate the mapping tables (TRIE) from input code points to - // the character categories. + // Munge the Unicode Sets to create an initial set of character categories. // fSetBuilder->buildRanges(); @@ -290,6 +301,12 @@ RBBIDataHeader *RBBIRuleBuilder::build(UErrorCode &status) { } fForwardTable->buildForwardTable(); + + // State table and character category optimization. + // Merge equivalent rows and columns. + // Note that this process alters the initial set of character categories, + // causing the representation of UnicodeSets in the parse tree to become invalid. + optimizeTables(); fForwardTable->buildSafeReverseTable(status); @@ -302,6 +319,9 @@ RBBIDataHeader *RBBIRuleBuilder::build(UErrorCode &status) { } #endif + // Generate the mapping tables (TRIE) from input code points to + // the character categories. + // fSetBuilder->buildTrie(); // diff --git a/deps/icu-small/source/common/rbbiscan.cpp b/deps/icu-small/source/common/rbbiscan.cpp index da8246ba6f1e47..947a07304fd8b1 100644 --- a/deps/icu-small/source/common/rbbiscan.cpp +++ b/deps/icu-small/source/common/rbbiscan.cpp @@ -829,16 +829,14 @@ static const UChar chRParen = 0x29; UnicodeString RBBIRuleScanner::stripRules(const UnicodeString &rules) { UnicodeString strippedRules; int32_t rulesLength = rules.length(); - bool skippingSpaces = false; for (int32_t idx=0; idxfStatus; - fRangeList = 0; - fTrie = 0; + fRangeList = nullptr; + fMutableTrie = nullptr; + fTrie = nullptr; fTrieSize = 0; fGroupCount = 0; - fSawBOF = FALSE; + fSawBOF = false; } @@ -79,7 +80,8 @@ RBBISetBuilder::~RBBISetBuilder() delete r; } - utrie2_close(fTrie); + ucptrie_close(fTrie); + umutablecptrie_close(fMutableTrie); } @@ -194,24 +196,47 @@ void RBBISetBuilder::buildRanges() { // // Numbering: # 0 (state table column 0) is unused. // # 1 is reserved - table column 1 is for end-of-input - // # 2 is reserved - table column 2 is for beginning-in-input + // # 2 is reserved - table column 2 is for beginning-of-input // # 3 is the first range list. // RangeDescriptor *rlSearchRange; - for (rlRange = fRangeList; rlRange!=0; rlRange=rlRange->fNext) { + int32_t dictGroupCount = 0; + + for (rlRange = fRangeList; rlRange!=nullptr; rlRange=rlRange->fNext) { for (rlSearchRange=fRangeList; rlSearchRange != rlRange; rlSearchRange=rlSearchRange->fNext) { if (rlRange->fIncludesSets->equals(*rlSearchRange->fIncludesSets)) { rlRange->fNum = rlSearchRange->fNum; + rlRange->fIncludesDict = rlSearchRange->fIncludesDict; break; } } if (rlRange->fNum == 0) { - fGroupCount ++; - rlRange->fNum = fGroupCount+2; - rlRange->setDictionaryFlag(); - addValToSets(rlRange->fIncludesSets, fGroupCount+2); + rlRange->fFirstInGroup = true; + if (rlRange->isDictionaryRange()) { + rlRange->fNum = ++dictGroupCount; + rlRange->fIncludesDict = true; + } else { + fGroupCount++; + rlRange->fNum = fGroupCount+2; + addValToSets(rlRange->fIncludesSets, rlRange->fNum); + } + } + } + + // Move the character category numbers for any dictionary ranges up, so that they + // immediately follow the non-dictionary ranges. + + fDictCategoriesStart = fGroupCount + 3; + for (rlRange = fRangeList; rlRange!=nullptr; rlRange=rlRange->fNext) { + if (rlRange->fIncludesDict) { + rlRange->fNum += fDictCategoriesStart - 1; + if (rlRange->fFirstInGroup) { + addValToSets(rlRange->fIncludesSets, rlRange->fNum); + } } } + fGroupCount += dictGroupCount; + // Handle input sets that contain the special string {eof}. // Column 1 of the state table is reserved for EOF on input. @@ -220,13 +245,11 @@ void RBBISetBuilder::buildRanges() { // references to {bof}.) // Add this column value (1 or 2) to the equivalent expression // subtree for each UnicodeSet that contains the string {eof} - // Because {bof} and {eof} are not a characters in the normal sense, - // they doesn't affect the computation of ranges or TRIE. - static const UChar eofUString[] = {0x65, 0x6f, 0x66, 0}; - static const UChar bofUString[] = {0x62, 0x6f, 0x66, 0}; + // Because {bof} and {eof} are not characters in the normal sense, + // they don't affect the computation of the ranges or TRIE. - UnicodeString eofString(eofUString); - UnicodeString bofString(bofUString); + UnicodeString eofString(u"eof"); + UnicodeString bofString(u"bof"); for (ni=0; ; ni++) { // Loop over each of the UnicodeSets encountered in the input rules usetNode = (RBBINode *)this->fRB->fUSetNodes->elementAt(ni); if (usetNode==NULL) { @@ -253,19 +276,17 @@ void RBBISetBuilder::buildRanges() { // range group number. // void RBBISetBuilder::buildTrie() { - RangeDescriptor *rlRange; - - fTrie = utrie2_open(0, // Initial value for all code points. + fMutableTrie = umutablecptrie_open( + 0, // Initial value for all code points. 0, // Error value for out-of-range input. fStatus); - for (rlRange = fRangeList; rlRange!=0 && U_SUCCESS(*fStatus); rlRange=rlRange->fNext) { - utrie2_setRange32(fTrie, - rlRange->fStartChar, // Range start - rlRange->fEndChar, // Range end (inclusive) - rlRange->fNum, // value for range - TRUE, // Overwrite previously written values - fStatus); + for (RangeDescriptor *range = fRangeList; range!=nullptr && U_SUCCESS(*fStatus); range=range->fNext) { + umutablecptrie_setRange(fMutableTrie, + range->fStartChar, // Range start + range->fEndChar, // Range end (inclusive) + range->fNum, // value for range + fStatus); } } @@ -273,16 +294,21 @@ void RBBISetBuilder::buildTrie() { void RBBISetBuilder::mergeCategories(IntPair categories) { U_ASSERT(categories.first >= 1); U_ASSERT(categories.second > categories.first); + U_ASSERT((categories.first < fDictCategoriesStart && categories.second < fDictCategoriesStart) || + (categories.first >= fDictCategoriesStart && categories.second >= fDictCategoriesStart)); + for (RangeDescriptor *rd = fRangeList; rd != nullptr; rd = rd->fNext) { - int32_t rangeNum = rd->fNum & ~DICT_BIT; - int32_t rangeDict = rd->fNum & DICT_BIT; + int32_t rangeNum = rd->fNum; if (rangeNum == categories.second) { - rd->fNum = categories.first | rangeDict; + rd->fNum = categories.first; } else if (rangeNum > categories.second) { rd->fNum--; } } --fGroupCount; + if (categories.second <= fDictCategoriesStart) { + --fDictCategoriesStart; + } } @@ -295,15 +321,18 @@ int32_t RBBISetBuilder::getTrieSize() { if (U_FAILURE(*fStatus)) { return 0; } - utrie2_freeze(fTrie, UTRIE2_16_VALUE_BITS, fStatus); - fTrieSize = utrie2_serialize(fTrie, - NULL, // Buffer - 0, // Capacity - fStatus); - if (*fStatus == U_BUFFER_OVERFLOW_ERROR) { - *fStatus = U_ZERO_ERROR; + if (fTrie == nullptr) { + bool use8Bits = getNumCharCategories() <= kMaxCharCategoriesFor8BitsTrie; + fTrie = umutablecptrie_buildImmutable( + fMutableTrie, + UCPTRIE_TYPE_FAST, + use8Bits ? UCPTRIE_VALUE_BITS_8 : UCPTRIE_VALUE_BITS_16, + fStatus); + fTrieSize = ucptrie_toBinary(fTrie, nullptr, 0, fStatus); + if (*fStatus == U_BUFFER_OVERFLOW_ERROR) { + *fStatus = U_ZERO_ERROR; + } } - // RBBIDebugPrintf("Trie table size is %d\n", trieSize); return fTrieSize; } @@ -316,9 +345,9 @@ int32_t RBBISetBuilder::getTrieSize() { // //----------------------------------------------------------------------------------- void RBBISetBuilder::serializeTrie(uint8_t *where) { - utrie2_serialize(fTrie, - where, // Buffer - fTrieSize, // Capacity + ucptrie_toBinary(fTrie, + where, // Buffer + fTrieSize, // Capacity fStatus); } @@ -384,6 +413,16 @@ int32_t RBBISetBuilder::getNumCharCategories() const { } +//------------------------------------------------------------------------ +// +// getDictCategoriesStart +// +//------------------------------------------------------------------------ +int32_t RBBISetBuilder::getDictCategoriesStart() const { + return fDictCategoriesStart; +} + + //------------------------------------------------------------------------ // // sawBOF @@ -403,7 +442,7 @@ UBool RBBISetBuilder::sawBOF() const { UChar32 RBBISetBuilder::getFirstChar(int32_t category) const { RangeDescriptor *rlRange; UChar32 retVal = (UChar32)-1; - for (rlRange = fRangeList; rlRange!=0; rlRange=rlRange->fNext) { + for (rlRange = fRangeList; rlRange!=nullptr; rlRange=rlRange->fNext) { if (rlRange->fNum == category) { retVal = rlRange->fStartChar; break; @@ -413,7 +452,6 @@ UChar32 RBBISetBuilder::getFirstChar(int32_t category) const { } - //------------------------------------------------------------------------ // // printRanges A debugging function. @@ -426,16 +464,16 @@ void RBBISetBuilder::printRanges() { int i; RBBIDebugPrintf("\n\n Nonoverlapping Ranges ...\n"); - for (rlRange = fRangeList; rlRange!=0; rlRange=rlRange->fNext) { - RBBIDebugPrintf("%2i %4x-%4x ", rlRange->fNum, rlRange->fStartChar, rlRange->fEndChar); + for (rlRange = fRangeList; rlRange!=nullptr; rlRange=rlRange->fNext) { + RBBIDebugPrintf("%4x-%4x ", rlRange->fStartChar, rlRange->fEndChar); for (i=0; ifIncludesSets->size(); i++) { RBBINode *usetNode = (RBBINode *)rlRange->fIncludesSets->elementAt(i); - UnicodeString setName = UNICODE_STRING("anon", 4); + UnicodeString setName {u"anon"}; RBBINode *setRef = usetNode->fParent; - if (setRef != NULL) { + if (setRef != nullptr) { RBBINode *varRef = setRef->fParent; - if (varRef != NULL && varRef->fType == RBBINode::varRef) { + if (varRef != nullptr && varRef->fType == RBBINode::varRef) { setName = varRef->fText; } } @@ -455,19 +493,15 @@ void RBBISetBuilder::printRanges() { //------------------------------------------------------------------------ #ifdef RBBI_DEBUG void RBBISetBuilder::printRangeGroups() { - RangeDescriptor *rlRange; - RangeDescriptor *tRange; int i; - int lastPrintedGroupNum = 0; RBBIDebugPrintf("\nRanges grouped by Unicode Set Membership...\n"); - for (rlRange = fRangeList; rlRange!=0; rlRange=rlRange->fNext) { - int groupNum = rlRange->fNum & 0xbfff; - if (groupNum > lastPrintedGroupNum) { - lastPrintedGroupNum = groupNum; + for (RangeDescriptor *rlRange = fRangeList; rlRange!=nullptr; rlRange=rlRange->fNext) { + if (rlRange->fFirstInGroup) { + int groupNum = rlRange->fNum; RBBIDebugPrintf("%2i ", groupNum); - if (rlRange->fNum & DICT_BIT) { RBBIDebugPrintf(" ");} + if (groupNum >= fDictCategoriesStart) { RBBIDebugPrintf(" ");} for (i=0; ifIncludesSets->size(); i++) { RBBINode *usetNode = (RBBINode *)rlRange->fIncludesSets->elementAt(i); @@ -483,7 +517,7 @@ void RBBISetBuilder::printRangeGroups() { } i = 0; - for (tRange = rlRange; tRange != 0; tRange = tRange->fNext) { + for (RangeDescriptor *tRange = rlRange; tRange != nullptr; tRange = tRange->fNext) { if (tRange->fNum == rlRange->fNum) { if (i++ % 5 == 0) { RBBIDebugPrintf("\n "); @@ -550,28 +584,22 @@ void RBBISetBuilder::printSets() { // //------------------------------------------------------------------------------------- -RangeDescriptor::RangeDescriptor(const RangeDescriptor &other, UErrorCode &status) { - int i; - - this->fStartChar = other.fStartChar; - this->fEndChar = other.fEndChar; - this->fNum = other.fNum; - this->fNext = NULL; - UErrorCode oldstatus = status; - this->fIncludesSets = new UVector(status); - if (U_FAILURE(oldstatus)) { - status = oldstatus; - } +RangeDescriptor::RangeDescriptor(const RangeDescriptor &other, UErrorCode &status) : + fStartChar(other.fStartChar), fEndChar {other.fEndChar}, fNum {other.fNum}, + fIncludesDict{other.fIncludesDict}, fFirstInGroup{other.fFirstInGroup} { + if (U_FAILURE(status)) { return; } - /* test for NULL */ - if (this->fIncludesSets == 0) { + fIncludesSets = new UVector(status); + if (this->fIncludesSets == nullptr) { status = U_MEMORY_ALLOCATION_ERROR; + } + if (U_FAILURE(status)) { return; } - for (i=0; isize(); i++) { + for (int32_t i=0; isize(); i++) { this->fIncludesSets->addElement(other.fIncludesSets->elementAt(i), status); } } @@ -583,24 +611,13 @@ RangeDescriptor::RangeDescriptor(const RangeDescriptor &other, UErrorCode &statu // //------------------------------------------------------------------------------------- RangeDescriptor::RangeDescriptor(UErrorCode &status) { - this->fStartChar = 0; - this->fEndChar = 0; - this->fNum = 0; - this->fNext = NULL; - UErrorCode oldstatus = status; - this->fIncludesSets = new UVector(status); - if (U_FAILURE(oldstatus)) { - status = oldstatus; - } if (U_FAILURE(status)) { return; } - /* test for NULL */ - if(this->fIncludesSets == 0) { + fIncludesSets = new UVector(status); + if (fIncludesSets == nullptr) { status = U_MEMORY_ALLOCATION_ERROR; - return; } - } @@ -611,7 +628,7 @@ RangeDescriptor::RangeDescriptor(UErrorCode &status) { //------------------------------------------------------------------------------------- RangeDescriptor::~RangeDescriptor() { delete fIncludesSets; - fIncludesSets = NULL; + fIncludesSets = nullptr; } //------------------------------------------------------------------------------------- @@ -622,7 +639,7 @@ RangeDescriptor::~RangeDescriptor() { void RangeDescriptor::split(UChar32 where, UErrorCode &status) { U_ASSERT(where>fStartChar && where<=fEndChar); RangeDescriptor *nr = new RangeDescriptor(*this, status); - if(nr == 0) { + if(nr == nullptr) { status = U_MEMORY_ALLOCATION_ERROR; return; } @@ -641,27 +658,22 @@ void RangeDescriptor::split(UChar32 where, UErrorCode &status) { //------------------------------------------------------------------------------------- // -// RangeDescriptor::setDictionaryFlag +// RangeDescriptor::isDictionaryRange // -// Character Category Numbers that include characters from -// the original Unicode Set named "dictionary" have bit 14 -// set to 1. The RBBI runtime engine uses this to trigger -// use of the word dictionary. +// Test whether this range includes characters from +// the original Unicode Set named "dictionary". // -// This function looks through the Unicode Sets that it -// (the range) includes, and sets the bit in fNum when -// "dictionary" is among them. +// This function looks through the Unicode Sets that +// the range includes, checking for one named "dictionary" // // TODO: a faster way would be to find the set node for // "dictionary" just once, rather than looking it // up by name every time. // //------------------------------------------------------------------------------------- -void RangeDescriptor::setDictionaryFlag() { - int i; - +bool RangeDescriptor::isDictionaryRange() { static const char16_t *dictionary = u"dictionary"; - for (i=0; isize(); i++) { + for (int32_t i=0; isize(); i++) { RBBINode *usetNode = (RBBINode *)fIncludesSets->elementAt(i); RBBINode *setRef = usetNode->fParent; if (setRef != nullptr) { @@ -669,16 +681,14 @@ void RangeDescriptor::setDictionaryFlag() { if (varRef && varRef->fType == RBBINode::varRef) { const UnicodeString *setName = &varRef->fText; if (setName->compare(dictionary, -1) == 0) { - fNum |= RBBISetBuilder::DICT_BIT; - break; + return true; } } } } + return false; } - - U_NAMESPACE_END #endif /* #if !UCONFIG_NO_BREAK_ITERATION */ diff --git a/deps/icu-small/source/common/rbbisetb.h b/deps/icu-small/source/common/rbbisetb.h index ed6a76b1214621..6409a4ea579832 100644 --- a/deps/icu-small/source/common/rbbisetb.h +++ b/deps/icu-small/source/common/rbbisetb.h @@ -16,9 +16,10 @@ #if !UCONFIG_NO_BREAK_ITERATION +#include "unicode/ucptrie.h" +#include "unicode/umutablecptrie.h" #include "unicode/uobject.h" #include "rbbirb.h" -#include "utrie2.h" #include "uvector.h" U_NAMESPACE_BEGIN @@ -40,25 +41,26 @@ U_NAMESPACE_BEGIN // class RangeDescriptor : public UMemory { public: - UChar32 fStartChar; // Start of range, unicode 32 bit value. - UChar32 fEndChar; // End of range, unicode 32 bit value. - int32_t fNum; // runtime-mapped input value for this range. - UVector *fIncludesSets; // vector of the the original - // Unicode sets that include this range. - // (Contains ptrs to uset nodes) - RangeDescriptor *fNext; // Next RangeDescriptor in the linked list. + UChar32 fStartChar {}; // Start of range, unicode 32 bit value. + UChar32 fEndChar {}; // End of range, unicode 32 bit value. + int32_t fNum {0}; // runtime-mapped input value for this range. + bool fIncludesDict {false}; // True if the range includes $dictionary. + bool fFirstInGroup {false}; // True if first range in a group with the same fNum. + UVector *fIncludesSets {nullptr}; // vector of the the original + // Unicode sets that include this range. + // (Contains ptrs to uset nodes) + RangeDescriptor *fNext {nullptr}; // Next RangeDescriptor in the linked list. RangeDescriptor(UErrorCode &status); RangeDescriptor(const RangeDescriptor &other, UErrorCode &status); ~RangeDescriptor(); void split(UChar32 where, UErrorCode &status); // Spit this range in two at "where", with // where appearing in the second (higher) part. - void setDictionaryFlag(); // Check whether this range appears as part of + bool isDictionaryRange(); // Check whether this range appears as part of // the Unicode set named "dictionary" -private: - RangeDescriptor(const RangeDescriptor &other); // forbid copying of this class - RangeDescriptor &operator=(const RangeDescriptor &other); // forbid copying of this class + RangeDescriptor(const RangeDescriptor &other) = delete; // forbid default copying of this class + RangeDescriptor &operator=(const RangeDescriptor &other) = delete; // forbid assigning of this class }; @@ -89,6 +91,8 @@ class RBBISetBuilder : public UMemory { int32_t getNumCharCategories() const; // CharCategories are the same as input symbol set to the // runtime state machine, which are the same as // columns in the DFA state table + int32_t getDictCategoriesStart() const; // First char category that includes $dictionary, or + // last category + 1 if there are no dictionary categories. int32_t getTrieSize() /*const*/; // Size in bytes of the serialized Trie. void serializeTrie(uint8_t *where); // write out the serialized Trie. UChar32 getFirstChar(int32_t val) const; @@ -101,8 +105,6 @@ class RBBISetBuilder : public UMemory { */ void mergeCategories(IntPair categories); - static constexpr int32_t DICT_BIT = 0x4000; - #ifdef RBBI_DEBUG void printSets(); void printRanges(); @@ -114,24 +116,22 @@ class RBBISetBuilder : public UMemory { #endif private: - void numberSets(); - RBBIRuleBuilder *fRB; // The RBBI Rule Compiler that owns us. UErrorCode *fStatus; RangeDescriptor *fRangeList; // Head of the linked list of RangeDescriptors - UTrie2 *fTrie; // The mapping TRIE that is the end result of processing - uint32_t fTrieSize; // the Unicode Sets. + UMutableCPTrie *fMutableTrie; // The mapping TRIE that is the end result of processing + UCPTrie *fTrie; // the Unicode Sets. + uint32_t fTrieSize; - // Groups correspond to character categories - - // groups of ranges that are in the same original UnicodeSets. - // fGroupCount is the index of the last used group. - // fGroupCount+1 is also the number of columns in the RBBI state table being compiled. - // State table column 0 is not used. Column 1 is for end-of-input. - // column 2 is for group 0. Funny counting. + // Number of range groups, which are groups of ranges that are in the same original UnicodeSets. int32_t fGroupCount; + // The number of the first dictionary char category. + // If there are no Dictionary categories, set to the last category + 1. + int32_t fDictCategoriesStart; + UBool fSawBOF; RBBISetBuilder(const RBBISetBuilder &other); // forbid copying of this class diff --git a/deps/icu-small/source/common/rbbitblb.cpp b/deps/icu-small/source/common/rbbitblb.cpp index 3b1edc6a15c700..65b597c4a936b0 100644 --- a/deps/icu-small/source/common/rbbitblb.cpp +++ b/deps/icu-small/source/common/rbbitblb.cpp @@ -28,6 +28,8 @@ U_NAMESPACE_BEGIN +const int32_t kMaxStateFor8BitsTable = 255; + RBBITableBuilder::RBBITableBuilder(RBBIRuleBuilder *rb, RBBINode **rootNode, UErrorCode &status) : fRB(rb), fTree(*rootNode), @@ -712,7 +714,6 @@ void RBBITableBuilder::mapLookAheadRules() { return; } fLookAheadRuleMap->setSize(fRB->fScanner->numRules() + 1); - int32_t laSlotsInUse = 0; for (int32_t n=0; nsize(); n++) { RBBIStateDescriptor *sd = (RBBIStateDescriptor *)fDStates->elementAt(n); @@ -749,7 +750,7 @@ void RBBITableBuilder::mapLookAheadRules() { } if (laSlotForState == 0) { - laSlotForState = ++laSlotsInUse; + laSlotForState = ++fLASlotsInUse; } // For each look ahead node covered by this state, @@ -805,23 +806,23 @@ void RBBITableBuilder::flagAcceptingStates() { if (sd->fPositions->indexOf(endMarker) >= 0) { // Any non-zero value for fAccepting means this is an accepting node. // The value is what will be returned to the user as the break status. - // If no other value was specified, force it to -1. + // If no other value was specified, force it to ACCEPTING_UNCONDITIONAL (1). if (sd->fAccepting==0) { // State hasn't been marked as accepting yet. Do it now. sd->fAccepting = fLookAheadRuleMap->elementAti(endMarker->fVal); if (sd->fAccepting == 0) { - sd->fAccepting = -1; + sd->fAccepting = ACCEPTING_UNCONDITIONAL; } } - if (sd->fAccepting==-1 && endMarker->fVal != 0) { + if (sd->fAccepting==ACCEPTING_UNCONDITIONAL && endMarker->fVal != 0) { // Both lookahead and non-lookahead accepting for this state. // Favor the look-ahead, because a look-ahead match needs to // immediately stop the run-time engine. First match, not longest. sd->fAccepting = fLookAheadRuleMap->elementAti(endMarker->fVal); } // implicit else: - // if sd->fAccepting already had a value other than 0 or -1, leave it be. + // if sd->fAccepting already had a value other than 0 or 1, leave it be. } } } @@ -855,7 +856,7 @@ void RBBITableBuilder::flagLookAheadStates() { int32_t positionsIdx = sd->fPositions->indexOf(lookAheadNode); if (positionsIdx >= 0) { U_ASSERT(lookAheadNode == sd->fPositions->elementAt(positionsIdx)); - int32_t lookaheadSlot = fLookAheadRuleMap->elementAti(lookAheadNode->fVal); + uint32_t lookaheadSlot = fLookAheadRuleMap->elementAti(lookAheadNode->fVal); U_ASSERT(sd->fLookAhead == 0 || sd->fLookAhead == lookaheadSlot); // if (sd->fLookAhead != 0 && sd->fLookAhead != lookaheadSlot) { // printf("%s:%d Bingo. sd->fLookAhead:%d lookaheadSlot:%d\n", @@ -1148,7 +1149,13 @@ bool RBBITableBuilder::findDuplCharClassFrom(IntPair *categories) { int32_t numCols = fRB->fSetBuilder->getNumCharCategories(); for (; categories->first < numCols-1; categories->first++) { - for (categories->second=categories->first+1; categories->second < numCols; categories->second++) { + // Note: dictionary & non-dictionary columns cannot be merged. + // The limitSecond value prevents considering mixed pairs. + // Dictionary categories are >= DictCategoriesStart. + // Non dict categories are < DictCategoriesStart. + int limitSecond = categories->first < fRB->fSetBuilder->getDictCategoriesStart() ? + fRB->fSetBuilder->getDictCategoriesStart() : numCols; + for (categories->second=categories->first+1; categories->second < limitSecond; categories->second++) { // Initialized to different values to prevent returning true if numStates = 0 (implies no duplicates). uint16_t table_base = 0; uint16_t table_dupl = 1; @@ -1335,11 +1342,18 @@ int32_t RBBITableBuilder::getTableSize() const { numRows = fDStates->size(); numCols = fRB->fSetBuilder->getNumCharCategories(); - rowSize = offsetof(RBBIStateTableRow, fNextState) + sizeof(uint16_t)*numCols; + if (use8BitsForTable()) { + rowSize = offsetof(RBBIStateTableRow8, fNextState) + sizeof(int8_t)*numCols; + } else { + rowSize = offsetof(RBBIStateTableRow16, fNextState) + sizeof(int16_t)*numCols; + } size += numRows * rowSize; return size; } +bool RBBITableBuilder::use8BitsForTable() const { + return fDStates->size() <= kMaxStateFor8BitsTable; +} //----------------------------------------------------------------------------- // @@ -1364,27 +1378,47 @@ void RBBITableBuilder::exportTable(void *where) { return; } - table->fRowLen = offsetof(RBBIStateTableRow, fNextState) + sizeof(uint16_t) * catCount; table->fNumStates = fDStates->size(); + table->fDictCategoriesStart = fRB->fSetBuilder->getDictCategoriesStart(); + table->fLookAheadResultsSize = fLASlotsInUse == ACCEPTING_UNCONDITIONAL ? 0 : fLASlotsInUse + 1; table->fFlags = 0; + if (use8BitsForTable()) { + table->fRowLen = offsetof(RBBIStateTableRow8, fNextState) + sizeof(uint8_t) * catCount; + table->fFlags |= RBBI_8BITS_ROWS; + } else { + table->fRowLen = offsetof(RBBIStateTableRow16, fNextState) + sizeof(int16_t) * catCount; + } if (fRB->fLookAheadHardBreak) { table->fFlags |= RBBI_LOOKAHEAD_HARD_BREAK; } if (fRB->fSetBuilder->sawBOF()) { table->fFlags |= RBBI_BOF_REQUIRED; } - table->fReserved = 0; for (state=0; statefNumStates; state++) { RBBIStateDescriptor *sd = (RBBIStateDescriptor *)fDStates->elementAt(state); RBBIStateTableRow *row = (RBBIStateTableRow *)(table->fTableData + state*table->fRowLen); - U_ASSERT (-32768 < sd->fAccepting && sd->fAccepting <= 32767); - U_ASSERT (-32768 < sd->fLookAhead && sd->fLookAhead <= 32767); - row->fAccepting = (int16_t)sd->fAccepting; - row->fLookAhead = (int16_t)sd->fLookAhead; - row->fTagIdx = (int16_t)sd->fTagsIdx; - for (col=0; colfNextState[col] = (uint16_t)sd->fDtran->elementAti(col); + if (use8BitsForTable()) { + U_ASSERT (sd->fAccepting <= 255); + U_ASSERT (sd->fLookAhead <= 255); + U_ASSERT (0 <= sd->fTagsIdx && sd->fTagsIdx <= 255); + row->r8.fAccepting = sd->fAccepting; + row->r8.fLookAhead = sd->fLookAhead; + row->r8.fTagsIdx = sd->fTagsIdx; + for (col=0; colfDtran->elementAti(col) <= kMaxStateFor8BitsTable); + row->r8.fNextState[col] = sd->fDtran->elementAti(col); + } + } else { + U_ASSERT (sd->fAccepting <= 0xffff); + U_ASSERT (sd->fLookAhead <= 0xffff); + U_ASSERT (0 <= sd->fTagsIdx && sd->fTagsIdx <= 0xffff); + row->r16.fAccepting = sd->fAccepting; + row->r16.fLookAhead = sd->fLookAhead; + row->r16.fTagsIdx = sd->fTagsIdx; + for (col=0; colr16.fNextState[col] = sd->fDtran->elementAti(col); + } } } } @@ -1520,11 +1554,18 @@ int32_t RBBITableBuilder::getSafeTableSize() const { numRows = fSafeTable->size(); numCols = fRB->fSetBuilder->getNumCharCategories(); - rowSize = offsetof(RBBIStateTableRow, fNextState) + sizeof(uint16_t)*numCols; + if (use8BitsForSafeTable()) { + rowSize = offsetof(RBBIStateTableRow8, fNextState) + sizeof(int8_t)*numCols; + } else { + rowSize = offsetof(RBBIStateTableRow16, fNextState) + sizeof(int16_t)*numCols; + } size += numRows * rowSize; return size; } +bool RBBITableBuilder::use8BitsForSafeTable() const { + return fSafeTable->size() <= kMaxStateFor8BitsTable; +} //----------------------------------------------------------------------------- // @@ -1549,20 +1590,33 @@ void RBBITableBuilder::exportSafeTable(void *where) { return; } - table->fRowLen = offsetof(RBBIStateTableRow, fNextState) + sizeof(uint16_t) * catCount; table->fNumStates = fSafeTable->size(); table->fFlags = 0; - table->fReserved = 0; + if (use8BitsForSafeTable()) { + table->fRowLen = offsetof(RBBIStateTableRow8, fNextState) + sizeof(uint8_t) * catCount; + table->fFlags |= RBBI_8BITS_ROWS; + } else { + table->fRowLen = offsetof(RBBIStateTableRow16, fNextState) + sizeof(int16_t) * catCount; + } for (state=0; statefNumStates; state++) { UnicodeString *rowString = (UnicodeString *)fSafeTable->elementAt(state); RBBIStateTableRow *row = (RBBIStateTableRow *)(table->fTableData + state*table->fRowLen); - row->fAccepting = 0; - row->fLookAhead = 0; - row->fTagIdx = 0; - row->fReserved = 0; - for (col=0; colfNextState[col] = rowString->charAt(col); + if (use8BitsForSafeTable()) { + row->r8.fAccepting = 0; + row->r8.fLookAhead = 0; + row->r8.fTagsIdx = 0; + for (col=0; colcharAt(col) <= kMaxStateFor8BitsTable); + row->r8.fNextState[col] = static_cast(rowString->charAt(col)); + } + } else { + row->r16.fAccepting = 0; + row->r16.fLookAhead = 0; + row->r16.fTagsIdx = 0; + for (col=0; colr16.fNextState[col] = rowString->charAt(col); + } } } } @@ -1600,12 +1654,12 @@ void RBBITableBuilder::printStates() { RBBIDebugPrintf("state | i n p u t s y m b o l s \n"); RBBIDebugPrintf(" | Acc LA Tag"); for (c=0; cfSetBuilder->getNumCharCategories(); c++) { - RBBIDebugPrintf(" %2d", c); + RBBIDebugPrintf(" %3d", c); } RBBIDebugPrintf("\n"); RBBIDebugPrintf(" |---------------"); for (c=0; cfSetBuilder->getNumCharCategories(); c++) { - RBBIDebugPrintf("---"); + RBBIDebugPrintf("----"); } RBBIDebugPrintf("\n"); @@ -1614,7 +1668,7 @@ void RBBITableBuilder::printStates() { RBBIDebugPrintf(" %3d | " , n); RBBIDebugPrintf("%3d %3d %5d ", sd->fAccepting, sd->fLookAhead, sd->fTagsIdx); for (c=0; cfSetBuilder->getNumCharCategories(); c++) { - RBBIDebugPrintf(" %2d", sd->fDtran->elementAti(c)); + RBBIDebugPrintf(" %3d", sd->fDtran->elementAti(c)); } RBBIDebugPrintf("\n"); } diff --git a/deps/icu-small/source/common/rbbitblb.h b/deps/icu-small/source/common/rbbitblb.h index c2b574fe1b8f93..fe3db8d7bf1ae8 100644 --- a/deps/icu-small/source/common/rbbitblb.h +++ b/deps/icu-small/source/common/rbbitblb.h @@ -20,6 +20,7 @@ #include "unicode/uobject.h" #include "unicode/rbbi.h" +#include "rbbidata.h" #include "rbbirb.h" #include "rbbinode.h" @@ -53,6 +54,9 @@ class RBBITableBuilder : public UMemory { */ void exportTable(void *where); + /** Use 8 bits to encode the forward table */ + bool use8BitsForTable() const; + /** * Find duplicate (redundant) character classes. Begin looking with categories.first. * Duplicate, if found are returned in the categories parameter. @@ -85,6 +89,8 @@ class RBBITableBuilder : public UMemory { */ void exportSafeTable(void *where); + /** Use 8 bits to encode the safe reverse table */ + bool use8BitsForSafeTable() const; private: void calcNullable(RBBINode *n); @@ -179,9 +185,15 @@ class RBBITableBuilder : public UMemory { /** Map from rule number (fVal in look ahead nodes) to sequential lookahead index. */ UVector32 *fLookAheadRuleMap = nullptr; + /* Counter used when assigning lookahead rule numbers. + * Contains the last look-ahead number already in use. + * The first look-ahead number is 2; Number 1 (ACCEPTING_UNCONDITIONAL) is reserved + * for non-lookahead accepting states. See the declarations of RBBIStateTableRowT. */ + int32_t fLASlotsInUse = ACCEPTING_UNCONDITIONAL; + - RBBITableBuilder(const RBBITableBuilder &other); // forbid copying of this class - RBBITableBuilder &operator=(const RBBITableBuilder &other); // forbid copying of this class + RBBITableBuilder(const RBBITableBuilder &other) = delete; // forbid copying of this class + RBBITableBuilder &operator=(const RBBITableBuilder &other) = delete; // forbid copying of this class }; // @@ -190,8 +202,8 @@ class RBBITableBuilder : public UMemory { class RBBIStateDescriptor : public UMemory { public: UBool fMarked; - int32_t fAccepting; - int32_t fLookAhead; + uint32_t fAccepting; + uint32_t fLookAhead; UVector *fTagVals; int32_t fTagsIdx; UVector *fPositions; // Set of parse tree positions associated diff --git a/deps/icu-small/source/common/resource.h b/deps/icu-small/source/common/resource.h index 5199b858880770..3795694412a058 100644 --- a/deps/icu-small/source/common/resource.h +++ b/deps/icu-small/source/common/resource.h @@ -60,7 +60,7 @@ class U_COMMON_API ResourceArray { /** * @param i Array item index. * @param value Output-only, receives the value of the i'th item. - * @return TRUE if i is non-negative and less than getSize(). + * @return true if i is non-negative and less than getSize(). */ UBool getValue(int32_t i, ResourceValue &value) const; @@ -97,14 +97,14 @@ class U_COMMON_API ResourceTable { * @param i Table item index. * @param key Output-only, receives the key of the i'th item. * @param value Output-only, receives the value of the i'th item. - * @return TRUE if i is non-negative and less than getSize(). + * @return true if i is non-negative and less than getSize(). */ UBool getKeyAndValue(int32_t i, const char *&key, ResourceValue &value) const; /** * @param key Key string to find in the table. * @param value Output-only, receives the value of the item with that key. - * @return TRUE if the table contains the key. + * @return true if the table contains the key. */ UBool findValue(const char *key, ResourceValue &value) const; @@ -141,7 +141,7 @@ class U_COMMON_API ResourceValue : public UObject { inline UnicodeString getUnicodeString(UErrorCode &errorCode) const { int32_t len = 0; const UChar *r = getString(len, errorCode); - return UnicodeString(TRUE, r, len); + return UnicodeString(true, r, len); } /** @@ -152,7 +152,7 @@ class U_COMMON_API ResourceValue : public UObject { inline UnicodeString getAliasUnicodeString(UErrorCode &errorCode) const { int32_t len = 0; const UChar *r = getAliasString(len, errorCode); - return UnicodeString(TRUE, r, len); + return UnicodeString(true, r, len); } /** @@ -199,7 +199,7 @@ class U_COMMON_API ResourceValue : public UObject { * CLDR no-fallback data values of (three empty-set symbols)=={2205, 2205, 2205} * when enumerating tables with fallback from the specific resource bundle to root. * - * @return TRUE if this is a no-inheritance marker string + * @return true if this is a no-inheritance marker string */ virtual UBool isNoInheritanceMarker() const = 0; diff --git a/deps/icu-small/source/common/ruleiter.h b/deps/icu-small/source/common/ruleiter.h index b6edc657aff261..f397f8bccd7817 100644 --- a/deps/icu-small/source/common/ruleiter.h +++ b/deps/icu-small/source/common/ruleiter.h @@ -114,7 +114,7 @@ class RuleCharacterIterator : public UMemory { * character. * @param options one or more of the following options, bitwise-OR-ed * together: PARSE_VARIABLES, PARSE_ESCAPES, SKIP_WHITESPACE. - * @param isEscaped output parameter set to TRUE if the character + * @param isEscaped output parameter set to true if the character * was escaped * @param ec input-output error code. An error will only be set by * this routing if options includes PARSE_VARIABLES and an unknown diff --git a/deps/icu-small/source/common/serv.h b/deps/icu-small/source/common/serv.h index 70695839a8f3ce..6a3d1915afdf5a 100644 --- a/deps/icu-small/source/common/serv.h +++ b/deps/icu-small/source/common/serv.h @@ -138,16 +138,16 @@ class U_COMMON_API ICUServiceKey : public UObject { * must eventually return false. This implementation has no fallbacks * and always returns false.

* - * @return TRUE if the ICUServiceKey changed to a valid fallback value. + * @return true if the ICUServiceKey changed to a valid fallback value. */ virtual UBool fallback(); /** - *

Return TRUE if a key created from id matches, or would eventually + *

Return true if a key created from id matches, or would eventually * fallback to match, the canonical ID of this ICUServiceKey.

* * @param id the id to test. - * @return TRUE if this ICUServiceKey's canonical ID is a fallback of id. + * @return true if this ICUServiceKey's canonical ID is a fallback of id. */ virtual UBool isFallbackOf(const UnicodeString& id) const; @@ -291,15 +291,15 @@ class U_COMMON_API SimpleFactory : public ICUServiceFactory { public: /** *

Construct a SimpleFactory that maps a single ID to a single - * service instance. If visible is TRUE, the ID will be visible. + * service instance. If visible is true, the ID will be visible. * The instance must not be NULL. The SimpleFactory will adopt * the instance, which must not be changed subsequent to this call.

* * @param instanceToAdopt the service instance to adopt. * @param id the ID to assign to this service instance. - * @param visible if TRUE, the ID will be visible. + * @param visible if true, the ID will be visible. */ - SimpleFactory(UObject* instanceToAdopt, const UnicodeString& id, UBool visible = TRUE); + SimpleFactory(UObject* instanceToAdopt, const UnicodeString& id, UBool visible = true); /** *

Destructor.

@@ -318,7 +318,7 @@ class U_COMMON_API SimpleFactory : public ICUServiceFactory { virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const; /** - *

This implementation adds a mapping from ID -> this to result if visible is TRUE, + *

This implementation adds a mapping from ID -> this to result if visible is true, * otherwise it removes ID from result.

* * @param result the mapping table to update. @@ -327,7 +327,7 @@ class U_COMMON_API SimpleFactory : public ICUServiceFactory { virtual void updateVisibleIDs(Hashtable& result, UErrorCode& status) const; /** - *

This implementation returns the factory ID if it equals id and visible is TRUE, + *

This implementation returns the factory ID if it equals id and visible is true, * otherwise it returns the empty string. (This implementation provides * no localized id information.)

* @@ -427,8 +427,8 @@ class U_COMMON_API StringPair : public UMemory { UErrorCode& status); /** - *

Return TRUE if either string of the pair is bogus.

- * @return TRUE if either string of the pair is bogus. + *

Return true if either string of the pair is bogus.

+ * @return true if either string of the pair is bogus. */ UBool isBogus() const; @@ -761,7 +761,7 @@ class U_COMMON_API ICUService : public ICUNotifier { /** *

A convenience override of registerInstance(UObject*, const UnicodeString&, UBool) - * that defaults visible to TRUE.

+ * that defaults visible to true.

* * @param objToAdopt the object to register and adopt. * @param id the ID to assign to this object. @@ -774,7 +774,7 @@ class U_COMMON_API ICUService : public ICUNotifier { /** *

Register a service instance with the provided ID. The ID will be * canonicalized. The canonicalized ID will be returned by - * getVisibleIDs if visible is TRUE. The service instance will be adopted and + * getVisibleIDs if visible is true. The service instance will be adopted and * must not be modified subsequent to this call.

* *

This issues a serviceChanged notification to registered listeners.

@@ -784,7 +784,7 @@ class U_COMMON_API ICUService : public ICUNotifier { * * @param objToAdopt the object to register and adopt. * @param id the ID to assign to this object. - * @param visible TRUE if getVisibleIDs is to return this ID. + * @param visible true if getVisibleIDs is to return this ID. * @param status the error code status. * @return a registry key that can be passed to unregister() to unregister * (and discard) this instance. @@ -820,7 +820,7 @@ class U_COMMON_API ICUService : public ICUNotifier { * * @param rkey the registry key. * @param status the error code status. - * @return TRUE if the call successfully unregistered the factory. + * @return true if the call successfully unregistered the factory. */ virtual UBool unregister(URegistryKey rkey, UErrorCode& status); @@ -833,9 +833,9 @@ class U_COMMON_API ICUService : public ICUNotifier { virtual void reset(void); /** - *

Return TRUE if the service is in its default state.

+ *

Return true if the service is in its default state.

* - *

The default implementation returns TRUE if there are no + *

The default implementation returns true if there are no * factories registered.

*/ virtual UBool isDefault(void) const; @@ -877,7 +877,7 @@ class U_COMMON_API ICUService : public ICUNotifier { * * @param instanceToAdopt the service instance to adopt. * @param id the ID to assign to this service instance. - * @param visible if TRUE, the ID will be visible. + * @param visible if true, the ID will be visible. * @param status the error code status. * @return an instance of ICUServiceFactory that maps this instance to the provided ID. */ @@ -885,7 +885,7 @@ class U_COMMON_API ICUService : public ICUNotifier { /** *

Reinitialize the factory list to its default state. After this call, isDefault() - * must return TRUE.

+ * must return true.

* *

This issues a serviceChanged notification to registered listeners.

* @@ -928,7 +928,7 @@ class U_COMMON_API ICUService : public ICUNotifier { * different listeners.

* * @param l the listener to test. - * @return TRUE if the service accepts the listener. + * @return true if the service accepts the listener. */ virtual UBool acceptsListener(const EventListener& l) const; diff --git a/deps/icu-small/source/common/servnotf.h b/deps/icu-small/source/common/servnotf.h index cf92fc169e927f..7918a672473b10 100644 --- a/deps/icu-small/source/common/servnotf.h +++ b/deps/icu-small/source/common/servnotf.h @@ -105,7 +105,7 @@ private: UVector* listeners; protected: /** - * Subclasses implement this to return TRUE if the listener is + * Subclasses implement this to return true if the listener is * of the appropriate type. */ virtual UBool acceptsListener(const EventListener& l) const = 0; diff --git a/deps/icu-small/source/common/sharedobject.h b/deps/icu-small/source/common/sharedobject.h index 878594c7ffa772..0565de6608a094 100644 --- a/deps/icu-small/source/common/sharedobject.h +++ b/deps/icu-small/source/common/sharedobject.h @@ -90,13 +90,13 @@ class U_COMMON_API SharedObject : public UObject { int32_t getRefCount() const; /** - * If noHardReferences() == TRUE then this object has no hard references. + * If noHardReferences() == true then this object has no hard references. * Must be called only from within the internals of UnifiedCache. */ inline UBool noHardReferences() const { return getRefCount() == 0; } /** - * If hasHardReferences() == TRUE then this object has hard references. + * If hasHardReferences() == true then this object has hard references. * Must be called only from within the internals of UnifiedCache. */ inline UBool hasHardReferences() const { return getRefCount() != 0; } diff --git a/deps/icu-small/source/common/simpleformatter.cpp b/deps/icu-small/source/common/simpleformatter.cpp index 76d8f54efd4aea..f7f7aead6171bb 100644 --- a/deps/icu-small/source/common/simpleformatter.cpp +++ b/deps/icu-small/source/common/simpleformatter.cpp @@ -263,6 +263,8 @@ UnicodeString SimpleFormatter::getTextWithNoArguments( sb.append(compiledPattern + i, n); i += n; } else if (n < offsetsLength) { + // TODO(ICU-20406): This does not distinguish between "{0}{1}" and "{1}{0}". + // Consider removing this function and replacing it with an iterator interface. offsets[n] = sb.length(); } } diff --git a/deps/icu-small/source/common/uassert.h b/deps/icu-small/source/common/uassert.h index 15cd55c873487c..afd31eeffd91a4 100644 --- a/deps/icu-small/source/common/uassert.h +++ b/deps/icu-small/source/common/uassert.h @@ -32,7 +32,7 @@ # include # define U_ASSERT(exp) assert(exp) #elif U_CPLUSPLUS_VERSION -# define U_ASSERT(exp) void() +# define U_ASSERT(exp) (void)0 #else # define U_ASSERT(exp) #endif diff --git a/deps/icu-small/source/common/ubidi_props.cpp b/deps/icu-small/source/common/ubidi_props.cpp index 4141c21938a740..afcc4aaf4f99d7 100644 --- a/deps/icu-small/source/common/ubidi_props.cpp +++ b/deps/icu-small/source/common/ubidi_props.cpp @@ -248,7 +248,7 @@ u_charMirror(UChar32 c) { return ubidi_getMirror(c); } -U_STABLE UChar32 U_EXPORT2 +U_CAPI UChar32 U_EXPORT2 u_getBidiPairedBracket(UChar32 c) { return ubidi_getPairedBracket(c); } diff --git a/deps/icu-small/source/common/ubidiimp.h b/deps/icu-small/source/common/ubidiimp.h index 9746b2bc103102..e48fc6f941621b 100644 --- a/deps/icu-small/source/common/ubidiimp.h +++ b/deps/icu-small/source/common/ubidiimp.h @@ -26,6 +26,14 @@ /* miscellaneous definitions ---------------------------------------------- */ +// ICU-20853=ICU-20935 Solaris #defines CS and ES in sys/regset.h +#ifdef CS +# undef CS +#endif +#ifdef ES +# undef ES +#endif + typedef uint8_t DirProp; typedef uint32_t Flags; @@ -451,26 +459,26 @@ ubidi_getMemory(BidiMemoryForAllocation *pMemory, int32_t *pSize, UBool mayAlloc /* additional macros used by ubidi_open() - always allow allocation */ #define getInitialDirPropsMemory(pBiDi, length) \ ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->dirPropsMemory, &(pBiDi)->dirPropsSize, \ - TRUE, (length)) + true, (length)) #define getInitialLevelsMemory(pBiDi, length) \ ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->levelsMemory, &(pBiDi)->levelsSize, \ - TRUE, (length)) + true, (length)) #define getInitialOpeningsMemory(pBiDi, length) \ ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->openingsMemory, &(pBiDi)->openingsSize, \ - TRUE, (length)*sizeof(Opening)) + true, (length)*sizeof(Opening)) #define getInitialParasMemory(pBiDi, length) \ ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->parasMemory, &(pBiDi)->parasSize, \ - TRUE, (length)*sizeof(Para)) + true, (length)*sizeof(Para)) #define getInitialRunsMemory(pBiDi, length) \ ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->runsMemory, &(pBiDi)->runsSize, \ - TRUE, (length)*sizeof(Run)) + true, (length)*sizeof(Run)) #define getInitialIsolatesMemory(pBiDi, length) \ ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->isolatesMemory, &(pBiDi)->isolatesSize, \ - TRUE, (length)*sizeof(Isolate)) + true, (length)*sizeof(Isolate)) #endif diff --git a/deps/icu-small/source/common/ubiditransform.cpp b/deps/icu-small/source/common/ubiditransform.cpp index bb3ce8cb934d43..ab3dcbe14c0cfe 100644 --- a/deps/icu-small/source/common/ubiditransform.cpp +++ b/deps/icu-small/source/common/ubiditransform.cpp @@ -89,7 +89,7 @@ struct UBiDiTransform { uint32_t letters; /* letter option for ArabicShaping */ }; -U_DRAFT UBiDiTransform* U_EXPORT2 +U_CAPI UBiDiTransform* U_EXPORT2 ubiditransform_open(UErrorCode *pErrorCode) { UBiDiTransform *pBiDiTransform = NULL; @@ -102,7 +102,7 @@ ubiditransform_open(UErrorCode *pErrorCode) return pBiDiTransform; } -U_DRAFT void U_EXPORT2 +U_CAPI void U_EXPORT2 ubiditransform_close(UBiDiTransform *pBiDiTransform) { if (pBiDiTransform != NULL) { @@ -434,7 +434,7 @@ findMatchingScheme(UBiDiLevel inLevel, UBiDiLevel outLevel, return NULL; } -U_DRAFT uint32_t U_EXPORT2 +U_CAPI uint32_t U_EXPORT2 ubiditransform_transform(UBiDiTransform *pBiDiTransform, const UChar *src, int32_t srcLength, UChar *dest, int32_t destSize, diff --git a/deps/icu-small/source/common/ucase.cpp b/deps/icu-small/source/common/ucase.cpp index 57a40327905c00..c2180629fb436a 100644 --- a/deps/icu-small/source/common/ucase.cpp +++ b/deps/icu-small/source/common/ucase.cpp @@ -707,6 +707,7 @@ ucase_isCaseSensitive(UChar32 c) { #define is_r(c) ((c)=='r' || (c)=='R') #define is_t(c) ((c)=='t' || (c)=='T') #define is_u(c) ((c)=='u' || (c)=='U') +#define is_y(c) ((c)=='y' || (c)=='Y') #define is_z(c) ((c)=='z' || (c)=='Z') /* separator? */ @@ -804,6 +805,18 @@ ucase_getCaseLocale(const char *locale) { return UCASE_LOC_DUTCH; } } + } else if(c=='h') { + /* hy or hye? *not* hyw */ + c=*locale++; + if(is_y(c)) { + c=*locale++; + if(is_e(c)) { + c=*locale; + } + if(is_sep(c)) { + return UCASE_LOC_ARMENIAN; + } + } } } else { // uppercase c @@ -868,6 +881,18 @@ ucase_getCaseLocale(const char *locale) { return UCASE_LOC_DUTCH; } } + } else if(c=='H') { + /* hy or hye? *not* hyw */ + c=*locale++; + if(is_y(c)) { + c=*locale++; + if(is_e(c)) { + c=*locale; + } + if(is_sep(c)) { + return UCASE_LOC_ARMENIAN; + } + } } } return UCASE_LOC_ROOT; @@ -1229,6 +1254,17 @@ toUpperOrTitle(UChar32 c, */ *pString=nullptr; return 0; /* remove the dot (continue without output) */ + } else if(c==0x0587) { + // See ICU-13416: + // և ligature ech-yiwn + // uppercases to ԵՒ=ech+yiwn by default and in Western Armenian, + // but to ԵՎ=ech+vew in Eastern Armenian. + if(loc==UCASE_LOC_ARMENIAN) { + *pString=upperNotTitle ? u"ԵՎ" : u"Եվ"; + } else { + *pString=upperNotTitle ? u"ԵՒ" : u"Եւ"; + } + return 2; } else { /* no known conditional special case mapping, use a normal mapping */ } diff --git a/deps/icu-small/source/common/ucase.h b/deps/icu-small/source/common/ucase.h index b0a453b87e8afa..a018f82b81b229 100644 --- a/deps/icu-small/source/common/ucase.h +++ b/deps/icu-small/source/common/ucase.h @@ -56,7 +56,8 @@ enum { UCASE_LOC_TURKISH, UCASE_LOC_LITHUANIAN, UCASE_LOC_GREEK, - UCASE_LOC_DUTCH + UCASE_LOC_DUTCH, + UCASE_LOC_ARMENIAN }; /** @@ -117,7 +118,7 @@ ucase_addCaseClosure(UChar32 c, const USetAdder *sa); * the string itself is added as well as part of its code points' closure. * It must be length>=0. * - * @return TRUE if the string was found + * @return true if the string was found */ U_CFUNC UBool U_EXPORT2 ucase_addStringCaseClosure(const UChar *s, int32_t length, const USetAdder *sa); diff --git a/deps/icu-small/source/common/ucase_props_data.h b/deps/icu-small/source/common/ucase_props_data.h index 7c97230957024a..aead6d58d1ec9c 100644 --- a/deps/icu-small/source/common/ucase_props_data.h +++ b/deps/icu-small/source/common/ucase_props_data.h @@ -13,7 +13,7 @@ static const UVersionInfo ucase_props_dataVersion={0xd,0,0,0}; -static const int32_t ucase_props_indexes[UCASE_IX_TOP]={0x10,0x70ca,0x6098,0x687,0x172,0,0,0,0,0,0,0,0,0,0,3}; +static const int32_t ucase_props_indexes[UCASE_IX_TOP]={0x10,0x70c2,0x6098,0x683,0x172,0,0,0,0,0,0,0,0,0,0,3}; static const uint16_t ucase_props_trieIndex[12356]={ 0x336,0x33e,0x346,0x34e,0x35c,0x364,0x36c,0x374,0x37c,0x384,0x38b,0x393,0x39b,0x3a3,0x3ab,0x3b3, @@ -411,18 +411,18 @@ static const uint16_t ucase_props_trieIndex[12356]={ 0,0,0,0,0,4,4,4,4,0,0,0,0,0,0,0, 0,0,0,0,0,0,4,0,0,4,4,0,0,0,0,0, 0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,4,0,0,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a, -0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a, -0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0,0x179a,0,0,0,0,0,0x179a,0,0, -0x17b9,0x17e9,0x1819,0x1849,0x1879,0x18a9,0x18d9,0x1909,0x1939,0x1969,0x1999,0x19c9,0x19f9,0x1a29,0x1a59,0x1a89, -0x1ab9,0x1ae9,0x1b19,0x1b49,0x1b79,0x1ba9,0x1bd9,0x1c09,0x1c39,0x1c69,0x1c99,0x1cc9,0x1cf9,0x1d29,0x1d59,0x1d89, -0x1db9,0x1de9,0x1e19,0x1e49,0x1e79,0x1ea9,0x1ed9,0x1f09,0x1f39,0x1f69,0x1f99,0,4,0x1fc9,0x1ff9,0x2029, +0,4,0,0,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a, +0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a, +0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0,0x175a,0,0,0,0,0,0x175a,0,0, +0x1779,0x17a9,0x17d9,0x1809,0x1839,0x1869,0x1899,0x18c9,0x18f9,0x1929,0x1959,0x1989,0x19b9,0x19e9,0x1a19,0x1a49, +0x1a79,0x1aa9,0x1ad9,0x1b09,0x1b39,0x1b69,0x1b99,0x1bc9,0x1bf9,0x1c29,0x1c59,0x1c89,0x1cb9,0x1ce9,0x1d19,0x1d49, +0x1d79,0x1da9,0x1dd9,0x1e09,0x1e39,0x1e69,0x1e99,0x1ec9,0x1ef9,0x1f29,0x1f59,0,4,0x1f89,0x1fb9,0x1fe9, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44, -0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a, -0x207a,0x207a,0x207a,0x207a,0x207a,0x207a,0,0,0x2099,0x20c9,0x20f9,0x2129,0x2159,0x2189,0,0, -0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a, -0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a, +0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a, +0x203a,0x203a,0x203a,0x203a,0x203a,0x203a,0,0,0x2059,0x2089,0x20b9,0x20e9,0x2119,0x2149,0,0, +0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a, +0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,4,4,0x64,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,4, @@ -458,9 +458,9 @@ static const uint16_t ucase_props_trieIndex[12356]={ 0,0,0,0,4,4,4,4,4,4,4,4,0,0,4,0x64, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,4,4,4,4,4,4,0,0, -0x21b9,0x21e9,0x2219,0x2249,0x2279,0x22c9,0x2319,0x2349,0x2379,0,0,0,0,0,0,0, -0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa, -0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0,0,0x23aa,0x23aa,0x23aa, +0x2179,0x21a9,0x21d9,0x2209,0x2239,0x2289,0x22d9,0x2309,0x2339,0,0,0,0,0,0,0, +0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a, +0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0,0,0x236a,0x236a,0x236a, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0x44,0x44,0x44,0,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x64,0x64,0x64,0x64, 0x44,0,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0,0,0,0,0x64,0,0, @@ -470,10 +470,10 @@ static const uint16_t ucase_props_trieIndex[12356]={ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,0x25,5,5,5,5,5,5,5,5,1,1,1,1,1, -1,1,1,1,1,1,1,1,5,0x23c9,1,1,1,0x23e9,1,1, +1,1,1,1,1,1,1,1,5,0x2389,1,1,1,0x23a9,1,1, 5,5,5,5,0x25,5,5,5,0x25,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x2409,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x23c9,1, 1,1,1,1,1,1,0x21,1,1,1,1,5,5,5,5,5, 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, 0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0,0x44,0x64,0x64,0x44,0x64, @@ -481,27 +481,27 @@ static const uint16_t ucase_props_trieIndex[12356]={ 0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, 0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xffb1,0x92,0xff91, 0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91, -0x242a,0x2469,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91, +0x23ea,0x2429,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91, 0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91, -0x92,0xff91,0x24a9,0x2529,0x25a9,0x2629,0x26a9,0x2729,1,1,0x275a,1,0x92,0xff91,0x92,0xff91, +0x92,0xff91,0x2469,0x24e9,0x2569,0x25e9,0x2669,0x26e9,1,1,0x271a,1,0x92,0xff91,0x92,0xff91, 0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xffb1,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91, 0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x411,0x411,0x411,0x411, 0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0x411,0x411,0x411,0x411, 0x411,0x411,0,0,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0,0,0x411,0x411,0x411,0x411, 0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0x411,0x411,0x411,0x411, 0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0x411,0x411,0x411,0x411, -0x411,0x411,0,0,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0,0,0x27a9,0x411,0x2829,0x411, -0x28d9,0x411,0x2989,0x411,0,0xfc12,0,0xfc12,0,0xfc12,0,0xfc12,0x411,0x411,0x411,0x411, +0x411,0x411,0,0,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0,0,0x2769,0x411,0x27e9,0x411, +0x2899,0x411,0x2949,0x411,0,0xfc12,0,0xfc12,0,0xfc12,0,0xfc12,0x411,0x411,0x411,0x411, 0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0x2511,0x2511,0x2b11,0x2b11, -0x2b11,0x2b11,0x3211,0x3211,0x4011,0x4011,0x3811,0x3811,0x3f11,0x3f11,0,0,0x2a39,0x2aa9,0x2b19,0x2b89, -0x2bf9,0x2c69,0x2cd9,0x2d49,0x2dbb,0x2e2b,0x2e9b,0x2f0b,0x2f7b,0x2feb,0x305b,0x30cb,0x3139,0x31a9,0x3219,0x3289, -0x32f9,0x3369,0x33d9,0x3449,0x34bb,0x352b,0x359b,0x360b,0x367b,0x36eb,0x375b,0x37cb,0x3839,0x38a9,0x3919,0x3989, -0x39f9,0x3a69,0x3ad9,0x3b49,0x3bbb,0x3c2b,0x3c9b,0x3d0b,0x3d7b,0x3deb,0x3e5b,0x3ecb,0x411,0x411,0x3f39,0x3fb9, -0x4029,0,0x40a9,0x4129,0xfc12,0xfc12,0xdb12,0xdb12,0x41db,4,0x4249,4,4,4,0x4299,0x4319, -0x4389,0,0x4409,0x4489,0xd512,0xd512,0xd512,0xd512,0x453b,4,4,4,0x411,0x411,0x45a9,0x4659, -0,0,0x4729,0x47a9,0xfc12,0xfc12,0xce12,0xce12,0,4,4,4,0x411,0x411,0x4859,0x4909, -0x49d9,0x391,0x4a59,0x4ad9,0xfc12,0xfc12,0xc812,0xc812,0xfc92,4,4,4,0,0,0x4b89,0x4c09, -0x4c79,0,0x4cf9,0x4d79,0xc012,0xc012,0xc112,0xc112,0x4e2b,4,4,0,0,0,0,0, +0x2b11,0x2b11,0x3211,0x3211,0x4011,0x4011,0x3811,0x3811,0x3f11,0x3f11,0,0,0x29f9,0x2a69,0x2ad9,0x2b49, +0x2bb9,0x2c29,0x2c99,0x2d09,0x2d7b,0x2deb,0x2e5b,0x2ecb,0x2f3b,0x2fab,0x301b,0x308b,0x30f9,0x3169,0x31d9,0x3249, +0x32b9,0x3329,0x3399,0x3409,0x347b,0x34eb,0x355b,0x35cb,0x363b,0x36ab,0x371b,0x378b,0x37f9,0x3869,0x38d9,0x3949, +0x39b9,0x3a29,0x3a99,0x3b09,0x3b7b,0x3beb,0x3c5b,0x3ccb,0x3d3b,0x3dab,0x3e1b,0x3e8b,0x411,0x411,0x3ef9,0x3f79, +0x3fe9,0,0x4069,0x40e9,0xfc12,0xfc12,0xdb12,0xdb12,0x419b,4,0x4209,4,4,4,0x4259,0x42d9, +0x4349,0,0x43c9,0x4449,0xd512,0xd512,0xd512,0xd512,0x44fb,4,4,4,0x411,0x411,0x4569,0x4619, +0,0,0x46e9,0x4769,0xfc12,0xfc12,0xce12,0xce12,0,4,4,4,0x411,0x411,0x4819,0x48c9, +0x4999,0x391,0x4a19,0x4a99,0xfc12,0xfc12,0xc812,0xc812,0xfc92,4,4,4,0,0,0x4b49,0x4bc9, +0x4c39,0,0x4cb9,0x4d39,0xc012,0xc012,0xc112,0xc112,0x4deb,4,4,0,0,0,0,0, 0,0,0,0,0,0,0,4,4,4,4,4,0,0,0,0, 0,0,0,0,4,4,0,0,0,0,0,0,4,0,0,4, 0,0,4,4,4,4,4,0,0,0,0,0,0,0,0,0, @@ -515,8 +515,8 @@ static const uint16_t ucase_props_trieIndex[12356]={ 0x64,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,2, 0,0,1,2,2,2,1,1,2,2,2,1,0,2,0,0, -0,2,2,2,2,2,0,0,0,0,0,0,2,0,0x4e9a,0, -2,0,0x4eda,0x4f1a,2,2,0,1,2,2,0xe12,2,1,0,0,0, +0,2,2,2,2,2,0,0,0,0,0,0,2,0,0x4e5a,0, +2,0,0x4e9a,0x4eda,2,2,0,1,2,2,0xe12,2,1,0,0,0, 0,1,0,0,1,1,2,2,0,0,0,0,0,2,1,1, 0x21,0x21,0,0,0,0,0xf211,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812, @@ -531,14 +531,14 @@ static const uint16_t ucase_props_trieIndex[12356]={ 0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812, 0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811, 0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811, -0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0,0x92,0xff91,0x4f5a,0x4f7a,0x4f9a,0x4fb9,0x4fd9,0x92, -0xff91,0x92,0xff91,0x92,0xff91,0x4ffa,0x501a,0x503a,0x505a,1,0x92,0xff91,1,0x92,0xff91,1, -1,1,1,1,0x25,5,0x507a,0x507a,0x92,0xff91,0x92,0xff91,1,0,0,0, +0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0,0x92,0xff91,0x4f1a,0x4f3a,0x4f5a,0x4f79,0x4f99,0x92, +0xff91,0x92,0xff91,0x92,0xff91,0x4fba,0x4fda,0x4ffa,0x501a,1,0x92,0xff91,1,0x92,0xff91,1, +1,1,1,1,0x25,5,0x503a,0x503a,0x92,0xff91,0x92,0xff91,1,0,0,0, 0,0,0,0x92,0xff91,0x92,0xff91,0x44,0x44,0x44,0x92,0xff91,0,0,0,0, -0,0,0,0,0,0,0,0,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099, -0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099, -0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0,0x5099,0,0,0,0, -0,0x5099,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059, +0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059, +0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0,0x5059,0,0,0,0, +0,0x5059,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, @@ -552,7 +552,7 @@ static const uint16_t ucase_props_trieIndex[12356]={ 0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0x92,0xff91,0x92,0xff91, -0x92,0xff91,0x92,0xff91,0x92,0xff91,0x50ba,0x50f9,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91, +0x92,0xff91,0x92,0xff91,0x92,0xff91,0x507a,0x50b9,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91, 0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0,0x44, 4,4,4,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,4, 0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91, @@ -564,11 +564,11 @@ static const uint16_t ucase_props_trieIndex[12356]={ 4,4,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91, 1,1,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91, 0x92,0xff91,0x92,0xff91,5,1,1,1,1,1,1,1,1,0x92,0xff91,0x92, -0xff91,0x513a,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,4,4,4,0x92, -0xff91,0x515a,1,0,0x92,0xff91,0x92,0xff91,0x1811,1,0x92,0xff91,0x92,0xff91,0x92,0xff91, -0x92,0xff91,0x92,0xff91,0x92,0xff91,0x517a,0x519a,0x51ba,0x51da,0x517a,1,0x51fa,0x521a,0x523a,0x525a, +0xff91,0x50fa,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,4,4,4,0x92, +0xff91,0x511a,1,0,0x92,0xff91,0x92,0xff91,0x1811,1,0x92,0xff91,0x92,0xff91,0x92,0xff91, +0x92,0xff91,0x92,0xff91,0x92,0xff91,0x513a,0x515a,0x517a,0x519a,0x513a,1,0x51ba,0x51da,0x51fa,0x521a, 0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0,0,0x92,0xff91, -0xe812,0x527a,0x529a,0x92,0xff91,0x92,0xff91,0,0,0,0,0,0,0,0,0, +0xe812,0x523a,0x525a,0x92,0xff91,0x92,0xff91,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0x92,0xff91,0, 5,5,1,0,0,0,0,0,0,0,4,0,0,0,0x64,0, 0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0, @@ -597,17 +597,17 @@ static const uint16_t ucase_props_trieIndex[12356]={ 0,0,0,0,4,4,0,0,0,0,0,4,4,0,0x64,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,0x52b9,1,1,1,1,1,1,1,4,5,5,5,5, +1,1,1,0x5279,1,1,1,1,1,1,1,4,5,5,5,5, 1,1,1,1,1,1,1,1,1,4,4,4,0,0,0,0, -0x52d9,0x5309,0x5339,0x5369,0x5399,0x53c9,0x53f9,0x5429,0x5459,0x5489,0x54b9,0x54e9,0x5519,0x5549,0x5579,0x55a9, -0x5bd9,0x5c09,0x5c39,0x5c69,0x5c99,0x5cc9,0x5cf9,0x5d29,0x5d59,0x5d89,0x5db9,0x5de9,0x5e19,0x5e49,0x5e79,0x5ea9, -0x5ed9,0x5f09,0x5f39,0x5f69,0x5f99,0x5fc9,0x5ff9,0x6029,0x6059,0x6089,0x60b9,0x60e9,0x6119,0x6149,0x6179,0x61a9, -0x55d9,0x5609,0x5639,0x5669,0x5699,0x56c9,0x56f9,0x5729,0x5759,0x5789,0x57b9,0x57e9,0x5819,0x5849,0x5879,0x58a9, -0x58d9,0x5909,0x5939,0x5969,0x5999,0x59c9,0x59f9,0x5a29,0x5a59,0x5a89,0x5ab9,0x5ae9,0x5b19,0x5b49,0x5b79,0x5ba9, +0x5299,0x52c9,0x52f9,0x5329,0x5359,0x5389,0x53b9,0x53e9,0x5419,0x5449,0x5479,0x54a9,0x54d9,0x5509,0x5539,0x5569, +0x5b99,0x5bc9,0x5bf9,0x5c29,0x5c59,0x5c89,0x5cb9,0x5ce9,0x5d19,0x5d49,0x5d79,0x5da9,0x5dd9,0x5e09,0x5e39,0x5e69, +0x5e99,0x5ec9,0x5ef9,0x5f29,0x5f59,0x5f89,0x5fb9,0x5fe9,0x6019,0x6049,0x6079,0x60a9,0x60d9,0x6109,0x6139,0x6169, +0x5599,0x55c9,0x55f9,0x5629,0x5659,0x5689,0x56b9,0x56e9,0x5719,0x5749,0x5779,0x57a9,0x57d9,0x5809,0x5839,0x5869, +0x5899,0x58c9,0x58f9,0x5929,0x5959,0x5989,0x59b9,0x59e9,0x5a19,0x5a49,0x5a79,0x5aa9,0x5ad9,0x5b09,0x5b39,0x5b69, 0,0,0,0,0,4,0,0,4,0,0,0,0,0x64,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x61d9,0x6259,0x62d9,0x6359,0x6409,0x64b9,0x6559,0,0,0,0,0,0,0,0,0, -0,0,0,0x65f9,0x6679,0x66f9,0x6779,0x67f9,0,0,0,0,0,0,0x64,0, +0x6199,0x6219,0x6299,0x6319,0x63c9,0x6479,0x6519,0,0,0,0,0,0,0,0,0, +0,0,0,0x65b9,0x6639,0x66b9,0x6739,0x67b9,0,0,0,0,0,0,0x64,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 4,4,4,4,0,0,0,4,0,0,0,0,0,0,0,0, @@ -791,7 +791,7 @@ static const uint16_t ucase_props_trieIndex[12356]={ 0,0,0,0 }; -static const uint16_t ucase_props_exceptions[1671]={ +static const uint16_t ucase_props_exceptions[1667]={ 0xc850,0x20,2,0x130,0x131,0x4810,0x20,0x841,0x6b,1,0x212a,0x841,0x73,1,0x17f,0x5c50, 0x20,2,0x130,0x131,0x844,0x4b,1,0x212a,0x844,0x53,1,0x17f,0x806,0x3bc,0x39c,0x841, 0xe5,1,0x212b,0x8c0,1,0x2220,0x73,0x73,0x53,0x53,0x53,0x73,0x1e9e,0x844,0xc5,1, @@ -815,88 +815,88 @@ static const uint16_t ucase_props_exceptions[1671]={ 0x43e,1,0x1c82,0x841,0x441,1,0x1c83,0x841,0x442,2,0x1c84,0x1c85,0x841,0x44a,1,0x1c86, 0x844,0x412,1,0x1c80,0x844,0x414,1,0x1c81,0x844,0x41e,1,0x1c82,0x844,0x421,1,0x1c83, 0x844,0x422,2,0x1c84,0x1c85,0x844,0x42a,1,0x1c86,0x841,0x463,1,0x1c87,0x844,0x462,1, -0x1c87,0x880,0x2220,0x565,0x582,0x535,0x552,0x535,0x582,0x810,0x1c60,0x80c,0x1c90,0x10d0,0x80c,0x1c91, -0x10d1,0x80c,0x1c92,0x10d2,0x80c,0x1c93,0x10d3,0x80c,0x1c94,0x10d4,0x80c,0x1c95,0x10d5,0x80c,0x1c96,0x10d6, -0x80c,0x1c97,0x10d7,0x80c,0x1c98,0x10d8,0x80c,0x1c99,0x10d9,0x80c,0x1c9a,0x10da,0x80c,0x1c9b,0x10db,0x80c, -0x1c9c,0x10dc,0x80c,0x1c9d,0x10dd,0x80c,0x1c9e,0x10de,0x80c,0x1c9f,0x10df,0x80c,0x1ca0,0x10e0,0x80c,0x1ca1, -0x10e1,0x80c,0x1ca2,0x10e2,0x80c,0x1ca3,0x10e3,0x80c,0x1ca4,0x10e4,0x80c,0x1ca5,0x10e5,0x80c,0x1ca6,0x10e6, -0x80c,0x1ca7,0x10e7,0x80c,0x1ca8,0x10e8,0x80c,0x1ca9,0x10e9,0x80c,0x1caa,0x10ea,0x80c,0x1cab,0x10eb,0x80c, -0x1cac,0x10ec,0x80c,0x1cad,0x10ed,0x80c,0x1cae,0x10ee,0x80c,0x1caf,0x10ef,0x80c,0x1cb0,0x10f0,0x80c,0x1cb1, -0x10f1,0x80c,0x1cb2,0x10f2,0x80c,0x1cb3,0x10f3,0x80c,0x1cb4,0x10f4,0x80c,0x1cb5,0x10f5,0x80c,0x1cb6,0x10f6, -0x80c,0x1cb7,0x10f7,0x80c,0x1cb8,0x10f8,0x80c,0x1cb9,0x10f9,0x80c,0x1cba,0x10fa,0x80c,0x1cbd,0x10fd,0x80c, -0x1cbe,0x10fe,0x80c,0x1cbf,0x10ff,0xa10,0x97d0,0xa10,8,0x806,0x13f0,0x13f0,0x806,0x13f1,0x13f1,0x806, -0x13f2,0x13f2,0x806,0x13f3,0x13f3,0x806,0x13f4,0x13f4,0x806,0x13f5,0x13f5,0x806,0x432,0x412,0x806,0x434, -0x414,0x806,0x43e,0x41e,0x806,0x441,0x421,0x846,0x442,0x422,1,0x1c85,0x846,0x442,0x422,1, -0x1c84,0x806,0x44a,0x42a,0x806,0x463,0x462,0x806,0xa64b,0xa64a,0xc10,0xbc0,0x810,0x8a04,0x810,0xee6, -0x810,0x8a38,0x841,0x1e61,1,0x1e9b,0x844,0x1e60,1,0x1e9b,0x880,0x2220,0x68,0x331,0x48,0x331, -0x48,0x331,0x880,0x2220,0x74,0x308,0x54,0x308,0x54,0x308,0x880,0x2220,0x77,0x30a,0x57,0x30a, -0x57,0x30a,0x880,0x2220,0x79,0x30a,0x59,0x30a,0x59,0x30a,0x880,0x2220,0x61,0x2be,0x41,0x2be, -0x41,0x2be,0x806,0x1e61,0x1e60,0xc90,0x1dbf,0x20,0x73,0x73,0x880,0x2220,0x3c5,0x313,0x3a5,0x313, -0x3a5,0x313,0x880,0x3330,0x3c5,0x313,0x300,0x3a5,0x313,0x300,0x3a5,0x313,0x300,0x880,0x3330,0x3c5, -0x313,0x301,0x3a5,0x313,0x301,0x3a5,0x313,0x301,0x880,0x3330,0x3c5,0x313,0x342,0x3a5,0x313,0x342, -0x3a5,0x313,0x342,0x890,8,0x220,0x1f00,0x3b9,0x1f08,0x399,0x890,8,0x220,0x1f01,0x3b9,0x1f09, -0x399,0x890,8,0x220,0x1f02,0x3b9,0x1f0a,0x399,0x890,8,0x220,0x1f03,0x3b9,0x1f0b,0x399,0x890, -8,0x220,0x1f04,0x3b9,0x1f0c,0x399,0x890,8,0x220,0x1f05,0x3b9,0x1f0d,0x399,0x890,8,0x220, -0x1f06,0x3b9,0x1f0e,0x399,0x890,8,0x220,0x1f07,0x3b9,0x1f0f,0x399,0xc90,8,0x220,0x1f00,0x3b9, -0x1f08,0x399,0xc90,8,0x220,0x1f01,0x3b9,0x1f09,0x399,0xc90,8,0x220,0x1f02,0x3b9,0x1f0a,0x399, -0xc90,8,0x220,0x1f03,0x3b9,0x1f0b,0x399,0xc90,8,0x220,0x1f04,0x3b9,0x1f0c,0x399,0xc90,8, -0x220,0x1f05,0x3b9,0x1f0d,0x399,0xc90,8,0x220,0x1f06,0x3b9,0x1f0e,0x399,0xc90,8,0x220,0x1f07, -0x3b9,0x1f0f,0x399,0x890,8,0x220,0x1f20,0x3b9,0x1f28,0x399,0x890,8,0x220,0x1f21,0x3b9,0x1f29, -0x399,0x890,8,0x220,0x1f22,0x3b9,0x1f2a,0x399,0x890,8,0x220,0x1f23,0x3b9,0x1f2b,0x399,0x890, -8,0x220,0x1f24,0x3b9,0x1f2c,0x399,0x890,8,0x220,0x1f25,0x3b9,0x1f2d,0x399,0x890,8,0x220, -0x1f26,0x3b9,0x1f2e,0x399,0x890,8,0x220,0x1f27,0x3b9,0x1f2f,0x399,0xc90,8,0x220,0x1f20,0x3b9, -0x1f28,0x399,0xc90,8,0x220,0x1f21,0x3b9,0x1f29,0x399,0xc90,8,0x220,0x1f22,0x3b9,0x1f2a,0x399, -0xc90,8,0x220,0x1f23,0x3b9,0x1f2b,0x399,0xc90,8,0x220,0x1f24,0x3b9,0x1f2c,0x399,0xc90,8, -0x220,0x1f25,0x3b9,0x1f2d,0x399,0xc90,8,0x220,0x1f26,0x3b9,0x1f2e,0x399,0xc90,8,0x220,0x1f27, -0x3b9,0x1f2f,0x399,0x890,8,0x220,0x1f60,0x3b9,0x1f68,0x399,0x890,8,0x220,0x1f61,0x3b9,0x1f69, -0x399,0x890,8,0x220,0x1f62,0x3b9,0x1f6a,0x399,0x890,8,0x220,0x1f63,0x3b9,0x1f6b,0x399,0x890, -8,0x220,0x1f64,0x3b9,0x1f6c,0x399,0x890,8,0x220,0x1f65,0x3b9,0x1f6d,0x399,0x890,8,0x220, -0x1f66,0x3b9,0x1f6e,0x399,0x890,8,0x220,0x1f67,0x3b9,0x1f6f,0x399,0xc90,8,0x220,0x1f60,0x3b9, -0x1f68,0x399,0xc90,8,0x220,0x1f61,0x3b9,0x1f69,0x399,0xc90,8,0x220,0x1f62,0x3b9,0x1f6a,0x399, -0xc90,8,0x220,0x1f63,0x3b9,0x1f6b,0x399,0xc90,8,0x220,0x1f64,0x3b9,0x1f6c,0x399,0xc90,8, -0x220,0x1f65,0x3b9,0x1f6d,0x399,0xc90,8,0x220,0x1f66,0x3b9,0x1f6e,0x399,0xc90,8,0x220,0x1f67, -0x3b9,0x1f6f,0x399,0x880,0x2220,0x1f70,0x3b9,0x1fba,0x399,0x1fba,0x345,0x890,9,0x220,0x3b1,0x3b9, -0x391,0x399,0x880,0x2220,0x3ac,0x3b9,0x386,0x399,0x386,0x345,0x880,0x2220,0x3b1,0x342,0x391,0x342, -0x391,0x342,0x880,0x3330,0x3b1,0x342,0x3b9,0x391,0x342,0x399,0x391,0x342,0x345,0xc90,9,0x220, -0x3b1,0x3b9,0x391,0x399,0x846,0x3b9,0x399,1,0x345,0x880,0x2220,0x1f74,0x3b9,0x1fca,0x399,0x1fca, -0x345,0x890,9,0x220,0x3b7,0x3b9,0x397,0x399,0x880,0x2220,0x3ae,0x3b9,0x389,0x399,0x389,0x345, -0x880,0x2220,0x3b7,0x342,0x397,0x342,0x397,0x342,0x880,0x3330,0x3b7,0x342,0x3b9,0x397,0x342,0x399, -0x397,0x342,0x345,0xc90,9,0x220,0x3b7,0x3b9,0x397,0x399,0x880,0x3330,0x3b9,0x308,0x300,0x399, -0x308,0x300,0x399,0x308,0x300,0x8c0,1,0x3330,0x3b9,0x308,0x301,0x399,0x308,0x301,0x399,0x308, -0x301,0x390,0x880,0x2220,0x3b9,0x342,0x399,0x342,0x399,0x342,0x880,0x3330,0x3b9,0x308,0x342,0x399, -0x308,0x342,0x399,0x308,0x342,0x880,0x3330,0x3c5,0x308,0x300,0x3a5,0x308,0x300,0x3a5,0x308,0x300, -0x8c0,1,0x3330,0x3c5,0x308,0x301,0x3a5,0x308,0x301,0x3a5,0x308,0x301,0x3b0,0x880,0x2220,0x3c1, -0x313,0x3a1,0x313,0x3a1,0x313,0x880,0x2220,0x3c5,0x342,0x3a5,0x342,0x3a5,0x342,0x880,0x3330,0x3c5, -0x308,0x342,0x3a5,0x308,0x342,0x3a5,0x308,0x342,0x880,0x2220,0x1f7c,0x3b9,0x1ffa,0x399,0x1ffa,0x345, -0x890,9,0x220,0x3c9,0x3b9,0x3a9,0x399,0x880,0x2220,0x3ce,0x3b9,0x38f,0x399,0x38f,0x345,0x880, -0x2220,0x3c9,0x342,0x3a9,0x342,0x3a9,0x342,0x880,0x3330,0x3c9,0x342,0x3b9,0x3a9,0x342,0x399,0x3a9, -0x342,0x345,0xc90,9,0x220,0x3c9,0x3b9,0x3a9,0x399,0xc50,0x1d5d,1,0x3a9,0xc50,0x20bf,1, -0x4b,0xc50,0x2046,1,0xc5,0xc10,0x29f7,0xc10,0xee6,0xc10,0x29e7,0xc10,0x2a2b,0xc10,0x2a28,0xc10, -0x2a1c,0xc10,0x29fd,0xc10,0x2a1f,0xc10,0x2a1e,0xc10,0x2a3f,0xc10,0x1c60,0x841,0xa64b,1,0x1c88,0x844, -0xa64a,1,0x1c88,0xc10,0x8a04,0xc10,0xa528,0xc10,0xa544,0xc10,0xa54f,0xc10,0xa54b,0xc10,0xa541,0xc10, -0xa512,0xc10,0xa52a,0xc10,0xa515,0x810,0x3a0,0xc10,0xa543,0xc10,0x8a38,0xc10,0x3a0,0x806,0x13a0,0x13a0, -0x806,0x13a1,0x13a1,0x806,0x13a2,0x13a2,0x806,0x13a3,0x13a3,0x806,0x13a4,0x13a4,0x806,0x13a5,0x13a5,0x806, -0x13a6,0x13a6,0x806,0x13a7,0x13a7,0x806,0x13a8,0x13a8,0x806,0x13a9,0x13a9,0x806,0x13aa,0x13aa,0x806,0x13ab, -0x13ab,0x806,0x13ac,0x13ac,0x806,0x13ad,0x13ad,0x806,0x13ae,0x13ae,0x806,0x13af,0x13af,0x806,0x13b0,0x13b0, -0x806,0x13b1,0x13b1,0x806,0x13b2,0x13b2,0x806,0x13b3,0x13b3,0x806,0x13b4,0x13b4,0x806,0x13b5,0x13b5,0x806, -0x13b6,0x13b6,0x806,0x13b7,0x13b7,0x806,0x13b8,0x13b8,0x806,0x13b9,0x13b9,0x806,0x13ba,0x13ba,0x806,0x13bb, -0x13bb,0x806,0x13bc,0x13bc,0x806,0x13bd,0x13bd,0x806,0x13be,0x13be,0x806,0x13bf,0x13bf,0x806,0x13c0,0x13c0, -0x806,0x13c1,0x13c1,0x806,0x13c2,0x13c2,0x806,0x13c3,0x13c3,0x806,0x13c4,0x13c4,0x806,0x13c5,0x13c5,0x806, -0x13c6,0x13c6,0x806,0x13c7,0x13c7,0x806,0x13c8,0x13c8,0x806,0x13c9,0x13c9,0x806,0x13ca,0x13ca,0x806,0x13cb, -0x13cb,0x806,0x13cc,0x13cc,0x806,0x13cd,0x13cd,0x806,0x13ce,0x13ce,0x806,0x13cf,0x13cf,0x806,0x13d0,0x13d0, -0x806,0x13d1,0x13d1,0x806,0x13d2,0x13d2,0x806,0x13d3,0x13d3,0x806,0x13d4,0x13d4,0x806,0x13d5,0x13d5,0x806, -0x13d6,0x13d6,0x806,0x13d7,0x13d7,0x806,0x13d8,0x13d8,0x806,0x13d9,0x13d9,0x806,0x13da,0x13da,0x806,0x13db, -0x13db,0x806,0x13dc,0x13dc,0x806,0x13dd,0x13dd,0x806,0x13de,0x13de,0x806,0x13df,0x13df,0x806,0x13e0,0x13e0, -0x806,0x13e1,0x13e1,0x806,0x13e2,0x13e2,0x806,0x13e3,0x13e3,0x806,0x13e4,0x13e4,0x806,0x13e5,0x13e5,0x806, -0x13e6,0x13e6,0x806,0x13e7,0x13e7,0x806,0x13e8,0x13e8,0x806,0x13e9,0x13e9,0x806,0x13ea,0x13ea,0x806,0x13eb, -0x13eb,0x806,0x13ec,0x13ec,0x806,0x13ed,0x13ed,0x806,0x13ee,0x13ee,0x806,0x13ef,0x13ef,0x880,0x2220,0x66, -0x66,0x46,0x46,0x46,0x66,0x880,0x2220,0x66,0x69,0x46,0x49,0x46,0x69,0x880,0x2220,0x66, -0x6c,0x46,0x4c,0x46,0x6c,0x880,0x3330,0x66,0x66,0x69,0x46,0x46,0x49,0x46,0x66,0x69, -0x880,0x3330,0x66,0x66,0x6c,0x46,0x46,0x4c,0x46,0x66,0x6c,0x8c0,1,0x2220,0x73,0x74, -0x53,0x54,0x53,0x74,0xfb06,0x8c0,1,0x2220,0x73,0x74,0x53,0x54,0x53,0x74,0xfb05,0x880, -0x2220,0x574,0x576,0x544,0x546,0x544,0x576,0x880,0x2220,0x574,0x565,0x544,0x535,0x544,0x565,0x880, -0x2220,0x574,0x56b,0x544,0x53b,0x544,0x56b,0x880,0x2220,0x57e,0x576,0x54e,0x546,0x54e,0x576,0x880, -0x2220,0x574,0x56d,0x544,0x53d,0x544,0x56d +0x1c87,0x4880,0x20,0x565,0x582,0x810,0x1c60,0x80c,0x1c90,0x10d0,0x80c,0x1c91,0x10d1,0x80c,0x1c92,0x10d2, +0x80c,0x1c93,0x10d3,0x80c,0x1c94,0x10d4,0x80c,0x1c95,0x10d5,0x80c,0x1c96,0x10d6,0x80c,0x1c97,0x10d7,0x80c, +0x1c98,0x10d8,0x80c,0x1c99,0x10d9,0x80c,0x1c9a,0x10da,0x80c,0x1c9b,0x10db,0x80c,0x1c9c,0x10dc,0x80c,0x1c9d, +0x10dd,0x80c,0x1c9e,0x10de,0x80c,0x1c9f,0x10df,0x80c,0x1ca0,0x10e0,0x80c,0x1ca1,0x10e1,0x80c,0x1ca2,0x10e2, +0x80c,0x1ca3,0x10e3,0x80c,0x1ca4,0x10e4,0x80c,0x1ca5,0x10e5,0x80c,0x1ca6,0x10e6,0x80c,0x1ca7,0x10e7,0x80c, +0x1ca8,0x10e8,0x80c,0x1ca9,0x10e9,0x80c,0x1caa,0x10ea,0x80c,0x1cab,0x10eb,0x80c,0x1cac,0x10ec,0x80c,0x1cad, +0x10ed,0x80c,0x1cae,0x10ee,0x80c,0x1caf,0x10ef,0x80c,0x1cb0,0x10f0,0x80c,0x1cb1,0x10f1,0x80c,0x1cb2,0x10f2, +0x80c,0x1cb3,0x10f3,0x80c,0x1cb4,0x10f4,0x80c,0x1cb5,0x10f5,0x80c,0x1cb6,0x10f6,0x80c,0x1cb7,0x10f7,0x80c, +0x1cb8,0x10f8,0x80c,0x1cb9,0x10f9,0x80c,0x1cba,0x10fa,0x80c,0x1cbd,0x10fd,0x80c,0x1cbe,0x10fe,0x80c,0x1cbf, +0x10ff,0xa10,0x97d0,0xa10,8,0x806,0x13f0,0x13f0,0x806,0x13f1,0x13f1,0x806,0x13f2,0x13f2,0x806,0x13f3, +0x13f3,0x806,0x13f4,0x13f4,0x806,0x13f5,0x13f5,0x806,0x432,0x412,0x806,0x434,0x414,0x806,0x43e,0x41e, +0x806,0x441,0x421,0x846,0x442,0x422,1,0x1c85,0x846,0x442,0x422,1,0x1c84,0x806,0x44a,0x42a, +0x806,0x463,0x462,0x806,0xa64b,0xa64a,0xc10,0xbc0,0x810,0x8a04,0x810,0xee6,0x810,0x8a38,0x841,0x1e61, +1,0x1e9b,0x844,0x1e60,1,0x1e9b,0x880,0x2220,0x68,0x331,0x48,0x331,0x48,0x331,0x880,0x2220, +0x74,0x308,0x54,0x308,0x54,0x308,0x880,0x2220,0x77,0x30a,0x57,0x30a,0x57,0x30a,0x880,0x2220, +0x79,0x30a,0x59,0x30a,0x59,0x30a,0x880,0x2220,0x61,0x2be,0x41,0x2be,0x41,0x2be,0x806,0x1e61, +0x1e60,0xc90,0x1dbf,0x20,0x73,0x73,0x880,0x2220,0x3c5,0x313,0x3a5,0x313,0x3a5,0x313,0x880,0x3330, +0x3c5,0x313,0x300,0x3a5,0x313,0x300,0x3a5,0x313,0x300,0x880,0x3330,0x3c5,0x313,0x301,0x3a5,0x313, +0x301,0x3a5,0x313,0x301,0x880,0x3330,0x3c5,0x313,0x342,0x3a5,0x313,0x342,0x3a5,0x313,0x342,0x890, +8,0x220,0x1f00,0x3b9,0x1f08,0x399,0x890,8,0x220,0x1f01,0x3b9,0x1f09,0x399,0x890,8,0x220, +0x1f02,0x3b9,0x1f0a,0x399,0x890,8,0x220,0x1f03,0x3b9,0x1f0b,0x399,0x890,8,0x220,0x1f04,0x3b9, +0x1f0c,0x399,0x890,8,0x220,0x1f05,0x3b9,0x1f0d,0x399,0x890,8,0x220,0x1f06,0x3b9,0x1f0e,0x399, +0x890,8,0x220,0x1f07,0x3b9,0x1f0f,0x399,0xc90,8,0x220,0x1f00,0x3b9,0x1f08,0x399,0xc90,8, +0x220,0x1f01,0x3b9,0x1f09,0x399,0xc90,8,0x220,0x1f02,0x3b9,0x1f0a,0x399,0xc90,8,0x220,0x1f03, +0x3b9,0x1f0b,0x399,0xc90,8,0x220,0x1f04,0x3b9,0x1f0c,0x399,0xc90,8,0x220,0x1f05,0x3b9,0x1f0d, +0x399,0xc90,8,0x220,0x1f06,0x3b9,0x1f0e,0x399,0xc90,8,0x220,0x1f07,0x3b9,0x1f0f,0x399,0x890, +8,0x220,0x1f20,0x3b9,0x1f28,0x399,0x890,8,0x220,0x1f21,0x3b9,0x1f29,0x399,0x890,8,0x220, +0x1f22,0x3b9,0x1f2a,0x399,0x890,8,0x220,0x1f23,0x3b9,0x1f2b,0x399,0x890,8,0x220,0x1f24,0x3b9, +0x1f2c,0x399,0x890,8,0x220,0x1f25,0x3b9,0x1f2d,0x399,0x890,8,0x220,0x1f26,0x3b9,0x1f2e,0x399, +0x890,8,0x220,0x1f27,0x3b9,0x1f2f,0x399,0xc90,8,0x220,0x1f20,0x3b9,0x1f28,0x399,0xc90,8, +0x220,0x1f21,0x3b9,0x1f29,0x399,0xc90,8,0x220,0x1f22,0x3b9,0x1f2a,0x399,0xc90,8,0x220,0x1f23, +0x3b9,0x1f2b,0x399,0xc90,8,0x220,0x1f24,0x3b9,0x1f2c,0x399,0xc90,8,0x220,0x1f25,0x3b9,0x1f2d, +0x399,0xc90,8,0x220,0x1f26,0x3b9,0x1f2e,0x399,0xc90,8,0x220,0x1f27,0x3b9,0x1f2f,0x399,0x890, +8,0x220,0x1f60,0x3b9,0x1f68,0x399,0x890,8,0x220,0x1f61,0x3b9,0x1f69,0x399,0x890,8,0x220, +0x1f62,0x3b9,0x1f6a,0x399,0x890,8,0x220,0x1f63,0x3b9,0x1f6b,0x399,0x890,8,0x220,0x1f64,0x3b9, +0x1f6c,0x399,0x890,8,0x220,0x1f65,0x3b9,0x1f6d,0x399,0x890,8,0x220,0x1f66,0x3b9,0x1f6e,0x399, +0x890,8,0x220,0x1f67,0x3b9,0x1f6f,0x399,0xc90,8,0x220,0x1f60,0x3b9,0x1f68,0x399,0xc90,8, +0x220,0x1f61,0x3b9,0x1f69,0x399,0xc90,8,0x220,0x1f62,0x3b9,0x1f6a,0x399,0xc90,8,0x220,0x1f63, +0x3b9,0x1f6b,0x399,0xc90,8,0x220,0x1f64,0x3b9,0x1f6c,0x399,0xc90,8,0x220,0x1f65,0x3b9,0x1f6d, +0x399,0xc90,8,0x220,0x1f66,0x3b9,0x1f6e,0x399,0xc90,8,0x220,0x1f67,0x3b9,0x1f6f,0x399,0x880, +0x2220,0x1f70,0x3b9,0x1fba,0x399,0x1fba,0x345,0x890,9,0x220,0x3b1,0x3b9,0x391,0x399,0x880,0x2220, +0x3ac,0x3b9,0x386,0x399,0x386,0x345,0x880,0x2220,0x3b1,0x342,0x391,0x342,0x391,0x342,0x880,0x3330, +0x3b1,0x342,0x3b9,0x391,0x342,0x399,0x391,0x342,0x345,0xc90,9,0x220,0x3b1,0x3b9,0x391,0x399, +0x846,0x3b9,0x399,1,0x345,0x880,0x2220,0x1f74,0x3b9,0x1fca,0x399,0x1fca,0x345,0x890,9,0x220, +0x3b7,0x3b9,0x397,0x399,0x880,0x2220,0x3ae,0x3b9,0x389,0x399,0x389,0x345,0x880,0x2220,0x3b7,0x342, +0x397,0x342,0x397,0x342,0x880,0x3330,0x3b7,0x342,0x3b9,0x397,0x342,0x399,0x397,0x342,0x345,0xc90, +9,0x220,0x3b7,0x3b9,0x397,0x399,0x880,0x3330,0x3b9,0x308,0x300,0x399,0x308,0x300,0x399,0x308, +0x300,0x8c0,1,0x3330,0x3b9,0x308,0x301,0x399,0x308,0x301,0x399,0x308,0x301,0x390,0x880,0x2220, +0x3b9,0x342,0x399,0x342,0x399,0x342,0x880,0x3330,0x3b9,0x308,0x342,0x399,0x308,0x342,0x399,0x308, +0x342,0x880,0x3330,0x3c5,0x308,0x300,0x3a5,0x308,0x300,0x3a5,0x308,0x300,0x8c0,1,0x3330,0x3c5, +0x308,0x301,0x3a5,0x308,0x301,0x3a5,0x308,0x301,0x3b0,0x880,0x2220,0x3c1,0x313,0x3a1,0x313,0x3a1, +0x313,0x880,0x2220,0x3c5,0x342,0x3a5,0x342,0x3a5,0x342,0x880,0x3330,0x3c5,0x308,0x342,0x3a5,0x308, +0x342,0x3a5,0x308,0x342,0x880,0x2220,0x1f7c,0x3b9,0x1ffa,0x399,0x1ffa,0x345,0x890,9,0x220,0x3c9, +0x3b9,0x3a9,0x399,0x880,0x2220,0x3ce,0x3b9,0x38f,0x399,0x38f,0x345,0x880,0x2220,0x3c9,0x342,0x3a9, +0x342,0x3a9,0x342,0x880,0x3330,0x3c9,0x342,0x3b9,0x3a9,0x342,0x399,0x3a9,0x342,0x345,0xc90,9, +0x220,0x3c9,0x3b9,0x3a9,0x399,0xc50,0x1d5d,1,0x3a9,0xc50,0x20bf,1,0x4b,0xc50,0x2046,1, +0xc5,0xc10,0x29f7,0xc10,0xee6,0xc10,0x29e7,0xc10,0x2a2b,0xc10,0x2a28,0xc10,0x2a1c,0xc10,0x29fd,0xc10, +0x2a1f,0xc10,0x2a1e,0xc10,0x2a3f,0xc10,0x1c60,0x841,0xa64b,1,0x1c88,0x844,0xa64a,1,0x1c88,0xc10, +0x8a04,0xc10,0xa528,0xc10,0xa544,0xc10,0xa54f,0xc10,0xa54b,0xc10,0xa541,0xc10,0xa512,0xc10,0xa52a,0xc10, +0xa515,0x810,0x3a0,0xc10,0xa543,0xc10,0x8a38,0xc10,0x3a0,0x806,0x13a0,0x13a0,0x806,0x13a1,0x13a1,0x806, +0x13a2,0x13a2,0x806,0x13a3,0x13a3,0x806,0x13a4,0x13a4,0x806,0x13a5,0x13a5,0x806,0x13a6,0x13a6,0x806,0x13a7, +0x13a7,0x806,0x13a8,0x13a8,0x806,0x13a9,0x13a9,0x806,0x13aa,0x13aa,0x806,0x13ab,0x13ab,0x806,0x13ac,0x13ac, +0x806,0x13ad,0x13ad,0x806,0x13ae,0x13ae,0x806,0x13af,0x13af,0x806,0x13b0,0x13b0,0x806,0x13b1,0x13b1,0x806, +0x13b2,0x13b2,0x806,0x13b3,0x13b3,0x806,0x13b4,0x13b4,0x806,0x13b5,0x13b5,0x806,0x13b6,0x13b6,0x806,0x13b7, +0x13b7,0x806,0x13b8,0x13b8,0x806,0x13b9,0x13b9,0x806,0x13ba,0x13ba,0x806,0x13bb,0x13bb,0x806,0x13bc,0x13bc, +0x806,0x13bd,0x13bd,0x806,0x13be,0x13be,0x806,0x13bf,0x13bf,0x806,0x13c0,0x13c0,0x806,0x13c1,0x13c1,0x806, +0x13c2,0x13c2,0x806,0x13c3,0x13c3,0x806,0x13c4,0x13c4,0x806,0x13c5,0x13c5,0x806,0x13c6,0x13c6,0x806,0x13c7, +0x13c7,0x806,0x13c8,0x13c8,0x806,0x13c9,0x13c9,0x806,0x13ca,0x13ca,0x806,0x13cb,0x13cb,0x806,0x13cc,0x13cc, +0x806,0x13cd,0x13cd,0x806,0x13ce,0x13ce,0x806,0x13cf,0x13cf,0x806,0x13d0,0x13d0,0x806,0x13d1,0x13d1,0x806, +0x13d2,0x13d2,0x806,0x13d3,0x13d3,0x806,0x13d4,0x13d4,0x806,0x13d5,0x13d5,0x806,0x13d6,0x13d6,0x806,0x13d7, +0x13d7,0x806,0x13d8,0x13d8,0x806,0x13d9,0x13d9,0x806,0x13da,0x13da,0x806,0x13db,0x13db,0x806,0x13dc,0x13dc, +0x806,0x13dd,0x13dd,0x806,0x13de,0x13de,0x806,0x13df,0x13df,0x806,0x13e0,0x13e0,0x806,0x13e1,0x13e1,0x806, +0x13e2,0x13e2,0x806,0x13e3,0x13e3,0x806,0x13e4,0x13e4,0x806,0x13e5,0x13e5,0x806,0x13e6,0x13e6,0x806,0x13e7, +0x13e7,0x806,0x13e8,0x13e8,0x806,0x13e9,0x13e9,0x806,0x13ea,0x13ea,0x806,0x13eb,0x13eb,0x806,0x13ec,0x13ec, +0x806,0x13ed,0x13ed,0x806,0x13ee,0x13ee,0x806,0x13ef,0x13ef,0x880,0x2220,0x66,0x66,0x46,0x46,0x46, +0x66,0x880,0x2220,0x66,0x69,0x46,0x49,0x46,0x69,0x880,0x2220,0x66,0x6c,0x46,0x4c,0x46, +0x6c,0x880,0x3330,0x66,0x66,0x69,0x46,0x46,0x49,0x46,0x66,0x69,0x880,0x3330,0x66,0x66, +0x6c,0x46,0x46,0x4c,0x46,0x66,0x6c,0x8c0,1,0x2220,0x73,0x74,0x53,0x54,0x53,0x74, +0xfb06,0x8c0,1,0x2220,0x73,0x74,0x53,0x54,0x53,0x74,0xfb05,0x880,0x2220,0x574,0x576,0x544, +0x546,0x544,0x576,0x880,0x2220,0x574,0x565,0x544,0x535,0x544,0x565,0x880,0x2220,0x574,0x56b,0x544, +0x53b,0x544,0x56b,0x880,0x2220,0x57e,0x576,0x54e,0x546,0x54e,0x576,0x880,0x2220,0x574,0x56d,0x544, +0x53d,0x544,0x56d }; static const uint16_t ucase_props_unfold[370]={ diff --git a/deps/icu-small/source/common/ucasemap_imp.h b/deps/icu-small/source/common/ucasemap_imp.h index 7788fd93710305..e17a0ae5a36b6d 100644 --- a/deps/icu-small/source/common/ucasemap_imp.h +++ b/deps/icu-small/source/common/ucasemap_imp.h @@ -68,15 +68,15 @@ class BreakIterator; // unicode/brkiter.h class ByteSink; class Locale; // unicode/locid.h -/** Returns TRUE if the options are valid. Otherwise FALSE, and sets an error. */ +/** Returns true if the options are valid. Otherwise false, and sets an error. */ inline UBool ustrcase_checkTitleAdjustmentOptions(uint32_t options, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return FALSE; } + if (U_FAILURE(errorCode)) { return false; } if ((options & U_TITLECASE_ADJUSTMENT_MASK) == U_TITLECASE_ADJUSTMENT_MASK) { // Both options together. errorCode = U_ILLEGAL_ARGUMENT_ERROR; - return FALSE; + return false; } - return TRUE; + return true; } inline UBool ustrcase_isLNS(UChar32 c) { diff --git a/deps/icu-small/source/common/ucln_cmn.h b/deps/icu-small/source/common/ucln_cmn.h index b837fb946296a1..44b73e94da791f 100644 --- a/deps/icu-small/source/common/ucln_cmn.h +++ b/deps/icu-small/source/common/ucln_cmn.h @@ -38,6 +38,8 @@ typedef enum ECleanupCommonType { UCLN_COMMON_SERVICE, UCLN_COMMON_LOCALE_KEY_TYPE, UCLN_COMMON_LOCALE, + UCLN_COMMON_LOCALE_ALIAS, + UCLN_COMMON_LOCALE_KNOWN_CANONICALIZED, UCLN_COMMON_LOCALE_AVAILABLE, UCLN_COMMON_LIKELY_SUBTAGS, UCLN_COMMON_LOCALE_DISTANCE, diff --git a/deps/icu-small/source/common/ucln_imp.h b/deps/icu-small/source/common/ucln_imp.h index 2e985669793b82..b08c6e8368b1a3 100644 --- a/deps/icu-small/source/common/ucln_imp.h +++ b/deps/icu-small/source/common/ucln_imp.h @@ -78,7 +78,7 @@ * Use the ANSI C 'atexit' function. Note that this mechanism does not * guarantee the order of cleanup relative to other users of ICU! */ -static UBool gAutoCleanRegistered = FALSE; +static UBool gAutoCleanRegistered = false; static void ucln_atexit_handler() { @@ -88,7 +88,7 @@ static void ucln_atexit_handler() static void ucln_registerAutomaticCleanup() { if(!gAutoCleanRegistered) { - gAutoCleanRegistered = TRUE; + gAutoCleanRegistered = true; atexit(&ucln_atexit_handler); } } @@ -135,7 +135,7 @@ U_CAPI void U_EXPORT2 UCLN_FINI () */ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { - BOOL status = TRUE; + BOOL status = true; switch(fdwReason) { case DLL_PROCESS_ATTACH: diff --git a/deps/icu-small/source/common/ucnv_bld.cpp b/deps/icu-small/source/common/ucnv_bld.cpp index 1c2363ea89981f..0e198892f1bdfb 100644 --- a/deps/icu-small/source/common/ucnv_bld.cpp +++ b/deps/icu-small/source/common/ucnv_bld.cpp @@ -262,7 +262,7 @@ static UBool U_CALLCONV ucnv_cleanup(void) { } U_CAPI void U_EXPORT2 -ucnv_enableCleanup() { +ucnv_enableCleanup(void) { ucln_common_registerCleanup(UCLN_COMMON_UCNV, ucnv_cleanup); } diff --git a/deps/icu-small/source/common/ucnv_bld.h b/deps/icu-small/source/common/ucnv_bld.h index caa263f56d938b..43e6c09ac0b0f8 100644 --- a/deps/icu-small/source/common/ucnv_bld.h +++ b/deps/icu-small/source/common/ucnv_bld.h @@ -101,8 +101,8 @@ struct UConverterSharedData { const UConverterStaticData *staticData; /* pointer to the static (non changing) data. */ - UBool sharedDataCached; /* TRUE: shared data is in cache, don't destroy on ucnv_close() if 0 ref. FALSE: shared data isn't in the cache, do attempt to clean it up if the ref is 0 */ - /** If FALSE, then referenceCounter is not used. Must not change after initialization. */ + UBool sharedDataCached; /* true: shared data is in cache, don't destroy on ucnv_close() if 0 ref. false: shared data isn't in the cache, do attempt to clean it up if the ref is 0 */ + /** If false, then referenceCounter is not used. Must not change after initialization. */ UBool isReferenceCounted; const UConverterImpl *impl; /* vtable-style struct of mostly function pointers */ @@ -128,7 +128,7 @@ struct UConverterSharedData { #define UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(pStaticData, pImpl) \ { \ sizeof(UConverterSharedData), ~((uint32_t)0), \ - NULL, pStaticData, FALSE, FALSE, pImpl, \ + NULL, pStaticData, false, false, pImpl, \ 0, UCNV_MBCS_TABLE_INITIALIZER \ } @@ -181,9 +181,9 @@ struct UConverter { uint32_t options; /* options flags from UConverterOpen, may contain additional bits */ - UBool sharedDataIsCached; /* TRUE: shared data is in cache, don't destroy on ucnv_close() if 0 ref. FALSE: shared data isn't in the cache, do attempt to clean it up if the ref is 0 */ - UBool isCopyLocal; /* TRUE if UConverter is not owned and not released in ucnv_close() (stack-allocated, safeClone(), etc.) */ - UBool isExtraLocal; /* TRUE if extraInfo is not owned and not released in ucnv_close() (stack-allocated, safeClone(), etc.) */ + UBool sharedDataIsCached; /* true: shared data is in cache, don't destroy on ucnv_close() if 0 ref. false: shared data isn't in the cache, do attempt to clean it up if the ref is 0 */ + UBool isCopyLocal; /* true if UConverter is not owned and not released in ucnv_close() (stack-allocated, safeClone(), etc.) */ + UBool isExtraLocal; /* true if extraInfo is not owned and not released in ucnv_close() (stack-allocated, safeClone(), etc.) */ UBool useFallback; int8_t toULength; /* number of bytes in toUBytes */ @@ -289,7 +289,7 @@ ucnv_swap(const UDataSwapper *ds, UErrorCode *pErrorCode); U_CAPI void U_EXPORT2 -ucnv_enableCleanup(); +ucnv_enableCleanup(void); #endif diff --git a/deps/icu-small/source/common/ucnv_cnv.h b/deps/icu-small/source/common/ucnv_cnv.h index a996e2959784cf..345a1998e44883 100644 --- a/deps/icu-small/source/common/ucnv_cnv.h +++ b/deps/icu-small/source/common/ucnv_cnv.h @@ -59,7 +59,7 @@ typedef struct { } UConverterLoadArgs; #define UCNV_LOAD_ARGS_INITIALIZER \ - { (int32_t)sizeof(UConverterLoadArgs), 0, FALSE, FALSE, 0, 0, NULL, NULL, NULL } + { (int32_t)sizeof(UConverterLoadArgs), 0, false, false, 0, 0, NULL, NULL, NULL } typedef void (*UConverterLoad) (UConverterSharedData *sharedData, UConverterLoadArgs *pArgs, @@ -267,8 +267,8 @@ extern const UConverterSharedData U_CDECL_END /** Always use fallbacks from codepage to Unicode */ -#define TO_U_USE_FALLBACK(useFallback) TRUE -#define UCNV_TO_U_USE_FALLBACK(cnv) TRUE +#define TO_U_USE_FALLBACK(useFallback) true +#define UCNV_TO_U_USE_FALLBACK(cnv) true /** Use fallbacks from Unicode to codepage when cnv->useFallback or for private-use code points */ #define IS_PRIVATE_USE(c) ((uint32_t)((c)-0xe000)<0x1900 || (uint32_t)((c)-0xf0000)<0x20000) diff --git a/deps/icu-small/source/common/ucnv_u8.cpp b/deps/icu-small/source/common/ucnv_u8.cpp index 878d67304c7d89..9cf4a81ab2ef36 100644 --- a/deps/icu-small/source/common/ucnv_u8.cpp +++ b/deps/icu-small/source/common/ucnv_u8.cpp @@ -707,9 +707,9 @@ ucnv_UTF8FromUTF8(UConverterFromUnicodeArgs *pFromUArgs, // Do not go back into the bytes that will be read for finishing a partial // sequence from the previous buffer. - int32_t length=count-toULimit; + int32_t length=count-toULength; U8_TRUNCATE_IF_INCOMPLETE(source, 0, length); - count=toULimit+length; + count=toULength+length; } if(c!=0) { diff --git a/deps/icu-small/source/common/ucnvmbcs.h b/deps/icu-small/source/common/ucnvmbcs.h index a750b92e499c6e..ddc55b20fec271 100644 --- a/deps/icu-small/source/common/ucnvmbcs.h +++ b/deps/icu-small/source/common/ucnvmbcs.h @@ -420,7 +420,7 @@ typedef struct UConverterMBCSTable { NULL, \ 0, \ 0, 0, \ - FALSE, \ + false, \ 0, \ \ /* roundtrips */ \ diff --git a/deps/icu-small/source/common/ucol_swp.h b/deps/icu-small/source/common/ucol_swp.h index fd8be9aa54ff45..0c2990a85ecfc2 100644 --- a/deps/icu-small/source/common/ucol_swp.h +++ b/deps/icu-small/source/common/ucol_swp.h @@ -31,7 +31,7 @@ * Does the data look like a collation binary? * @internal */ -U_INTERNAL UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 ucol_looksLikeCollationBinary(const UDataSwapper *ds, const void *inData, int32_t length); diff --git a/deps/icu-small/source/common/ucurr.cpp b/deps/icu-small/source/common/ucurr.cpp index 391b08083b899a..8d213dfcfcb516 100644 --- a/deps/icu-small/source/common/ucurr.cpp +++ b/deps/icu-small/source/common/ucurr.cpp @@ -91,6 +91,8 @@ static const char VAR_DELIM = '_'; // Tag for localized display names (symbols) of currencies static const char CURRENCIES[] = "Currencies"; static const char CURRENCIES_NARROW[] = "Currencies%narrow"; +static const char CURRENCIES_FORMAL[] = "Currencies%formal"; +static const char CURRENCIES_VARIANT[] = "Currencies%variant"; static const char CURRENCYPLURALS[] = "CurrencyPlurals"; // ISO codes mapping table @@ -649,7 +651,7 @@ ucurr_getName(const UChar* currency, } int32_t choice = (int32_t) nameStyle; - if (choice < 0 || choice > 2) { + if (choice < 0 || choice > 4) { *ec = U_ILLEGAL_ARGUMENT_ERROR; return 0; } @@ -684,9 +686,22 @@ ucurr_getName(const UChar* currency, ec2 = U_ZERO_ERROR; LocalUResourceBundlePointer rb(ures_open(U_ICUDATA_CURR, loc, &ec2)); - if (nameStyle == UCURR_NARROW_SYMBOL_NAME) { + if (nameStyle == UCURR_NARROW_SYMBOL_NAME || nameStyle == UCURR_FORMAL_SYMBOL_NAME || nameStyle == UCURR_VARIANT_SYMBOL_NAME) { CharString key; - key.append(CURRENCIES_NARROW, ec2); + switch (nameStyle) { + case UCURR_NARROW_SYMBOL_NAME: + key.append(CURRENCIES_NARROW, ec2); + break; + case UCURR_FORMAL_SYMBOL_NAME: + key.append(CURRENCIES_FORMAL, ec2); + break; + case UCURR_VARIANT_SYMBOL_NAME: + key.append(CURRENCIES_VARIANT, ec2); + break; + default: + *ec = U_UNSUPPORTED_ERROR; + return 0; + } key.append("/", ec2); key.append(buf, ec2); s = ures_getStringByKeyWithFallback(rb.getAlias(), key.data(), len, &ec2); @@ -1610,7 +1625,7 @@ ucurr_getDefaultFractionDigits(const UChar* currency, UErrorCode* ec) { return ucurr_getDefaultFractionDigitsForUsage(currency,UCURR_USAGE_STANDARD,ec); } -U_DRAFT int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucurr_getDefaultFractionDigitsForUsage(const UChar* currency, const UCurrencyUsage usage, UErrorCode* ec) { int32_t fracDigits = 0; if (U_SUCCESS(*ec)) { @@ -1633,7 +1648,7 @@ ucurr_getRoundingIncrement(const UChar* currency, UErrorCode* ec) { return ucurr_getRoundingIncrementForUsage(currency, UCURR_USAGE_STANDARD, ec); } -U_DRAFT double U_EXPORT2 +U_CAPI double U_EXPORT2 ucurr_getRoundingIncrementForUsage(const UChar* currency, const UCurrencyUsage usage, UErrorCode* ec) { double result = 0.0; @@ -2259,7 +2274,6 @@ ucurr_countCurrencies(const char* locale, // local variables UErrorCode localStatus = U_ZERO_ERROR; char id[ULOC_FULLNAME_CAPACITY]; - uloc_getKeywordValue(locale, "currency", id, ULOC_FULLNAME_CAPACITY, &localStatus); // get country or country_variant in `id' idForLocale(locale, id, sizeof(id), ec); @@ -2375,7 +2389,6 @@ ucurr_forLocaleAndDate(const char* locale, // local variables UErrorCode localStatus = U_ZERO_ERROR; char id[ULOC_FULLNAME_CAPACITY]; - resLen = uloc_getKeywordValue(locale, "currency", id, ULOC_FULLNAME_CAPACITY, &localStatus); // get country or country_variant in `id' idForLocale(locale, id, sizeof(id), ec); diff --git a/deps/icu-small/source/common/uelement.h b/deps/icu-small/source/common/uelement.h index 9d45f09fb87f65..e4d16afe4e2753 100644 --- a/deps/icu-small/source/common/uelement.h +++ b/deps/icu-small/source/common/uelement.h @@ -46,7 +46,7 @@ typedef union UElement UElement; * An element-equality (boolean) comparison function. * @param e1 An element (object or integer) * @param e2 An element (object or integer) - * @return TRUE if the two elements are equal. + * @return true if the two elements are equal. */ typedef UBool U_CALLCONV UElementsAreEqual(const UElement e1, const UElement e2); diff --git a/deps/icu-small/source/common/uinvchar.cpp b/deps/icu-small/source/common/uinvchar.cpp index ac9716066f22b7..7fce257baf0912 100644 --- a/deps/icu-small/source/common/uinvchar.cpp +++ b/deps/icu-small/source/common/uinvchar.cpp @@ -579,7 +579,7 @@ uprv_ebcdicToLowercaseAscii(char c) { return (char)lowercaseAsciiFromEbcdic[(uint8_t)c]; } -U_INTERNAL uint8_t* U_EXPORT2 +U_CAPI uint8_t* U_EXPORT2 uprv_aestrncpy(uint8_t *dst, const uint8_t *src, int32_t n) { uint8_t *orig_dst = dst; @@ -600,7 +600,7 @@ uprv_aestrncpy(uint8_t *dst, const uint8_t *src, int32_t n) return orig_dst; } -U_INTERNAL uint8_t* U_EXPORT2 +U_CAPI uint8_t* U_EXPORT2 uprv_eastrncpy(uint8_t *dst, const uint8_t *src, int32_t n) { uint8_t *orig_dst = dst; diff --git a/deps/icu-small/source/common/uinvchar.h b/deps/icu-small/source/common/uinvchar.h index a43cfcd98286fe..9b7a9bd114172e 100644 --- a/deps/icu-small/source/common/uinvchar.h +++ b/deps/icu-small/source/common/uinvchar.h @@ -33,11 +33,11 @@ * * @param s Input string pointer. * @param length Length of the string, can be -1 if NUL-terminated. - * @return TRUE if s contains only invariant characters. + * @return true if s contains only invariant characters. * * @internal (ICU 2.8) */ -U_INTERNAL UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uprv_isInvariantString(const char *s, int32_t length); /** @@ -46,11 +46,11 @@ uprv_isInvariantString(const char *s, int32_t length); * * @param s Input string pointer. * @param length Length of the string, can be -1 if NUL-terminated. - * @return TRUE if s contains only invariant characters. + * @return true if s contains only invariant characters. * * @internal (ICU 2.8) */ -U_INTERNAL UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uprv_isInvariantUString(const UChar *s, int32_t length); /** @@ -141,7 +141,7 @@ uprv_isEbcdicAtSign(char c); * Compare two EBCDIC invariant-character strings in ASCII order. * @internal */ -U_INTERNAL int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uprv_compareInvEbcdicAsAscii(const char *s1, const char *s2); /** @@ -161,7 +161,7 @@ uprv_compareInvEbcdicAsAscii(const char *s1, const char *s2); * Converts an EBCDIC invariant character to ASCII. * @internal */ -U_INTERNAL char U_EXPORT2 +U_CAPI char U_EXPORT2 uprv_ebcdicToAscii(char c); /** @@ -181,7 +181,7 @@ uprv_ebcdicToAscii(char c); * Converts an EBCDIC invariant character to lowercase ASCII. * @internal */ -U_INTERNAL char U_EXPORT2 +U_CAPI char U_EXPORT2 uprv_ebcdicToLowercaseAscii(char c); /** @@ -202,7 +202,7 @@ uprv_ebcdicToLowercaseAscii(char c); * @internal * @see uprv_strncpy */ -U_INTERNAL uint8_t* U_EXPORT2 +U_CAPI uint8_t* U_EXPORT2 uprv_aestrncpy(uint8_t *dst, const uint8_t *src, int32_t n); @@ -211,7 +211,7 @@ uprv_aestrncpy(uint8_t *dst, const uint8_t *src, int32_t n); * @internal * @see uprv_strncpy */ -U_INTERNAL uint8_t* U_EXPORT2 +U_CAPI uint8_t* U_EXPORT2 uprv_eastrncpy(uint8_t *dst, const uint8_t *src, int32_t n); diff --git a/deps/icu-small/source/common/uloc.cpp b/deps/icu-small/source/common/uloc.cpp index 0e235d7958ceb1..522f33dbe243a9 100644 --- a/deps/icu-small/source/common/uloc.cpp +++ b/deps/icu-small/source/common/uloc.cpp @@ -50,9 +50,6 @@ #include "uassert.h" #include "charstr.h" -#include -#include /* for sprintf */ - U_NAMESPACE_USE /* ### Declarations **************************************************/ @@ -60,12 +57,6 @@ U_NAMESPACE_USE /* Locale stuff from locid.cpp */ U_CFUNC void locale_set_default(const char *id); U_CFUNC const char *locale_get_default(void); -U_CFUNC int32_t -locale_getKeywords(const char *localeID, - char prev, - char *keywords, int32_t keywordCapacity, - UBool valuesToo, - UErrorCode *status); /* ### Data tables **************************************************/ @@ -601,12 +592,12 @@ compareKeywordStructs(const void * /*context*/, const void *left, const void *ri return uprv_strcmp(leftString, rightString); } -static void -_getKeywords(const char *localeID, - char prev, - ByteSink& sink, - UBool valuesToo, - UErrorCode *status) +U_CFUNC void +ulocimp_getKeywords(const char *localeID, + char prev, + ByteSink& sink, + UBool valuesToo, + UErrorCode *status) { KeywordStruct keywordList[ULOC_MAX_NO_KEYWORDS]; @@ -722,18 +713,18 @@ _getKeywords(const char *localeID, } } -U_CFUNC int32_t -locale_getKeywords(const char *localeID, - char prev, - char *keywords, int32_t keywordCapacity, - UBool valuesToo, - UErrorCode *status) { +U_CAPI int32_t U_EXPORT2 +uloc_getKeywordValue(const char* localeID, + const char* keywordName, + char* buffer, int32_t bufferCapacity, + UErrorCode* status) +{ if (U_FAILURE(*status)) { return 0; } - CheckedArrayByteSink sink(keywords, keywordCapacity); - _getKeywords(localeID, prev, sink, valuesToo, status); + CheckedArrayByteSink sink(buffer, bufferCapacity); + ulocimp_getKeywordValue(localeID, keywordName, sink, status); int32_t reslen = sink.NumberOfBytesAppended(); @@ -744,26 +735,22 @@ locale_getKeywords(const char *localeID, if (sink.Overflowed()) { *status = U_BUFFER_OVERFLOW_ERROR; } else { - u_terminateChars(keywords, keywordCapacity, reslen, status); + u_terminateChars(buffer, bufferCapacity, reslen, status); } return reslen; } -U_CAPI int32_t U_EXPORT2 -uloc_getKeywordValue(const char* localeID, - const char* keywordName, - char* buffer, int32_t bufferCapacity, - UErrorCode* status) +U_CAPI void U_EXPORT2 +ulocimp_getKeywordValue(const char* localeID, + const char* keywordName, + icu::ByteSink& sink, + UErrorCode* status) { - if (buffer != nullptr) { - buffer[0] = '\0'; - } const char* startSearchHere = NULL; const char* nextSeparator = NULL; char keywordNameBuffer[ULOC_KEYWORD_BUFFER_LEN]; char localeKeywordNameBuffer[ULOC_KEYWORD_BUFFER_LEN]; - int32_t result = 0; if(status && U_SUCCESS(*status) && localeID) { char tempBuffer[ULOC_FULLNAME_CAPACITY]; @@ -771,12 +758,12 @@ uloc_getKeywordValue(const char* localeID, if (keywordName == NULL || keywordName[0] == 0) { *status = U_ILLEGAL_ARGUMENT_ERROR; - return 0; + return; } locale_canonKeywordName(keywordNameBuffer, keywordName, status); if(U_FAILURE(*status)) { - return 0; + return; } if (_hasBCP47Extension(localeID)) { @@ -788,7 +775,7 @@ uloc_getKeywordValue(const char* localeID, startSearchHere = locale_getKeywordsStart(tmpLocaleID); if(startSearchHere == NULL) { /* no keywords, return at once */ - return 0; + return; } /* find the first keyword */ @@ -800,7 +787,7 @@ uloc_getKeywordValue(const char* localeID, nextSeparator = uprv_strchr(startSearchHere, '='); if(!nextSeparator) { *status = U_ILLEGAL_ARGUMENT_ERROR; /* key must have =value */ - return 0; + return; } /* strip leading & trailing spaces (TC decided to tolerate these) */ while(*startSearchHere == ' ') { @@ -814,20 +801,20 @@ uloc_getKeywordValue(const char* localeID, /* copy & normalize keyName from locale */ if (startSearchHere == keyValueTail) { *status = U_ILLEGAL_ARGUMENT_ERROR; /* empty keyword name in passed-in locale */ - return 0; + return; } keyValueLen = 0; while (startSearchHere < keyValueTail) { if (!UPRV_ISALPHANUM(*startSearchHere)) { *status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed keyword name */ - return 0; + return; } if (keyValueLen < ULOC_KEYWORD_BUFFER_LEN - 1) { localeKeywordNameBuffer[keyValueLen++] = uprv_tolower(*startSearchHere++); } else { /* keyword name too long for internal buffer */ *status = U_INTERNAL_PROGRAM_ERROR; - return 0; + return; } } localeKeywordNameBuffer[keyValueLen] = 0; /* terminate */ @@ -848,28 +835,20 @@ uloc_getKeywordValue(const char* localeID, /* Now copy the value, but check well-formedness */ if (nextSeparator == keyValueTail) { *status = U_ILLEGAL_ARGUMENT_ERROR; /* empty key value name in passed-in locale */ - return 0; + return; } - keyValueLen = 0; while (nextSeparator < keyValueTail) { if (!UPRV_ISALPHANUM(*nextSeparator) && !UPRV_OK_VALUE_PUNCTUATION(*nextSeparator)) { *status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed key value */ - return 0; - } - if (keyValueLen < bufferCapacity) { - /* Should we lowercase value to return here? Tests expect as-is. */ - buffer[keyValueLen++] = *nextSeparator++; - } else { /* keep advancing so we return correct length in case of overflow */ - keyValueLen++; - nextSeparator++; + return; } + /* Should we lowercase value to return here? Tests expect as-is. */ + sink.Append(nextSeparator++, 1); } - result = u_terminateChars(buffer, bufferCapacity, keyValueLen, status); - return result; + return; } } } - return 0; } U_CAPI int32_t U_EXPORT2 @@ -892,7 +871,6 @@ uloc_setKeywordValue(const char* keywordName, char* startSearchHere = NULL; char* keywordStart = NULL; CharString updatedKeysAndValues; - int32_t updatedKeysAndValuesLen; UBool handledInputKeyAndValue = FALSE; char keyValuePrefix = '@'; @@ -1072,18 +1050,10 @@ uloc_setKeywordValue(const char* keywordName, return bufLen; } - updatedKeysAndValuesLen = updatedKeysAndValues.length(); - /* needLen = length of the part before '@' + length of updated key-value part including '@' */ - needLen = (int32_t)(startSearchHere - buffer) + updatedKeysAndValuesLen; - if(needLen >= bufferCapacity) { - *status = U_BUFFER_OVERFLOW_ERROR; - return needLen; /* no change */ - } - if (updatedKeysAndValuesLen > 0) { - uprv_strncpy(startSearchHere, updatedKeysAndValues.data(), updatedKeysAndValuesLen); - } - buffer[needLen]=0; - return needLen; + // needLen = length of the part before '@' + needLen = (int32_t)(startSearchHere - buffer); + return needLen + updatedKeysAndValues.extract( + startSearchHere, bufferCapacity - needLen, *status); } /* ### ID parsing implementation **************************************************/ @@ -1148,7 +1118,7 @@ uloc_getCurrentLanguageID(const char* oldID){ * * TODO try to use this in Locale */ -static CharString +CharString U_EXPORT2 ulocimp_getLanguage(const char *localeID, const char **pEnd, UErrorCode &status) { @@ -1193,21 +1163,7 @@ ulocimp_getLanguage(const char *localeID, return result; } -U_CFUNC int32_t -ulocimp_getLanguage(const char *localeID, - char *language, int32_t languageCapacity, - const char **pEnd) { - ErrorCode status; - CharString result = ulocimp_getLanguage(localeID, pEnd, status); - if (status.isFailure()) { - return 0; - } - int32_t reslen = result.length(); - uprv_memcpy(language, result.data(), std::min(reslen, languageCapacity)); - return reslen; -} - -static CharString +CharString U_EXPORT2 ulocimp_getScript(const char *localeID, const char **pEnd, UErrorCode &status) { @@ -1241,21 +1197,7 @@ ulocimp_getScript(const char *localeID, return result; } -U_CFUNC int32_t -ulocimp_getScript(const char *localeID, - char *script, int32_t scriptCapacity, - const char **pEnd) { - ErrorCode status; - CharString result = ulocimp_getScript(localeID, pEnd, status); - if (status.isFailure()) { - return 0; - } - int32_t reslen = result.length(); - uprv_memcpy(script, result.data(), std::min(reslen, scriptCapacity)); - return reslen; -} - -static CharString +CharString U_EXPORT2 ulocimp_getCountry(const char *localeID, const char **pEnd, UErrorCode &status) { @@ -1290,29 +1232,15 @@ ulocimp_getCountry(const char *localeID, return result; } -U_CFUNC int32_t -ulocimp_getCountry(const char *localeID, - char *country, int32_t countryCapacity, - const char **pEnd) { - ErrorCode status; - CharString result = ulocimp_getCountry(localeID, pEnd, status); - if (status.isFailure()) { - return 0; - } - int32_t reslen = result.length(); - uprv_memcpy(country, result.data(), std::min(reslen, countryCapacity)); - return reslen; -} - /** * @param needSeparator if true, then add leading '_' if any variants * are added to 'variant' */ static void -_getVariantEx(const char *localeID, - char prev, - ByteSink& sink, - UBool needSeparator) { +_getVariant(const char *localeID, + char prev, + ByteSink& sink, + UBool needSeparator) { UBool hasVariant = FALSE; /* get one or more variant tags and separate them with '_' */ @@ -1353,23 +1281,6 @@ _getVariantEx(const char *localeID, } } -static int32_t -_getVariantEx(const char *localeID, - char prev, - char *variant, int32_t variantCapacity, - UBool needSeparator) { - CheckedArrayByteSink sink(variant, variantCapacity); - _getVariantEx(localeID, prev, sink, needSeparator); - return sink.NumberOfBytesAppended(); -} - -static int32_t -_getVariant(const char *localeID, - char prev, - char *variant, int32_t variantCapacity) { - return _getVariantEx(localeID, prev, variant, variantCapacity, FALSE); -} - /* Keyword enumeration */ typedef struct UKeywordsContext { @@ -1466,9 +1377,6 @@ U_CAPI UEnumeration* U_EXPORT2 uloc_openKeywords(const char* localeID, UErrorCode* status) { - int32_t i=0; - char keywords[256]; - int32_t keywordsCapacity = 256; char tempBuffer[ULOC_FULLNAME_CAPACITY]; const char* tmpLocaleID; @@ -1486,34 +1394,42 @@ uloc_openKeywords(const char* localeID, } /* Skip the language */ - ulocimp_getLanguage(tmpLocaleID, NULL, 0, &tmpLocaleID); + ulocimp_getLanguage(tmpLocaleID, &tmpLocaleID, *status); + if (U_FAILURE(*status)) { + return 0; + } + if(_isIDSeparator(*tmpLocaleID)) { const char *scriptID; /* Skip the script if available */ - ulocimp_getScript(tmpLocaleID+1, NULL, 0, &scriptID); + ulocimp_getScript(tmpLocaleID+1, &scriptID, *status); + if (U_FAILURE(*status)) { + return 0; + } if(scriptID != tmpLocaleID+1) { /* Found optional script */ tmpLocaleID = scriptID; } /* Skip the Country */ if (_isIDSeparator(*tmpLocaleID)) { - ulocimp_getCountry(tmpLocaleID+1, NULL, 0, &tmpLocaleID); - if(_isIDSeparator(*tmpLocaleID)) { - _getVariant(tmpLocaleID+1, *tmpLocaleID, NULL, 0); + ulocimp_getCountry(tmpLocaleID+1, &tmpLocaleID, *status); + if (U_FAILURE(*status)) { + return 0; } } } /* keywords are located after '@' */ if((tmpLocaleID = locale_getKeywordsStart(tmpLocaleID)) != NULL) { - i=locale_getKeywords(tmpLocaleID+1, '@', keywords, keywordsCapacity, FALSE, status); - } - - if(i) { - return uloc_openKeywordList(keywords, i, status); - } else { - return NULL; + CharString keywords; + CharStringByteSink sink(&keywords); + ulocimp_getKeywords(tmpLocaleID+1, '@', sink, FALSE, status); + if (U_FAILURE(*status)) { + return NULL; + } + return uloc_openKeywordList(keywords.data(), keywords.length(), status); } + return NULL; } @@ -1605,7 +1521,7 @@ _canonicalize(const char* localeID, variantSize = -tag.length(); { CharStringByteSink s(&tag); - _getVariantEx(tmpLocaleID+1, *tmpLocaleID, s, FALSE); + _getVariant(tmpLocaleID+1, *tmpLocaleID, s, FALSE); } variantSize += tag.length(); if (variantSize > 0) { @@ -1667,7 +1583,7 @@ _canonicalize(const char* localeID, int32_t posixVariantSize = -tag.length(); { CharStringByteSink s(&tag); - _getVariantEx(tmpLocaleID+1, '@', s, (UBool)(variantSize > 0)); + _getVariant(tmpLocaleID+1, '@', s, (UBool)(variantSize > 0)); } posixVariantSize += tag.length(); if (posixVariantSize > 0) { @@ -1696,7 +1612,7 @@ _canonicalize(const char* localeID, (!separatorIndicator || separatorIndicator > keywordAssign)) { sink.Append("@", 1); ++fieldCount; - _getKeywords(tmpLocaleID+1, '@', sink, TRUE, err); + ulocimp_getKeywords(tmpLocaleID+1, '@', sink, TRUE, err); } } } @@ -1745,7 +1661,6 @@ uloc_getLanguage(const char* localeID, UErrorCode* err) { /* uloc_getLanguage will return a 2 character iso-639 code if one exists. *CWB*/ - int32_t i=0; if (err==NULL || U_FAILURE(*err)) { return 0; @@ -1755,8 +1670,7 @@ uloc_getLanguage(const char* localeID, localeID=uloc_getDefault(); } - i=ulocimp_getLanguage(localeID, language, languageCapacity, NULL); - return u_terminateChars(language, languageCapacity, i, err); + return ulocimp_getLanguage(localeID, NULL, *err).extract(language, languageCapacity, *err); } U_CAPI int32_t U_EXPORT2 @@ -1765,8 +1679,6 @@ uloc_getScript(const char* localeID, int32_t scriptCapacity, UErrorCode* err) { - int32_t i=0; - if(err==NULL || U_FAILURE(*err)) { return 0; } @@ -1776,11 +1688,15 @@ uloc_getScript(const char* localeID, } /* skip the language */ - ulocimp_getLanguage(localeID, NULL, 0, &localeID); + ulocimp_getLanguage(localeID, &localeID, *err); + if (U_FAILURE(*err)) { + return 0; + } + if(_isIDSeparator(*localeID)) { - i=ulocimp_getScript(localeID+1, script, scriptCapacity, NULL); + return ulocimp_getScript(localeID+1, NULL, *err).extract(script, scriptCapacity, *err); } - return u_terminateChars(script, scriptCapacity, i, err); + return u_terminateChars(script, scriptCapacity, 0, err); } U_CAPI int32_t U_EXPORT2 @@ -1789,8 +1705,6 @@ uloc_getCountry(const char* localeID, int32_t countryCapacity, UErrorCode* err) { - int32_t i=0; - if(err==NULL || U_FAILURE(*err)) { return 0; } @@ -1800,20 +1714,27 @@ uloc_getCountry(const char* localeID, } /* Skip the language */ - ulocimp_getLanguage(localeID, NULL, 0, &localeID); + ulocimp_getLanguage(localeID, &localeID, *err); + if (U_FAILURE(*err)) { + return 0; + } + if(_isIDSeparator(*localeID)) { const char *scriptID; /* Skip the script if available */ - ulocimp_getScript(localeID+1, NULL, 0, &scriptID); + ulocimp_getScript(localeID+1, &scriptID, *err); + if (U_FAILURE(*err)) { + return 0; + } if(scriptID != localeID+1) { /* Found optional script */ localeID = scriptID; } if(_isIDSeparator(*localeID)) { - i=ulocimp_getCountry(localeID+1, country, countryCapacity, NULL); + return ulocimp_getCountry(localeID+1, NULL, *err).extract(country, countryCapacity, *err); } } - return u_terminateChars(country, countryCapacity, i, err); + return u_terminateChars(country, countryCapacity, 0, err); } U_CAPI int32_t U_EXPORT2 @@ -1840,11 +1761,18 @@ uloc_getVariant(const char* localeID, } /* Skip the language */ - ulocimp_getLanguage(tmpLocaleID, NULL, 0, &tmpLocaleID); + ulocimp_getLanguage(tmpLocaleID, &tmpLocaleID, *err); + if (U_FAILURE(*err)) { + return 0; + } + if(_isIDSeparator(*tmpLocaleID)) { const char *scriptID; /* Skip the script if available */ - ulocimp_getScript(tmpLocaleID+1, NULL, 0, &scriptID); + ulocimp_getScript(tmpLocaleID+1, &scriptID, *err); + if (U_FAILURE(*err)) { + return 0; + } if(scriptID != tmpLocaleID+1) { /* Found optional script */ tmpLocaleID = scriptID; @@ -1852,7 +1780,10 @@ uloc_getVariant(const char* localeID, /* Skip the Country */ if (_isIDSeparator(*tmpLocaleID)) { const char *cntryID; - ulocimp_getCountry(tmpLocaleID+1, NULL, 0, &cntryID); + ulocimp_getCountry(tmpLocaleID+1, &cntryID, *err); + if (U_FAILURE(*err)) { + return 0; + } if (cntryID != tmpLocaleID+1) { /* Found optional country */ tmpLocaleID = cntryID; @@ -1862,18 +1793,24 @@ uloc_getVariant(const char* localeID, if (tmpLocaleID != cntryID && _isIDSeparator(tmpLocaleID[1])) { tmpLocaleID++; } - i=_getVariant(tmpLocaleID+1, *tmpLocaleID, variant, variantCapacity); + + CheckedArrayByteSink sink(variant, variantCapacity); + _getVariant(tmpLocaleID+1, *tmpLocaleID, sink, FALSE); + + i = sink.NumberOfBytesAppended(); + + if (U_FAILURE(*err)) { + return i; + } + + if (sink.Overflowed()) { + *err = U_BUFFER_OVERFLOW_ERROR; + return i; + } } } } - /* removed by weiv. We don't want to handle POSIX variants anymore. Use canonicalization function */ - /* if we do not have a variant tag yet then try a POSIX variant after '@' */ -/* - if(!haveVariant && (localeID=uprv_strrchr(localeID, '@'))!=NULL) { - i=_getVariant(localeID+1, '@', variant, variantCapacity); - } -*/ return u_terminateChars(variant, variantCapacity, i, err); } @@ -1905,7 +1842,7 @@ uloc_getName(const char* localeID, return reslen; } -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ulocimp_getName(const char* localeID, ByteSink& sink, UErrorCode* err) @@ -1941,7 +1878,7 @@ uloc_getBaseName(const char* localeID, return reslen; } -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ulocimp_getBaseName(const char* localeID, ByteSink& sink, UErrorCode* err) @@ -1977,7 +1914,7 @@ uloc_canonicalize(const char* localeID, return reslen; } -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ulocimp_canonicalize(const char* localeID, ByteSink& sink, UErrorCode* err) @@ -2058,22 +1995,22 @@ uloc_getLCID(const char* localeID) // uprv_convertToLCID does not support keywords other than collation. // Remove all keywords except collation. int32_t len; - char collVal[ULOC_KEYWORDS_CAPACITY]; char tmpLocaleID[ULOC_FULLNAME_CAPACITY]; - len = uloc_getKeywordValue(localeID, "collation", collVal, - UPRV_LENGTHOF(collVal) - 1, &status); - - if (U_SUCCESS(status) && len > 0) { - collVal[len] = 0; + CharString collVal; + { + CharStringByteSink sink(&collVal); + ulocimp_getKeywordValue(localeID, "collation", sink, &status); + } + if (U_SUCCESS(status) && !collVal.isEmpty()) { len = uloc_getBaseName(localeID, tmpLocaleID, UPRV_LENGTHOF(tmpLocaleID) - 1, &status); if (U_SUCCESS(status) && len > 0) { tmpLocaleID[len] = 0; - len = uloc_setKeywordValue("collation", collVal, tmpLocaleID, + len = uloc_setKeywordValue("collation", collVal.data(), tmpLocaleID, UPRV_LENGTHOF(tmpLocaleID) - len - 1, &status); if (U_SUCCESS(status) && len > 0) { diff --git a/deps/icu-small/source/common/uloc_tag.cpp b/deps/icu-small/source/common/uloc_tag.cpp index 3bdeddbe066d96..d2d938753182d8 100644 --- a/deps/icu-small/source/common/uloc_tag.cpp +++ b/deps/icu-small/source/common/uloc_tag.cpp @@ -15,6 +15,7 @@ #include "unicode/uenum.h" #include "unicode/uloc.h" #include "ustr_imp.h" +#include "bytesinkutil.h" #include "charstr.h" #include "cmemory.h" #include "cstring.h" @@ -53,7 +54,7 @@ typedef struct ULanguageTag { VariantListEntry *variants; ExtensionListEntry *extensions; const char *privateuse; - const char *grandfathered; + const char *legacy; } ULanguageTag; #define MINLEN 2 @@ -85,8 +86,9 @@ static const char LOCALE_TYPE_YES[] = "yes"; Updated on 2018-09-12 from https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry . - This table has 2 parts. The parts for Grandfathered tags is generated by the - following scripts from the IANA language tag registry. + This table has 2 parts. The part for + legacy language tags (marked as “Type: grandfathered” in BCP 47) + is generated by the following scripts from the IANA language tag registry. curl https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry |\ egrep -A 7 'Type: grandfathered' | \ @@ -100,8 +102,8 @@ static const char LOCALE_TYPE_YES[] = "yes"; values. They may have to be removed for the strict BCP 47 compliance. */ -static const char* const GRANDFATHERED[] = { -/* grandfathered preferred */ +static const char* const LEGACY[] = { +/* legacy preferred */ "art-lojban", "jbo", "en-gb-oed", "en-gb-oxendict", "i-ami", "ami", @@ -124,7 +126,7 @@ static const char* const GRANDFATHERED[] = { "zh-min-nan", "nan", "zh-xiang", "hsn", - // Grandfathered tags with no preferred value in the IANA + // Legacy tags with no preferred value in the IANA // registry. Kept for now for the backward compatibility // because ICU has mapped them this way. "cel-gaulish", "xtg-x-cel-gaulish", @@ -346,7 +348,7 @@ ultag_getPrivateUse(const ULanguageTag* langtag); #if 0 static const char* -ultag_getGrandfathered(const ULanguageTag* langtag); +ultag_getLegacy(const ULanguageTag* langtag); #endif U_NAMESPACE_BEGIN @@ -986,7 +988,7 @@ _initializeULanguageTag(ULanguageTag* langtag) { langtag->variants = NULL; langtag->extensions = NULL; - langtag->grandfathered = EMPTY; + langtag->legacy = EMPTY; langtag->privateuse = EMPTY; } @@ -1268,35 +1270,17 @@ _appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st UBool isBcpUExt; while (TRUE) { - icu::CharString buf; key = uenum_next(keywordEnum.getAlias(), NULL, status); if (key == NULL) { break; } - char* buffer; - int32_t resultCapacity = ULOC_KEYWORD_AND_VALUES_CAPACITY; - - for (;;) { - buffer = buf.getAppendBuffer( - /*minCapacity=*/resultCapacity, - /*desiredCapacityHint=*/resultCapacity, - resultCapacity, - tmpStatus); - - if (U_FAILURE(tmpStatus)) { - break; - } - len = uloc_getKeywordValue( - localeID, key, buffer, resultCapacity, &tmpStatus); - - if (tmpStatus != U_BUFFER_OVERFLOW_ERROR) { - break; - } - - resultCapacity = len; - tmpStatus = U_ZERO_ERROR; + icu::CharString buf; + { + icu::CharStringByteSink sink(&buf); + ulocimp_getKeywordValue(localeID, key, sink, &tmpStatus); } + len = buf.length(); if (U_FAILURE(tmpStatus)) { if (tmpStatus == U_MEMORY_ALLOCATION_ERROR) { @@ -1312,11 +1296,6 @@ _appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st continue; } - buf.append(buffer, len, tmpStatus); - if (tmpStatus == U_STRING_NOT_TERMINATED_WARNING) { - tmpStatus = U_ZERO_ERROR; // Terminators provided by CharString. - } - keylen = (int32_t)uprv_strlen(key); isBcpUExt = (keylen > 1); @@ -1395,32 +1374,18 @@ _appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st no known mapping. This implementation normalizes the value to lower case */ - icu::CharString* extBuf = extBufPool.create(); + icu::CharString* extBuf = extBufPool.create(buf, tmpStatus); + if (extBuf == nullptr) { *status = U_MEMORY_ALLOCATION_ERROR; break; } - int32_t bcpValueLen = static_cast(uprv_strlen(bcpValue)); - int32_t resultCapacity; - char* pExtBuf = extBuf->getAppendBuffer( - /*minCapacity=*/bcpValueLen, - /*desiredCapacityHint=*/bcpValueLen, - resultCapacity, - tmpStatus); - if (U_FAILURE(tmpStatus)) { - *status = tmpStatus; - break; - } - - uprv_strcpy(pExtBuf, bcpValue); - T_CString_toLowerCase(pExtBuf); - - extBuf->append(pExtBuf, bcpValueLen, tmpStatus); if (U_FAILURE(tmpStatus)) { *status = tmpStatus; break; } + T_CString_toLowerCase(extBuf->data()); bcpValue = extBuf->data(); } } else { @@ -2023,11 +1988,12 @@ _appendPrivateuseToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool #define PRIV 0x0080 /** - * Ticket #12705 - Visual Studio 2015 Update 3 contains a new code optimizer which has problems optimizing - * this function. (See https://blogs.msdn.microsoft.com/vcblog/2016/05/04/new-code-optimizer/ ) - * As a workaround, we will turn off optimization just for this function on VS2015 Update 3 and above. + * Ticket #12705 - The optimizer in Visual Studio 2015 Update 3 has problems optimizing this function. + * As a work-around, optimization is disabled for this function on VS2015 and VS2017. + * This work-around should be removed once the following versions of Visual Studio are no + * longer supported: All versions of VS2015/VS2017, and versions of VS2019 below 16.4. */ -#if (defined(_MSC_VER) && (_MSC_VER >= 1900) && defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 190024210)) +#if defined(_MSC_VER) && (_MSC_VER >= 1900) && (_MSC_VER < 1924) #pragma optimize( "", off ) #endif @@ -2042,7 +2008,7 @@ ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* sta char *pExtValueSubtag, *pExtValueSubtagEnd; int32_t i; UBool privateuseVar = FALSE; - int32_t grandfatheredLen = 0; + int32_t legacyLen = 0; if (parsedLen != NULL) { *parsedLen = 0; @@ -2082,25 +2048,25 @@ ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* sta } size_t parsedLenDelta = 0; - // Grandfathered tag will be consider together. Grandfathered tag with intervening + // Legacy tag will be consider together. Legacy tag with intervening // script and region such as art-DE-lojban or art-Latn-lojban won't be // matched. - /* check if the tag is grandfathered */ - for (i = 0; i < UPRV_LENGTHOF(GRANDFATHERED); i += 2) { - int32_t checkGrandfatheredLen = static_cast(uprv_strlen(GRANDFATHERED[i])); - if (tagLen < checkGrandfatheredLen) { + /* check if the tag is legacy */ + for (i = 0; i < UPRV_LENGTHOF(LEGACY); i += 2) { + int32_t checkLegacyLen = static_cast(uprv_strlen(LEGACY[i])); + if (tagLen < checkLegacyLen) { continue; } - if (tagLen > checkGrandfatheredLen && tagBuf[checkGrandfatheredLen] != '-') { + if (tagLen > checkLegacyLen && tagBuf[checkLegacyLen] != '-') { // make sure next char is '-'. continue; } - if (uprv_strnicmp(GRANDFATHERED[i], tagBuf, checkGrandfatheredLen) == 0) { + if (uprv_strnicmp(LEGACY[i], tagBuf, checkLegacyLen) == 0) { int32_t newTagLength; - grandfatheredLen = checkGrandfatheredLen; /* back up for output parsedLen */ - int32_t replacementLen = static_cast(uprv_strlen(GRANDFATHERED[i+1])); - newTagLength = replacementLen + tagLen - checkGrandfatheredLen; + legacyLen = checkLegacyLen; /* back up for output parsedLen */ + int32_t replacementLen = static_cast(uprv_strlen(LEGACY[i+1])); + newTagLength = replacementLen + tagLen - checkLegacyLen; if (tagLen < newTagLength) { uprv_free(tagBuf); tagBuf = (char*)uprv_malloc(newTagLength + 1); @@ -2111,16 +2077,16 @@ ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* sta t->buf = tagBuf; tagLen = newTagLength; } - parsedLenDelta = checkGrandfatheredLen - replacementLen; - uprv_strcpy(t->buf, GRANDFATHERED[i + 1]); - if (checkGrandfatheredLen != tagLen) { - uprv_strcpy(t->buf + replacementLen, tag + checkGrandfatheredLen); + parsedLenDelta = checkLegacyLen - replacementLen; + uprv_strcpy(t->buf, LEGACY[i + 1]); + if (checkLegacyLen != tagLen) { + uprv_strcpy(t->buf + replacementLen, tag + checkLegacyLen); } break; } } - if (grandfatheredLen == 0) { + if (legacyLen == 0) { for (i = 0; i < UPRV_LENGTHOF(REDUNDANT); i += 2) { const char* redundantTag = REDUNDANT[i]; size_t redundantTagLen = uprv_strlen(redundantTag); @@ -2440,10 +2406,8 @@ ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* sta return t.orphan(); } -/** -* Ticket #12705 - Turn optimization back on. -*/ -#if (defined(_MSC_VER) && (_MSC_VER >= 1900) && defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 190024210)) +// Ticket #12705 - Turn optimization back on. +#if defined(_MSC_VER) && (_MSC_VER >= 1900) && (_MSC_VER < 1924) #pragma optimize( "", on ) #endif @@ -2608,8 +2572,8 @@ ultag_getPrivateUse(const ULanguageTag* langtag) { #if 0 static const char* -ultag_getGrandfathered(const ULanguageTag* langtag) { - return langtag->grandfathered; +ultag_getLegacy(const ULanguageTag* langtag) { + return langtag->legacy; } #endif @@ -2720,14 +2684,17 @@ ulocimp_toLanguageTag(const char* localeID, key = uenum_next(kwdEnum.getAlias(), &len, &tmpStatus); if (len == 1 && *key == PRIVATEUSE) { - char buf[ULOC_KEYWORD_AND_VALUES_CAPACITY]; - buf[0] = PRIVATEUSE; - buf[1] = SEP; - len = uloc_getKeywordValue(localeID, key, &buf[2], sizeof(buf) - 2, &tmpStatus); + icu::CharString buf; + { + icu::CharStringByteSink sink(&buf); + ulocimp_getKeywordValue(localeID, key, sink, &tmpStatus); + } if (U_SUCCESS(tmpStatus)) { - if (ultag_isPrivateuseValueSubtags(&buf[2], len)) { + if (ultag_isPrivateuseValueSubtags(buf.data(), buf.length())) { /* return private use only tag */ - sink.Append(buf, len + 2); + static const char PREFIX[] = { PRIVATEUSE, SEP }; + sink.Append(PREFIX, sizeof(PREFIX)); + sink.Append(buf.data(), buf.length()); done = TRUE; } else if (strict) { *status = U_ILLEGAL_ARGUMENT_ERROR; diff --git a/deps/icu-small/source/common/ulocimp.h b/deps/icu-small/source/common/ulocimp.h index 98b95dddfe75bc..a686759f32e3e1 100644 --- a/deps/icu-small/source/common/ulocimp.h +++ b/deps/icu-small/source/common/ulocimp.h @@ -13,6 +13,8 @@ #include "unicode/bytestream.h" #include "unicode/uloc.h" +#include "charstr.h" + /** * Create an iterator over the specified keywords list * @param keywordList double-null terminated list. Will be copied. @@ -38,7 +40,7 @@ uloc_getTableStringWithFallback( int32_t *pLength, UErrorCode *pErrorCode); -/*returns TRUE if a is an ID separator FALSE otherwise*/ +/*returns true if a is an ID separator false otherwise*/ #define _isIDSeparator(a) (a == '_' || a == '-') U_CFUNC const char* @@ -47,42 +49,55 @@ uloc_getCurrentCountryID(const char* oldID); U_CFUNC const char* uloc_getCurrentLanguageID(const char* oldID); -U_CFUNC int32_t +U_CFUNC void +ulocimp_getKeywords(const char *localeID, + char prev, + icu::ByteSink& sink, + UBool valuesToo, + UErrorCode *status); + +icu::CharString U_EXPORT2 ulocimp_getLanguage(const char *localeID, - char *language, int32_t languageCapacity, - const char **pEnd); + const char **pEnd, + UErrorCode &status); -U_CFUNC int32_t +icu::CharString U_EXPORT2 ulocimp_getScript(const char *localeID, - char *script, int32_t scriptCapacity, - const char **pEnd); + const char **pEnd, + UErrorCode &status); -U_CFUNC int32_t +icu::CharString U_EXPORT2 ulocimp_getCountry(const char *localeID, - char *country, int32_t countryCapacity, - const char **pEnd); + const char **pEnd, + UErrorCode &status); -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ulocimp_getName(const char* localeID, icu::ByteSink& sink, UErrorCode* err); -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ulocimp_getBaseName(const char* localeID, icu::ByteSink& sink, UErrorCode* err); -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ulocimp_canonicalize(const char* localeID, icu::ByteSink& sink, UErrorCode* err); +U_CAPI void U_EXPORT2 +ulocimp_getKeywordValue(const char* localeID, + const char* keywordName, + icu::ByteSink& sink, + UErrorCode* status); + /** * Writes a well-formed language tag for this locale ID. * - * **Note**: When `strict` is FALSE, any locale fields which do not satisfy the + * **Note**: When `strict` is false, any locale fields which do not satisfy the * BCP47 syntax requirement will be omitted from the result. When `strict` is - * TRUE, this function sets U_ILLEGAL_ARGUMENT_ERROR to the `err` if any locale + * true, this function sets U_ILLEGAL_ARGUMENT_ERROR to the `err` if any locale * fields do not satisfy the BCP47 syntax requirement. * * @param localeID the input locale ID @@ -96,7 +111,7 @@ ulocimp_canonicalize(const char* localeID, * * @internal ICU 64 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ulocimp_toLanguageTag(const char* localeID, icu::ByteSink& sink, UBool strict, @@ -107,13 +122,17 @@ ulocimp_toLanguageTag(const char* localeID, * If the specified language tag contains any ill-formed subtags, * the first such subtag and all following subtags are ignored. *

- * This implements the 'Language-Tag' production of BCP47, and so - * supports grandfathered (regular and irregular) as well as private - * use language tags. Private use tags are represented as 'x-whatever', - * and grandfathered tags are converted to their canonical replacements - * where they exist. Note that a few grandfathered tags have no modern - * replacement, these will be converted using the fallback described in + * This implements the 'Language-Tag' production of BCP 47, and so + * supports legacy language tags (marked as “Type: grandfathered” in BCP 47) + * (regular and irregular) as well as private use language tags. + * + * Private use tags are represented as 'x-whatever', + * and legacy tags are converted to their canonical replacements where they exist. + * + * Note that a few legacy tags have no modern replacement; + * these will be converted using the fallback described in * the first paragraph, so some information might be lost. + * * @param langtag the input BCP47 language tag. * @param tagLen the length of langtag, or -1 to call uprv_strlen(). * @param sink the output sink receiving a locale ID for the @@ -135,7 +154,7 @@ ulocimp_forLanguageTag(const char* langtag, * Get the region to use for supplemental data lookup. Uses * (1) any region specified by locale tag "rg"; if none then * (2) any unicode_region_tag in the locale ID; if none then - * (3) if inferRegion is TRUE, the region suggested by + * (3) if inferRegion is true, the region suggested by * getLikelySubtags on the localeID. * If no region is found, returns length 0. * @@ -143,7 +162,7 @@ ulocimp_forLanguageTag(const char* langtag, * The complete locale ID (with keywords) from which * to get the region to use for supplemental data. * @param inferRegion - * If TRUE, will try to infer region from localeID if + * If true, will try to infer region from localeID if * no other region is found. * @param region * Buffer in which to put the region ID found; should @@ -189,7 +208,7 @@ ulocimp_getRegionForSupplementalData(const char *localeID, UBool inferRegion, * or the localeId is not well-formed, the error code is U_ILLEGAL_ARGUMENT_ERROR. * @internal ICU 64 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ulocimp_addLikelySubtags(const char* localeID, icu::ByteSink& sink, UErrorCode* err); @@ -223,7 +242,7 @@ ulocimp_addLikelySubtags(const char* localeID, * or the localeId is not well-formed, the error code is U_ILLEGAL_ARGUMENT_ERROR. * @internal ICU 64 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ulocimp_minimizeSubtags(const char* localeID, icu::ByteSink& sink, UErrorCode* err); @@ -279,4 +298,10 @@ ulocimp_toBcpType(const char* key, const char* type, UBool* isKnownKey, UBool* i U_CFUNC const char* ulocimp_toLegacyType(const char* key, const char* type, UBool* isKnownKey, UBool* isSpecialType); +/* Function for testing purpose */ +U_CAPI const char* const* ulocimp_getKnownCanonicalizedLocaleForTest(int32_t* length); + +// Return true if the value is already canonicalized. +U_CAPI bool ulocimp_isCanonicalizedLocaleForTest(const char* localeName); + #endif diff --git a/deps/icu-small/source/common/umutex.h b/deps/icu-small/source/common/umutex.h index 7588bcc5d9aed6..57955353d0d6ff 100644 --- a/deps/icu-small/source/common/umutex.h +++ b/deps/icu-small/source/common/umutex.h @@ -262,13 +262,13 @@ class U_COMMON_API UMutex { * the global ICU mutex. Recursive locks are an error * and may cause a deadlock on some platforms. */ -U_INTERNAL void U_EXPORT2 umtx_lock(UMutex* mutex); +U_CAPI void U_EXPORT2 umtx_lock(UMutex* mutex); /* Unlock a mutex. * @param mutex The given mutex to be unlocked. Pass NULL to specify * the global ICU mutex. */ -U_INTERNAL void U_EXPORT2 umtx_unlock (UMutex* mutex); +U_CAPI void U_EXPORT2 umtx_unlock (UMutex* mutex); U_NAMESPACE_END diff --git a/deps/icu-small/source/common/unicode/appendable.h b/deps/icu-small/source/common/unicode/appendable.h index 4beacaf6583620..fc99254de14e58 100644 --- a/deps/icu-small/source/common/unicode/appendable.h +++ b/deps/icu-small/source/common/unicode/appendable.h @@ -45,7 +45,7 @@ class UnicodeString; * * The methods do not take UErrorCode parameters. * If an error occurs (e.g., out-of-memory), - * in addition to returning FALSE from failing operations, + * in addition to returning false from failing operations, * the implementation must prevent unexpected behavior (e.g., crashes) * from further calls and should make the error condition available separately * (e.g., store a UErrorCode, make/keep a UnicodeString bogus). @@ -62,7 +62,7 @@ class U_COMMON_API Appendable : public UObject { /** * Appends a 16-bit code unit. * @param c code unit - * @return TRUE if the operation succeeded + * @return true if the operation succeeded * @stable ICU 4.8 */ virtual UBool appendCodeUnit(char16_t c) = 0; @@ -71,7 +71,7 @@ class U_COMMON_API Appendable : public UObject { * Appends a code point. * The default implementation calls appendCodeUnit(char16_t) once or twice. * @param c code point 0..0x10ffff - * @return TRUE if the operation succeeded + * @return true if the operation succeeded * @stable ICU 4.8 */ virtual UBool appendCodePoint(UChar32 c); @@ -81,7 +81,7 @@ class U_COMMON_API Appendable : public UObject { * The default implementation calls appendCodeUnit(char16_t) for each code unit. * @param s string, must not be NULL if length!=0 * @param length string length, or -1 if NUL-terminated - * @return TRUE if the operation succeeded + * @return true if the operation succeeded * @stable ICU 4.8 */ virtual UBool appendString(const char16_t *s, int32_t length); @@ -90,9 +90,9 @@ class U_COMMON_API Appendable : public UObject { * Tells the object that the caller is going to append roughly * appendCapacity char16_ts. A subclass might use this to pre-allocate * a larger buffer if necessary. - * The default implementation does nothing. (It always returns TRUE.) + * The default implementation does nothing. (It always returns true.) * @param appendCapacity estimated number of char16_ts that will be appended - * @return TRUE if the operation succeeded + * @return true if the operation succeeded * @stable ICU 4.8 */ virtual UBool reserveAppendCapacity(int32_t appendCapacity); @@ -171,7 +171,7 @@ class U_COMMON_API UnicodeStringAppendable : public Appendable { /** * Appends a 16-bit code unit to the string. * @param c code unit - * @return TRUE if the operation succeeded + * @return true if the operation succeeded * @stable ICU 4.8 */ virtual UBool appendCodeUnit(char16_t c); @@ -179,7 +179,7 @@ class U_COMMON_API UnicodeStringAppendable : public Appendable { /** * Appends a code point to the string. * @param c code point 0..0x10ffff - * @return TRUE if the operation succeeded + * @return true if the operation succeeded * @stable ICU 4.8 */ virtual UBool appendCodePoint(UChar32 c); @@ -188,7 +188,7 @@ class U_COMMON_API UnicodeStringAppendable : public Appendable { * Appends a string to the UnicodeString. * @param s string, must not be NULL if length!=0 * @param length string length, or -1 if NUL-terminated - * @return TRUE if the operation succeeded + * @return true if the operation succeeded * @stable ICU 4.8 */ virtual UBool appendString(const char16_t *s, int32_t length); @@ -197,7 +197,7 @@ class U_COMMON_API UnicodeStringAppendable : public Appendable { * Tells the UnicodeString that the caller is going to append roughly * appendCapacity char16_ts. * @param appendCapacity estimated number of char16_ts that will be appended - * @return TRUE if the operation succeeded + * @return true if the operation succeeded * @stable ICU 4.8 */ virtual UBool reserveAppendCapacity(int32_t appendCapacity); diff --git a/deps/icu-small/source/common/unicode/brkiter.h b/deps/icu-small/source/common/unicode/brkiter.h index b944497345479b..9bba5fcccc319d 100644 --- a/deps/icu-small/source/common/unicode/brkiter.h +++ b/deps/icu-small/source/common/unicode/brkiter.h @@ -564,7 +564,7 @@ class U_COMMON_API BreakIterator : public UObject { * BreakIterator::createXXXInstance to avoid undefined behavior. * @param key the registry key returned by a previous call to registerInstance * @param status the in/out status code, no special meanings are assigned - * @return TRUE if the iterator for the key was successfully unregistered + * @return true if the iterator for the key was successfully unregistered * @stable ICU 2.4 */ static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status); @@ -655,7 +655,7 @@ class U_COMMON_API BreakIterator : public UObject { inline UBool BreakIterator::isBufferClone() { - return FALSE; + return false; } #endif /* U_HIDE_DEPRECATED_API */ diff --git a/deps/icu-small/source/common/unicode/bytestream.h b/deps/icu-small/source/common/unicode/bytestream.h index 33505a34299818..73d498397c744c 100644 --- a/deps/icu-small/source/common/unicode/bytestream.h +++ b/deps/icu-small/source/common/unicode/bytestream.h @@ -197,7 +197,7 @@ class U_COMMON_API CheckedArrayByteSink : public ByteSink { * Returns the sink to its original state, without modifying the buffer. * Useful for reusing both the buffer and the sink for multiple streams. * Resets the state to NumberOfBytesWritten()=NumberOfBytesAppended()=0 - * and Overflowed()=FALSE. + * and Overflowed()=false. * @return *this * @stable ICU 4.6 */ @@ -236,7 +236,7 @@ class U_COMMON_API CheckedArrayByteSink : public ByteSink { /** * Returns true if any bytes were discarded, i.e., if there was an * attempt to write more than 'capacity' bytes. - * @return TRUE if more than 'capacity' bytes were Append()ed + * @return true if more than 'capacity' bytes were Append()ed * @stable ICU 4.2 */ UBool Overflowed() const { return overflowed_; } diff --git a/deps/icu-small/source/common/unicode/bytestrie.h b/deps/icu-small/source/common/unicode/bytestrie.h index 51405f64a10e64..85f802df420262 100644 --- a/deps/icu-small/source/common/unicode/bytestrie.h +++ b/deps/icu-small/source/common/unicode/bytestrie.h @@ -97,14 +97,13 @@ class U_COMMON_API BytesTrie : public UMemory { return *this; } -#ifndef U_HIDE_DRAFT_API /** * Returns the state of this trie as a 64-bit integer. * The state value is never 0. * * @return opaque state value * @see resetToState64 - * @draft ICU 65 + * @stable ICU 65 */ uint64_t getState64() const { return (static_cast(remainingMatchLength_ + 2) << kState64RemainingShift) | @@ -123,14 +122,13 @@ class U_COMMON_API BytesTrie : public UMemory { * @see getState64 * @see resetToState * @see reset - * @draft ICU 65 + * @stable ICU 65 */ BytesTrie &resetToState64(uint64_t state) { remainingMatchLength_ = static_cast(state >> kState64RemainingShift) - 2; pos_ = bytes_ + (state & kState64PosMask); return *this; } -#endif /* U_HIDE_DRAFT_API */ /** * BytesTrie state object, for saving a trie's current state @@ -253,16 +251,16 @@ class U_COMMON_API BytesTrie : public UMemory { /** * Determines whether all byte sequences reachable from the current state * map to the same value. - * @param uniqueValue Receives the unique value, if this function returns TRUE. + * @param uniqueValue Receives the unique value, if this function returns true. * (output-only) - * @return TRUE if all byte sequences reachable from the current state + * @return true if all byte sequences reachable from the current state * map to the same value. * @stable ICU 4.8 */ inline UBool hasUniqueValue(int32_t &uniqueValue) const { const uint8_t *pos=pos_; // Skip the rest of a pending linear-match node. - return pos!=NULL && findUniqueValue(pos+remainingMatchLength_+1, FALSE, uniqueValue); + return pos!=NULL && findUniqueValue(pos+remainingMatchLength_+1, false, uniqueValue); } /** @@ -321,7 +319,7 @@ class U_COMMON_API BytesTrie : public UMemory { Iterator &reset(); /** - * @return TRUE if there are more elements. + * @return true if there are more elements. * @stable ICU 4.8 */ UBool hasNext() const; @@ -337,7 +335,7 @@ class U_COMMON_API BytesTrie : public UMemory { * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) - * @return TRUE if there is another element. + * @return true if there is another element. * @stable ICU 4.8 */ UBool next(UErrorCode &errorCode); diff --git a/deps/icu-small/source/common/unicode/bytestriebuilder.h b/deps/icu-small/source/common/unicode/bytestriebuilder.h index e58f18755ef959..eafe5a28c3ef05 100644 --- a/deps/icu-small/source/common/unicode/bytestriebuilder.h +++ b/deps/icu-small/source/common/unicode/bytestriebuilder.h @@ -101,9 +101,10 @@ class U_COMMON_API BytesTrieBuilder : public StringTrieBuilder { * Multiple calls to buildStringPiece() return StringPieces referring to the * builder's same byte array, without rebuilding. * If buildStringPiece() is called after build(), the trie will be - * re-serialized into a new array. - * If build() is called after buildStringPiece(), the trie object will become - * the owner of the previously returned array. + * re-serialized into a new array (because build() passes on ownership). + * If build() is called after buildStringPiece(), the trie object returned + * by build() will become the owner of the underlying string for the + * previously returned StringPiece. * After clear() has been called, a new array will be used as well. * @param buildOption Build option, see UStringTrieBuildOption. * @param errorCode Standard ICU error code. Its input value must @@ -139,7 +140,7 @@ class U_COMMON_API BytesTrieBuilder : public StringTrieBuilder { virtual int32_t skipElementsBySomeUnits(int32_t i, int32_t byteIndex, int32_t count) const; virtual int32_t indexOfElementWithNextUnit(int32_t i, int32_t byteIndex, char16_t byte) const; - virtual UBool matchNodesCanHaveValues() const { return FALSE; } + virtual UBool matchNodesCanHaveValues() const { return false; } virtual int32_t getMaxBranchLinearSubNodeLength() const { return BytesTrie::kMaxBranchLinearSubNodeLength; } virtual int32_t getMinLinearMatch() const { return BytesTrie::kMinLinearMatch; } diff --git a/deps/icu-small/source/common/unicode/caniter.h b/deps/icu-small/source/common/unicode/caniter.h index 87c946c2b4db56..8ba4cc7daad3c1 100644 --- a/deps/icu-small/source/common/unicode/caniter.h +++ b/deps/icu-small/source/common/unicode/caniter.h @@ -25,11 +25,11 @@ */ /** Should permutation skip characters with combining class zero - * Should be either TRUE or FALSE. This is a compile time option + * Should be either true or false. This is a compile time option * @stable ICU 2.4 */ #ifndef CANITER_SKIP_ZEROES -#define CANITER_SKIP_ZEROES TRUE +#define CANITER_SKIP_ZEROES true #endif U_NAMESPACE_BEGIN diff --git a/deps/icu-small/source/common/unicode/chariter.h b/deps/icu-small/source/common/unicode/chariter.h index 7e4f446bb0f8a8..f7ecd8e0036ce2 100644 --- a/deps/icu-small/source/common/unicode/chariter.h +++ b/deps/icu-small/source/common/unicode/chariter.h @@ -65,7 +65,7 @@ U_NAMESPACE_BEGIN * check for the end of the iteration. When there are no more * characters in the text object: *

    - *
  • The hasNext() function returns FALSE.
  • + *
  • The hasNext() function returns false.
  • *
  • nextPostInc() and next32PostInc() return DONE * when one attempts to read beyond the end of the text object.
  • *
@@ -165,11 +165,11 @@ class U_COMMON_API ForwardCharacterIterator : public UObject { virtual UChar32 next32PostInc(void) = 0; /** - * Returns FALSE if there are no more code units or code points + * Returns false if there are no more code units or code points * at or after the current position in the iteration range. * This is used with nextPostInc() or next32PostInc() in forward * iteration. - * @returns FALSE if there are no more code units or code points + * @returns false if there are no more code units or code points * at or after the current position in the iteration range. * @stable ICU 2.0 */ @@ -535,12 +535,12 @@ class U_COMMON_API CharacterIterator : public ForwardCharacterIterator { virtual UChar32 previous32(void) = 0; /** - * Returns FALSE if there are no more code units or code points + * Returns false if there are no more code units or code points * before the current position in the iteration range. * This is used with previous() or previous32() in backward * iteration. - * @return FALSE if there are no more code units or code points - * before the current position in the iteration range, return TRUE otherwise. + * @return false if there are no more code units or code points + * before the current position in the iteration range, return true otherwise. * @stable ICU 2.0 */ virtual UBool hasPrevious() = 0; diff --git a/deps/icu-small/source/common/unicode/docmain.h b/deps/icu-small/source/common/unicode/docmain.h index 2b38692997dd9a..f09d7e1dc29cec 100644 --- a/deps/icu-small/source/common/unicode/docmain.h +++ b/deps/icu-small/source/common/unicode/docmain.h @@ -53,10 +53,10 @@ * *

Architecture (User's Guide)

* * *
@@ -149,7 +149,7 @@ * * * Number Range Formatting
(includes currency and unit ranges) - * (no C API) + * unumberrangeformatter.h * icu::number::NumberRangeFormatter * * diff --git a/deps/icu-small/source/common/unicode/dtintrv.h b/deps/icu-small/source/common/unicode/dtintrv.h index 325faa3ccb92cb..7932ea660fa4dd 100644 --- a/deps/icu-small/source/common/unicode/dtintrv.h +++ b/deps/icu-small/source/common/unicode/dtintrv.h @@ -106,14 +106,14 @@ class U_COMMON_API DateInterval : public UObject { /** * Equality operator. - * @return TRUE if the two DateIntervals are the same + * @return true if the two DateIntervals are the same * @stable ICU 4.0 */ virtual UBool operator==(const DateInterval& other) const; /** * Non-equality operator - * @return TRUE if the two DateIntervals are not the same + * @return true if the two DateIntervals are not the same * @stable ICU 4.0 */ inline UBool operator!=(const DateInterval& other) const; diff --git a/deps/icu-small/source/common/unicode/edits.h b/deps/icu-small/source/common/unicode/edits.h index c3ceaccb3b3802..bfa07fa6765b73 100644 --- a/deps/icu-small/source/common/unicode/edits.h +++ b/deps/icu-small/source/common/unicode/edits.h @@ -159,7 +159,7 @@ class U_COMMON_API Edits U_FINAL : public UMemory { * @param outErrorCode Set to an error code if it does not contain one already * and an error occurred while recording edits. * Otherwise unchanged. - * @return TRUE if U_FAILURE(outErrorCode) + * @return true if U_FAILURE(outErrorCode) * @stable ICU 59 */ UBool copyErrorTo(UErrorCode &outErrorCode) const; @@ -171,7 +171,7 @@ class U_COMMON_API Edits U_FINAL : public UMemory { */ int32_t lengthDelta() const { return delta; } /** - * @return TRUE if there are any change edits + * @return true if there are any change edits * @stable ICU 59 */ UBool hasChanges() const { return numChanges != 0; } @@ -207,8 +207,8 @@ class U_COMMON_API Edits U_FINAL : public UMemory { */ Iterator() : array(nullptr), index(0), length(0), - remaining(0), onlyChanges_(FALSE), coarse(FALSE), - dir(0), changed(FALSE), oldLength_(0), newLength_(0), + remaining(0), onlyChanges_(false), coarse(false), + dir(0), changed(false), oldLength_(0), newLength_(0), srcIndex(0), replIndex(0), destIndex(0) {} /** * Copy constructor. @@ -226,7 +226,7 @@ class U_COMMON_API Edits U_FINAL : public UMemory { * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, * or else the function returns immediately. Check for U_FAILURE() * on output or use with function chaining. (See User Guide for details.) - * @return TRUE if there is another edit + * @return true if there is another edit * @stable ICU 59 */ UBool next(UErrorCode &errorCode) { return next(onlyChanges_, errorCode); } @@ -247,11 +247,11 @@ class U_COMMON_API Edits U_FINAL : public UMemory { * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, * or else the function returns immediately. Check for U_FAILURE() * on output or use with function chaining. (See User Guide for details.) - * @return TRUE if the edit for the source index was found + * @return true if the edit for the source index was found * @stable ICU 59 */ UBool findSourceIndex(int32_t i, UErrorCode &errorCode) { - return findIndex(i, TRUE, errorCode) == 0; + return findIndex(i, true, errorCode) == 0; } /** @@ -270,11 +270,11 @@ class U_COMMON_API Edits U_FINAL : public UMemory { * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, * or else the function returns immediately. Check for U_FAILURE() * on output or use with function chaining. (See User Guide for details.) - * @return TRUE if the edit for the destination index was found + * @return true if the edit for the destination index was found * @stable ICU 60 */ UBool findDestinationIndex(int32_t i, UErrorCode &errorCode) { - return findIndex(i, FALSE, errorCode) == 0; + return findIndex(i, false, errorCode) == 0; } /** @@ -328,8 +328,8 @@ class U_COMMON_API Edits U_FINAL : public UMemory { /** * Returns whether the edit currently represented by the iterator is a change edit. * - * @return TRUE if this edit replaces oldLength() units with newLength() different ones. - * FALSE if oldLength units remain unchanged. + * @return true if this edit replaces oldLength() units with newLength() different ones. + * false if oldLength units remain unchanged. * @stable ICU 59 */ UBool hasChange() const { return changed; } @@ -347,8 +347,8 @@ class U_COMMON_API Edits U_FINAL : public UMemory { * {@link #destinationIndex}, or in the replacement string, which starts at * {@link #replacementIndex}. * - * @return the number of units in the modified string, if hasChange() is TRUE. - * Same as oldLength if hasChange() is FALSE. + * @return the number of units in the modified string, if hasChange() is true. + * Same as oldLength if hasChange() is false. * @stable ICU 59 */ int32_t newLength() const { return newLength_; } @@ -436,7 +436,7 @@ class U_COMMON_API Edits U_FINAL : public UMemory { * @stable ICU 59 */ Iterator getCoarseChangesIterator() const { - return Iterator(array, length, TRUE, TRUE); + return Iterator(array, length, true, true); } /** @@ -448,7 +448,7 @@ class U_COMMON_API Edits U_FINAL : public UMemory { * @stable ICU 59 */ Iterator getCoarseIterator() const { - return Iterator(array, length, FALSE, TRUE); + return Iterator(array, length, false, true); } /** @@ -460,7 +460,7 @@ class U_COMMON_API Edits U_FINAL : public UMemory { * @stable ICU 59 */ Iterator getFineChangesIterator() const { - return Iterator(array, length, TRUE, FALSE); + return Iterator(array, length, true, false); } /** @@ -471,7 +471,7 @@ class U_COMMON_API Edits U_FINAL : public UMemory { * @stable ICU 59 */ Iterator getFineIterator() const { - return Iterator(array, length, FALSE, FALSE); + return Iterator(array, length, false, false); } /** diff --git a/deps/icu-small/source/common/unicode/filteredbrk.h b/deps/icu-small/source/common/unicode/filteredbrk.h index 42936763259e2d..8b07e39ae12bb6 100644 --- a/deps/icu-small/source/common/unicode/filteredbrk.h +++ b/deps/icu-small/source/common/unicode/filteredbrk.h @@ -85,8 +85,8 @@ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject { * by the iterator. * @param string the string to suppress, such as "Mr." * @param status error code - * @return returns TRUE if the string was not present and now added, - * FALSE if the call was a no-op because the string was already being suppressed. + * @return returns true if the string was not present and now added, + * false if the call was a no-op because the string was already being suppressed. * @stable ICU 56 */ virtual UBool suppressBreakAfter(const UnicodeString& string, UErrorCode& status) = 0; @@ -98,8 +98,8 @@ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject { * locale data which may be suppressing certain strings. * @param string the exception to remove * @param status error code - * @return returns TRUE if the string was present and now removed, - * FALSE if the call was a no-op because the string was not being suppressed. + * @return returns true if the string was present and now removed, + * false if the call was a no-op because the string was not being suppressed. * @stable ICU 56 */ virtual UBool unsuppressBreakAfter(const UnicodeString& string, UErrorCode& status) = 0; diff --git a/deps/icu-small/source/common/unicode/icudataver.h b/deps/icu-small/source/common/unicode/icudataver.h index d5c728da880f8f..a82cb3d89d9d99 100644 --- a/deps/icu-small/source/common/unicode/icudataver.h +++ b/deps/icu-small/source/common/unicode/icudataver.h @@ -38,6 +38,6 @@ * * @stable ICU 49 */ -U_STABLE void U_EXPORT2 u_getDataVersion(UVersionInfo dataVersionFillin, UErrorCode *status); +U_CAPI void U_EXPORT2 u_getDataVersion(UVersionInfo dataVersionFillin, UErrorCode *status); #endif diff --git a/deps/icu-small/source/common/unicode/icuplug.h b/deps/icu-small/source/common/unicode/icuplug.h index 827cbe94b61cf8..2bd51ff8dfc050 100644 --- a/deps/icu-small/source/common/unicode/icuplug.h +++ b/deps/icu-small/source/common/unicode/icuplug.h @@ -208,7 +208,7 @@ typedef UPlugTokenReturn (U_EXPORT2 UPlugEntrypoint) ( * @param dontUnload set true if this plugin can't be unloaded * @internal ICU 4.4 Technology Preview */ -U_INTERNAL void U_EXPORT2 +U_CAPI void U_EXPORT2 uplug_setPlugNoUnload(UPlugData *plug, UBool dontUnload); /** @@ -217,7 +217,7 @@ uplug_setPlugNoUnload(UPlugData *plug, UBool dontUnload); * @param level the level of this plugin * @internal ICU 4.4 Technology Preview */ -U_INTERNAL void U_EXPORT2 +U_CAPI void U_EXPORT2 uplug_setPlugLevel(UPlugData *plug, UPlugLevel level); /** @@ -226,7 +226,7 @@ uplug_setPlugLevel(UPlugData *plug, UPlugLevel level); * @return the level of this plugin * @internal ICU 4.4 Technology Preview */ -U_INTERNAL UPlugLevel U_EXPORT2 +U_CAPI UPlugLevel U_EXPORT2 uplug_getPlugLevel(UPlugData *plug); /** @@ -236,7 +236,7 @@ uplug_getPlugLevel(UPlugData *plug); * @return the lowest level of plug which can currently load * @internal ICU 4.4 Technology Preview */ -U_INTERNAL UPlugLevel U_EXPORT2 +U_CAPI UPlugLevel U_EXPORT2 uplug_getCurrentLevel(void); @@ -245,7 +245,7 @@ uplug_getCurrentLevel(void); * @return The error code of this plugin's load attempt. * @internal ICU 4.4 Technology Preview */ -U_INTERNAL UErrorCode U_EXPORT2 +U_CAPI UErrorCode U_EXPORT2 uplug_getPlugLoadStatus(UPlugData *plug); /** @@ -254,7 +254,7 @@ uplug_getPlugLoadStatus(UPlugData *plug); * @param name the name of this plugin. The first UPLUG_NAME_MAX characters willi be copied into a new buffer. * @internal ICU 4.4 Technology Preview */ -U_INTERNAL void U_EXPORT2 +U_CAPI void U_EXPORT2 uplug_setPlugName(UPlugData *plug, const char *name); /** @@ -263,7 +263,7 @@ uplug_setPlugName(UPlugData *plug, const char *name); * @return the name of this plugin * @internal ICU 4.4 Technology Preview */ -U_INTERNAL const char * U_EXPORT2 +U_CAPI const char * U_EXPORT2 uplug_getPlugName(UPlugData *plug); /** @@ -272,7 +272,7 @@ uplug_getPlugName(UPlugData *plug); * @return the symbol name, or NULL * @internal ICU 4.4 Technology Preview */ -U_INTERNAL const char * U_EXPORT2 +U_CAPI const char * U_EXPORT2 uplug_getSymbolName(UPlugData *plug); /** @@ -282,7 +282,7 @@ uplug_getSymbolName(UPlugData *plug); * @return the library name, or NULL * @internal ICU 4.4 Technology Preview */ -U_INTERNAL const char * U_EXPORT2 +U_CAPI const char * U_EXPORT2 uplug_getLibraryName(UPlugData *plug, UErrorCode *status); /** @@ -292,7 +292,7 @@ uplug_getLibraryName(UPlugData *plug, UErrorCode *status); * @return the library, or NULL * @internal ICU 4.4 Technology Preview */ -U_INTERNAL void * U_EXPORT2 +U_CAPI void * U_EXPORT2 uplug_getLibrary(UPlugData *plug); /** @@ -301,7 +301,7 @@ uplug_getLibrary(UPlugData *plug); * @return the context, or NULL if not set * @internal ICU 4.4 Technology Preview */ -U_INTERNAL void * U_EXPORT2 +U_CAPI void * U_EXPORT2 uplug_getContext(UPlugData *plug); /** @@ -310,7 +310,7 @@ uplug_getContext(UPlugData *plug); * @param context new context to set * @internal ICU 4.4 Technology Preview */ -U_INTERNAL void U_EXPORT2 +U_CAPI void U_EXPORT2 uplug_setContext(UPlugData *plug, void *context); @@ -321,7 +321,7 @@ uplug_setContext(UPlugData *plug, void *context); * @return configuration string, or else null. * @internal ICU 4.4 Technology Preview */ -U_INTERNAL const char * U_EXPORT2 +U_CAPI const char * U_EXPORT2 uplug_getConfiguration(UPlugData *plug); /** @@ -339,7 +339,7 @@ uplug_getConfiguration(UPlugData *plug); * @return the next oldest plugin, or NULL if no more. * @internal ICU 4.4 Technology Preview */ -U_INTERNAL UPlugData* U_EXPORT2 +U_CAPI UPlugData* U_EXPORT2 uplug_nextPlug(UPlugData *prior); /** @@ -354,7 +354,7 @@ uplug_nextPlug(UPlugData *prior); * @return the new UPlugData associated with this plugin, or NULL if error. * @internal ICU 4.4 Technology Preview */ -U_INTERNAL UPlugData* U_EXPORT2 +U_CAPI UPlugData* U_EXPORT2 uplug_loadPlugFromEntrypoint(UPlugEntrypoint *entrypoint, const char *config, UErrorCode *status); @@ -368,7 +368,7 @@ uplug_loadPlugFromEntrypoint(UPlugEntrypoint *entrypoint, const char *config, UE * @return the new UPlugData associated with this plugin, or NULL if error. * @internal ICU 4.4 Technology Preview */ -U_INTERNAL UPlugData* U_EXPORT2 +U_CAPI UPlugData* U_EXPORT2 uplug_loadPlugFromLibrary(const char *libName, const char *sym, const char *config, UErrorCode *status); /** @@ -378,7 +378,7 @@ uplug_loadPlugFromLibrary(const char *libName, const char *sym, const char *conf * @param status error result * @internal ICU 4.4 Technology Preview */ -U_INTERNAL void U_EXPORT2 +U_CAPI void U_EXPORT2 uplug_removePlug(UPlugData *plug, UErrorCode *status); #endif /* U_HIDE_INTERNAL_API */ diff --git a/deps/icu-small/source/common/unicode/idna.h b/deps/icu-small/source/common/unicode/idna.h index 6dfcfe48db28f1..1305dc604842eb 100644 --- a/deps/icu-small/source/common/unicode/idna.h +++ b/deps/icu-small/source/common/unicode/idna.h @@ -95,7 +95,7 @@ class U_COMMON_API IDNA : public UObject { /** * Converts a single domain name label into its ASCII form for DNS lookup. - * If any processing step fails, then info.hasErrors() will be TRUE and + * If any processing step fails, then info.hasErrors() will be true and * the result might not be an ASCII string. * The label might be modified according to the types of errors. * Labels with severe errors will be left in (or turned into) their Unicode form. @@ -119,7 +119,7 @@ class U_COMMON_API IDNA : public UObject { /** * Converts a single domain name label into its Unicode form for human-readable display. - * If any processing step fails, then info.hasErrors() will be TRUE. + * If any processing step fails, then info.hasErrors() will be true. * The label might be modified according to the types of errors. * * The UErrorCode indicates an error only in exceptional cases, @@ -141,7 +141,7 @@ class U_COMMON_API IDNA : public UObject { /** * Converts a whole domain name into its ASCII form for DNS lookup. - * If any processing step fails, then info.hasErrors() will be TRUE and + * If any processing step fails, then info.hasErrors() will be true and * the result might not be an ASCII string. * The domain name might be modified according to the types of errors. * Labels with severe errors will be left in (or turned into) their Unicode form. @@ -165,7 +165,7 @@ class U_COMMON_API IDNA : public UObject { /** * Converts a whole domain name into its Unicode form for human-readable display. - * If any processing step fails, then info.hasErrors() will be TRUE. + * If any processing step fails, then info.hasErrors() will be true. * The domain name might be modified according to the types of errors. * * The UErrorCode indicates an error only in exceptional cases, @@ -273,10 +273,10 @@ class U_COMMON_API IDNAInfo : public UMemory { * Constructor for stack allocation. * @stable ICU 4.6 */ - IDNAInfo() : errors(0), labelErrors(0), isTransDiff(FALSE), isBiDi(FALSE), isOkBiDi(TRUE) {} + IDNAInfo() : errors(0), labelErrors(0), isTransDiff(false), isBiDi(false), isOkBiDi(true) {} /** * Were there IDNA processing errors? - * @return TRUE if there were processing errors + * @return true if there were processing errors * @stable ICU 4.6 */ UBool hasErrors() const { return errors!=0; } @@ -288,7 +288,7 @@ class U_COMMON_API IDNAInfo : public UMemory { */ uint32_t getErrors() const { return errors; } /** - * Returns TRUE if transitional and nontransitional processing produce different results. + * Returns true if transitional and nontransitional processing produce different results. * This is the case when the input label or domain name contains * one or more deviation characters outside a Punycode label (see UTS #46). *
    @@ -297,7 +297,7 @@ class U_COMMON_API IDNAInfo : public UMemory { *
  • With transitional processing, such characters are * mapped (sharp s/sigma) or removed (joiner/nonjoiner). *
- * @return TRUE if transitional and nontransitional processing produce different results + * @return true if transitional and nontransitional processing produce different results * @stable ICU 4.6 */ UBool isTransitionalDifferent() const { return isTransDiff; } @@ -310,9 +310,9 @@ class U_COMMON_API IDNAInfo : public UMemory { void reset() { errors=labelErrors=0; - isTransDiff=FALSE; - isBiDi=FALSE; - isOkBiDi=TRUE; + isTransDiff=false; + isBiDi=false; + isOkBiDi=true; } uint32_t errors, labelErrors; diff --git a/deps/icu-small/source/common/unicode/localebuilder.h b/deps/icu-small/source/common/unicode/localebuilder.h index c5836fe27021b3..27a894de101def 100644 --- a/deps/icu-small/source/common/unicode/localebuilder.h +++ b/deps/icu-small/source/common/unicode/localebuilder.h @@ -1,5 +1,5 @@ // © 2018 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html#License +// License & terms of use: http://www.unicode.org/copyright.html #ifndef __LOCALEBUILDER_H__ #define __LOCALEBUILDER_H__ @@ -92,11 +92,12 @@ class U_COMMON_API LocaleBuilder : public UObject { /** * Resets the LocaleBuilder to match the provided * [Unicode Locale Identifier](http://www.unicode.org/reports/tr35/tr35.html#unicode_locale_id) . - * Discards the existing state. the empty string cause the builder to be - * reset, like {@link #clear}. Grandfathered tags are converted to their - * canonical form before being processed. Otherwise, the language - * tag must be well-formed, or else the build() method will later - * report an U_ILLEGAL_ARGUMENT_ERROR. + * Discards the existing state. + * The empty string causes the builder to be reset, like {@link #clear}. + * Legacy language tags (marked as “Type: grandfathered” in BCP 47) + * are converted to their canonical form before being processed. + * Otherwise, the language tag must be well-formed, + * or else the build() method will later report an U_ILLEGAL_ARGUMENT_ERROR. * *

This method clears the internal UErrorCode. * @@ -278,18 +279,16 @@ class U_COMMON_API LocaleBuilder : public UObject { */ Locale build(UErrorCode& status); -#ifndef U_HIDE_DRAFT_API /** * Sets the UErrorCode if an error occurred while recording sets. * Preserves older error codes in the outErrorCode. * @param outErrorCode Set to an error code that occurred while setting subtags. * Unchanged if there is no such error or if outErrorCode * already contained an error. - * @return TRUE if U_FAILURE(outErrorCode) - * @draft ICU 65 + * @return true if U_FAILURE(outErrorCode) + * @stable ICU 65 */ UBool copyErrorTo(UErrorCode &outErrorCode) const; -#endif /* U_HIDE_DRAFT_API */ private: friend class LocaleMatcher::Result; diff --git a/deps/icu-small/source/common/unicode/localematcher.h b/deps/icu-small/source/common/unicode/localematcher.h index 2e1a7a349f3983..63a68b0b7fb3d3 100644 --- a/deps/icu-small/source/common/unicode/localematcher.h +++ b/deps/icu-small/source/common/unicode/localematcher.h @@ -1,5 +1,5 @@ // © 2019 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html#License +// License & terms of use: http://www.unicode.org/copyright.html // localematcher.h // created: 2019may08 Markus W. Scherer @@ -20,26 +20,24 @@ * \brief C++ API: Locale matcher: User's desired locales vs. application's supported locales. */ -#ifndef U_FORCE_HIDE_DRAFT_API - /** * Builder option for whether the language subtag or the script subtag is most important. * - * @see Builder#setFavorSubtag(ULocMatchFavorSubtag) - * @draft ICU 65 + * @see LocaleMatcher::Builder#setFavorSubtag(ULocMatchFavorSubtag) + * @stable ICU 65 */ enum ULocMatchFavorSubtag { /** * Language differences are most important, then script differences, then region differences. * (This is the default behavior.) * - * @draft ICU 65 + * @stable ICU 65 */ ULOCMATCH_FAVOR_LANGUAGE, /** * Makes script differences matter relatively more than language differences. * - * @draft ICU 65 + * @stable ICU 65 */ ULOCMATCH_FAVOR_SCRIPT }; @@ -51,14 +49,14 @@ typedef enum ULocMatchFavorSubtag ULocMatchFavorSubtag; * Builder option for whether all desired locales are treated equally or * earlier ones are preferred. * - * @see Builder#setDemotionPerDesiredLocale(ULocMatchDemotion) - * @draft ICU 65 + * @see LocaleMatcher::Builder#setDemotionPerDesiredLocale(ULocMatchDemotion) + * @stable ICU 65 */ enum ULocMatchDemotion { /** * All desired locales are treated equally. * - * @draft ICU 65 + * @stable ICU 65 */ ULOCMATCH_DEMOTION_NONE, /** @@ -85,7 +83,7 @@ enum ULocMatchDemotion { * this is possible in future versions of the data.) * * - * @draft ICU 65 + * @stable ICU 65 */ ULOCMATCH_DEMOTION_REGION }; @@ -93,6 +91,8 @@ enum ULocMatchDemotion { typedef enum ULocMatchDemotion ULocMatchDemotion; #endif +#ifndef U_FORCE_HIDE_DRAFT_API + /** * Builder option for whether to include or ignore one-way (fallback) match data. * The LocaleMatcher uses CLDR languageMatch data which includes fallback (oneway=true) entries. @@ -107,7 +107,7 @@ typedef enum ULocMatchDemotion ULocMatchDemotion; * if there is a decent match for the original UI language, we want to use it, * but not if it is merely a fallback. * - * @see Builder#setDirection(ULocMatchDirection) + * @see LocaleMatcher::Builder#setDirection(ULocMatchDirection) * @draft ICU 67 */ enum ULocMatchDirection { @@ -129,6 +129,8 @@ enum ULocMatchDirection { typedef enum ULocMatchDirection ULocMatchDirection; #endif +#endif // U_FORCE_HIDE_DRAFT_API + struct UHashtable; U_NAMESPACE_BEGIN @@ -181,7 +183,7 @@ class XLikelySubtags; * *

This class is not intended for public subclassing. * - * @draft ICU 65 + * @stable ICU 65 */ class U_COMMON_API LocaleMatcher : public UMemory { public: @@ -189,7 +191,7 @@ class U_COMMON_API LocaleMatcher : public UMemory { * Data for the best-matching pair of a desired and a supported locale. * Movable but not copyable. * - * @draft ICU 65 + * @stable ICU 65 */ class U_COMMON_API Result : public UMemory { public: @@ -198,14 +200,14 @@ class U_COMMON_API LocaleMatcher : public UMemory { * This object will have the same contents that the source object had. * * @param src Result to move contents from. - * @draft ICU 65 + * @stable ICU 65 */ Result(Result &&src) U_NOEXCEPT; /** * Destructor. * - * @draft ICU 65 + * @stable ICU 65 */ ~Result(); @@ -214,28 +216,27 @@ class U_COMMON_API LocaleMatcher : public UMemory { * This object will have the same contents that the source object had. * * @param src Result to move contents from. - * @draft ICU 65 + * @stable ICU 65 */ Result &operator=(Result &&src) U_NOEXCEPT; -#ifndef U_HIDE_DRAFT_API /** * Returns the best-matching desired locale. * nullptr if the list of desired locales is empty or if none matched well enough. * * @return the best-matching desired locale, or nullptr. - * @draft ICU 65 + * @stable ICU 65 */ inline const Locale *getDesiredLocale() const { return desiredLocale; } /** * Returns the best-matching supported locale. * If none matched well enough, this is the default locale. - * The default locale is nullptr if the list of supported locales is empty and - * no explicit default locale is set. + * The default locale is nullptr if Builder::setNoDefaultLocale() was called, + * or if the list of supported locales is empty and no explicit default locale is set. * * @return the best-matching supported locale, or nullptr. - * @draft ICU 65 + * @stable ICU 65 */ inline const Locale *getSupportedLocale() const { return supportedLocale; } @@ -244,7 +245,7 @@ class U_COMMON_API LocaleMatcher : public UMemory { * -1 if the list of desired locales is empty or if none matched well enough. * * @return the index of the best-matching desired locale, or -1. - * @draft ICU 65 + * @stable ICU 65 */ inline int32_t getDesiredIndex() const { return desiredIndex; } @@ -256,7 +257,7 @@ class U_COMMON_API LocaleMatcher : public UMemory { * -1 if the list of supported locales is empty or if none matched well enough. * * @return the index of the best-matching supported locale, or -1. - * @draft ICU 65 + * @stable ICU 65 */ inline int32_t getSupportedIndex() const { return supportedIndex; } @@ -270,10 +271,9 @@ class U_COMMON_API LocaleMatcher : public UMemory { *

Example: desired=ar-SA-u-nu-latn, supported=ar-EG, resolved locale=ar-SA-u-nu-latn * * @return a locale combining the best-matching desired and supported locales. - * @draft ICU 65 + * @stable ICU 65 */ Locale makeResolvedLocale(UErrorCode &errorCode) const; -#endif // U_HIDE_DRAFT_API private: Result(const Locale *desired, const Locale *supported, @@ -298,8 +298,7 @@ class U_COMMON_API LocaleMatcher : public UMemory { * LocaleMatcher builder. * Movable but not copyable. * - * @see LocaleMatcher#builder() - * @draft ICU 65 + * @stable ICU 65 */ class U_COMMON_API Builder : public UMemory { public: @@ -307,7 +306,7 @@ class U_COMMON_API LocaleMatcher : public UMemory { * Constructs a builder used in chaining parameters for building a LocaleMatcher. * * @return a new Builder object - * @draft ICU 65 + * @stable ICU 65 */ Builder() {} @@ -316,14 +315,14 @@ class U_COMMON_API LocaleMatcher : public UMemory { * This builder will have the same contents that the source builder had. * * @param src Builder to move contents from. - * @draft ICU 65 + * @stable ICU 65 */ Builder(Builder &&src) U_NOEXCEPT; /** * Destructor. * - * @draft ICU 65 + * @stable ICU 65 */ ~Builder(); @@ -332,11 +331,10 @@ class U_COMMON_API LocaleMatcher : public UMemory { * This builder will have the same contents that the source builder had. * * @param src Builder to move contents from. - * @draft ICU 65 + * @stable ICU 65 */ Builder &operator=(Builder &&src) U_NOEXCEPT; -#ifndef U_HIDE_DRAFT_API /** * Parses an Accept-Language string * (RFC 2616 Section 14.4), @@ -346,7 +344,7 @@ class U_COMMON_API LocaleMatcher : public UMemory { * * @param locales the Accept-Language string of locales to set * @return this Builder object - * @draft ICU 65 + * @stable ICU 65 */ Builder &setSupportedLocalesFromListString(StringPiece locales); @@ -357,7 +355,7 @@ class U_COMMON_API LocaleMatcher : public UMemory { * * @param locales the list of locale * @return this Builder object - * @draft ICU 65 + * @stable ICU 65 */ Builder &setSupportedLocales(Locale::Iterator &locales); @@ -372,7 +370,7 @@ class U_COMMON_API LocaleMatcher : public UMemory { * @param begin Start of range. * @param end Exclusive end of range. * @return this Builder object - * @draft ICU 65 + * @stable ICU 65 */ template Builder &setSupportedLocales(Iter begin, Iter end) { @@ -397,7 +395,7 @@ class U_COMMON_API LocaleMatcher : public UMemory { * @param end Exclusive end of range. * @param converter Converter from *begin to const Locale & or compatible. * @return this Builder object - * @draft ICU 65 + * @stable ICU 65 */ template Builder &setSupportedLocalesViaConverter(Iter begin, Iter end, Conv converter) { @@ -415,17 +413,31 @@ class U_COMMON_API LocaleMatcher : public UMemory { * * @param locale another locale * @return this Builder object - * @draft ICU 65 + * @stable ICU 65 */ Builder &addSupportedLocale(const Locale &locale); +#ifndef U_HIDE_DRAFT_API + /** + * Sets no default locale. + * There will be no explicit or implicit default locale. + * If there is no good match, then the matcher will return nullptr for the + * best supported locale. + * + * @draft ICU 68 + */ + Builder &setNoDefaultLocale(); +#endif // U_HIDE_DRAFT_API + /** * Sets the default locale; if nullptr, or if it is not set explicitly, * then the first supported locale is used as the default locale. + * There is no default locale at all (nullptr will be returned instead) + * if setNoDefaultLocale() is called. * * @param defaultLocale the default locale (will be copied) * @return this Builder object - * @draft ICU 65 + * @stable ICU 65 */ Builder &setDefaultLocale(const Locale *defaultLocale); @@ -437,7 +449,7 @@ class U_COMMON_API LocaleMatcher : public UMemory { * * @param subtag the subtag to favor * @return this Builder object - * @draft ICU 65 + * @stable ICU 65 */ Builder &setFavorSubtag(ULocMatchFavorSubtag subtag); @@ -447,10 +459,11 @@ class U_COMMON_API LocaleMatcher : public UMemory { * * @param demotion the demotion per desired locale to set. * @return this Builder object - * @draft ICU 65 + * @stable ICU 65 */ Builder &setDemotionPerDesiredLocale(ULocMatchDemotion demotion); +#ifndef U_HIDE_DRAFT_API /** * Option for whether to include or ignore one-way (fallback) match data. * By default, they are included. @@ -465,6 +478,32 @@ class U_COMMON_API LocaleMatcher : public UMemory { } return *this; } +#endif // U_HIDE_DRAFT_API + +#ifndef U_HIDE_DRAFT_API + /** + * Sets the maximum distance for an acceptable match. + * The matcher will return a match for a pair of locales only if + * they match at least as well as the pair given here. + * + * For example, setMaxDistance(en-US, en-GB) limits matches to ones where the + * (desired, support) locales have a distance no greater than a region subtag difference. + * This is much stricter than the CLDR default. + * + * The details of locale matching are subject to changes in + * CLDR data and in the algorithm. + * Specifying a maximum distance in relative terms via a sample pair of locales + * insulates from changes that affect all distance metrics similarly, + * but some changes will necessarily affect relative distances between + * different pairs of locales. + * + * @param desired the desired locale for distance comparison. + * @param supported the supported locale for distance comparison. + * @return this Builder object + * @draft ICU 68 + */ + Builder &setMaxDistance(const Locale &desired, const Locale &supported); +#endif // U_HIDE_DRAFT_API /** * Sets the UErrorCode if an error occurred while setting parameters. @@ -473,8 +512,8 @@ class U_COMMON_API LocaleMatcher : public UMemory { * @param outErrorCode Set to an error code if it does not contain one already * and an error occurred while setting parameters. * Otherwise unchanged. - * @return TRUE if U_FAILURE(outErrorCode) - * @draft ICU 65 + * @return true if U_FAILURE(outErrorCode) + * @stable ICU 65 */ UBool copyErrorTo(UErrorCode &outErrorCode) const; @@ -485,11 +524,10 @@ class U_COMMON_API LocaleMatcher : public UMemory { * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, * or else the function returns immediately. Check for U_FAILURE() * on output or use with function chaining. (See User Guide for details.) - * @return new LocaleMatcher. - * @draft ICU 65 + * @return LocaleMatcher + * @stable ICU 65 */ LocaleMatcher build(UErrorCode &errorCode) const; -#endif // U_HIDE_DRAFT_API private: friend class LocaleMatcher; @@ -505,8 +543,11 @@ class U_COMMON_API LocaleMatcher : public UMemory { int32_t thresholdDistance_ = -1; ULocMatchDemotion demotion_ = ULOCMATCH_DEMOTION_REGION; Locale *defaultLocale_ = nullptr; + bool withDefault_ = true; ULocMatchFavorSubtag favor_ = ULOCMATCH_FAVOR_LANGUAGE; ULocMatchDirection direction_ = ULOCMATCH_DIRECTION_WITH_ONE_WAY; + Locale *maxDistanceDesired_ = nullptr; + Locale *maxDistanceSupported_ = nullptr; }; // FYI No public LocaleMatcher constructors in C++; use the Builder. @@ -515,13 +556,13 @@ class U_COMMON_API LocaleMatcher : public UMemory { * Move copy constructor; might modify the source. * This matcher will have the same settings that the source matcher had. * @param src source matcher - * @draft ICU 65 + * @stable ICU 65 */ LocaleMatcher(LocaleMatcher &&src) U_NOEXCEPT; /** * Destructor. - * @draft ICU 65 + * @stable ICU 65 */ ~LocaleMatcher(); @@ -531,11 +572,10 @@ class U_COMMON_API LocaleMatcher : public UMemory { * The behavior is undefined if *this and src are the same object. * @param src source matcher * @return *this - * @draft ICU 65 + * @stable ICU 65 */ LocaleMatcher &operator=(LocaleMatcher &&src) U_NOEXCEPT; -#ifndef U_HIDE_DRAFT_API /** * Returns the supported locale which best matches the desired locale. * @@ -544,7 +584,7 @@ class U_COMMON_API LocaleMatcher : public UMemory { * or else the function returns immediately. Check for U_FAILURE() * on output or use with function chaining. (See User Guide for details.) * @return the best-matching supported locale. - * @draft ICU 65 + * @stable ICU 65 */ const Locale *getBestMatch(const Locale &desiredLocale, UErrorCode &errorCode) const; @@ -556,7 +596,7 @@ class U_COMMON_API LocaleMatcher : public UMemory { * or else the function returns immediately. Check for U_FAILURE() * on output or use with function chaining. (See User Guide for details.) * @return the best-matching supported locale. - * @draft ICU 65 + * @stable ICU 65 */ const Locale *getBestMatch(Locale::Iterator &desiredLocales, UErrorCode &errorCode) const; @@ -572,7 +612,7 @@ class U_COMMON_API LocaleMatcher : public UMemory { * or else the function returns immediately. Check for U_FAILURE() * on output or use with function chaining. (See User Guide for details.) * @return the best-matching supported locale. - * @draft ICU 65 + * @stable ICU 65 */ const Locale *getBestMatchForListString(StringPiece desiredLocaleList, UErrorCode &errorCode) const; @@ -586,7 +626,7 @@ class U_COMMON_API LocaleMatcher : public UMemory { * or else the function returns immediately. Check for U_FAILURE() * on output or use with function chaining. (See User Guide for details.) * @return the best-matching pair of the desired and a supported locale. - * @draft ICU 65 + * @stable ICU 65 */ Result getBestMatchResult(const Locale &desiredLocale, UErrorCode &errorCode) const; @@ -600,9 +640,25 @@ class U_COMMON_API LocaleMatcher : public UMemory { * or else the function returns immediately. Check for U_FAILURE() * on output or use with function chaining. (See User Guide for details.) * @return the best-matching pair of a desired and a supported locale. - * @draft ICU 65 + * @stable ICU 65 */ Result getBestMatchResult(Locale::Iterator &desiredLocales, UErrorCode &errorCode) const; + +#ifndef U_HIDE_DRAFT_API + /** + * Returns true if the pair of locales matches acceptably. + * This is influenced by Builder options such as setDirection(), setFavorSubtag(), + * and setMaxDistance(). + * + * @param desired The desired locale. + * @param supported The supported locale. + * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, + * or else the function returns immediately. Check for U_FAILURE() + * on output or use with function chaining. (See User Guide for details.) + * @return true if the pair of locales matches acceptably. + * @draft ICU 68 + */ + UBool isMatch(const Locale &desired, const Locale &supported, UErrorCode &errorCode) const; #endif // U_HIDE_DRAFT_API #ifndef U_HIDE_INTERNAL_API @@ -660,6 +716,5 @@ class U_COMMON_API LocaleMatcher : public UMemory { U_NAMESPACE_END -#endif // U_FORCE_HIDE_DRAFT_API #endif // U_SHOW_CPLUSPLUS_API #endif // __LOCALEMATCHER_H__ diff --git a/deps/icu-small/source/common/unicode/localpointer.h b/deps/icu-small/source/common/unicode/localpointer.h index 61c3020918e578..2a65f2d382d2d8 100644 --- a/deps/icu-small/source/common/unicode/localpointer.h +++ b/deps/icu-small/source/common/unicode/localpointer.h @@ -88,13 +88,13 @@ class LocalPointerBase { ~LocalPointerBase() { /* delete ptr; */ } /** * NULL check. - * @return TRUE if ==NULL + * @return true if ==NULL * @stable ICU 4.4 */ UBool isNull() const { return ptr==NULL; } /** * NULL check. - * @return TRUE if !=NULL + * @return true if !=NULL * @stable ICU 4.4 */ UBool isValid() const { return ptr!=NULL; } diff --git a/deps/icu-small/source/common/unicode/locid.h b/deps/icu-small/source/common/unicode/locid.h index ee8697b0a57f3e..877c8014b0b3a7 100644 --- a/deps/icu-small/source/common/unicode/locid.h +++ b/deps/icu-small/source/common/unicode/locid.h @@ -253,7 +253,7 @@ class U_COMMON_API Locale : public UObject { /** * Construct a locale from language, country, variant. * If an error occurs, then the constructed object will be "bogus" - * (isBogus() will return TRUE). + * (isBogus() will return true). * * @param language Lowercase two-letter or three-letter ISO-639 code. * This parameter can instead be an ICU style C locale (e.g. "en_US"), @@ -393,13 +393,17 @@ class U_COMMON_API Locale : public UObject { * If the specified language tag contains any ill-formed subtags, * the first such subtag and all following subtags are ignored. *

- * This implements the 'Language-Tag' production of BCP47, and so - * supports grandfathered (regular and irregular) as well as private - * use language tags. Private use tags are represented as 'x-whatever', - * and grandfathered tags are converted to their canonical replacements - * where they exist. Note that a few grandfathered tags have no modern - * replacement, these will be converted using the fallback described in + * This implements the 'Language-Tag' production of BCP 47, and so + * supports legacy language tags (marked as “Type: grandfathered” in BCP 47) + * (regular and irregular) as well as private use language tags. + * + * Private use tags are represented as 'x-whatever', + * and legacy tags are converted to their canonical replacements where they exist. + * + * Note that a few legacy tags have no modern replacement; + * these will be converted using the fallback described in * the first paragraph, so some information might be lost. + * * @param tag the input BCP47 language tag. * @param status error information if creating the Locale failed. * @return the Locale for the specified BCP47 language tag. @@ -795,14 +799,14 @@ class U_COMMON_API Locale : public UObject { /** * Returns whether this locale's script is written right-to-left. * If there is no script subtag, then the likely script is used, see uloc_addLikelySubtags(). - * If no likely script is known, then FALSE is returned. + * If no likely script is known, then false is returned. * * A script is right-to-left according to the CLDR script metadata * which corresponds to whether the script's letters have Bidi_Class=R or AL. * - * Returns TRUE for "ar" and "en-Hebr", FALSE for "zh" and "fa-Cyrl". + * Returns true for "ar" and "en-Hebr", false for "zh" and "fa-Cyrl". * - * @return TRUE if the locale's script is written right-to-left + * @return true if the locale's script is written right-to-left * @stable ICU 54 */ UBool isRightToLeft() const; @@ -956,7 +960,7 @@ class U_COMMON_API Locale : public UObject { /** * Gets the bogus state. Locale object can be bogus if it doesn't exist - * @return FALSE if it is a real locale, TRUE if it is a bogus locale + * @return false if it is a real locale, true if it is a bogus locale * @stable ICU 2.1 */ inline UBool isBogus(void) const; @@ -1005,32 +1009,31 @@ class U_COMMON_API Locale : public UObject { */ virtual UClassID getDynamicClassID() const; -#ifndef U_HIDE_DRAFT_API /** * A Locale iterator interface similar to a Java Iterator. - * @draft ICU 65 + * @stable ICU 65 */ class U_COMMON_API Iterator /* not : public UObject because this is an interface/mixin class */ { public: - /** @draft ICU 65 */ + /** @stable ICU 65 */ virtual ~Iterator(); /** - * @return TRUE if next() can be called again. - * @draft ICU 65 + * @return true if next() can be called again. + * @stable ICU 65 */ virtual UBool hasNext() const = 0; /** * @return the next locale. - * @draft ICU 65 + * @stable ICU 65 */ virtual const Locale &next() = 0; }; /** * A generic Locale iterator implementation over Locale input iterators. - * @draft ICU 65 + * @stable ICU 65 */ template class RangeIterator : public Iterator, public UMemory { @@ -1042,19 +1045,19 @@ class U_COMMON_API Locale : public UObject { * * @param begin Start of range. * @param end Exclusive end of range. - * @draft ICU 65 + * @stable ICU 65 */ RangeIterator(Iter begin, Iter end) : it_(begin), end_(end) {} /** - * @return TRUE if next() can be called again. - * @draft ICU 65 + * @return true if next() can be called again. + * @stable ICU 65 */ UBool hasNext() const override { return it_ != end_; } /** * @return the next locale. - * @draft ICU 65 + * @stable ICU 65 */ const Locale &next() override { return *it_++; } @@ -1066,7 +1069,7 @@ class U_COMMON_API Locale : public UObject { /** * A generic Locale iterator implementation over Locale input iterators. * Calls the converter to convert each *begin to a const Locale &. - * @draft ICU 65 + * @stable ICU 65 */ template class ConvertingIterator : public Iterator, public UMemory { @@ -1079,20 +1082,20 @@ class U_COMMON_API Locale : public UObject { * @param begin Start of range. * @param end Exclusive end of range. * @param converter Converter from *begin to const Locale & or compatible. - * @draft ICU 65 + * @stable ICU 65 */ ConvertingIterator(Iter begin, Iter end, Conv converter) : it_(begin), end_(end), converter_(converter) {} /** - * @return TRUE if next() can be called again. - * @draft ICU 65 + * @return true if next() can be called again. + * @stable ICU 65 */ UBool hasNext() const override { return it_ != end_; } /** * @return the next locale. - * @draft ICU 65 + * @stable ICU 65 */ const Locale &next() override { return converter_(*it_++); } @@ -1101,7 +1104,6 @@ class U_COMMON_API Locale : public UObject { const Iter end_; Conv converter_; }; -#endif // U_HIDE_DRAFT_API protected: /* only protected for testing purposes. DO NOT USE. */ #ifndef U_HIDE_INTERNAL_API diff --git a/deps/icu-small/source/common/unicode/messagepattern.h b/deps/icu-small/source/common/unicode/messagepattern.h index 04f00a8757d783..98e7b70b1fcc13 100644 --- a/deps/icu-small/source/common/unicode/messagepattern.h +++ b/deps/icu-small/source/common/unicode/messagepattern.h @@ -265,7 +265,7 @@ typedef enum UMessagePatternArgType UMessagePatternArgType; /** * \def UMSGPAT_ARG_TYPE_HAS_PLURAL_STYLE - * Returns TRUE if the argument type has a plural style part sequence and semantics, + * Returns true if the argument type has a plural style part sequence and semantics, * for example UMSGPAT_ARG_TYPE_PLURAL and UMSGPAT_ARG_TYPE_SELECTORDINAL. * @stable ICU 50 */ @@ -523,14 +523,14 @@ class U_COMMON_API MessagePattern : public UObject { /** * @param other another object to compare with. - * @return TRUE if this object is equivalent to the other one. + * @return true if this object is equivalent to the other one. * @stable ICU 4.8 */ UBool operator==(const MessagePattern &other) const; /** * @param other another object to compare with. - * @return FALSE if this object is equivalent to the other one. + * @return false if this object is equivalent to the other one. * @stable ICU 4.8 */ inline UBool operator!=(const MessagePattern &other) const { @@ -564,7 +564,7 @@ class U_COMMON_API MessagePattern : public UObject { /** * Does the parsed pattern have named arguments like {first_name}? - * @return TRUE if the parsed pattern has at least one named argument. + * @return true if the parsed pattern has at least one named argument. * @stable ICU 4.8 */ UBool hasNamedArguments() const { @@ -573,7 +573,7 @@ class U_COMMON_API MessagePattern : public UObject { /** * Does the parsed pattern have numbered arguments like {2}? - * @return TRUE if the parsed pattern has at least one numbered argument. + * @return true if the parsed pattern has at least one numbered argument. * @stable ICU 4.8 */ UBool hasNumberedArguments() const { @@ -664,7 +664,7 @@ class U_COMMON_API MessagePattern : public UObject { * Compares the part's substring with the input string s. * @param part a part of this MessagePattern. * @param s a string. - * @return TRUE if getSubstring(part).equals(s). + * @return true if getSubstring(part).equals(s). * @stable ICU 4.8 */ UBool partSubstringMatches(const Part &part, const UnicodeString &s) const { @@ -785,7 +785,7 @@ class U_COMMON_API MessagePattern : public UObject { * Indicates whether the Part type has a numeric value. * If so, then that numeric value can be retrieved via MessagePattern.getNumericValue(). * @param type The Part type to be tested. - * @return TRUE if the Part type has a numeric value. + * @return true if the Part type has a numeric value. * @stable ICU 4.8 */ static UBool hasNumericValue(UMessagePatternPartType type) { @@ -794,14 +794,14 @@ class U_COMMON_API MessagePattern : public UObject { /** * @param other another object to compare with. - * @return TRUE if this object is equivalent to the other one. + * @return true if this object is equivalent to the other one. * @stable ICU 4.8 */ UBool operator==(const Part &other) const; /** * @param other another object to compare with. - * @return FALSE if this object is equivalent to the other one. + * @return false if this object is equivalent to the other one. * @stable ICU 4.8 */ inline UBool operator!=(const Part &other) const { @@ -869,7 +869,7 @@ class U_COMMON_API MessagePattern : public UObject { * Parses a number from the specified message substring. * @param start start index into the message string * @param limit limit index into the message string, must be startFALSE, only canonical + * If this argument is false, only canonical * decomposition will be performed. * @param options the optional features to be enabled (0 for no options) * @param result The composed string (on output). @@ -256,7 +256,7 @@ class U_COMMON_API Normalizer : public UObject { * * @param source the string to be decomposed. * @param compat Perform compatibility decomposition. - * If this argument is FALSE, only canonical + * If this argument is false, only canonical * decomposition will be performed. * @param options the optional features to be enabled (0 for no options) * @param result The decomposed string (on output). @@ -315,7 +315,7 @@ class U_COMMON_API Normalizer : public UObject { * never a "maybe". * For NFD, NFKD, and FCD, both functions work exactly the same. * For NFC and NFKC where quickCheck may return "maybe", this function will - * perform further tests to arrive at a TRUE/FALSE result. + * perform further tests to arrive at a true/false result. * * @param src String that is to be tested if it is in a normalization format. * @param mode Which normalization form to test for. @@ -577,7 +577,7 @@ class U_COMMON_API Normalizer : public UObject { int32_t endIndex(void) const; /** - * Returns TRUE when both iterators refer to the same character in the same + * Returns true when both iterators refer to the same character in the same * input text. * * @param that a Normalizer object to compare this one to @@ -587,7 +587,7 @@ class U_COMMON_API Normalizer : public UObject { UBool operator==(const Normalizer& that) const; /** - * Returns FALSE when both iterators refer to the same character in the same + * Returns false when both iterators refer to the same character in the same * input text. * * @param that a Normalizer object to compare this one to @@ -655,8 +655,8 @@ class U_COMMON_API Normalizer : public UObject { * It is possible to specify multiple options that are all turned on or off. * * @param option the option(s) whose value is/are to be set. - * @param value the new setting for the option. Use TRUE to - * turn the option(s) on and FALSE to turn it/them off. + * @param value the new setting for the option. Use true to + * turn the option(s) on and false to turn it/them off. * * @see #getOption * @deprecated ICU 56 Use Normalizer2 instead. @@ -666,11 +666,11 @@ class U_COMMON_API Normalizer : public UObject { /** * Determine whether an option is turned on or off. - * If multiple options are specified, then the result is TRUE if any + * If multiple options are specified, then the result is true if any * of them are set. *

* @param option the option(s) that are to be checked - * @return TRUE if any of the option(s) are set + * @return true if any of the option(s) are set * @see #setOption * @deprecated ICU 56 Use Normalizer2 instead. */ diff --git a/deps/icu-small/source/common/unicode/parsepos.h b/deps/icu-small/source/common/unicode/parsepos.h index ae5754b8d75132..d6129fd4f1604f 100644 --- a/deps/icu-small/source/common/unicode/parsepos.h +++ b/deps/icu-small/source/common/unicode/parsepos.h @@ -97,14 +97,14 @@ class U_COMMON_API ParsePosition : public UObject { /** * Equality operator. - * @return TRUE if the two parse positions are equal, FALSE otherwise. + * @return true if the two parse positions are equal, false otherwise. * @stable ICU 2.0 */ inline UBool operator==(const ParsePosition& that) const; /** * Equality operator. - * @return TRUE if the two parse positions are not equal, FALSE otherwise. + * @return true if the two parse positions are not equal, false otherwise. * @stable ICU 2.0 */ inline UBool operator!=(const ParsePosition& that) const; @@ -196,9 +196,9 @@ inline UBool ParsePosition::operator==(const ParsePosition& copy) const { if(index != copy.index || errorIndex != copy.errorIndex) - return FALSE; + return false; else - return TRUE; + return true; } inline UBool diff --git a/deps/icu-small/source/common/unicode/putil.h b/deps/icu-small/source/common/unicode/putil.h index 14bb99ccc545b2..f8c510dacc75fc 100644 --- a/deps/icu-small/source/common/unicode/putil.h +++ b/deps/icu-small/source/common/unicode/putil.h @@ -66,7 +66,7 @@ * * @stable ICU 2.0 */ -U_STABLE const char* U_EXPORT2 u_getDataDirectory(void); +U_CAPI const char* U_EXPORT2 u_getDataDirectory(void); /** @@ -88,7 +88,7 @@ U_STABLE const char* U_EXPORT2 u_getDataDirectory(void); * @see u_init * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 u_setDataDirectory(const char *directory); +U_CAPI void U_EXPORT2 u_setDataDirectory(const char *directory); #ifndef U_HIDE_INTERNAL_API /** @@ -99,7 +99,7 @@ U_STABLE void U_EXPORT2 u_setDataDirectory(const char *directory); * @return the time zone data override directory. * @internal */ -U_INTERNAL const char * U_EXPORT2 u_getTimeZoneFilesDirectory(UErrorCode *status); +U_CAPI const char * U_EXPORT2 u_getTimeZoneFilesDirectory(UErrorCode *status); /** * Set the time zone files override directory. @@ -109,7 +109,7 @@ U_INTERNAL const char * U_EXPORT2 u_getTimeZoneFilesDirectory(UErrorCode *status * will access the time zone data. * @internal */ -U_INTERNAL void U_EXPORT2 u_setTimeZoneFilesDirectory(const char *path, UErrorCode *status); +U_CAPI void U_EXPORT2 u_setTimeZoneFilesDirectory(const char *path, UErrorCode *status); #endif /* U_HIDE_INTERNAL_API */ @@ -155,7 +155,7 @@ U_INTERNAL void U_EXPORT2 u_setTimeZoneFilesDirectory(const char *path, UErrorCo * @see U_CHARSET_FAMILY * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 u_charsToUChars(const char *cs, UChar *us, int32_t length); /** @@ -177,7 +177,7 @@ u_charsToUChars(const char *cs, UChar *us, int32_t length); * @see U_CHARSET_FAMILY * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 u_UCharsToChars(const UChar *us, char *cs, int32_t length); #endif diff --git a/deps/icu-small/source/common/unicode/rbbi.h b/deps/icu-small/source/common/unicode/rbbi.h index 7825f603a51c1b..65117f616cdf5b 100644 --- a/deps/icu-small/source/common/unicode/rbbi.h +++ b/deps/icu-small/source/common/unicode/rbbi.h @@ -32,6 +32,8 @@ #include "unicode/parseerr.h" #include "unicode/schriter.h" +struct UCPTrie; + U_NAMESPACE_BEGIN /** @internal */ @@ -140,6 +142,11 @@ class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { */ UBool fDone; + /** + * Array of look-ahead tentative results. + */ + int32_t *fLookAheadMatches; + //======================================================================= // constructors //======================================================================= @@ -246,20 +253,20 @@ class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { RuleBasedBreakIterator& operator=(const RuleBasedBreakIterator& that); /** - * Equality operator. Returns TRUE if both BreakIterators are of the + * Equality operator. Returns true if both BreakIterators are of the * same class, have the same behavior, and iterate over the same text. * @param that The BreakIterator to be compared for equality - * @return TRUE if both BreakIterators are of the + * @return true if both BreakIterators are of the * same class, have the same behavior, and iterate over the same text. * @stable ICU 2.0 */ virtual UBool operator==(const BreakIterator& that) const; /** - * Not-equal operator. If operator== returns TRUE, this returns FALSE, + * Not-equal operator. If operator== returns true, this returns false, * and vice versa. * @param that The BreakIterator to be compared for inequality - * @return TRUE if both BreakIterators are not same. + * @return true if both BreakIterators are not same. * @stable ICU 2.0 */ inline UBool operator!=(const BreakIterator& that) const; @@ -659,6 +666,28 @@ class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { */ int32_t handleNext(); + /* + * Templatized version of handleNext() and handleSafePrevious(). + * + * There will be exactly four instantiations, two each for 8 and 16 bit tables, + * two each for 8 and 16 bit trie. + * Having separate instantiations for the table types keeps conditional tests of + * the table type out of the inner loops, at the expense of replicated code. + * + * The template parameter for the Trie access function is a value, not a type. + * Doing it this way, the compiler will inline the Trie function in the + * expanded functions. (Both the 8 and 16 bit access functions have the same type + * signature) + */ + + typedef uint16_t (*PTrieFunc)(const UCPTrie *, UChar32); + + template + int32_t handleSafePrevious(int32_t fromPosition); + + template + int32_t handleNext(); + /** * This function returns the appropriate LanguageBreakEngine for a @@ -681,7 +710,6 @@ class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { * @internal */ void dumpTables(); - #endif /* U_HIDE_INTERNAL_API */ }; diff --git a/deps/icu-small/source/common/unicode/resbund.h b/deps/icu-small/source/common/unicode/resbund.h index 708a3423d2ae2b..63ffa506e77eec 100644 --- a/deps/icu-small/source/common/unicode/resbund.h +++ b/deps/icu-small/source/common/unicode/resbund.h @@ -286,7 +286,7 @@ class U_COMMON_API ResourceBundle : public UObject { /** * Checks whether the resource has another element to iterate over. * - * @return TRUE if there are more elements, FALSE if there is no more elements + * @return true if there are more elements, false if there is no more elements * @stable ICU 2.0 */ UBool diff --git a/deps/icu-small/source/common/unicode/simpleformatter.h b/deps/icu-small/source/common/unicode/simpleformatter.h index 9414bca3085ad4..6d9c04ace2359a 100644 --- a/deps/icu-small/source/common/unicode/simpleformatter.h +++ b/deps/icu-small/source/common/unicode/simpleformatter.h @@ -125,7 +125,7 @@ class U_COMMON_API SimpleFormatter U_FINAL : public UMemory { * @param errorCode ICU error code in/out parameter. * Must fulfill U_SUCCESS before the function call. * Set to U_ILLEGAL_ARGUMENT_ERROR for bad argument syntax. - * @return TRUE if U_SUCCESS(errorCode). + * @return true if U_SUCCESS(errorCode). * @stable ICU 57 */ UBool applyPattern(const UnicodeString &pattern, UErrorCode &errorCode) { @@ -144,7 +144,7 @@ class U_COMMON_API SimpleFormatter U_FINAL : public UMemory { * Must fulfill U_SUCCESS before the function call. * Set to U_ILLEGAL_ARGUMENT_ERROR for bad argument syntax and * too few or too many arguments. - * @return TRUE if U_SUCCESS(errorCode). + * @return true if U_SUCCESS(errorCode). * @stable ICU 57 */ UBool applyPatternMinMaxArguments(const UnicodeString &pattern, diff --git a/deps/icu-small/source/common/unicode/strenum.h b/deps/icu-small/source/common/unicode/strenum.h index e813cd84b3413a..5d1600156e32e9 100644 --- a/deps/icu-small/source/common/unicode/strenum.h +++ b/deps/icu-small/source/common/unicode/strenum.h @@ -196,7 +196,7 @@ class U_COMMON_API StringEnumeration : public UObject { * Compares this enumeration to other to check if both are equal * * @param that The other string enumeration to compare this object to - * @return TRUE if the enumerations are equal. FALSE if not. + * @return true if the enumerations are equal. false if not. * @stable ICU 3.6 */ virtual UBool operator==(const StringEnumeration& that)const; @@ -204,7 +204,7 @@ class U_COMMON_API StringEnumeration : public UObject { * Compares this enumeration to other to check if both are not equal * * @param that The other string enumeration to compare this object to - * @return TRUE if the enumerations are equal. FALSE if not. + * @return true if the enumerations are equal. false if not. * @stable ICU 3.6 */ virtual UBool operator!=(const StringEnumeration& that)const; diff --git a/deps/icu-small/source/common/unicode/stringpiece.h b/deps/icu-small/source/common/unicode/stringpiece.h index 19fbe2e22eb032..58053cfd5c3108 100644 --- a/deps/icu-small/source/common/unicode/stringpiece.h +++ b/deps/icu-small/source/common/unicode/stringpiece.h @@ -111,7 +111,6 @@ class U_COMMON_API StringPiece : public UMemory { #endif #endif // U_HIDE_DRAFT_API -#ifndef U_HIDE_DRAFT_API /** * Constructs from some other implementation of a string piece class, from any * C++ record type that has these two methods: @@ -132,7 +131,7 @@ class U_COMMON_API StringPiece : public UMemory { * as from std::u8string_view. * * @param str the other string piece - * @draft ICU 65 + * @stable ICU 65 */ template (str.data())), length_(static_cast(str.size())) {} -#endif // U_HIDE_DRAFT_API /** * Constructs from a const char * pointer and a specified length. @@ -209,7 +207,7 @@ class U_COMMON_API StringPiece : public UMemory { int32_t length() const { return length_; } /** * Returns whether the string is empty. - * @return TRUE if the string is empty + * @return true if the string is empty * @stable ICU 4.2 */ UBool empty() const { return length_ == 0; } @@ -331,7 +329,7 @@ class U_COMMON_API StringPiece : public UMemory { * Global operator == for StringPiece * @param x The first StringPiece to compare. * @param y The second StringPiece to compare. - * @return TRUE if the string data is equal + * @return true if the string data is equal * @stable ICU 4.8 */ U_EXPORT UBool U_EXPORT2 @@ -341,7 +339,7 @@ operator==(const StringPiece& x, const StringPiece& y); * Global operator != for StringPiece * @param x The first StringPiece to compare. * @param y The second StringPiece to compare. - * @return TRUE if the string data is not equal + * @return true if the string data is not equal * @stable ICU 4.8 */ inline UBool operator!=(const StringPiece& x, const StringPiece& y) { diff --git a/deps/icu-small/source/common/unicode/stringtriebuilder.h b/deps/icu-small/source/common/unicode/stringtriebuilder.h index 2860cbf5513b8e..efd2d49206ca2d 100644 --- a/deps/icu-small/source/common/unicode/stringtriebuilder.h +++ b/deps/icu-small/source/common/unicode/stringtriebuilder.h @@ -279,10 +279,10 @@ class U_COMMON_API StringTrieBuilder : public UObject { */ class ValueNode : public Node { public: - ValueNode(int32_t initialHash) : Node(initialHash), hasValue(FALSE), value(0) {} + ValueNode(int32_t initialHash) : Node(initialHash), hasValue(false), value(0) {} virtual UBool operator==(const Node &other) const; void setValue(int32_t v) { - hasValue=TRUE; + hasValue=true; value=v; hash=hash*37u+v; } diff --git a/deps/icu-small/source/common/unicode/ubidi.h b/deps/icu-small/source/common/unicode/ubidi.h index f4875c8801efd6..63d0e45cb7f3c5 100644 --- a/deps/icu-small/source/common/unicode/ubidi.h +++ b/deps/icu-small/source/common/unicode/ubidi.h @@ -21,7 +21,10 @@ #include "unicode/utypes.h" #include "unicode/uchar.h" + +#if U_SHOW_CPLUSPLUS_API #include "unicode/localpointer.h" +#endif // U_SHOW_CPLUSPLUS_API /** *\file @@ -496,7 +499,7 @@ typedef struct UBiDi UBiDi; * @return An empty UBiDi object. * @stable ICU 2.0 */ -U_STABLE UBiDi * U_EXPORT2 +U_CAPI UBiDi * U_EXPORT2 ubidi_open(void); /** @@ -533,7 +536,7 @@ ubidi_open(void); * @return An empty UBiDi object with preallocated memory. * @stable ICU 2.0 */ -U_STABLE UBiDi * U_EXPORT2 +U_CAPI UBiDi * U_EXPORT2 ubidi_openSized(int32_t maxLength, int32_t maxRunCount, UErrorCode *pErrorCode); /** @@ -556,7 +559,7 @@ ubidi_openSized(int32_t maxLength, int32_t maxRunCount, UErrorCode *pErrorCode); * @see ubidi_setLine * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ubidi_close(UBiDi *pBiDi); #if U_SHOW_CPLUSPLUS_API @@ -594,7 +597,7 @@ U_NAMESPACE_END * this "inverse Bidi" and that the current implementation provides only an * approximation of "inverse Bidi".

* - *

With isInverse set to TRUE, + *

With isInverse set to true, * this function changes the behavior of some of the subsequent functions * in a way that they can be used for the inverse Bidi algorithm. * Specifically, runs of text with numeric characters will be treated in a @@ -607,12 +610,12 @@ U_NAMESPACE_END * the runs of the logically ordered output.

* *

Calling this function with argument isInverse set to - * TRUE is equivalent to calling + * true is equivalent to calling * ubidi_setReorderingMode with argument * reorderingMode * set to #UBIDI_REORDER_INVERSE_NUMBERS_AS_L.
* Calling this function with argument isInverse set to - * FALSE is equivalent to calling + * false is equivalent to calling * ubidi_setReorderingMode with argument * reorderingMode * set to #UBIDI_REORDER_DEFAULT. @@ -626,18 +629,18 @@ U_NAMESPACE_END * @see ubidi_setReorderingMode * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ubidi_setInverse(UBiDi *pBiDi, UBool isInverse); /** * Is this Bidi object set to perform the inverse Bidi algorithm? *

Note: calling this function after setting the reordering mode with - * ubidi_setReorderingMode will return TRUE if the + * ubidi_setReorderingMode will return true if the * reordering mode was set to #UBIDI_REORDER_INVERSE_NUMBERS_AS_L, - * FALSE for all other values.

+ * false for all other values.

* * @param pBiDi is a UBiDi object. - * @return TRUE if the Bidi object is set to perform the inverse Bidi algorithm + * @return true if the Bidi object is set to perform the inverse Bidi algorithm * by handling numbers as L. * * @see ubidi_setInverse @@ -645,7 +648,7 @@ ubidi_setInverse(UBiDi *pBiDi, UBool isInverse); * @stable ICU 2.0 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 ubidi_isInverse(UBiDi *pBiDi); /** @@ -668,7 +671,7 @@ ubidi_isInverse(UBiDi *pBiDi); * @see ubidi_setPara * @stable ICU 3.4 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ubidi_orderParagraphsLTR(UBiDi *pBiDi, UBool orderParagraphsLTR); /** @@ -676,13 +679,13 @@ ubidi_orderParagraphsLTR(UBiDi *pBiDi, UBool orderParagraphsLTR); * successive paragraphs progress from left to right? * * @param pBiDi is a UBiDi object. - * @return TRUE if the Bidi object is set to allocate level 0 to block + * @return true if the Bidi object is set to allocate level 0 to block * separators. * * @see ubidi_orderParagraphsLTR * @stable ICU 3.4 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 ubidi_isOrderParagraphsLTR(UBiDi *pBiDi); /** @@ -714,7 +717,7 @@ typedef enum UBiDiReorderingMode { * @stable ICU 3.6 */ UBIDI_REORDER_RUNS_ONLY, /** Visual to Logical algorithm which handles numbers like L - * (same algorithm as selected by ubidi_setInverse(TRUE). + * (same algorithm as selected by ubidi_setInverse(true). * @see ubidi_setInverse * @stable ICU 3.6 */ UBIDI_REORDER_INVERSE_NUMBERS_AS_L, @@ -833,7 +836,7 @@ typedef enum UBiDiReorderingMode { * reordered sequence (the option #UBIDI_INSERT_LRM_FOR_NUMERIC can * be used with function ubidi_writeReordered to this end. This * mode is equivalent to calling ubidi_setInverse() with - * argument isInverse set to TRUE. + * argument isInverse set to true. * *
  • When the reordering mode is set to * #UBIDI_REORDER_INVERSE_LIKE_DIRECT, the "direct" Logical to Visual @@ -886,7 +889,7 @@ typedef enum UBiDiReorderingMode { * @see ubidi_writeReordered * @stable ICU 3.6 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ubidi_setReorderingMode(UBiDi *pBiDi, UBiDiReorderingMode reorderingMode); /** @@ -897,7 +900,7 @@ ubidi_setReorderingMode(UBiDi *pBiDi, UBiDiReorderingMode reorderingMode); * @see ubidi_setReorderingMode * @stable ICU 3.6 */ -U_STABLE UBiDiReorderingMode U_EXPORT2 +U_CAPI UBiDiReorderingMode U_EXPORT2 ubidi_getReorderingMode(UBiDi *pBiDi); /** @@ -935,7 +938,7 @@ typedef enum UBiDiReorderingOption { * *

    If this option is set in conjunction with reordering mode * #UBIDI_REORDER_INVERSE_NUMBERS_AS_L or with calling - * ubidi_setInverse(TRUE), it implies + * ubidi_setInverse(true), it implies * option #UBIDI_INSERT_LRM_FOR_NUMERIC * in calls to function ubidi_writeReordered().

    * @@ -1016,7 +1019,7 @@ typedef enum UBiDiReorderingOption { * *

    When the UBIDI_OPTION_STREAMING option is used, * it is recommended to call ubidi_orderParagraphsLTR() with - * argument orderParagraphsLTR set to TRUE before + * argument orderParagraphsLTR set to true before * calling ubidi_setPara so that later paragraphs may be * concatenated to previous paragraphs on the right.

    * @@ -1042,7 +1045,7 @@ typedef enum UBiDiReorderingOption { * @see ubidi_getReorderingOptions * @stable ICU 3.6 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ubidi_setReorderingOptions(UBiDi *pBiDi, uint32_t reorderingOptions); /** @@ -1053,7 +1056,7 @@ ubidi_setReorderingOptions(UBiDi *pBiDi, uint32_t reorderingOptions); * @see ubidi_setReorderingOptions * @stable ICU 3.6 */ -U_STABLE uint32_t U_EXPORT2 +U_CAPI uint32_t U_EXPORT2 ubidi_getReorderingOptions(UBiDi *pBiDi); /** @@ -1140,7 +1143,7 @@ ubidi_getReorderingOptions(UBiDi *pBiDi); * @see ubidi_setPara * @stable ICU 4.8 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ubidi_setContext(UBiDi *pBiDi, const UChar *prologue, int32_t proLength, const UChar *epilogue, int32_t epiLength, @@ -1228,7 +1231,7 @@ ubidi_setContext(UBiDi *pBiDi, * @param pErrorCode must be a valid pointer to an error code value. * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length, UBiDiLevel paraLevel, UBiDiLevel *embeddingLevels, UErrorCode *pErrorCode); @@ -1279,7 +1282,7 @@ ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length, * @see ubidi_getProcessedLength * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ubidi_setLine(const UBiDi *pParaBiDi, int32_t start, int32_t limit, UBiDi *pLineBiDi, @@ -1300,7 +1303,7 @@ ubidi_setLine(const UBiDi *pParaBiDi, * @see UBiDiDirection * @stable ICU 2.0 */ -U_STABLE UBiDiDirection U_EXPORT2 +U_CAPI UBiDiDirection U_EXPORT2 ubidi_getDirection(const UBiDi *pBiDi); /** @@ -1330,7 +1333,7 @@ ubidi_getDirection(const UBiDi *pBiDi); * @see UBiDiDirection * @stable ICU 4.6 */ -U_STABLE UBiDiDirection U_EXPORT2 +U_CAPI UBiDiDirection U_EXPORT2 ubidi_getBaseDirection(const UChar *text, int32_t length ); /** @@ -1344,7 +1347,7 @@ ubidi_getBaseDirection(const UChar *text, int32_t length ); * @see ubidi_setLine * @stable ICU 2.0 */ -U_STABLE const UChar * U_EXPORT2 +U_CAPI const UChar * U_EXPORT2 ubidi_getText(const UBiDi *pBiDi); /** @@ -1355,7 +1358,7 @@ ubidi_getText(const UBiDi *pBiDi); * @return The length of the text that the UBiDi object was created for. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ubidi_getLength(const UBiDi *pBiDi); /** @@ -1373,7 +1376,7 @@ ubidi_getLength(const UBiDi *pBiDi); * @see ubidi_getParagraphByIndex * @stable ICU 2.0 */ -U_STABLE UBiDiLevel U_EXPORT2 +U_CAPI UBiDiLevel U_EXPORT2 ubidi_getParaLevel(const UBiDi *pBiDi); /** @@ -1384,7 +1387,7 @@ ubidi_getParaLevel(const UBiDi *pBiDi); * @return The number of paragraphs. * @stable ICU 3.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ubidi_countParagraphs(UBiDi *pBiDi); /** @@ -1421,7 +1424,7 @@ ubidi_countParagraphs(UBiDi *pBiDi); * @see ubidi_getProcessedLength * @stable ICU 3.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ubidi_getParagraph(const UBiDi *pBiDi, int32_t charIndex, int32_t *pParaStart, int32_t *pParaLimit, UBiDiLevel *pParaLevel, UErrorCode *pErrorCode); @@ -1453,7 +1456,7 @@ ubidi_getParagraph(const UBiDi *pBiDi, int32_t charIndex, int32_t *pParaStart, * * @stable ICU 3.4 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ubidi_getParagraphByIndex(const UBiDi *pBiDi, int32_t paraIndex, int32_t *pParaStart, int32_t *pParaLimit, UBiDiLevel *pParaLevel, UErrorCode *pErrorCode); @@ -1473,7 +1476,7 @@ ubidi_getParagraphByIndex(const UBiDi *pBiDi, int32_t paraIndex, * @see ubidi_getProcessedLength * @stable ICU 2.0 */ -U_STABLE UBiDiLevel U_EXPORT2 +U_CAPI UBiDiLevel U_EXPORT2 ubidi_getLevelAt(const UBiDi *pBiDi, int32_t charIndex); /** @@ -1494,7 +1497,7 @@ ubidi_getLevelAt(const UBiDi *pBiDi, int32_t charIndex); * @see ubidi_getProcessedLength * @stable ICU 2.0 */ -U_STABLE const UBiDiLevel * U_EXPORT2 +U_CAPI const UBiDiLevel * U_EXPORT2 ubidi_getLevels(UBiDi *pBiDi, UErrorCode *pErrorCode); /** @@ -1521,7 +1524,7 @@ ubidi_getLevels(UBiDi *pBiDi, UErrorCode *pErrorCode); * @see ubidi_getProcessedLength * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ubidi_getLogicalRun(const UBiDi *pBiDi, int32_t logicalPosition, int32_t *pLogicalLimit, UBiDiLevel *pLevel); @@ -1540,7 +1543,7 @@ ubidi_getLogicalRun(const UBiDi *pBiDi, int32_t logicalPosition, * @return The number of runs. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ubidi_countRuns(UBiDi *pBiDi, UErrorCode *pErrorCode); /** @@ -1599,7 +1602,7 @@ ubidi_countRuns(UBiDi *pBiDi, UErrorCode *pErrorCode); * to avoid these issues. * @stable ICU 2.0 */ -U_STABLE UBiDiDirection U_EXPORT2 +U_CAPI UBiDiDirection U_EXPORT2 ubidi_getVisualRun(UBiDi *pBiDi, int32_t runIndex, int32_t *pLogicalStart, int32_t *pLength); @@ -1640,7 +1643,7 @@ ubidi_getVisualRun(UBiDi *pBiDi, int32_t runIndex, * @see ubidi_getProcessedLength * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ubidi_getVisualIndex(UBiDi *pBiDi, int32_t logicalIndex, UErrorCode *pErrorCode); /** @@ -1675,7 +1678,7 @@ ubidi_getVisualIndex(UBiDi *pBiDi, int32_t logicalIndex, UErrorCode *pErrorCode) * @see ubidi_getResultLength * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ubidi_getLogicalIndex(UBiDi *pBiDi, int32_t visualIndex, UErrorCode *pErrorCode); /** @@ -1718,7 +1721,7 @@ ubidi_getLogicalIndex(UBiDi *pBiDi, int32_t visualIndex, UErrorCode *pErrorCode) * @see ubidi_getResultLength * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ubidi_getLogicalMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode); /** @@ -1754,7 +1757,7 @@ ubidi_getLogicalMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode); * @see ubidi_getResultLength * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ubidi_getVisualMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode); /** @@ -1777,7 +1780,7 @@ ubidi_getVisualMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode); * The index map will result in indexMap[logicalIndex]==visualIndex. * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ubidi_reorderLogical(const UBiDiLevel *levels, int32_t length, int32_t *indexMap); /** @@ -1800,7 +1803,7 @@ ubidi_reorderLogical(const UBiDiLevel *levels, int32_t length, int32_t *indexMap * The index map will result in indexMap[visualIndex]==logicalIndex. * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ubidi_reorderVisual(const UBiDiLevel *levels, int32_t length, int32_t *indexMap); /** @@ -1835,7 +1838,7 @@ ubidi_reorderVisual(const UBiDiLevel *levels, int32_t length, int32_t *indexMap) * @see UBIDI_MAP_NOWHERE * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ubidi_invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length); /** option flags for ubidi_writeReordered() */ @@ -1940,7 +1943,7 @@ ubidi_invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length); * @see UBIDI_OPTION_STREAMING * @stable ICU 3.6 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ubidi_getProcessedLength(const UBiDi *pBiDi); /** @@ -1970,7 +1973,7 @@ ubidi_getProcessedLength(const UBiDi *pBiDi); * @see UBIDI_OPTION_REMOVE_CONTROLS * @stable ICU 3.6 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ubidi_getResultLength(const UBiDi *pBiDi); U_CDECL_BEGIN @@ -2028,7 +2031,7 @@ U_CDECL_END * @see UBiDiClassCallback * @stable ICU 3.6 */ -U_STABLE UCharDirection U_EXPORT2 +U_CAPI UCharDirection U_EXPORT2 ubidi_getCustomizedClass(UBiDi *pBiDi, UChar32 c); /** @@ -2058,7 +2061,7 @@ ubidi_getCustomizedClass(UBiDi *pBiDi, UChar32 c); * @see ubidi_getClassCallback * @stable ICU 3.6 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ubidi_setClassCallback(UBiDi *pBiDi, UBiDiClassCallback *newFn, const void *newContext, UBiDiClassCallback **oldFn, const void **oldContext, UErrorCode *pErrorCode); @@ -2075,7 +2078,7 @@ ubidi_setClassCallback(UBiDi *pBiDi, UBiDiClassCallback *newFn, * @see ubidi_setClassCallback * @stable ICU 3.6 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ubidi_getClassCallback(UBiDi *pBiDi, UBiDiClassCallback **fn, const void **context); /** @@ -2143,7 +2146,7 @@ ubidi_getClassCallback(UBiDi *pBiDi, UBiDiClassCallback **fn, const void **conte * @see ubidi_getProcessedLength * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ubidi_writeReordered(UBiDi *pBiDi, UChar *dest, int32_t destSize, uint16_t options, @@ -2195,7 +2198,7 @@ ubidi_writeReordered(UBiDi *pBiDi, * @return The length of the output string. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ubidi_writeReverse(const UChar *src, int32_t srcLength, UChar *dest, int32_t destSize, uint16_t options, diff --git a/deps/icu-small/source/common/unicode/ubiditransform.h b/deps/icu-small/source/common/unicode/ubiditransform.h index 5c08ed5df0fd90..2dd7564010de17 100644 --- a/deps/icu-small/source/common/unicode/ubiditransform.h +++ b/deps/icu-small/source/common/unicode/ubiditransform.h @@ -21,7 +21,10 @@ #include "unicode/utypes.h" #include "unicode/ubidi.h" #include "unicode/uchar.h" + +#if U_SHOW_CPLUSPLUS_API #include "unicode/localpointer.h" +#endif // U_SHOW_CPLUSPLUS_API /** * \file @@ -147,10 +150,10 @@ typedef struct UBiDiTransform UBiDiTransform; * calling ubidi_setPara with * paraLevel == UBIDI_DEFAULT_RTL,
  • *
  • : this is equivalent to - * calling ubidi_setInverse(UBiDi*, TRUE) and then + * calling ubidi_setInverse(UBiDi*, true) and then * ubidi_setPara with paraLevel == UBIDI_LTR,
  • *
  • : this is equivalent to - * calling ubidi_setInverse(UBiDi*, TRUE) and then + * calling ubidi_setInverse(UBiDi*, true) and then * ubidi_setPara with paraLevel == UBIDI_RTL.
  • * * All combinations that involve the Visual RTL scheme are unsupported by @@ -245,7 +248,7 @@ typedef struct UBiDiTransform UBiDiTransform; * @see u_shapeArabic * @stable ICU 58 */ -U_STABLE uint32_t U_EXPORT2 +U_CAPI uint32_t U_EXPORT2 ubiditransform_transform(UBiDiTransform *pBiDiTransform, const UChar *src, int32_t srcLength, UChar *dest, int32_t destSize, @@ -291,14 +294,14 @@ ubiditransform_transform(UBiDiTransform *pBiDiTransform, * @return An empty UBiDiTransform object. * @stable ICU 58 */ -U_STABLE UBiDiTransform* U_EXPORT2 +U_CAPI UBiDiTransform* U_EXPORT2 ubiditransform_open(UErrorCode *pErrorCode); /** * Deallocates the given UBiDiTransform object. * @stable ICU 58 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ubiditransform_close(UBiDiTransform *pBidiTransform); #if U_SHOW_CPLUSPLUS_API diff --git a/deps/icu-small/source/common/unicode/ubrk.h b/deps/icu-small/source/common/unicode/ubrk.h index 73c1553b243957..37189a85984b68 100644 --- a/deps/icu-small/source/common/unicode/ubrk.h +++ b/deps/icu-small/source/common/unicode/ubrk.h @@ -13,7 +13,10 @@ #include "unicode/utypes.h" #include "unicode/uloc.h" #include "unicode/utext.h" + +#if U_SHOW_CPLUSPLUS_API #include "unicode/localpointer.h" +#endif // U_SHOW_CPLUSPLUS_API /** * A text-break iterator. @@ -238,7 +241,7 @@ typedef enum USentenceBreakTag { * @see ubrk_openRules * @stable ICU 2.0 */ -U_STABLE UBreakIterator* U_EXPORT2 +U_CAPI UBreakIterator* U_EXPORT2 ubrk_open(UBreakIteratorType type, const char *locale, const UChar *text, @@ -260,7 +263,7 @@ ubrk_open(UBreakIteratorType type, * @see ubrk_open * @stable ICU 2.2 */ -U_STABLE UBreakIterator* U_EXPORT2 +U_CAPI UBreakIterator* U_EXPORT2 ubrk_openRules(const UChar *rules, int32_t rulesLength, const UChar *text, @@ -288,7 +291,7 @@ ubrk_openRules(const UChar *rules, * @see ubrk_getBinaryRules * @stable ICU 59 */ -U_STABLE UBreakIterator* U_EXPORT2 +U_CAPI UBreakIterator* U_EXPORT2 ubrk_openBinaryRules(const uint8_t *binaryRules, int32_t rulesLength, const UChar * text, int32_t textLength, UErrorCode * status); @@ -311,7 +314,7 @@ ubrk_openBinaryRules(const uint8_t *binaryRules, int32_t rulesLength, * @return pointer to the new clone * @stable ICU 2.0 */ -U_STABLE UBreakIterator * U_EXPORT2 +U_CAPI UBreakIterator * U_EXPORT2 ubrk_safeClone( const UBreakIterator *bi, void *stackBuffer, @@ -334,7 +337,7 @@ ubrk_safeClone( * @param bi The break iterator to close. * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ubrk_close(UBreakIterator *bi); #if U_SHOW_CPLUSPLUS_API @@ -368,7 +371,7 @@ U_NAMESPACE_END * @param status The error code * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ubrk_setText(UBreakIterator* bi, const UChar* text, int32_t textLength, @@ -392,7 +395,7 @@ ubrk_setText(UBreakIterator* bi, * @param status The error code * @stable ICU 3.4 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ubrk_setUText(UBreakIterator* bi, UText* text, UErrorCode* status); @@ -407,7 +410,7 @@ ubrk_setUText(UBreakIterator* bi, * \ref ubrk_first, or \ref ubrk_last. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ubrk_current(const UBreakIterator *bi); /** @@ -419,7 +422,7 @@ ubrk_current(const UBreakIterator *bi); * @see ubrk_previous * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ubrk_next(UBreakIterator *bi); /** @@ -431,7 +434,7 @@ ubrk_next(UBreakIterator *bi); * @see ubrk_next * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ubrk_previous(UBreakIterator *bi); /** @@ -441,7 +444,7 @@ ubrk_previous(UBreakIterator *bi); * @see ubrk_last * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ubrk_first(UBreakIterator *bi); /** @@ -453,7 +456,7 @@ ubrk_first(UBreakIterator *bi); * @see ubrk_first * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ubrk_last(UBreakIterator *bi); /** @@ -465,7 +468,7 @@ ubrk_last(UBreakIterator *bi); * @see ubrk_following * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ubrk_preceding(UBreakIterator *bi, int32_t offset); @@ -478,7 +481,7 @@ ubrk_preceding(UBreakIterator *bi, * @see ubrk_preceding * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ubrk_following(UBreakIterator *bi, int32_t offset); @@ -491,7 +494,7 @@ ubrk_following(UBreakIterator *bi, * @see ubrk_countAvailable * @stable ICU 2.0 */ -U_STABLE const char* U_EXPORT2 +U_CAPI const char* U_EXPORT2 ubrk_getAvailable(int32_t index); /** @@ -502,7 +505,7 @@ ubrk_getAvailable(int32_t index); * @see ubrk_getAvailable * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ubrk_countAvailable(void); @@ -515,7 +518,7 @@ ubrk_countAvailable(void); * @return True if "offset" is a boundary position. * @stable ICU 2.0 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 ubrk_isBoundary(UBreakIterator *bi, int32_t offset); /** @@ -527,7 +530,7 @@ ubrk_isBoundary(UBreakIterator *bi, int32_t offset); * For word break iterators, the possible values are defined in enum UWordBreak. * @stable ICU 2.2 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ubrk_getRuleStatus(UBreakIterator *bi); /** @@ -547,7 +550,7 @@ ubrk_getRuleStatus(UBreakIterator *bi); * the most recent boundary returned by the break iterator. * @stable ICU 3.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ubrk_getRuleStatusVec(UBreakIterator *bi, int32_t *fillInVec, int32_t capacity, UErrorCode *status); /** @@ -559,7 +562,7 @@ ubrk_getRuleStatusVec(UBreakIterator *bi, int32_t *fillInVec, int32_t capacity, * @return locale string * @stable ICU 2.8 */ -U_STABLE const char* U_EXPORT2 +U_CAPI const char* U_EXPORT2 ubrk_getLocaleByType(const UBreakIterator *bi, ULocDataLocaleType type, UErrorCode* status); /** @@ -587,7 +590,7 @@ ubrk_getLocaleByType(const UBreakIterator *bi, ULocDataLocaleType type, UErrorCo * * @stable ICU 49 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ubrk_refreshUText(UBreakIterator *bi, UText *text, UErrorCode *status); @@ -618,7 +621,7 @@ ubrk_refreshUText(UBreakIterator *bi, * @see ubrk_openBinaryRules * @stable ICU 59 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ubrk_getBinaryRules(UBreakIterator *bi, uint8_t * binaryRules, int32_t rulesCapacity, UErrorCode * status); diff --git a/deps/icu-small/source/common/unicode/ucasemap.h b/deps/icu-small/source/common/unicode/ucasemap.h index 6b253e3d638475..d1c1b483ab337e 100644 --- a/deps/icu-small/source/common/unicode/ucasemap.h +++ b/deps/icu-small/source/common/unicode/ucasemap.h @@ -22,10 +22,13 @@ #define __UCASEMAP_H__ #include "unicode/utypes.h" -#include "unicode/localpointer.h" #include "unicode/stringoptions.h" #include "unicode/ustring.h" +#if U_SHOW_CPLUSPLUS_API +#include "unicode/localpointer.h" +#endif // U_SHOW_CPLUSPLUS_API + /** * \file * \brief C API: Unicode case mapping functions using a UCaseMap service object. @@ -69,7 +72,7 @@ typedef struct UCaseMap UCaseMap; /**< C typedef for struct UCaseMap. @stable IC * @see U_TITLECASE_NO_BREAK_ADJUSTMENT * @stable ICU 3.4 */ -U_STABLE UCaseMap * U_EXPORT2 +U_CAPI UCaseMap * U_EXPORT2 ucasemap_open(const char *locale, uint32_t options, UErrorCode *pErrorCode); /** @@ -77,7 +80,7 @@ ucasemap_open(const char *locale, uint32_t options, UErrorCode *pErrorCode); * @param csm Object to be closed. * @stable ICU 3.4 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucasemap_close(UCaseMap *csm); #if U_SHOW_CPLUSPLUS_API @@ -105,7 +108,7 @@ U_NAMESPACE_END * @return locale ID * @stable ICU 3.4 */ -U_STABLE const char * U_EXPORT2 +U_CAPI const char * U_EXPORT2 ucasemap_getLocale(const UCaseMap *csm); /** @@ -114,7 +117,7 @@ ucasemap_getLocale(const UCaseMap *csm); * @return options bit set * @stable ICU 3.4 */ -U_STABLE uint32_t U_EXPORT2 +U_CAPI uint32_t U_EXPORT2 ucasemap_getOptions(const UCaseMap *csm); /** @@ -128,7 +131,7 @@ ucasemap_getOptions(const UCaseMap *csm); * @see ucasemap_open * @stable ICU 3.4 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucasemap_setLocale(UCaseMap *csm, const char *locale, UErrorCode *pErrorCode); /** @@ -142,7 +145,7 @@ ucasemap_setLocale(UCaseMap *csm, const char *locale, UErrorCode *pErrorCode); * @see ucasemap_open * @stable ICU 3.4 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucasemap_setOptions(UCaseMap *csm, uint32_t options, UErrorCode *pErrorCode); #if !UCONFIG_NO_BREAK_ITERATION @@ -154,7 +157,7 @@ ucasemap_setOptions(UCaseMap *csm, uint32_t options, UErrorCode *pErrorCode); * @return titlecasing break iterator * @stable ICU 3.8 */ -U_STABLE const UBreakIterator * U_EXPORT2 +U_CAPI const UBreakIterator * U_EXPORT2 ucasemap_getBreakIterator(const UCaseMap *csm); /** @@ -177,7 +180,7 @@ ucasemap_getBreakIterator(const UCaseMap *csm); * @see ucasemap_utf8ToTitle * @stable ICU 3.8 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucasemap_setBreakIterator(UCaseMap *csm, UBreakIterator *iterToAdopt, UErrorCode *pErrorCode); /** @@ -226,7 +229,7 @@ ucasemap_setBreakIterator(UCaseMap *csm, UBreakIterator *iterToAdopt, UErrorCode * @see u_strToTitle * @stable ICU 3.8 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucasemap_toTitle(UCaseMap *csm, UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, @@ -257,7 +260,7 @@ ucasemap_toTitle(UCaseMap *csm, * @see u_strToLower * @stable ICU 3.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucasemap_utf8ToLower(const UCaseMap *csm, char *dest, int32_t destCapacity, const char *src, int32_t srcLength, @@ -286,7 +289,7 @@ ucasemap_utf8ToLower(const UCaseMap *csm, * @see u_strToUpper * @stable ICU 3.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucasemap_utf8ToUpper(const UCaseMap *csm, char *dest, int32_t destCapacity, const char *src, int32_t srcLength, @@ -338,7 +341,7 @@ ucasemap_utf8ToUpper(const UCaseMap *csm, * @see U_TITLECASE_NO_BREAK_ADJUSTMENT * @stable ICU 3.8 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucasemap_utf8ToTitle(UCaseMap *csm, char *dest, int32_t destCapacity, const char *src, int32_t srcLength, @@ -376,7 +379,7 @@ ucasemap_utf8ToTitle(UCaseMap *csm, * @see U_FOLD_CASE_EXCLUDE_SPECIAL_I * @stable ICU 3.8 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucasemap_utf8FoldCase(const UCaseMap *csm, char *dest, int32_t destCapacity, const char *src, int32_t srcLength, diff --git a/deps/icu-small/source/common/unicode/ucat.h b/deps/icu-small/source/common/unicode/ucat.h index f9c18b47d6c9b8..a177639a76bfcb 100644 --- a/deps/icu-small/source/common/unicode/ucat.h +++ b/deps/icu-small/source/common/unicode/ucat.h @@ -103,7 +103,7 @@ typedef UResourceBundle* u_nl_catd; * * @stable ICU 2.6 */ -U_STABLE u_nl_catd U_EXPORT2 +U_CAPI u_nl_catd U_EXPORT2 u_catopen(const char* name, const char* locale, UErrorCode* ec); /** @@ -114,7 +114,7 @@ u_catopen(const char* name, const char* locale, UErrorCode* ec); * * @stable ICU 2.6 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 u_catclose(u_nl_catd catd); /** @@ -149,7 +149,7 @@ u_catclose(u_nl_catd catd); * * @stable ICU 2.6 */ -U_STABLE const UChar* U_EXPORT2 +U_CAPI const UChar* U_EXPORT2 u_catgets(u_nl_catd catd, int32_t set_num, int32_t msg_num, const UChar* s, int32_t* len, UErrorCode* ec); diff --git a/deps/icu-small/source/common/unicode/uchar.h b/deps/icu-small/source/common/unicode/uchar.h index 3b55b2326dfc1f..1e0f82e706c482 100644 --- a/deps/icu-small/source/common/unicode/uchar.h +++ b/deps/icu-small/source/common/unicode/uchar.h @@ -80,7 +80,7 @@ U_CDECL_BEGIN * and the ICU User Guide chapter on Properties (http://icu-project.org/userguide/properties.html). * * Many properties are accessible via generic functions that take a UProperty selector. - * - u_hasBinaryProperty() returns a binary value (TRUE/FALSE) per property and code point. + * - u_hasBinaryProperty() returns a binary value (true/false) per property and code point. * - u_getIntPropertyValue() returns an integer value per property and code point. * For each supported enumerated or catalog property, there is * an enum type for all of the property's values, and @@ -2586,8 +2586,8 @@ typedef enum UVerticalOrientation { * @param c Code point to test. * @param which UProperty selector constant, identifies which binary property to check. * Must be UCHAR_BINARY_START<=which(remainingMatchLength_ + 2) << kState64RemainingShift) | @@ -123,14 +122,13 @@ class U_COMMON_API UCharsTrie : public UMemory { * @see getState64 * @see resetToState * @see reset - * @draft ICU 65 + * @stable ICU 65 */ UCharsTrie &resetToState64(uint64_t state) { remainingMatchLength_ = static_cast(state >> kState64RemainingShift) - 2; pos_ = uchars_ + (state & kState64PosMask); return *this; } -#endif /* U_HIDE_DRAFT_API */ /** * UCharsTrie state object, for saving a trie's current state @@ -268,16 +266,16 @@ class U_COMMON_API UCharsTrie : public UMemory { /** * Determines whether all strings reachable from the current state * map to the same value. - * @param uniqueValue Receives the unique value, if this function returns TRUE. + * @param uniqueValue Receives the unique value, if this function returns true. * (output-only) - * @return TRUE if all strings reachable from the current state + * @return true if all strings reachable from the current state * map to the same value. * @stable ICU 4.8 */ inline UBool hasUniqueValue(int32_t &uniqueValue) const { const char16_t *pos=pos_; // Skip the rest of a pending linear-match node. - return pos!=NULL && findUniqueValue(pos+remainingMatchLength_+1, FALSE, uniqueValue); + return pos!=NULL && findUniqueValue(pos+remainingMatchLength_+1, false, uniqueValue); } /** @@ -335,7 +333,7 @@ class U_COMMON_API UCharsTrie : public UMemory { Iterator &reset(); /** - * @return TRUE if there are more elements. + * @return true if there are more elements. * @stable ICU 4.8 */ UBool hasNext() const; @@ -351,7 +349,7 @@ class U_COMMON_API UCharsTrie : public UMemory { * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) - * @return TRUE if there is another element. + * @return true if there is another element. * @stable ICU 4.8 */ UBool next(UErrorCode &errorCode); @@ -371,7 +369,7 @@ class U_COMMON_API UCharsTrie : public UMemory { UBool truncateAndStop() { pos_=NULL; value_=-1; // no real value for str - return TRUE; + return true; } const char16_t *branchNext(const char16_t *pos, int32_t length, UErrorCode &errorCode); diff --git a/deps/icu-small/source/common/unicode/ucharstriebuilder.h b/deps/icu-small/source/common/unicode/ucharstriebuilder.h index 540dcc047fd563..15657702f9d024 100644 --- a/deps/icu-small/source/common/unicode/ucharstriebuilder.h +++ b/deps/icu-small/source/common/unicode/ucharstriebuilder.h @@ -101,9 +101,10 @@ class U_COMMON_API UCharsTrieBuilder : public StringTrieBuilder { * Multiple calls to buildUnicodeString() set the UnicodeStrings to the * builder's same char16_t array, without rebuilding. * If buildUnicodeString() is called after build(), the trie will be - * re-serialized into a new array. - * If build() is called after buildUnicodeString(), the trie object will become - * the owner of the previously returned array. + * re-serialized into a new array (because build() passes on ownership). + * If build() is called after buildUnicodeString(), the trie object returned + * by build() will become the owner of the underlying data for the + * previously returned UnicodeString. * After clear() has been called, a new array will be used as well. * @param buildOption Build option, see UStringTrieBuildOption. * @param result A UnicodeString which will be set to the char16_t-serialized @@ -147,7 +148,7 @@ class U_COMMON_API UCharsTrieBuilder : public StringTrieBuilder { virtual int32_t skipElementsBySomeUnits(int32_t i, int32_t unitIndex, int32_t count) const; virtual int32_t indexOfElementWithNextUnit(int32_t i, int32_t unitIndex, char16_t unit) const; - virtual UBool matchNodesCanHaveValues() const { return TRUE; } + virtual UBool matchNodesCanHaveValues() const { return true; } virtual int32_t getMaxBranchLinearSubNodeLength() const { return UCharsTrie::kMaxBranchLinearSubNodeLength; } virtual int32_t getMinLinearMatch() const { return UCharsTrie::kMinLinearMatch; } diff --git a/deps/icu-small/source/common/unicode/uchriter.h b/deps/icu-small/source/common/unicode/uchriter.h index bee842cc259f07..84309b2416d136 100644 --- a/deps/icu-small/source/common/unicode/uchriter.h +++ b/deps/icu-small/source/common/unicode/uchriter.h @@ -274,11 +274,11 @@ class U_COMMON_API UCharCharacterIterator : public CharacterIterator { virtual UChar32 next32PostInc(void); /** - * Returns FALSE if there are no more code units or code points + * Returns false if there are no more code units or code points * at or after the current position in the iteration range. * This is used with nextPostInc() or next32PostInc() in forward * iteration. - * @return FALSE if there are no more code units or code points + * @return false if there are no more code units or code points * at or after the current position in the iteration range. * @stable ICU 2.0 */ @@ -303,11 +303,11 @@ class U_COMMON_API UCharCharacterIterator : public CharacterIterator { virtual UChar32 previous32(void); /** - * Returns FALSE if there are no more code units or code points + * Returns false if there are no more code units or code points * before the current position in the iteration range. * This is used with previous() or previous32() in backward * iteration. - * @return FALSE if there are no more code units or code points + * @return false if there are no more code units or code points * before the current position in the iteration range. * @stable ICU 2.0 */ diff --git a/deps/icu-small/source/common/unicode/uclean.h b/deps/icu-small/source/common/unicode/uclean.h index ab0cd6da6ba780..f03593964a4edd 100644 --- a/deps/icu-small/source/common/unicode/uclean.h +++ b/deps/icu-small/source/common/unicode/uclean.h @@ -49,7 +49,7 @@ * * @stable ICU 2.6 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 u_init(UErrorCode *status); #ifndef U_HIDE_SYSTEM_API @@ -98,7 +98,7 @@ u_init(UErrorCode *status); * @stable ICU 2.0 * @system */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 u_cleanup(void); U_CDECL_BEGIN @@ -148,7 +148,7 @@ typedef void U_CALLCONV UMemFreeFn (const void *context, void *mem); * @stable ICU 2.8 * @system */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 u_setMemoryFunctions(const void *context, UMemAllocFn * U_CALLCONV_FPTR a, UMemReallocFn * U_CALLCONV_FPTR r, UMemFreeFn * U_CALLCONV_FPTR f, UErrorCode *status); diff --git a/deps/icu-small/source/common/unicode/ucnv.h b/deps/icu-small/source/common/unicode/ucnv.h index ec7c5f350b4973..58f271cfb5adf2 100644 --- a/deps/icu-small/source/common/unicode/ucnv.h +++ b/deps/icu-small/source/common/unicode/ucnv.h @@ -51,7 +51,10 @@ #include "unicode/ucnv_err.h" #include "unicode/uenum.h" + +#if U_SHOW_CPLUSPLUS_API #include "unicode/localpointer.h" +#endif // U_SHOW_CPLUSPLUS_API #if !defined(USET_DEFINED) && !defined(U_IN_DOXYGEN) @@ -308,7 +311,7 @@ U_CDECL_END * lexically follows name2. * @stable ICU 2.0 */ -U_STABLE int U_EXPORT2 +U_CAPI int U_EXPORT2 ucnv_compareNames(const char *name1, const char *name2); @@ -362,7 +365,7 @@ ucnv_compareNames(const char *name1, const char *name2); * @see ucnv_compareNames * @stable ICU 2.0 */ -U_STABLE UConverter* U_EXPORT2 +U_CAPI UConverter* U_EXPORT2 ucnv_open(const char *converterName, UErrorCode *err); @@ -392,7 +395,7 @@ ucnv_open(const char *converterName, UErrorCode *err); * @see ucnv_compareNames * @stable ICU 2.0 */ -U_STABLE UConverter* U_EXPORT2 +U_CAPI UConverter* U_EXPORT2 ucnv_openU(const UChar *name, UErrorCode *err); @@ -460,7 +463,7 @@ ucnv_openU(const UChar *name, * @see UConverterPlatform * @stable ICU 2.0 */ -U_STABLE UConverter* U_EXPORT2 +U_CAPI UConverter* U_EXPORT2 ucnv_openCCSID(int32_t codepage, UConverterPlatform platform, UErrorCode * err); @@ -476,7 +479,7 @@ ucnv_openCCSID(int32_t codepage, *

    The name will NOT be looked up in the alias mechanism, nor will the converter be * stored in the converter cache or the alias table. The only way to open further converters * is call this function multiple times, or use the ucnv_safeClone() function to clone a - * 'master' converter.

    + * 'primary' converter.

    * *

    A future version of ICU may add alias table lookups and/or caching * to this function.

    @@ -495,7 +498,7 @@ ucnv_openCCSID(int32_t codepage, * @see ucnv_close * @stable ICU 2.2 */ -U_STABLE UConverter* U_EXPORT2 +U_CAPI UConverter* U_EXPORT2 ucnv_openPackage(const char *packageName, const char *converterName, UErrorCode *err); /** @@ -537,7 +540,7 @@ ucnv_openPackage(const char *packageName, const char *converterName, UErrorCode * @return pointer to the new clone * @stable ICU 2.0 */ -U_STABLE UConverter * U_EXPORT2 +U_CAPI UConverter * U_EXPORT2 ucnv_safeClone(const UConverter *cnv, void *stackBuffer, int32_t *pBufferSize, @@ -566,7 +569,7 @@ ucnv_safeClone(const UConverter *cnv, * @see ucnv_openCCSID * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucnv_close(UConverter * converter); #if U_SHOW_CPLUSPLUS_API @@ -605,7 +608,7 @@ U_NAMESPACE_END * @see ucnv_setSubstChars * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucnv_getSubstChars(const UConverter *converter, char *subChars, int8_t *len, @@ -630,7 +633,7 @@ ucnv_getSubstChars(const UConverter *converter, * @see ucnv_getSubstChars * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucnv_setSubstChars(UConverter *converter, const char *subChars, int8_t len, @@ -663,7 +666,7 @@ ucnv_setSubstChars(UConverter *converter, * @see ucnv_getSubstChars * @stable ICU 3.6 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucnv_setSubstString(UConverter *cnv, const UChar *s, int32_t length, @@ -682,7 +685,7 @@ ucnv_setSubstString(UConverter *cnv, * U_INDEX_OUTOFBOUNDS_ERROR will be returned. * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucnv_getInvalidChars(const UConverter *converter, char *errBytes, int8_t *len, @@ -701,7 +704,7 @@ ucnv_getInvalidChars(const UConverter *converter, * U_INDEX_OUTOFBOUNDS_ERROR will be returned. * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucnv_getInvalidUChars(const UConverter *converter, UChar *errUChars, int8_t *len, @@ -714,7 +717,7 @@ ucnv_getInvalidUChars(const UConverter *converter, * @param converter the Unicode converter * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucnv_reset(UConverter *converter); /** @@ -725,7 +728,7 @@ ucnv_reset(UConverter *converter); * @param converter the Unicode converter * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucnv_resetToUnicode(UConverter *converter); /** @@ -736,7 +739,7 @@ ucnv_resetToUnicode(UConverter *converter); * @param converter the Unicode converter * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucnv_resetFromUnicode(UConverter *converter); /** @@ -789,7 +792,7 @@ ucnv_resetFromUnicode(UConverter *converter); * @see ucnv_getMinCharSize * @stable ICU 2.0 */ -U_STABLE int8_t U_EXPORT2 +U_CAPI int8_t U_EXPORT2 ucnv_getMaxCharSize(const UConverter *converter); /** @@ -822,7 +825,7 @@ ucnv_getMaxCharSize(const UConverter *converter); * @see ucnv_getMaxCharSize * @stable ICU 2.0 */ -U_STABLE int8_t U_EXPORT2 +U_CAPI int8_t U_EXPORT2 ucnv_getMinCharSize(const UConverter *converter); /** @@ -839,7 +842,7 @@ ucnv_getMinCharSize(const UConverter *converter); * @see ucnv_getName * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucnv_getDisplayName(const UConverter *converter, const char *displayLocale, UChar *displayName, @@ -856,7 +859,7 @@ ucnv_getDisplayName(const UConverter *converter, * @see ucnv_getDisplayName * @stable ICU 2.0 */ -U_STABLE const char * U_EXPORT2 +U_CAPI const char * U_EXPORT2 ucnv_getName(const UConverter *converter, UErrorCode *err); /** @@ -882,7 +885,7 @@ ucnv_getName(const UConverter *converter, UErrorCode *err); * @see ucnv_getPlatform * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucnv_getCCSID(const UConverter *converter, UErrorCode *err); @@ -896,7 +899,7 @@ ucnv_getCCSID(const UConverter *converter, * @return The codepage platform * @stable ICU 2.0 */ -U_STABLE UConverterPlatform U_EXPORT2 +U_CAPI UConverterPlatform U_EXPORT2 ucnv_getPlatform(const UConverter *converter, UErrorCode *err); @@ -908,14 +911,14 @@ ucnv_getPlatform(const UConverter *converter, * @return the type of the converter * @stable ICU 2.0 */ -U_STABLE UConverterType U_EXPORT2 +U_CAPI UConverterType U_EXPORT2 ucnv_getType(const UConverter * converter); /** * Gets the "starter" (lead) bytes for converters of type MBCS. * Will fill in an U_ILLEGAL_ARGUMENT_ERROR if converter passed in * is not MBCS. Fills in an array of type UBool, with the value of the byte - * as offset to the array. For example, if (starters[0x20] == TRUE) at return, + * as offset to the array. For example, if (starters[0x20] == true) at return, * it means that the byte 0x20 is a starter byte in this converter. * Context pointers are always owned by the caller. * @@ -926,7 +929,7 @@ ucnv_getType(const UConverter * converter); * @see ucnv_getType * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucnv_getStarters(const UConverter* converter, UBool starters[256], UErrorCode* err); @@ -997,7 +1000,7 @@ typedef enum UConverterUnicodeSet { * @see uset_close * @stable ICU 2.6 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucnv_getUnicodeSet(const UConverter *cnv, USet *setFillIn, UConverterUnicodeSet whichSet, @@ -1014,7 +1017,7 @@ ucnv_getUnicodeSet(const UConverter *cnv, * @see ucnv_setToUCallBack * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucnv_getToUCallBack (const UConverter * converter, UConverterToUCallback *action, const void **context); @@ -1030,7 +1033,7 @@ ucnv_getToUCallBack (const UConverter * converter, * @see ucnv_setFromUCallBack * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucnv_getFromUCallBack (const UConverter * converter, UConverterFromUCallback *action, const void **context); @@ -1050,7 +1053,7 @@ ucnv_getFromUCallBack (const UConverter * converter, * @see ucnv_getToUCallBack * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucnv_setToUCallBack (UConverter * converter, UConverterToUCallback newAction, const void* newContext, @@ -1073,7 +1076,7 @@ ucnv_setToUCallBack (UConverter * converter, * @see ucnv_getFromUCallBack * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucnv_setFromUCallBack (UConverter * converter, UConverterFromUCallback newAction, const void *newContext, @@ -1100,7 +1103,7 @@ ucnv_setFromUCallBack (UConverter * converter, * consumed. At that point, the caller should reset the source and * sourceLimit pointers to point to the next chunk. * - * At the end of the stream (flush==TRUE), the input is completely consumed + * At the end of the stream (flush==true), the input is completely consumed * when *source==sourceLimit and no error code is set. * The converter object is then automatically reset by this function. * (This means that a converter need not be reset explicitly between data @@ -1125,9 +1128,9 @@ ucnv_setFromUCallBack (UConverter * converter, * e.g: offsets[3] is equal to 6, it means that the target[3] was a result of transcoding source[6] * For output data carried across calls, and other data without a specific source character * (such as from escape sequences or callbacks) -1 will be placed for offsets. - * @param flush set to TRUE if the current source buffer is the last available - * chunk of the source, FALSE otherwise. Note that if a failing status is returned, - * this function may have to be called multiple times with flush set to TRUE until + * @param flush set to true if the current source buffer is the last available + * chunk of the source, false otherwise. Note that if a failing status is returned, + * this function may have to be called multiple times with flush set to true until * the source buffer is consumed. * @param err the error status. U_ILLEGAL_ARGUMENT_ERROR will be set if the * converter is NULL. @@ -1139,7 +1142,7 @@ ucnv_setFromUCallBack (UConverter * converter, * @see ucnv_setToUCallBack * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucnv_fromUnicode (UConverter * converter, char **target, const char *targetLimit, @@ -1169,7 +1172,7 @@ ucnv_fromUnicode (UConverter * converter, * consumed. At that point, the caller should reset the source and * sourceLimit pointers to point to the next chunk. * - * At the end of the stream (flush==TRUE), the input is completely consumed + * At the end of the stream (flush==true), the input is completely consumed * when *source==sourceLimit and no error code is set * The converter object is then automatically reset by this function. * (This means that a converter need not be reset explicitly between data @@ -1193,9 +1196,9 @@ ucnv_fromUnicode (UConverter * converter, * e.g: offsets[3] is equal to 6, it means that the target[3] was a result of transcoding source[6] * For output data carried across calls, and other data without a specific source character * (such as from escape sequences or callbacks) -1 will be placed for offsets. - * @param flush set to TRUE if the current source buffer is the last available - * chunk of the source, FALSE otherwise. Note that if a failing status is returned, - * this function may have to be called multiple times with flush set to TRUE until + * @param flush set to true if the current source buffer is the last available + * chunk of the source, false otherwise. Note that if a failing status is returned, + * this function may have to be called multiple times with flush set to true until * the source buffer is consumed. * @param err the error status. U_ILLEGAL_ARGUMENT_ERROR will be set if the * converter is NULL. @@ -1208,7 +1211,7 @@ ucnv_fromUnicode (UConverter * converter, * @see ucnv_getNextUChar * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucnv_toUnicode(UConverter *converter, UChar **target, const UChar *targetLimit, @@ -1245,7 +1248,7 @@ ucnv_toUnicode(UConverter *converter, * @see UCNV_GET_MAX_BYTES_FOR_STRING * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucnv_fromUChars(UConverter *cnv, char *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, @@ -1277,7 +1280,7 @@ ucnv_fromUChars(UConverter *cnv, * @see ucnv_convert * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucnv_toUChars(UConverter *cnv, UChar *dest, int32_t destCapacity, const char *src, int32_t srcLength, @@ -1295,7 +1298,7 @@ ucnv_toUChars(UConverter *cnv, * - Convenient. * * Limitations compared to ucnv_toUnicode(): - * - Always assumes flush=TRUE. + * - Always assumes flush=true. * This makes ucnv_getNextUChar() unsuitable for "streaming" conversion, * that is, for where the input is supplied in multiple buffers, * because ucnv_getNextUChar() will assume the end of the input at the end @@ -1306,7 +1309,7 @@ ucnv_toUChars(UConverter *cnv, * ucnv_getNextUChar() uses the current state of the converter * (unlike ucnv_toUChars() which always resets first). * However, if ucnv_getNextUChar() is called after ucnv_toUnicode() - * stopped in the middle of a character sequence (with flush=FALSE), + * stopped in the middle of a character sequence (with flush=false), * then ucnv_getNextUChar() will always use the slower ucnv_toUnicode() * internally until the next character boundary. * (This is new in ICU 2.6. In earlier releases, ucnv_getNextUChar() had to @@ -1353,7 +1356,7 @@ ucnv_toUChars(UConverter *cnv, * @see ucnv_convert * @stable ICU 2.0 */ -U_STABLE UChar32 U_EXPORT2 +U_CAPI UChar32 U_EXPORT2 ucnv_getNextUChar(UConverter * converter, const char **source, const char * sourceLimit, @@ -1385,7 +1388,7 @@ ucnv_getNextUChar(UConverter * converter, * * ucnv_convertEx() also provides further convenience: * - an option to reset the converters at the beginning - * (if reset==TRUE, see parameters; + * (if reset==true, see parameters; * also sets *pivotTarget=*pivotSource=pivotStart) * - allow NUL-terminated input * (only a single NUL byte, will not work for charsets with multi-byte NULs) @@ -1442,7 +1445,7 @@ ucnv_getNextUChar(UConverter * converter, * &target, u8+capacity, * &s, s+length, * NULL, NULL, NULL, NULL, - * TRUE, TRUE, + * true, true, * pErrorCode); * * myReleaseCachedUTF8Converter(utf8Cnv); @@ -1474,7 +1477,7 @@ ucnv_getNextUChar(UConverter * converter, * It must be pivotStart<=*pivotSource<=*pivotTarget<=pivotLimit * and pivotStartNULL is returned. Owned by the library. * @stable ICU 2.0 */ -U_STABLE const char * U_EXPORT2 +U_CAPI const char * U_EXPORT2 ucnv_getStandardName(const char *name, const char *standard, UErrorCode *pErrorCode); /** @@ -1853,7 +1856,7 @@ ucnv_getStandardName(const char *name, const char *standard, UErrorCode *pErrorC * @see ucnv_getStandardName * @stable ICU 2.4 */ -U_STABLE const char * U_EXPORT2 +U_CAPI const char * U_EXPORT2 ucnv_getCanonicalName(const char *alias, const char *standard, UErrorCode *pErrorCode); /** @@ -1870,7 +1873,7 @@ ucnv_getCanonicalName(const char *alias, const char *standard, UErrorCode *pErro * @see ucnv_setDefaultName * @stable ICU 2.0 */ -U_STABLE const char * U_EXPORT2 +U_CAPI const char * U_EXPORT2 ucnv_getDefaultName(void); #ifndef U_HIDE_SYSTEM_API @@ -1890,7 +1893,7 @@ ucnv_getDefaultName(void); * @system * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucnv_setDefaultName(const char *name); #endif /* U_HIDE_SYSTEM_API */ @@ -1911,18 +1914,18 @@ ucnv_setDefaultName(const char *name); * @see ucnv_isAmbiguous * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucnv_fixFileSeparator(const UConverter *cnv, UChar *source, int32_t sourceLen); /** * Determines if the converter contains ambiguous mappings of the same * character or not. * @param cnv the converter to be tested - * @return TRUE if the converter contains ambiguous mapping of the same - * character, FALSE otherwise. + * @return true if the converter contains ambiguous mapping of the same + * character, false otherwise. * @stable ICU 2.0 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 ucnv_isAmbiguous(const UConverter *cnv); /** @@ -1935,12 +1938,12 @@ ucnv_isAmbiguous(const UConverter *cnv); * http://www.icu-project.org/userguide/conversion-data.html#ucmformat * * @param cnv The converter to set the fallback mapping usage on. - * @param usesFallback TRUE if the user wants the converter to take advantage of the fallback - * mapping, FALSE otherwise. + * @param usesFallback true if the user wants the converter to take advantage of the fallback + * mapping, false otherwise. * @stable ICU 2.0 * @see ucnv_usesFallback */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucnv_setFallback(UConverter *cnv, UBool usesFallback); /** @@ -1948,11 +1951,11 @@ ucnv_setFallback(UConverter *cnv, UBool usesFallback); * This flag has restrictions, see ucnv_setFallback(). * * @param cnv The converter to be tested - * @return TRUE if the converter uses fallback, FALSE otherwise. + * @return true if the converter uses fallback, false otherwise. * @stable ICU 2.0 * @see ucnv_setFallback */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 ucnv_usesFallback(const UConverter *cnv); /** @@ -1984,7 +1987,7 @@ ucnv_usesFallback(const UConverter *cnv); * @return The name of the encoding detected. NULL if encoding is not detected. * @stable ICU 2.4 */ -U_STABLE const char* U_EXPORT2 +U_CAPI const char* U_EXPORT2 ucnv_detectUnicodeSignature(const char* source, int32_t sourceLength, int32_t *signatureLength, @@ -2001,7 +2004,7 @@ ucnv_detectUnicodeSignature(const char* source, * @return The number of UChars in the state. -1 if an error is encountered. * @stable ICU 3.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucnv_fromUCountPending(const UConverter* cnv, UErrorCode* status); /** @@ -2015,7 +2018,7 @@ ucnv_fromUCountPending(const UConverter* cnv, UErrorCode* status); * @return The number of chars in the state. -1 if an error is encountered. * @stable ICU 3.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucnv_toUCountPending(const UConverter* cnv, UErrorCode* status); /** @@ -2027,13 +2030,13 @@ ucnv_toUCountPending(const UConverter* cnv, UErrorCode* status); * but a UTF-32 converter encodes each code point with 4 bytes. * Note: This method is not intended to be used to determine whether the charset has a * fixed ratio of bytes to Unicode codes units for any particular Unicode encoding form. - * FALSE is returned with the UErrorCode if error occurs or cnv is NULL. + * false is returned with the UErrorCode if error occurs or cnv is NULL. * @param cnv The converter to be tested * @param status ICU error code in/out paramter - * @return TRUE if the converter is fixed-width + * @return true if the converter is fixed-width * @stable ICU 4.8 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 ucnv_isFixedWidth(UConverter *cnv, UErrorCode *status); #endif diff --git a/deps/icu-small/source/common/unicode/ucnv_cb.h b/deps/icu-small/source/common/unicode/ucnv_cb.h index 632cc0b35f26c5..18240990dbaed9 100644 --- a/deps/icu-small/source/common/unicode/ucnv_cb.h +++ b/deps/icu-small/source/common/unicode/ucnv_cb.h @@ -84,7 +84,7 @@ * @see ucnv_cbFromUWriteSub * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucnv_cbFromUWriteBytes (UConverterFromUnicodeArgs *args, const char* source, int32_t length, @@ -104,7 +104,7 @@ ucnv_cbFromUWriteBytes (UConverterFromUnicodeArgs *args, * @see ucnv_cbFromUWriteBytes * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucnv_cbFromUWriteSub (UConverterFromUnicodeArgs *args, int32_t offsetIndex, UErrorCode * err); @@ -121,7 +121,7 @@ ucnv_cbFromUWriteSub (UConverterFromUnicodeArgs *args, * @see ucnv_cbToUWriteSub * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 ucnv_cbFromUWriteUChars(UConverterFromUnicodeArgs *args, +U_CAPI void U_EXPORT2 ucnv_cbFromUWriteUChars(UConverterFromUnicodeArgs *args, const UChar** source, const UChar* sourceLimit, int32_t offsetIndex, @@ -140,7 +140,7 @@ U_STABLE void U_EXPORT2 ucnv_cbFromUWriteUChars(UConverterFromUnicodeArgs *args, * @see ucnv_cbToUWriteSub * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 ucnv_cbToUWriteUChars (UConverterToUnicodeArgs *args, +U_CAPI void U_EXPORT2 ucnv_cbToUWriteUChars (UConverterToUnicodeArgs *args, const UChar* source, int32_t length, int32_t offsetIndex, @@ -156,7 +156,7 @@ U_STABLE void U_EXPORT2 ucnv_cbToUWriteUChars (UConverterToUnicodeArgs *args, * @see ucnv_cbToUWriteUChars * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 ucnv_cbToUWriteSub (UConverterToUnicodeArgs *args, +U_CAPI void U_EXPORT2 ucnv_cbToUWriteSub (UConverterToUnicodeArgs *args, int32_t offsetIndex, UErrorCode * err); #endif diff --git a/deps/icu-small/source/common/unicode/ucnv_err.h b/deps/icu-small/source/common/unicode/ucnv_err.h index 08c96c14407c22..bff90f0ba1e1d4 100644 --- a/deps/icu-small/source/common/unicode/ucnv_err.h +++ b/deps/icu-small/source/common/unicode/ucnv_err.h @@ -193,7 +193,7 @@ typedef enum { */ typedef struct { uint16_t size; /**< The size of this struct. @stable ICU 2.0 */ - UBool flush; /**< The internal state of converter will be reset and data flushed if set to TRUE. @stable ICU 2.0 */ + UBool flush; /**< The internal state of converter will be reset and data flushed if set to true. @stable ICU 2.0 */ UConverter *converter; /**< Pointer to the converter that is opened and to which this struct is passed as an argument. @stable ICU 2.0 */ const UChar *source; /**< Pointer to the source source buffer. @stable ICU 2.0 */ const UChar *sourceLimit; /**< Pointer to the limit (end + 1) of source buffer. @stable ICU 2.0 */ @@ -209,7 +209,7 @@ typedef struct { */ typedef struct { uint16_t size; /**< The size of this struct @stable ICU 2.0 */ - UBool flush; /**< The internal state of converter will be reset and data flushed if set to TRUE. @stable ICU 2.0 */ + UBool flush; /**< The internal state of converter will be reset and data flushed if set to true. @stable ICU 2.0 */ UConverter *converter; /**< Pointer to the converter that is opened and to which this struct is passed as an argument. @stable ICU 2.0 */ const char *source; /**< Pointer to the source source buffer. @stable ICU 2.0 */ const char *sourceLimit; /**< Pointer to the limit (end + 1) of source buffer. @stable ICU 2.0 */ @@ -233,7 +233,7 @@ typedef struct { * @param err This should always be set to a failure status prior to calling. * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_STOP ( +U_CAPI void U_EXPORT2 UCNV_FROM_U_CALLBACK_STOP ( const void *context, UConverterFromUnicodeArgs *fromUArgs, const UChar* codeUnits, @@ -257,7 +257,7 @@ U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_STOP ( * @param err This should always be set to a failure status prior to calling. * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_STOP ( +U_CAPI void U_EXPORT2 UCNV_TO_U_CALLBACK_STOP ( const void *context, UConverterToUnicodeArgs *toUArgs, const char* codeUnits, @@ -284,7 +284,7 @@ U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_STOP ( * otherwise this value will be set to a failure status. * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_SKIP ( +U_CAPI void U_EXPORT2 UCNV_FROM_U_CALLBACK_SKIP ( const void *context, UConverterFromUnicodeArgs *fromUArgs, const UChar* codeUnits, @@ -314,7 +314,7 @@ U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_SKIP ( * @see ucnv_setSubstChars * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_SUBSTITUTE ( +U_CAPI void U_EXPORT2 UCNV_FROM_U_CALLBACK_SUBSTITUTE ( const void *context, UConverterFromUnicodeArgs *fromUArgs, const UChar* codeUnits, @@ -370,7 +370,7 @@ U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_SUBSTITUTE ( * otherwise this value will be set to a failure status. * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_ESCAPE ( +U_CAPI void U_EXPORT2 UCNV_FROM_U_CALLBACK_ESCAPE ( const void *context, UConverterFromUnicodeArgs *fromUArgs, const UChar* codeUnits, @@ -398,7 +398,7 @@ U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_ESCAPE ( * otherwise this value will be set to a failure status. * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_SKIP ( +U_CAPI void U_EXPORT2 UCNV_TO_U_CALLBACK_SKIP ( const void *context, UConverterToUnicodeArgs *toUArgs, const char* codeUnits, @@ -424,7 +424,7 @@ U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_SKIP ( * otherwise this value will be set to a failure status. * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_SUBSTITUTE ( +U_CAPI void U_EXPORT2 UCNV_TO_U_CALLBACK_SUBSTITUTE ( const void *context, UConverterToUnicodeArgs *toUArgs, const char* codeUnits, @@ -450,7 +450,7 @@ U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_SUBSTITUTE ( * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_ESCAPE ( +U_CAPI void U_EXPORT2 UCNV_TO_U_CALLBACK_ESCAPE ( const void *context, UConverterToUnicodeArgs *toUArgs, const char* codeUnits, diff --git a/deps/icu-small/source/common/unicode/ucnvsel.h b/deps/icu-small/source/common/unicode/ucnvsel.h index 5fee53f179ace7..b84bc86bed2659 100644 --- a/deps/icu-small/source/common/unicode/ucnvsel.h +++ b/deps/icu-small/source/common/unicode/ucnvsel.h @@ -29,7 +29,10 @@ #include "unicode/utf16.h" #include "unicode/uenum.h" #include "unicode/ucnv.h" + +#if U_SHOW_CPLUSPLUS_API #include "unicode/localpointer.h" +#endif // U_SHOW_CPLUSPLUS_API /** * \file @@ -72,7 +75,7 @@ typedef struct UConverterSelector UConverterSelector; * * @stable ICU 4.2 */ -U_STABLE UConverterSelector* U_EXPORT2 +U_CAPI UConverterSelector* U_EXPORT2 ucnvsel_open(const char* const* converterList, int32_t converterListSize, const USet* excludedCodePoints, const UConverterUnicodeSet whichSet, UErrorCode* status); @@ -90,7 +93,7 @@ ucnvsel_open(const char* const* converterList, int32_t converterListSize, * * @stable ICU 4.2 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ucnvsel_close(UConverterSelector *sel); #if U_SHOW_CPLUSPLUS_API @@ -127,7 +130,7 @@ U_NAMESPACE_END * * @stable ICU 4.2 */ -U_STABLE UConverterSelector* U_EXPORT2 +U_CAPI UConverterSelector* U_EXPORT2 ucnvsel_openFromSerialized(const void* buffer, int32_t length, UErrorCode* status); /** @@ -144,7 +147,7 @@ ucnvsel_openFromSerialized(const void* buffer, int32_t length, UErrorCode* statu * * @stable ICU 4.2 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucnvsel_serialize(const UConverterSelector* sel, void* buffer, int32_t bufferCapacity, UErrorCode* status); @@ -162,7 +165,7 @@ ucnvsel_serialize(const UConverterSelector* sel, * * @stable ICU 4.2 */ -U_STABLE UEnumeration * U_EXPORT2 +U_CAPI UEnumeration * U_EXPORT2 ucnvsel_selectForString(const UConverterSelector* sel, const UChar *s, int32_t length, UErrorCode *status); @@ -180,7 +183,7 @@ ucnvsel_selectForString(const UConverterSelector* sel, * * @stable ICU 4.2 */ -U_STABLE UEnumeration * U_EXPORT2 +U_CAPI UEnumeration * U_EXPORT2 ucnvsel_selectForUTF8(const UConverterSelector* sel, const char *s, int32_t length, UErrorCode *status); diff --git a/deps/icu-small/source/common/unicode/ucptrie.h b/deps/icu-small/source/common/unicode/ucptrie.h index be06a227928286..b95491b183e9af 100644 --- a/deps/icu-small/source/common/unicode/ucptrie.h +++ b/deps/icu-small/source/common/unicode/ucptrie.h @@ -8,11 +8,13 @@ #define __UCPTRIE_H__ #include "unicode/utypes.h" - -#include "unicode/localpointer.h" #include "unicode/ucpmap.h" #include "unicode/utf8.h" +#if U_SHOW_CPLUSPLUS_API +#include "unicode/localpointer.h" +#endif // U_SHOW_CPLUSPLUS_API + U_CDECL_BEGIN /** @@ -580,11 +582,11 @@ enum { // Do not conditionalize with #ifndef U_HIDE_INTERNAL_API, needed for public API /** @internal */ -U_INTERNAL int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucptrie_internalSmallIndex(const UCPTrie *trie, UChar32 c); /** @internal */ -U_INTERNAL int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucptrie_internalSmallU8Index(const UCPTrie *trie, int32_t lt1, uint8_t t2, uint8_t t3); /** @@ -592,7 +594,7 @@ ucptrie_internalSmallU8Index(const UCPTrie *trie, int32_t lt1, uint8_t t2, uint8 * Do not call directly. * @internal */ -U_INTERNAL int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucptrie_internalU8PrevIndex(const UCPTrie *trie, UChar32 c, const uint8_t *start, const uint8_t *src); diff --git a/deps/icu-small/source/common/unicode/ucurr.h b/deps/icu-small/source/common/unicode/ucurr.h index 7149e7adf13067..4e115cd01e0fb6 100644 --- a/deps/icu-small/source/common/unicode/ucurr.h +++ b/deps/icu-small/source/common/unicode/ucurr.h @@ -78,7 +78,7 @@ typedef enum UCurrencyUsage UCurrencyUsage; * invalid. * @stable ICU 2.8 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucurr_forLocale(const char* locale, UChar* buff, int32_t buffCapacity, @@ -113,7 +113,29 @@ typedef enum UCurrNameStyle { * * @stable ICU 61 */ - UCURR_NARROW_SYMBOL_NAME + UCURR_NARROW_SYMBOL_NAME, + +#ifndef U_HIDE_DRAFT_API + /** + * Selector for getName() indicating the formal currency symbol. + * The formal currency symbol is similar to the regular currency + * symbol, but it always takes the form used in formal settings + * such as banking; for example, "NT$" instead of "$" for TWD in zh-TW. + * + * @draft ICU 68 + */ + UCURR_FORMAL_SYMBOL_NAME, + + /** + * Selector for getName() indicating the variant currency symbol. + * The variant symbol for a currency is an alternative symbol + * that is not necessarily as widely used as the regular symbol. + * + * @draft ICU 68 + */ + UCURR_VARIANT_SYMBOL_NAME +#endif // U_HIDE_DRAFT_API + } UCurrNameStyle; #if !UCONFIG_NO_SERVICE @@ -133,7 +155,7 @@ typedef const void* UCurrRegistryKey; * if there was an error. * @stable ICU 2.6 */ -U_STABLE UCurrRegistryKey U_EXPORT2 +U_CAPI UCurrRegistryKey U_EXPORT2 ucurr_register(const UChar* isoCode, const char* locale, UErrorCode* status); @@ -145,10 +167,10 @@ ucurr_register(const UChar* isoCode, * restored. * @param key the registry key returned by a previous call to ucurr_register * @param status the in/out status code, no special meanings are assigned - * @return TRUE if the currency for this key was successfully unregistered + * @return true if the currency for this key was successfully unregistered * @stable ICU 2.6 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 ucurr_unregister(UCurrRegistryKey key, UErrorCode* status); #endif /* UCONFIG_NO_SERVICE */ @@ -159,7 +181,7 @@ ucurr_unregister(UCurrRegistryKey key, UErrorCode* status); * @param currency null-terminated 3-letter ISO 4217 code * @param locale locale in which to display currency * @param nameStyle selector for which kind of name to return - * @param isChoiceFormat always set to FALSE, or can be NULL; + * @param isChoiceFormat always set to false, or can be NULL; * display names are static strings; * since ICU 4.4, ChoiceFormat patterns are no longer supported * @param len fill-in parameter to receive length of result @@ -169,7 +191,7 @@ ucurr_unregister(UCurrRegistryKey key, UErrorCode* status); * returned. * @stable ICU 2.6 */ -U_STABLE const UChar* U_EXPORT2 +U_CAPI const UChar* U_EXPORT2 ucurr_getName(const UChar* currency, const char* locale, UCurrNameStyle nameStyle, @@ -183,7 +205,7 @@ ucurr_getName(const UChar* currency, * currency object in the en_US locale is "US dollar" or "US dollars". * @param currency null-terminated 3-letter ISO 4217 code * @param locale locale in which to display currency - * @param isChoiceFormat always set to FALSE, or can be NULL; + * @param isChoiceFormat always set to false, or can be NULL; * display names are static strings; * since ICU 4.4, ChoiceFormat patterns are no longer supported * @param pluralCount plural count @@ -194,7 +216,7 @@ ucurr_getName(const UChar* currency, * returned. * @stable ICU 4.2 */ -U_STABLE const UChar* U_EXPORT2 +U_CAPI const UChar* U_EXPORT2 ucurr_getPluralName(const UChar* currency, const char* locale, UBool* isChoiceFormat, @@ -219,7 +241,7 @@ ucurr_getPluralName(const UChar* currency, * displayed, or 0 if there is an error * @stable ICU 3.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucurr_getDefaultFractionDigits(const UChar* currency, UErrorCode* ec); @@ -240,7 +262,7 @@ ucurr_getDefaultFractionDigits(const UChar* currency, * displayed, or 0 if there is an error * @stable ICU 54 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucurr_getDefaultFractionDigitsForUsage(const UChar* currency, const UCurrencyUsage usage, UErrorCode* ec); @@ -255,7 +277,7 @@ ucurr_getDefaultFractionDigitsForUsage(const UChar* currency, * or 0.0 if there is an error * @stable ICU 3.0 */ -U_STABLE double U_EXPORT2 +U_CAPI double U_EXPORT2 ucurr_getRoundingIncrement(const UChar* currency, UErrorCode* ec); @@ -269,7 +291,7 @@ ucurr_getRoundingIncrement(const UChar* currency, * or 0.0 if there is an error * @stable ICU 54 */ -U_STABLE double U_EXPORT2 +U_CAPI double U_EXPORT2 ucurr_getRoundingIncrementForUsage(const UChar* currency, const UCurrencyUsage usage, UErrorCode* ec); @@ -326,7 +348,7 @@ typedef enum UCurrCurrencyType { * @param pErrorCode Error code * @stable ICU 3.2 */ -U_STABLE UEnumeration * U_EXPORT2 +U_CAPI UEnumeration * U_EXPORT2 ucurr_openISOCurrencies(uint32_t currType, UErrorCode *pErrorCode); /** @@ -351,11 +373,11 @@ ucurr_openISOCurrencies(uint32_t currType, UErrorCode *pErrorCode); * @param errorCode * ICU error code * - * @return TRUE if the given ISO 4217 3-letter code is supported on the specified date range. + * @return true if the given ISO 4217 3-letter code is supported on the specified date range. * * @stable ICU 4.8 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 ucurr_isAvailable(const UChar* isoCode, UDate from, UDate to, @@ -375,7 +397,7 @@ ucurr_isAvailable(const UChar* isoCode, * values are invalid. * @stable ICU 4.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucurr_countCurrencies(const char* locale, UDate date, UErrorCode* ec); @@ -399,7 +421,7 @@ ucurr_countCurrencies(const char* locale, * invalid. * @stable ICU 4.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucurr_forLocaleAndDate(const char* locale, UDate date, int32_t index, @@ -423,7 +445,7 @@ ucurr_forLocaleAndDate(const char* locale, * @return a string enumeration over keyword values for the given key and the locale. * @stable ICU 4.2 */ -U_STABLE UEnumeration* U_EXPORT2 +U_CAPI UEnumeration* U_EXPORT2 ucurr_getKeywordValuesForLocale(const char* key, const char* locale, UBool commonlyUsed, @@ -438,7 +460,7 @@ ucurr_getKeywordValuesForLocale(const char* key, * @return The ISO 4217 numeric code of the currency * @stable ICU 49 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ucurr_getNumericCode(const UChar* currency); #endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/deps/icu-small/source/common/unicode/udata.h b/deps/icu-small/source/common/unicode/udata.h index 8236877b443d3d..88c0dded118d00 100644 --- a/deps/icu-small/source/common/unicode/udata.h +++ b/deps/icu-small/source/common/unicode/udata.h @@ -20,7 +20,10 @@ #define __UDATA_H__ #include "unicode/utypes.h" + +#if U_SHOW_CPLUSPLUS_API #include "unicode/localpointer.h" +#endif // U_SHOW_CPLUSPLUS_API U_CDECL_BEGIN @@ -166,8 +169,8 @@ typedef struct UDataMemory UDataMemory; * @param pInfo A pointer to the UDataInfo structure * of data that has been loaded and will be returned * by udata_openChoice() if this function - * returns TRUE. - * @return TRUE if the current data memory is acceptable + * returns true. + * @return true if the current data memory is acceptable * @stable ICU 2.0 */ typedef UBool U_CALLCONV @@ -197,7 +200,7 @@ UDataMemoryIsAcceptable(void *context, * @see udata_openChoice * @stable ICU 2.0 */ -U_STABLE UDataMemory * U_EXPORT2 +U_CAPI UDataMemory * U_EXPORT2 udata_open(const char *path, const char *type, const char *name, UErrorCode *pErrorCode); @@ -239,7 +242,7 @@ udata_open(const char *path, const char *type, const char *name, * This may be NULL or empty. * @param name A string that specifies the name of the data. * @param isAcceptable This function is called to verify that loaded data - * is useful for the client code. If it returns FALSE + * is useful for the client code. If it returns false * for all data items, then udata_openChoice() * will return with an error. * @param context Arbitrary parameter to be passed into isAcceptable. @@ -249,7 +252,7 @@ udata_open(const char *path, const char *type, const char *name, * to get a pointer to the actual data. * @stable ICU 2.0 */ -U_STABLE UDataMemory * U_EXPORT2 +U_CAPI UDataMemory * U_EXPORT2 udata_openChoice(const char *path, const char *type, const char *name, UDataMemoryIsAcceptable *isAcceptable, void *context, UErrorCode *pErrorCode); @@ -261,7 +264,7 @@ udata_openChoice(const char *path, const char *type, const char *name, * @param pData The pointer to data memory object * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 udata_close(UDataMemory *pData); /** @@ -273,7 +276,7 @@ udata_close(UDataMemory *pData); * @param pData The pointer to data memory object * @stable ICU 2.0 */ -U_STABLE const void * U_EXPORT2 +U_CAPI const void * U_EXPORT2 udata_getMemory(UDataMemory *pData); /** @@ -294,7 +297,7 @@ udata_getMemory(UDataMemory *pData); * adjusted and only part of the structure will be filled. * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 udata_getInfo(UDataMemory *pData, UDataInfo *pInfo); /** @@ -303,7 +306,7 @@ udata_getInfo(UDataMemory *pData, UDataInfo *pInfo); * area in memory. * * ICU data must be at least 8-aligned, and should be 16-aligned. - * See http://userguide.icu-project.org/icudata + * See https://unicode-org.github.io/icu/userguide/icudata * * The format of this data is that of the icu common data file, as is * generated by the pkgdata tool with mode=common or mode=dll. @@ -340,7 +343,7 @@ udata_getInfo(UDataMemory *pData, UDataInfo *pInfo); * @param err outgoing error status U_USING_DEFAULT_WARNING, U_UNSUPPORTED_ERROR * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 udata_setCommonData(const void *data, UErrorCode *err); @@ -350,7 +353,7 @@ udata_setCommonData(const void *data, UErrorCode *err); * pointer. * * ICU data must be at least 8-aligned, and should be 16-aligned. - * See http://userguide.icu-project.org/icudata + * See https://unicode-org.github.io/icu/userguide/icudata * * The format of this data is that of the icu common data file, like 'icudt26l.dat' * or the corresponding shared library (DLL) file. @@ -371,7 +374,7 @@ udata_setCommonData(const void *data, UErrorCode *err); * @see udata_setCommonData * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 udata_setAppData(const char *packageName, const void *data, UErrorCode *err); /** @@ -410,7 +413,7 @@ typedef enum UDataFileAccess { * @see UDataFileAccess * @stable ICU 3.4 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 udata_setFileAccess(UDataFileAccess access, UErrorCode *status); U_CDECL_END diff --git a/deps/icu-small/source/common/unicode/udisplaycontext.h b/deps/icu-small/source/common/unicode/udisplaycontext.h index 398481c6812247..6e1421798054f6 100644 --- a/deps/icu-small/source/common/unicode/udisplaycontext.h +++ b/deps/icu-small/source/common/unicode/udisplaycontext.h @@ -156,7 +156,8 @@ enum UDisplayContext { UDISPCTX_SUBSTITUTE = (UDISPCTX_TYPE_SUBSTITUTE_HANDLING<<8) + 0, /** * A possible setting for SUBSTITUTE_HANDLING: - * Returns a null value when no data is available. + * Returns a null value with error code set to U_ILLEGAL_ARGUMENT_ERROR when no + * data is available. * @stable ICU 58 */ UDISPCTX_NO_SUBSTITUTE = (UDISPCTX_TYPE_SUBSTITUTE_HANDLING<<8) + 1 diff --git a/deps/icu-small/source/common/unicode/uenum.h b/deps/icu-small/source/common/unicode/uenum.h index eb8ecdf88b6ec5..f1c506934bec87 100644 --- a/deps/icu-small/source/common/unicode/uenum.h +++ b/deps/icu-small/source/common/unicode/uenum.h @@ -20,13 +20,14 @@ #define __UENUM_H #include "unicode/utypes.h" -#include "unicode/localpointer.h" #if U_SHOW_CPLUSPLUS_API +#include "unicode/localpointer.h" + U_NAMESPACE_BEGIN class StringEnumeration; U_NAMESPACE_END -#endif +#endif // U_SHOW_CPLUSPLUS_API /** * \file @@ -49,7 +50,7 @@ typedef struct UEnumeration UEnumeration; * @param en UEnumeration structure pointer * @stable ICU 2.2 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uenum_close(UEnumeration* en); #if U_SHOW_CPLUSPLUS_API @@ -85,7 +86,7 @@ U_NAMESPACE_END * @return number of elements in the iterator * @stable ICU 2.2 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uenum_count(UEnumeration* en, UErrorCode* status); /** @@ -109,7 +110,7 @@ uenum_count(UEnumeration* en, UErrorCode* status); * traversed, returns NULL. * @stable ICU 2.2 */ -U_STABLE const UChar* U_EXPORT2 +U_CAPI const UChar* U_EXPORT2 uenum_unext(UEnumeration* en, int32_t* resultLength, UErrorCode* status); @@ -142,7 +143,7 @@ uenum_unext(UEnumeration* en, * traversed, returns NULL. * @stable ICU 2.2 */ -U_STABLE const char* U_EXPORT2 +U_CAPI const char* U_EXPORT2 uenum_next(UEnumeration* en, int32_t* resultLength, UErrorCode* status); @@ -156,7 +157,7 @@ uenum_next(UEnumeration* en, * the iterator is out of sync with its service. * @stable ICU 2.2 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uenum_reset(UEnumeration* en, UErrorCode* status); #if U_SHOW_CPLUSPLUS_API @@ -170,7 +171,7 @@ uenum_reset(UEnumeration* en, UErrorCode* status); * @return a UEnumeration wrapping the adopted StringEnumeration. * @stable ICU 4.2 */ -U_STABLE UEnumeration* U_EXPORT2 +U_CAPI UEnumeration* U_EXPORT2 uenum_openFromStringEnumeration(icu::StringEnumeration* adopted, UErrorCode* ec); #endif @@ -186,7 +187,7 @@ uenum_openFromStringEnumeration(icu::StringEnumeration* adopted, UErrorCode* ec) * @see uenum_close * @stable ICU 50 */ -U_STABLE UEnumeration* U_EXPORT2 +U_CAPI UEnumeration* U_EXPORT2 uenum_openUCharStringsEnumeration(const UChar* const strings[], int32_t count, UErrorCode* ec); @@ -201,7 +202,7 @@ uenum_openUCharStringsEnumeration(const UChar* const strings[], int32_t count, * @see uenum_close * @stable ICU 50 */ -U_STABLE UEnumeration* U_EXPORT2 +U_CAPI UEnumeration* U_EXPORT2 uenum_openCharStringsEnumeration(const char* const strings[], int32_t count, UErrorCode* ec); diff --git a/deps/icu-small/source/common/unicode/uidna.h b/deps/icu-small/source/common/unicode/uidna.h index cb79ba8545008e..1f75562555c3c2 100644 --- a/deps/icu-small/source/common/unicode/uidna.h +++ b/deps/icu-small/source/common/unicode/uidna.h @@ -23,9 +23,13 @@ #if !UCONFIG_NO_IDNA -#include "unicode/localpointer.h" +#include #include "unicode/parseerr.h" +#if U_SHOW_CPLUSPLUS_API +#include "unicode/localpointer.h" +#endif // U_SHOW_CPLUSPLUS_API + /** * \file * \brief C API: Internationalizing Domain Names in Applications (IDNA) @@ -138,7 +142,7 @@ typedef struct UIDNA UIDNA; /**< C typedef for struct UIDNA. @stable ICU 4.6 */ * @return the UTS #46 UIDNA instance, if successful * @stable ICU 4.6 */ -U_STABLE UIDNA * U_EXPORT2 +U_CAPI UIDNA * U_EXPORT2 uidna_openUTS46(uint32_t options, UErrorCode *pErrorCode); /** @@ -146,7 +150,7 @@ uidna_openUTS46(uint32_t options, UErrorCode *pErrorCode); * @param idna UIDNA instance to be closed * @stable ICU 4.6 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uidna_close(UIDNA *idna); #if U_SHOW_CPLUSPLUS_API @@ -182,7 +186,7 @@ typedef struct UIDNAInfo { /** sizeof(UIDNAInfo) @stable ICU 4.6 */ int16_t size; /** - * Set to TRUE if transitional and nontransitional processing produce different results. + * Set to true if transitional and nontransitional processing produce different results. * For details see C++ IDNAInfo::isTransitionalDifferent(). * @stable ICU 4.6 */ @@ -204,7 +208,7 @@ typedef struct UIDNAInfo { */ #define UIDNA_INFO_INITIALIZER { \ (int16_t)sizeof(UIDNAInfo), \ - FALSE, FALSE, \ + false, false, \ 0, 0, 0 } /** @@ -230,7 +234,7 @@ typedef struct UIDNAInfo { * @return destination string length * @stable ICU 4.6 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uidna_labelToASCII(const UIDNA *idna, const UChar *label, int32_t length, UChar *dest, int32_t capacity, @@ -257,7 +261,7 @@ uidna_labelToASCII(const UIDNA *idna, * @return destination string length * @stable ICU 4.6 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uidna_labelToUnicode(const UIDNA *idna, const UChar *label, int32_t length, UChar *dest, int32_t capacity, @@ -286,7 +290,7 @@ uidna_labelToUnicode(const UIDNA *idna, * @return destination string length * @stable ICU 4.6 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uidna_nameToASCII(const UIDNA *idna, const UChar *name, int32_t length, UChar *dest, int32_t capacity, @@ -313,7 +317,7 @@ uidna_nameToASCII(const UIDNA *idna, * @return destination string length * @stable ICU 4.6 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uidna_nameToUnicode(const UIDNA *idna, const UChar *name, int32_t length, UChar *dest, int32_t capacity, @@ -338,7 +342,7 @@ uidna_nameToUnicode(const UIDNA *idna, * @return destination string length * @stable ICU 4.6 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uidna_labelToASCII_UTF8(const UIDNA *idna, const char *label, int32_t length, char *dest, int32_t capacity, @@ -361,7 +365,7 @@ uidna_labelToASCII_UTF8(const UIDNA *idna, * @return destination string length * @stable ICU 4.6 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uidna_labelToUnicodeUTF8(const UIDNA *idna, const char *label, int32_t length, char *dest, int32_t capacity, @@ -384,7 +388,7 @@ uidna_labelToUnicodeUTF8(const UIDNA *idna, * @return destination string length * @stable ICU 4.6 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uidna_nameToASCII_UTF8(const UIDNA *idna, const char *name, int32_t length, char *dest, int32_t capacity, @@ -407,7 +411,7 @@ uidna_nameToASCII_UTF8(const UIDNA *idna, * @return destination string length * @stable ICU 4.6 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uidna_nameToUnicodeUTF8(const UIDNA *idna, const char *name, int32_t length, char *dest, int32_t capacity, diff --git a/deps/icu-small/source/common/unicode/uiter.h b/deps/icu-small/source/common/unicode/uiter.h index 3b8537204cecfa..7dbe1266668f24 100644 --- a/deps/icu-small/source/common/unicode/uiter.h +++ b/deps/icu-small/source/common/unicode/uiter.h @@ -492,7 +492,7 @@ struct UCharIterator { * @see UnicodeString::char32At() * @stable ICU 2.1 */ -U_STABLE UChar32 U_EXPORT2 +U_CAPI UChar32 U_EXPORT2 uiter_current32(UCharIterator *iter); /** @@ -509,7 +509,7 @@ uiter_current32(UCharIterator *iter); * @see U16_NEXT * @stable ICU 2.1 */ -U_STABLE UChar32 U_EXPORT2 +U_CAPI UChar32 U_EXPORT2 uiter_next32(UCharIterator *iter); /** @@ -526,7 +526,7 @@ uiter_next32(UCharIterator *iter); * @see U16_PREV * @stable ICU 2.1 */ -U_STABLE UChar32 U_EXPORT2 +U_CAPI UChar32 U_EXPORT2 uiter_previous32(UCharIterator *iter); /** @@ -547,7 +547,7 @@ uiter_previous32(UCharIterator *iter); * @see UITER_NO_STATE * @stable ICU 2.6 */ -U_STABLE uint32_t U_EXPORT2 +U_CAPI uint32_t U_EXPORT2 uiter_getState(const UCharIterator *iter); /** @@ -565,7 +565,7 @@ uiter_getState(const UCharIterator *iter); * @see UCharIteratorSetState * @stable ICU 2.6 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uiter_setState(UCharIterator *iter, uint32_t state, UErrorCode *pErrorCode); /** @@ -590,7 +590,7 @@ uiter_setState(UCharIterator *iter, uint32_t state, UErrorCode *pErrorCode); * @see UCharIterator * @stable ICU 2.1 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uiter_setString(UCharIterator *iter, const UChar *s, int32_t length); /** @@ -613,7 +613,7 @@ uiter_setString(UCharIterator *iter, const UChar *s, int32_t length); * @see uiter_setString * @stable ICU 2.6 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uiter_setUTF16BE(UCharIterator *iter, const char *s, int32_t length); /** @@ -649,7 +649,7 @@ uiter_setUTF16BE(UCharIterator *iter, const char *s, int32_t length); * @see UCharIterator * @stable ICU 2.6 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uiter_setUTF8(UCharIterator *iter, const char *s, int32_t length); #if U_SHOW_CPLUSPLUS_API @@ -674,7 +674,7 @@ uiter_setUTF8(UCharIterator *iter, const char *s, int32_t length); * @see UCharIterator * @stable ICU 2.1 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uiter_setCharacterIterator(UCharIterator *iter, icu::CharacterIterator *charIter); /** @@ -699,7 +699,7 @@ uiter_setCharacterIterator(UCharIterator *iter, icu::CharacterIterator *charIter * @see UCharIterator * @stable ICU 2.1 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uiter_setReplaceable(UCharIterator *iter, const icu::Replaceable *rep); #endif diff --git a/deps/icu-small/source/common/unicode/uldnames.h b/deps/icu-small/source/common/unicode/uldnames.h index 3a3c0a06573c36..10f0e91e5526e4 100644 --- a/deps/icu-small/source/common/unicode/uldnames.h +++ b/deps/icu-small/source/common/unicode/uldnames.h @@ -16,10 +16,13 @@ */ #include "unicode/utypes.h" -#include "unicode/localpointer.h" #include "unicode/uscript.h" #include "unicode/udisplaycontext.h" +#if U_SHOW_CPLUSPLUS_API +#include "unicode/localpointer.h" +#endif // U_SHOW_CPLUSPLUS_API + /** * Enum used in LocaleDisplayNames::createInstance. * @stable ICU 4.4 @@ -65,7 +68,7 @@ typedef struct ULocaleDisplayNames ULocaleDisplayNames; * @param pErrorCode the status code * @stable ICU 4.4 */ -U_STABLE ULocaleDisplayNames * U_EXPORT2 +U_CAPI ULocaleDisplayNames * U_EXPORT2 uldn_open(const char * locale, UDialectHandling dialectHandling, UErrorCode *pErrorCode); @@ -75,7 +78,7 @@ uldn_open(const char * locale, * @param ldn the ULocaleDisplayNames instance to be closed * @stable ICU 4.4 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uldn_close(ULocaleDisplayNames *ldn); #if U_SHOW_CPLUSPLUS_API @@ -106,7 +109,7 @@ U_NAMESPACE_END * @return the display locale * @stable ICU 4.4 */ -U_STABLE const char * U_EXPORT2 +U_CAPI const char * U_EXPORT2 uldn_getLocale(const ULocaleDisplayNames *ldn); /** @@ -115,7 +118,7 @@ uldn_getLocale(const ULocaleDisplayNames *ldn); * @return the dialect handling enum * @stable ICU 4.4 */ -U_STABLE UDialectHandling U_EXPORT2 +U_CAPI UDialectHandling U_EXPORT2 uldn_getDialectHandling(const ULocaleDisplayNames *ldn); /* names for entire locales */ @@ -131,7 +134,7 @@ uldn_getDialectHandling(const ULocaleDisplayNames *ldn); * greater than maxResultSize, the returned name will be truncated. * @stable ICU 4.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uldn_localeDisplayName(const ULocaleDisplayNames *ldn, const char *locale, UChar *result, @@ -151,7 +154,7 @@ uldn_localeDisplayName(const ULocaleDisplayNames *ldn, * greater than maxResultSize, the returned name will be truncated. * @stable ICU 4.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uldn_languageDisplayName(const ULocaleDisplayNames *ldn, const char *lang, UChar *result, @@ -169,7 +172,7 @@ uldn_languageDisplayName(const ULocaleDisplayNames *ldn, * greater than maxResultSize, the returned name will be truncated. * @stable ICU 4.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uldn_scriptDisplayName(const ULocaleDisplayNames *ldn, const char *script, UChar *result, @@ -187,7 +190,7 @@ uldn_scriptDisplayName(const ULocaleDisplayNames *ldn, * greater than maxResultSize, the returned name will be truncated. * @stable ICU 4.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uldn_scriptCodeDisplayName(const ULocaleDisplayNames *ldn, UScriptCode scriptCode, UChar *result, @@ -205,7 +208,7 @@ uldn_scriptCodeDisplayName(const ULocaleDisplayNames *ldn, * greater than maxResultSize, the returned name will be truncated. * @stable ICU 4.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uldn_regionDisplayName(const ULocaleDisplayNames *ldn, const char *region, UChar *result, @@ -223,7 +226,7 @@ uldn_regionDisplayName(const ULocaleDisplayNames *ldn, * greater than maxResultSize, the returned name will be truncated. * @stable ICU 4.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uldn_variantDisplayName(const ULocaleDisplayNames *ldn, const char *variant, UChar *result, @@ -241,7 +244,7 @@ uldn_variantDisplayName(const ULocaleDisplayNames *ldn, * greater than maxResultSize, the returned name will be truncated. * @stable ICU 4.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uldn_keyDisplayName(const ULocaleDisplayNames *ldn, const char *key, UChar *result, @@ -260,7 +263,7 @@ uldn_keyDisplayName(const ULocaleDisplayNames *ldn, * greater than maxResultSize, the returned name will be truncated. * @stable ICU 4.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uldn_keyValueDisplayName(const ULocaleDisplayNames *ldn, const char *key, const char *value, @@ -282,7 +285,7 @@ uldn_keyValueDisplayName(const ULocaleDisplayNames *ldn, * @return a ULocaleDisplayNames instance * @stable ICU 51 */ -U_STABLE ULocaleDisplayNames * U_EXPORT2 +U_CAPI ULocaleDisplayNames * U_EXPORT2 uldn_openForContext(const char * locale, UDisplayContext *contexts, int32_t length, UErrorCode *pErrorCode); @@ -296,7 +299,7 @@ uldn_openForContext(const char * locale, UDisplayContext *contexts, * @return the UDisplayContextValue for the specified type. * @stable ICU 51 */ -U_STABLE UDisplayContext U_EXPORT2 +U_CAPI UDisplayContext U_EXPORT2 uldn_getContext(const ULocaleDisplayNames *ldn, UDisplayContextType type, UErrorCode *pErrorCode); diff --git a/deps/icu-small/source/common/unicode/uloc.h b/deps/icu-small/source/common/unicode/uloc.h index a10ab526cec141..56fb4c9b3769e0 100644 --- a/deps/icu-small/source/common/unicode/uloc.h +++ b/deps/icu-small/source/common/unicode/uloc.h @@ -371,7 +371,7 @@ typedef enum { * @system * @stable ICU 2.0 */ -U_STABLE const char* U_EXPORT2 +U_CAPI const char* U_EXPORT2 uloc_getDefault(void); /** @@ -391,7 +391,7 @@ uloc_getDefault(void); * @system * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uloc_setDefault(const char* localeID, UErrorCode* status); #endif /* U_HIDE_SYSTEM_API */ @@ -408,7 +408,7 @@ uloc_setDefault(const char* localeID, * than languageCapacity, the returned language code will be truncated. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_getLanguage(const char* localeID, char* language, int32_t languageCapacity, @@ -426,7 +426,7 @@ uloc_getLanguage(const char* localeID, * than scriptCapacity, the returned language code will be truncated. * @stable ICU 2.8 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_getScript(const char* localeID, char* script, int32_t scriptCapacity, @@ -444,7 +444,7 @@ uloc_getScript(const char* localeID, * than countryCapacity, the returned country code will be truncated. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_getCountry(const char* localeID, char* country, int32_t countryCapacity, @@ -462,7 +462,7 @@ uloc_getCountry(const char* localeID, * than variantCapacity, the returned variant code will be truncated. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_getVariant(const char* localeID, char* variant, int32_t variantCapacity, @@ -485,7 +485,7 @@ uloc_getVariant(const char* localeID, * than nameCapacity, the returned full name will be truncated. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_getName(const char* localeID, char* name, int32_t nameCapacity, @@ -508,7 +508,7 @@ uloc_getName(const char* localeID, * than nameCapacity, the returned full name will be truncated. * @stable ICU 2.8 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_canonicalize(const char* localeID, char* name, int32_t nameCapacity, @@ -521,7 +521,7 @@ uloc_canonicalize(const char* localeID, * @return language the ISO language code for localeID * @stable ICU 2.0 */ -U_STABLE const char* U_EXPORT2 +U_CAPI const char* U_EXPORT2 uloc_getISO3Language(const char* localeID); @@ -532,7 +532,7 @@ uloc_getISO3Language(const char* localeID); * @return country the ISO country code for localeID * @stable ICU 2.0 */ -U_STABLE const char* U_EXPORT2 +U_CAPI const char* U_EXPORT2 uloc_getISO3Country(const char* localeID); /** @@ -546,26 +546,31 @@ uloc_getISO3Country(const char* localeID); * @return country the Win32 LCID for localeID * @stable ICU 2.0 */ -U_STABLE uint32_t U_EXPORT2 +U_CAPI uint32_t U_EXPORT2 uloc_getLCID(const char* localeID); /** * Gets the language name suitable for display for the specified locale. * * @param locale the locale to get the ISO language code with - * @param displayLocale Specifies the locale to be used to display the name. In other words, - * if the locale's language code is "en", passing Locale::getFrench() for - * inLocale would result in "Anglais", while passing Locale::getGerman() - * for inLocale would result in "Englisch". + * @param displayLocale Specifies the locale to be used to display the name. In + * other words, if the locale's language code is "en", passing + * Locale::getFrench() for inLocale would result in "Anglais", + * while passing Locale::getGerman() for inLocale would result + * in "Englisch". * @param language the displayable language code for localeID * @param languageCapacity the size of the language buffer to store the - * displayable language code with - * @param status error information if retrieving the displayable language code failed - * @return the actual buffer size needed for the displayable language code. If it's greater - * than languageCapacity, the returned language code will be truncated. + * displayable language code with. + * @param status error information if retrieving the displayable language code + * failed. U_USING_DEFAULT_WARNING indicates that no data was + * found from the locale resources and a case canonicalized + * language code is placed into language as fallback. + * @return the actual buffer size needed for the displayable language code. If + * it's greater than languageCapacity, the returned language + * code will be truncated. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_getDisplayLanguage(const char* locale, const char* displayLocale, UChar* language, @@ -575,20 +580,26 @@ uloc_getDisplayLanguage(const char* locale, /** * Gets the script name suitable for display for the specified locale. * - * @param locale the locale to get the displayable script code with. NULL may be used to specify the default. - * @param displayLocale Specifies the locale to be used to display the name. In other words, - * if the locale's language code is "en", passing Locale::getFrench() for - * inLocale would result in "", while passing Locale::getGerman() - * for inLocale would result in "". NULL may be used to specify the default. - * @param script the displayable script for the localeID - * @param scriptCapacity the size of the script buffer to store the - * displayable script code with - * @param status error information if retrieving the displayable script code failed - * @return the actual buffer size needed for the displayable script code. If it's greater - * than scriptCapacity, the returned displayable script code will be truncated. + * @param locale the locale to get the displayable script code with. NULL may be + * used to specify the default. + * @param displayLocale Specifies the locale to be used to display the name. In + * other words, if the locale's language code is "en", passing + * Locale::getFrench() for inLocale would result in "", while + * passing Locale::getGerman() for inLocale would result in "". + * NULL may be used to specify the default. + * @param script the displayable script for the localeID. + * @param scriptCapacity the size of the script buffer to store the displayable + * script code with. + * @param status error information if retrieving the displayable script code + * failed. U_USING_DEFAULT_WARNING indicates that no data was + * found from the locale resources and a case canonicalized + * script code is placed into script as fallback. + * @return the actual buffer size needed for the displayable script code. If + * it's greater than scriptCapacity, the returned displayable + * script code will be truncated. * @stable ICU 2.8 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_getDisplayScript(const char* locale, const char* displayLocale, UChar* script, @@ -597,23 +608,30 @@ uloc_getDisplayScript(const char* locale, /** * Gets the country name suitable for display for the specified locale. - * Warning: this is for the region part of a valid locale ID; it cannot just be the region code (like "FR"). - * To get the display name for a region alone, or for other options, use ULocaleDisplayNames instead. - * - * @param locale the locale to get the displayable country code with. NULL may be used to specify the default. - * @param displayLocale Specifies the locale to be used to display the name. In other words, - * if the locale's language code is "en", passing Locale::getFrench() for - * inLocale would result in "Anglais", while passing Locale::getGerman() - * for inLocale would result in "Englisch". NULL may be used to specify the default. - * @param country the displayable country code for localeID + * Warning: this is for the region part of a valid locale ID; it cannot just be + * the region code (like "FR"). To get the display name for a region alone, or + * for other options, use ULocaleDisplayNames instead. + * + * @param locale the locale to get the displayable country code with. NULL may + * be used to specify the default. + * @param displayLocale Specifies the locale to be used to display the name. In + * other words, if the locale's language code is "en", passing + * Locale::getFrench() for inLocale would result in "Anglais", + * while passing Locale::getGerman() for inLocale would result + * in "Englisch". NULL may be used to specify the default. + * @param country the displayable country code for localeID. * @param countryCapacity the size of the country buffer to store the - * displayable country code with - * @param status error information if retrieving the displayable country code failed - * @return the actual buffer size needed for the displayable country code. If it's greater - * than countryCapacity, the returned displayable country code will be truncated. + * displayable country code with. + * @param status error information if retrieving the displayable country code + * failed. U_USING_DEFAULT_WARNING indicates that no data was + * found from the locale resources and a case canonicalized + * country code is placed into country as fallback. + * @return the actual buffer size needed for the displayable country code. If + * it's greater than countryCapacity, the returned displayable + * country code will be truncated. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_getDisplayCountry(const char* locale, const char* displayLocale, UChar* country, @@ -624,20 +642,26 @@ uloc_getDisplayCountry(const char* locale, /** * Gets the variant name suitable for display for the specified locale. * - * @param locale the locale to get the displayable variant code with. NULL may be used to specify the default. - * @param displayLocale Specifies the locale to be used to display the name. In other words, - * if the locale's language code is "en", passing Locale::getFrench() for - * inLocale would result in "Anglais", while passing Locale::getGerman() - * for inLocale would result in "Englisch". NULL may be used to specify the default. - * @param variant the displayable variant code for localeID + * @param locale the locale to get the displayable variant code with. NULL may + * be used to specify the default. + * @param displayLocale Specifies the locale to be used to display the name. In + * other words, if the locale's language code is "en", passing + * Locale::getFrench() for inLocale would result in "Anglais", + * while passing Locale::getGerman() for inLocale would result + * in "Englisch". NULL may be used to specify the default. + * @param variant the displayable variant code for localeID. * @param variantCapacity the size of the variant buffer to store the - * displayable variant code with - * @param status error information if retrieving the displayable variant code failed - * @return the actual buffer size needed for the displayable variant code. If it's greater - * than variantCapacity, the returned displayable variant code will be truncated. + * displayable variant code with. + * @param status error information if retrieving the displayable variant code + * failed. U_USING_DEFAULT_WARNING indicates that no data was + * found from the locale resources and a case canonicalized + * variant code is placed into variant as fallback. + * @return the actual buffer size needed for the displayable variant code. If + * it's greater than variantCapacity, the returned displayable + * variant code will be truncated. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_getDisplayVariant(const char* locale, const char* displayLocale, UChar* variant, @@ -645,8 +669,8 @@ uloc_getDisplayVariant(const char* locale, UErrorCode* status); /** - * Gets the keyword name suitable for display for the specified locale. - * E.g: for the locale string de_DE\@collation=PHONEBOOK, this API gets the display + * Gets the keyword name suitable for display for the specified locale. E.g: + * for the locale string de_DE\@collation=PHONEBOOK, this API gets the display * string for the keyword collation. * Usage: * @@ -680,11 +704,13 @@ uloc_getDisplayVariant(const char* locale, * result without writing any of the result string (pre-flighting). * @param status error information if retrieving the displayable string failed. * Should not be NULL and should not indicate failure on entry. + * U_USING_DEFAULT_WARNING indicates that no data was found from the locale + * resources and the keyword is placed into dest as fallback. * @return the actual buffer size needed for the displayable variant code. * @see #uloc_openKeywords * @stable ICU 2.8 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_getDisplayKeyword(const char* keyword, const char* displayLocale, UChar* dest, @@ -707,10 +733,12 @@ uloc_getDisplayKeyword(const char* keyword, * result without writing any of the result string (pre-flighting). * @param status error information if retrieving the displayable string failed. * Should not be NULL and must not indicate failure on entry. + * U_USING_DEFAULT_WARNING indicates that no data was found from the locale + * resources and the value of the keyword is placed into dest as fallback. * @return the actual buffer size needed for the displayable variant code. * @stable ICU 2.8 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_getDisplayKeywordValue( const char* locale, const char* keyword, const char* displayLocale, @@ -733,7 +761,7 @@ uloc_getDisplayKeywordValue( const char* locale, * than maxResultSize, the returned displayable name will be truncated. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_getDisplayName(const char* localeID, const char* inLocaleID, UChar* result, @@ -757,7 +785,7 @@ uloc_getDisplayName(const char* localeID, * @return a specified locale name of all available locales * @stable ICU 2.0 */ -U_STABLE const char* U_EXPORT2 +U_CAPI const char* U_EXPORT2 uloc_getAvailable(int32_t n); /** @@ -766,21 +794,19 @@ uloc_getAvailable(int32_t n); * @return the size of the locale list * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 uloc_countAvailable(void); - -#ifndef U_HIDE_DRAFT_API +U_CAPI int32_t U_EXPORT2 uloc_countAvailable(void); /** * Types for uloc_getAvailableByType and uloc_countAvailableByType. * - * @draft ICU 65 + * @stable ICU 65 */ typedef enum ULocAvailableType { /** * Locales that return data when passed to ICU APIs, * but not including legacy or alias locales. * - * @draft ICU 65 + * @stable ICU 65 */ ULOC_AVAILABLE_DEFAULT, @@ -798,7 +824,7 @@ typedef enum ULocAvailableType { * ULOC_AVAILABLE_DEFAULT. To get both sets at the same time, use * ULOC_AVAILABLE_WITH_LEGACY_ALIASES. * - * @draft ICU 65 + * @stable ICU 65 */ ULOC_AVAILABLE_ONLY_LEGACY_ALIASES, @@ -806,7 +832,7 @@ typedef enum ULocAvailableType { * The union of the locales in ULOC_AVAILABLE_DEFAULT and * ULOC_AVAILABLE_ONLY_LEGACY_ALIAS. * - * @draft ICU 65 + * @stable ICU 65 */ ULOC_AVAILABLE_WITH_LEGACY_ALIASES, @@ -827,13 +853,11 @@ typedef enum ULocAvailableType { * @param type Type choice from ULocAvailableType. * @param status Set if an error occurred. * @return a UEnumeration owned by the caller, or nullptr on failure. - * @draft ICU 65 + * @stable ICU 65 */ -U_DRAFT UEnumeration* U_EXPORT2 +U_CAPI UEnumeration* U_EXPORT2 uloc_openAvailableByType(ULocAvailableType type, UErrorCode* status); -#endif // U_HIDE_DRAFT_API - /** * * Gets a list of all available 2-letter language codes defined in ISO 639, @@ -845,7 +869,7 @@ uloc_openAvailableByType(ULocAvailableType type, UErrorCode* status); * @return a list of all available language codes * @stable ICU 2.0 */ -U_STABLE const char* const* U_EXPORT2 +U_CAPI const char* const* U_EXPORT2 uloc_getISOLanguages(void); /** @@ -857,7 +881,7 @@ uloc_getISOLanguages(void); * @return a list of all available country codes * @stable ICU 2.0 */ -U_STABLE const char* const* U_EXPORT2 +U_CAPI const char* const* U_EXPORT2 uloc_getISOCountries(void); /** @@ -873,7 +897,7 @@ uloc_getISOCountries(void); * @return The length of the parent locale ID. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_getParent(const char* localeID, char* parent, int32_t parentCapacity, @@ -904,7 +928,7 @@ uloc_getParent(const char* localeID, * than nameCapacity, the returned full name will be truncated. * @stable ICU 2.8 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_getBaseName(const char* localeID, char* name, int32_t nameCapacity, @@ -919,7 +943,7 @@ uloc_getBaseName(const char* localeID, * @return enumeration of keywords or NULL if there are no keywords. * @stable ICU 2.8 */ -U_STABLE UEnumeration* U_EXPORT2 +U_CAPI UEnumeration* U_EXPORT2 uloc_openKeywords(const char* localeID, UErrorCode* status); @@ -936,7 +960,7 @@ uloc_openKeywords(const char* localeID, * @return the length of keyword value * @stable ICU 2.8 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_getKeywordValue(const char* localeID, const char* keywordName, char* buffer, int32_t bufferCapacity, @@ -973,7 +997,7 @@ uloc_getKeywordValue(const char* localeID, * @see uloc_getKeywordValue * @stable ICU 3.2 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_setKeywordValue(const char* keywordName, const char* keywordValue, char* buffer, int32_t bufferCapacity, @@ -982,18 +1006,18 @@ uloc_setKeywordValue(const char* keywordName, /** * Returns whether the locale's script is written right-to-left. * If there is no script subtag, then the likely script is used, see uloc_addLikelySubtags(). - * If no likely script is known, then FALSE is returned. + * If no likely script is known, then false is returned. * * A script is right-to-left according to the CLDR script metadata * which corresponds to whether the script's letters have Bidi_Class=R or AL. * - * Returns TRUE for "ar" and "en-Hebr", FALSE for "zh" and "fa-Cyrl". + * Returns true for "ar" and "en-Hebr", false for "zh" and "fa-Cyrl". * * @param locale input locale ID - * @return TRUE if the locale's script is written right-to-left + * @return true if the locale's script is written right-to-left * @stable ICU 54 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uloc_isRightToLeft(const char *locale); /** @@ -1017,7 +1041,7 @@ typedef enum { * @return an enum indicating the layout orientation for characters. * @stable ICU 4.0 */ -U_STABLE ULayoutType U_EXPORT2 +U_CAPI ULayoutType U_EXPORT2 uloc_getCharacterOrientation(const char* localeId, UErrorCode *status); @@ -1029,7 +1053,7 @@ uloc_getCharacterOrientation(const char* localeId, * @return an enum indicating the layout orientation for lines. * @stable ICU 4.0 */ -U_STABLE ULayoutType U_EXPORT2 +U_CAPI ULayoutType U_EXPORT2 uloc_getLineOrientation(const char* localeId, UErrorCode *status); @@ -1076,7 +1100,7 @@ typedef enum { * @return length needed for the locale. * @stable ICU 3.2 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, UAcceptResult *outResult, const char *httpAcceptLanguage, @@ -1101,7 +1125,7 @@ uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, * @return length needed for the locale. * @stable ICU 3.2 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_acceptLanguage(char *result, int32_t resultAvailable, UAcceptResult *outResult, const char **acceptList, int32_t acceptListCount, @@ -1121,7 +1145,7 @@ uloc_acceptLanguage(char *result, int32_t resultAvailable, * @return actual the actual size of the locale ID, not including NUL-termination * @stable ICU 3.8 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_getLocaleForLCID(uint32_t hostID, char *locale, int32_t localeCapacity, UErrorCode *status); @@ -1159,7 +1183,7 @@ uloc_getLocaleForLCID(uint32_t hostID, char *locale, int32_t localeCapacity, * On error, the return value is -1. * @stable ICU 4.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_addLikelySubtags(const char* localeID, char* maximizedLocaleID, int32_t maximizedLocaleIDCapacity, @@ -1199,7 +1223,7 @@ uloc_addLikelySubtags(const char* localeID, * On error, the return value is -1. * @stable ICU 4.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_minimizeSubtags(const char* localeID, char* minimizedLocaleID, int32_t minimizedLocaleIDCapacity, @@ -1210,13 +1234,17 @@ uloc_minimizeSubtags(const char* localeID, * If the specified language tag contains any ill-formed subtags, * the first such subtag and all following subtags are ignored. *

    - * This implements the 'Language-Tag' production of BCP47, and so - * supports grandfathered (regular and irregular) as well as private - * use language tags. Private use tags are represented as 'x-whatever', - * and grandfathered tags are converted to their canonical replacements - * where they exist. Note that a few grandfathered tags have no modern - * replacement, these will be converted using the fallback described in + * This implements the 'Language-Tag' production of BCP 47, and so + * supports legacy language tags (marked as “Type: grandfathered” in BCP 47) + * (regular and irregular) as well as private use language tags. + * + * Private use tags are represented as 'x-whatever', + * and legacy tags are converted to their canonical replacements where they exist. + * + * Note that a few legacy tags have no modern replacement; + * these will be converted using the fallback described in * the first paragraph, so some information might be lost. + * * @param langtag the input BCP47 language tag. * @param localeID the output buffer receiving a locale ID for the * specified BCP47 language tag. @@ -1228,7 +1256,7 @@ uloc_minimizeSubtags(const char* localeID, * @return the length of the locale ID. * @stable ICU 4.2 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_forLanguageTag(const char* langtag, char* localeID, int32_t localeIDCapacity, @@ -1238,10 +1266,10 @@ uloc_forLanguageTag(const char* langtag, /** * Returns a well-formed language tag for this locale ID. *

    - * Note: When strict is FALSE, any locale + * Note: When strict is false, any locale * fields which do not satisfy the BCP47 syntax requirement will * be omitted from the result. When strict is - * TRUE, this function sets U_ILLEGAL_ARGUMENT_ERROR to the + * true, this function sets U_ILLEGAL_ARGUMENT_ERROR to the * err if any locale fields do not satisfy the * BCP47 syntax requirement. * @param localeID the input locale ID @@ -1256,7 +1284,7 @@ uloc_forLanguageTag(const char* langtag, * @return The length of the BCP47 language tag. * @stable ICU 4.2 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uloc_toLanguageTag(const char* localeID, char* langtag, int32_t langtagCapacity, @@ -1284,7 +1312,7 @@ uloc_toLanguageTag(const char* localeID, * @see uloc_toLegacyKey * @stable ICU 54 */ -U_STABLE const char* U_EXPORT2 +U_CAPI const char* U_EXPORT2 uloc_toUnicodeLocaleKey(const char* keyword); /** @@ -1315,7 +1343,7 @@ uloc_toUnicodeLocaleKey(const char* keyword); * @see uloc_toLegacyType * @stable ICU 54 */ -U_STABLE const char* U_EXPORT2 +U_CAPI const char* U_EXPORT2 uloc_toUnicodeLocaleType(const char* keyword, const char* value); /** @@ -1330,7 +1358,7 @@ uloc_toUnicodeLocaleType(const char* keyword, const char* value); * @see toUnicodeLocaleKey * @stable ICU 54 */ -U_STABLE const char* U_EXPORT2 +U_CAPI const char* U_EXPORT2 uloc_toLegacyKey(const char* keyword); /** @@ -1359,7 +1387,7 @@ uloc_toLegacyKey(const char* keyword); * @see toUnicodeLocaleType * @stable ICU 54 */ -U_STABLE const char* U_EXPORT2 +U_CAPI const char* U_EXPORT2 uloc_toLegacyType(const char* keyword, const char* value); #endif /*_ULOC*/ diff --git a/deps/icu-small/source/common/unicode/umachine.h b/deps/icu-small/source/common/unicode/umachine.h index ff5deb8d01786a..219d1ee1911d02 100644 --- a/deps/icu-small/source/common/unicode/umachine.h +++ b/deps/icu-small/source/common/unicode/umachine.h @@ -49,12 +49,13 @@ * ANSI C headers: * stddef.h defines wchar_t */ +#include #include /*==========================================================================*/ -/* For C wrappers, we use the symbol U_STABLE. */ +/* For C wrappers, we use the symbol U_CAPI. */ /* This works properly if the includer is C or C++. */ -/* Functions are declared U_STABLE return-type U_EXPORT2 function-name()... */ +/* Functions are declared U_CAPI return-type U_EXPORT2 function-name()... */ /*==========================================================================*/ /** @@ -107,15 +108,15 @@ /** This is used to declare a function as a public ICU C API @stable ICU 2.0*/ #define U_CAPI U_CFUNC U_EXPORT -/** This is used to declare a function as a stable public ICU C API*/ +/** Obsolete/same as U_CAPI; was used to declare a function as a stable public ICU C API*/ #define U_STABLE U_CAPI -/** This is used to declare a function as a draft public ICU C API */ +/** Obsolete/same as U_CAPI; was used to declare a function as a draft public ICU C API */ #define U_DRAFT U_CAPI /** This is used to declare a function as a deprecated public ICU C API */ #define U_DEPRECATED U_CAPI U_ATTRIBUTE_DEPRECATED -/** This is used to declare a function as an obsolete public ICU C API */ +/** Obsolete/same as U_CAPI; was used to declare a function as an obsolete public ICU C API */ #define U_OBSOLETE U_CAPI -/** This is used to declare a function as an internal ICU C API */ +/** Obsolete/same as U_CAPI; was used to declare a function as an internal ICU C API */ #define U_INTERNAL U_CAPI /** @@ -170,11 +171,11 @@ /** * \def UPRV_BLOCK_MACRO_END - * Defined as "while (FALSE)" by default. + * Defined as "while (false)" by default. * @internal */ #ifndef UPRV_BLOCK_MACRO_END -#define UPRV_BLOCK_MACRO_END while (FALSE) +#define UPRV_BLOCK_MACRO_END while (false) #endif /*==========================================================================*/ @@ -257,18 +258,59 @@ /* Boolean data type */ /*==========================================================================*/ -/** The ICU boolean type @stable ICU 2.0 */ +/** + * The ICU boolean type, a signed-byte integer. + * ICU-specific for historical reasons: The C and C++ standards used to not define type bool. + * Also provides a fixed type definition, as opposed to + * type bool whose details (e.g., sizeof) may vary by compiler and between C and C++. + * + * @stable ICU 2.0 + */ typedef int8_t UBool; +/** + * \def U_DEFINE_FALSE_AND_TRUE + * Normally turns off defining macros FALSE=0 & TRUE=1 in public ICU headers. + * These obsolete macros sometimes break compilation of other code that + * defines enum constants or similar with these names. + * C++ has long defined bool/false/true. + * C99 also added definitions for these, although as macros; see stdbool.h. + * + * You may transitionally define U_DEFINE_FALSE_AND_TRUE=1 if you need time to migrate code. + * + * @internal ICU 68 + */ +#ifdef U_DEFINE_FALSE_AND_TRUE + // Use the predefined value. +#elif defined(U_COMBINED_IMPLEMENTATION) || \ + defined(U_COMMON_IMPLEMENTATION) || defined(U_I18N_IMPLEMENTATION) || \ + defined(U_IO_IMPLEMENTATION) || defined(U_LAYOUTEX_IMPLEMENTATION) || \ + defined(U_TOOLUTIL_IMPLEMENTATION) + // Inside ICU: Keep FALSE & TRUE available. +# define U_DEFINE_FALSE_AND_TRUE 1 +#else + // Outside ICU: Avoid collision with non-macro definitions of FALSE & TRUE. +# define U_DEFINE_FALSE_AND_TRUE 0 +#endif + +#if U_DEFINE_FALSE_AND_TRUE || defined(U_IN_DOXYGEN) #ifndef TRUE -/** The TRUE value of a UBool @stable ICU 2.0 */ +/** + * The TRUE value of a UBool. + * + * @deprecated ICU 68 Use standard "true" instead. + */ # define TRUE 1 #endif #ifndef FALSE -/** The FALSE value of a UBool @stable ICU 2.0 */ +/** + * The FALSE value of a UBool. + * + * @deprecated ICU 68 Use standard "false" instead. + */ # define FALSE 0 #endif - +#endif // U_DEFINE_FALSE_AND_TRUE /*==========================================================================*/ /* Unicode data types */ diff --git a/deps/icu-small/source/common/unicode/umutablecptrie.h b/deps/icu-small/source/common/unicode/umutablecptrie.h index f2af36477d5300..5325d58147ab1f 100644 --- a/deps/icu-small/source/common/unicode/umutablecptrie.h +++ b/deps/icu-small/source/common/unicode/umutablecptrie.h @@ -9,11 +9,14 @@ #include "unicode/utypes.h" -#include "unicode/localpointer.h" #include "unicode/ucpmap.h" #include "unicode/ucptrie.h" #include "unicode/utf8.h" +#if U_SHOW_CPLUSPLUS_API +#include "unicode/localpointer.h" +#endif // U_SHOW_CPLUSPLUS_API + U_CDECL_BEGIN /** diff --git a/deps/icu-small/source/common/unicode/unimatch.h b/deps/icu-small/source/common/unicode/unimatch.h index 2d3c5210c38e25..10efd3d007a5ca 100644 --- a/deps/icu-small/source/common/unicode/unimatch.h +++ b/deps/icu-small/source/common/unicode/unimatch.h @@ -115,11 +115,11 @@ class U_COMMON_API UnicodeMatcher /* not : public UObject because this is an int * considered for matching will be text.charAt(limit-1) in the * forward direction or text.charAt(limit+1) in the backward * direction. - * @param incremental if TRUE, then assume further characters may + * @param incremental if true, then assume further characters may * be inserted at limit and check for partial matching. Otherwise * assume the text as given is complete. * @return a match degree value indicating a full match, a partial - * match, or a mismatch. If incremental is FALSE then + * match, or a mismatch. If incremental is false then * U_PARTIAL_MATCH should never be returned. * @stable ICU 2.4 */ @@ -134,17 +134,17 @@ class U_COMMON_API UnicodeMatcher /* not : public UObject because this is an int * will produce another matcher that is equal to this one. * @param result the string to receive the pattern. Previous * contents will be deleted. - * @param escapeUnprintable if TRUE then convert unprintable + * @param escapeUnprintable if true then convert unprintable * character to their hex escape representations, \\uxxxx or * \\Uxxxxxxxx. Unprintable characters are those other than * U+000A, U+0020..U+007E. * @stable ICU 2.4 */ virtual UnicodeString& toPattern(UnicodeString& result, - UBool escapeUnprintable = FALSE) const = 0; + UBool escapeUnprintable = false) const = 0; /** - * Returns TRUE if this matcher will match a character c, where c + * Returns true if this matcher will match a character c, where c * & 0xFF == v, at offset, in the forward direction (with limit > * offset). This is used by RuleBasedTransliterator for * indexing. diff --git a/deps/icu-small/source/common/unicode/uniset.h b/deps/icu-small/source/common/unicode/uniset.h index 18cc9376442a2f..4179507af18e6f 100644 --- a/deps/icu-small/source/common/unicode/uniset.h +++ b/deps/icu-small/source/common/unicode/uniset.h @@ -325,7 +325,7 @@ class U_COMMON_API UnicodeSet U_FINAL : public UnicodeFilter { * A bogus set has no value. It is different from an empty set. * It can be used to indicate that no set value is available. * - * @return TRUE if the set is bogus/invalid, FALSE otherwise + * @return true if the set is bogus/invalid, false otherwise * @see setToBogus() * @stable ICU 4.0 */ @@ -333,7 +333,7 @@ class U_COMMON_API UnicodeSet U_FINAL : public UnicodeFilter { /** * Make this UnicodeSet object invalid. - * The string will test TRUE with isBogus(). + * The string will test true with isBogus(). * * A bogus set has no value. It is different from an empty set. * It can be used to indicate that no set value is available. @@ -563,7 +563,7 @@ class U_COMMON_API UnicodeSet U_FINAL : public UnicodeFilter { /** * Determines whether the set has been frozen (made immutable) or not. * See the ICU4J Freezable interface for details. - * @return TRUE/FALSE for whether the set has been frozen + * @return true/false for whether the set has been frozen * @see freeze * @see cloneAsThawed * @stable ICU 3.8 @@ -700,14 +700,14 @@ class U_COMMON_API UnicodeSet U_FINAL : public UnicodeFilter { * A frozen set will not be modified. * @param result the string to receive the rules. Previous * contents will be deleted. - * @param escapeUnprintable if TRUE then convert unprintable + * @param escapeUnprintable if true then convert unprintable * character to their hex escape representations, \\uxxxx or * \\Uxxxxxxxx. Unprintable characters are those other than * U+000A, U+0020..U+007E. * @stable ICU 2.0 */ virtual UnicodeString& toPattern(UnicodeString& result, - UBool escapeUnprintable = FALSE) const; + UBool escapeUnprintable = false) const; /** * Modifies this set to contain those code points which have the given value @@ -1636,7 +1636,7 @@ class U_COMMON_API UnicodeSet U_FINAL : public UnicodeFilter { static const UnicodeSet* getInclusions(int32_t src, UErrorCode &status); /** - * A filter that returns TRUE if the given code point should be + * A filter that returns true if the given code point should be * included in the UnicodeSet being constructed. */ typedef UBool (*Filter)(UChar32 codePoint, void* context); diff --git a/deps/icu-small/source/common/unicode/unistr.h b/deps/icu-small/source/common/unicode/unistr.h index da79053765acf6..456389f265fea0 100644 --- a/deps/icu-small/source/common/unicode/unistr.h +++ b/deps/icu-small/source/common/unicode/unistr.h @@ -45,7 +45,7 @@ struct UConverter; // unicode/ucnv.h /** * \ingroup ustring_ustrlen */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_strlen(const UChar *s); #endif @@ -113,9 +113,9 @@ class UnicodeStringAppendable; // unicode/appendable.h * @stable ICU 2.0 */ #if !U_CHAR16_IS_TYPEDEF -# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, u ## cs, _length) +# define UNICODE_STRING(cs, _length) icu::UnicodeString(true, u ## cs, _length) #else -# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, (const char16_t*)u ## cs, _length) +# define UNICODE_STRING(cs, _length) icu::UnicodeString(true, (const char16_t*)u ## cs, _length) #endif /** @@ -227,7 +227,7 @@ class UnicodeStringAppendable; // unicode/appendable.h * The UnicodeString class is not suitable for subclassing. * * For an overview of Unicode strings in C and C++ see the - * [User Guide Strings chapter](http://userguide.icu-project.org/strings#TOC-Strings-in-C-C-). + * [User Guide Strings chapter](https://unicode-org.github.io/icu/userguide/strings#strings-in-cc). * * In ICU, a Unicode string consists of 16-bit Unicode *code units*. * A Unicode character may be stored with either one code unit @@ -285,7 +285,7 @@ class UnicodeStringAppendable; // unicode/appendable.h * significant performance improvements. * Also, the internal buffer is accessible via special functions. * For details see the - * [User Guide Strings chapter](http://userguide.icu-project.org/strings#TOC-Maximizing-Performance-with-the-UnicodeString-Storage-Model). + * [User Guide Strings chapter](https://unicode-org.github.io/icu/userguide/strings#maximizing-performance-with-the-unicodestring-storage-model). * * @see utf.h * @see CharacterIterator @@ -320,8 +320,8 @@ class U_COMMON_API UnicodeString : public Replaceable /** * Equality operator. Performs only bitwise comparison. * @param text The UnicodeString to compare to this one. - * @return TRUE if `text` contains the same characters as this one, - * FALSE otherwise. + * @return true if `text` contains the same characters as this one, + * false otherwise. * @stable ICU 2.0 */ inline UBool operator== (const UnicodeString& text) const; @@ -329,8 +329,8 @@ class U_COMMON_API UnicodeString : public Replaceable /** * Inequality operator. Performs only bitwise comparison. * @param text The UnicodeString to compare to this one. - * @return FALSE if `text` contains the same characters as this one, - * TRUE otherwise. + * @return false if `text` contains the same characters as this one, + * true otherwise. * @stable ICU 2.0 */ inline UBool operator!= (const UnicodeString& text) const; @@ -338,8 +338,8 @@ class U_COMMON_API UnicodeString : public Replaceable /** * Greater than operator. Performs only bitwise comparison. * @param text The UnicodeString to compare to this one. - * @return TRUE if the characters in this are bitwise - * greater than the characters in `text`, FALSE otherwise + * @return true if the characters in this are bitwise + * greater than the characters in `text`, false otherwise * @stable ICU 2.0 */ inline UBool operator> (const UnicodeString& text) const; @@ -347,8 +347,8 @@ class U_COMMON_API UnicodeString : public Replaceable /** * Less than operator. Performs only bitwise comparison. * @param text The UnicodeString to compare to this one. - * @return TRUE if the characters in this are bitwise - * less than the characters in `text`, FALSE otherwise + * @return true if the characters in this are bitwise + * less than the characters in `text`, false otherwise * @stable ICU 2.0 */ inline UBool operator< (const UnicodeString& text) const; @@ -356,8 +356,8 @@ class U_COMMON_API UnicodeString : public Replaceable /** * Greater than or equal operator. Performs only bitwise comparison. * @param text The UnicodeString to compare to this one. - * @return TRUE if the characters in this are bitwise - * greater than or equal to the characters in `text`, FALSE otherwise + * @return true if the characters in this are bitwise + * greater than or equal to the characters in `text`, false otherwise * @stable ICU 2.0 */ inline UBool operator>= (const UnicodeString& text) const; @@ -365,8 +365,8 @@ class U_COMMON_API UnicodeString : public Replaceable /** * Less than or equal operator. Performs only bitwise comparison. * @param text The UnicodeString to compare to this one. - * @return TRUE if the characters in this are bitwise - * less than or equal to the characters in `text`, FALSE otherwise + * @return true if the characters in this are bitwise + * less than or equal to the characters in `text`, false otherwise * @stable ICU 2.0 */ inline UBool operator<= (const UnicodeString& text) const; @@ -855,8 +855,8 @@ class U_COMMON_API UnicodeString : public Replaceable /** * Determine if this starts with the characters in `text` * @param text The text to match. - * @return TRUE if this starts with the characters in `text`, - * FALSE otherwise + * @return true if this starts with the characters in `text`, + * false otherwise * @stable ICU 2.0 */ inline UBool startsWith(const UnicodeString& text) const; @@ -867,8 +867,8 @@ class U_COMMON_API UnicodeString : public Replaceable * @param srcText The text to match. * @param srcStart the offset into `srcText` to start matching * @param srcLength the number of characters in `srcText` to match - * @return TRUE if this starts with the characters in `text`, - * FALSE otherwise + * @return true if this starts with the characters in `text`, + * false otherwise * @stable ICU 2.0 */ inline UBool startsWith(const UnicodeString& srcText, @@ -879,8 +879,8 @@ class U_COMMON_API UnicodeString : public Replaceable * Determine if this starts with the characters in `srcChars` * @param srcChars The characters to match. * @param srcLength the number of characters in `srcChars` - * @return TRUE if this starts with the characters in `srcChars`, - * FALSE otherwise + * @return true if this starts with the characters in `srcChars`, + * false otherwise * @stable ICU 2.0 */ inline UBool startsWith(ConstChar16Ptr srcChars, @@ -892,7 +892,7 @@ class U_COMMON_API UnicodeString : public Replaceable * @param srcChars The characters to match. * @param srcStart the offset into `srcText` to start matching * @param srcLength the number of characters in `srcChars` to match - * @return TRUE if this ends with the characters in `srcChars`, FALSE otherwise + * @return true if this ends with the characters in `srcChars`, false otherwise * @stable ICU 2.0 */ inline UBool startsWith(const char16_t *srcChars, @@ -902,8 +902,8 @@ class U_COMMON_API UnicodeString : public Replaceable /** * Determine if this ends with the characters in `text` * @param text The text to match. - * @return TRUE if this ends with the characters in `text`, - * FALSE otherwise + * @return true if this ends with the characters in `text`, + * false otherwise * @stable ICU 2.0 */ inline UBool endsWith(const UnicodeString& text) const; @@ -914,8 +914,8 @@ class U_COMMON_API UnicodeString : public Replaceable * @param srcText The text to match. * @param srcStart the offset into `srcText` to start matching * @param srcLength the number of characters in `srcText` to match - * @return TRUE if this ends with the characters in `text`, - * FALSE otherwise + * @return true if this ends with the characters in `text`, + * false otherwise * @stable ICU 2.0 */ inline UBool endsWith(const UnicodeString& srcText, @@ -926,8 +926,8 @@ class U_COMMON_API UnicodeString : public Replaceable * Determine if this ends with the characters in `srcChars` * @param srcChars The characters to match. * @param srcLength the number of characters in `srcChars` - * @return TRUE if this ends with the characters in `srcChars`, - * FALSE otherwise + * @return true if this ends with the characters in `srcChars`, + * false otherwise * @stable ICU 2.0 */ inline UBool endsWith(ConstChar16Ptr srcChars, @@ -939,8 +939,8 @@ class U_COMMON_API UnicodeString : public Replaceable * @param srcChars The characters to match. * @param srcStart the offset into `srcText` to start matching * @param srcLength the number of characters in `srcChars` to match - * @return TRUE if this ends with the characters in `srcChars`, - * FALSE otherwise + * @return true if this ends with the characters in `srcChars`, + * false otherwise * @stable ICU 2.0 */ inline UBool endsWith(const char16_t *srcChars, @@ -1804,7 +1804,7 @@ class U_COMMON_API UnicodeString : public Replaceable /** * Determine if this string is empty. - * @return TRUE if this string contains 0 characters, FALSE otherwise. + * @return true if this string contains 0 characters, false otherwise. * @stable ICU 2.0 */ inline UBool isEmpty(void) const; @@ -1832,12 +1832,12 @@ class U_COMMON_API UnicodeString : public Replaceable /** * Determine if this object contains a valid string. * A bogus string has no value. It is different from an empty string, - * although in both cases isEmpty() returns TRUE and length() returns 0. + * although in both cases isEmpty() returns true and length() returns 0. * setToBogus() and isBogus() can be used to indicate that no string value is available. * For a bogus string, getBuffer() and getTerminatedBuffer() return NULL, and * length() returns 0. * - * @return TRUE if the string is bogus/invalid, FALSE otherwise + * @return true if the string is bogus/invalid, false otherwise * @see setToBogus() * @stable ICU 2.0 */ @@ -2067,7 +2067,7 @@ class U_COMMON_API UnicodeString : public Replaceable /** * Make this UnicodeString object invalid. - * The string will test TRUE with isBogus(). + * The string will test true with isBogus(). * * A bogus string has no value. It is different from an empty string. * It can be used to indicate that no string value is available. @@ -2459,7 +2459,7 @@ class U_COMMON_API UnicodeString : public Replaceable /** * Replaceable API - * @return TRUE if it has MetaData + * @return true if it has MetaData * @stable ICU 2.4 */ virtual UBool hasMetaData() const; @@ -2590,7 +2590,7 @@ class U_COMMON_API UnicodeString : public Replaceable * @param targetLength the desired length of the string * @param padChar the character to use for padding. Defaults to * space (U+0020) - * @return TRUE if the text was padded, FALSE otherwise. + * @return true if the text was padded, false otherwise. * @stable ICU 2.0 */ UBool padLeading(int32_t targetLength, @@ -2604,7 +2604,7 @@ class U_COMMON_API UnicodeString : public Replaceable * @param targetLength the desired length of the string * @param padChar the character to use for padding. Defaults to * space (U+0020) - * @return TRUE if the text was padded, FALSE otherwise. + * @return true if the text was padded, false otherwise. * @stable ICU 2.0 */ UBool padTrailing(int32_t targetLength, @@ -2613,7 +2613,7 @@ class U_COMMON_API UnicodeString : public Replaceable /** * Truncate this UnicodeString to the `targetLength`. * @param targetLength the desired length of this UnicodeString. - * @return TRUE if the text was truncated, FALSE otherwise + * @return true if the text was truncated, false otherwise * @stable ICU 2.0 */ inline UBool truncate(int32_t targetLength); @@ -3615,7 +3615,7 @@ class U_COMMON_API UnicodeString : public Replaceable void unBogus(); // implements assigment operator, copy constructor, and fastCopyFrom() - UnicodeString ©From(const UnicodeString &src, UBool fastCopy=FALSE); + UnicodeString ©From(const UnicodeString &src, UBool fastCopy=false); // Copies just the fields without memory management. void copyFieldsFrom(UnicodeString &src, UBool setSrcToBogus) U_NOEXCEPT; @@ -3668,13 +3668,13 @@ class U_COMMON_API UnicodeString : public Replaceable * the buffer is refCounted (shared), and refCount>1, or * the buffer is too small. * - * Return FALSE if memory could not be allocated. + * Return false if memory could not be allocated. */ UBool cloneArrayIfNeeded(int32_t newCapacity = -1, int32_t growCapacity = -1, - UBool doCopyArray = TRUE, + UBool doCopyArray = true, int32_t **pBufferToDelete = 0, - UBool forceClone = FALSE); + UBool forceClone = false); /** * Common function for UnicodeString case mappings. @@ -4732,12 +4732,12 @@ UnicodeString::truncate(int32_t targetLength) if(isBogus() && targetLength == 0) { // truncate(0) of a bogus string makes the string empty and non-bogus unBogus(); - return FALSE; + return false; } else if((uint32_t)targetLength < (uint32_t)length()) { setLength(targetLength); - return TRUE; + return true; } else { - return FALSE; + return false; } } diff --git a/deps/icu-small/source/common/unicode/unorm.h b/deps/icu-small/source/common/unicode/unorm.h index 09dd366a968c1b..c3c57582d449d5 100644 --- a/deps/icu-small/source/common/unicode/unorm.h +++ b/deps/icu-small/source/common/unicode/unorm.h @@ -274,7 +274,7 @@ unorm_quickCheckWithOptions(const UChar *src, int32_t srcLength, * never a "maybe". * For NFD, NFKD, and FCD, both functions work exactly the same. * For NFC and NFKC where quickCheck may return "maybe", this function will - * perform further tests to arrive at a TRUE/FALSE result. + * perform further tests to arrive at a true/false result. * * @param src String that is to be tested if it is in a normalization format. * @param srcLength Length of source to test, or -1 if NUL-terminated. @@ -358,10 +358,10 @@ unorm_isNormalizedWithOptions(const UChar *src, int32_t srcLength, * It is useful for operations like a normalizing transliterator, where one would * not want to replace a piece of text if it is not modified. * - * If doNormalize==TRUE and pNeededToNormalize!=NULL then *pNeeded... is set TRUE + * If doNormalize==true and pNeededToNormalize!=NULL then *pNeeded... is set true * if the normalization was necessary. * - * If doNormalize==FALSE then *pNeededToNormalize will be set to FALSE. + * If doNormalize==false then *pNeededToNormalize will be set to false. * * If the buffer overflows, then *pNeededToNormalize will be undefined; * essentially, whenever U_FAILURE is true (like in buffer overflows), this result @@ -373,11 +373,11 @@ unorm_isNormalizedWithOptions(const UChar *src, int32_t srcLength, * @param mode The normalization mode. * @param options The normalization options, ORed together (0 for no options). * @param doNormalize Indicates if the source text up to the next boundary - * is to be normalized (TRUE) or just copied (FALSE). + * is to be normalized (true) or just copied (false). * @param pNeededToNormalize Output flag indicating if the normalization resulted in * different text from the input. * Not defined if an error occurs including buffer overflow. - * Always FALSE if !doNormalize. + * Always false if !doNormalize. * @param pErrorCode ICU error code in/out parameter. * Must fulfill U_SUCCESS before the function call. * @return Length of output (number of UChars) when successful or buffer overflow. @@ -406,11 +406,11 @@ unorm_next(UCharIterator *src, * @param mode The normalization mode. * @param options The normalization options, ORed together (0 for no options). * @param doNormalize Indicates if the source text up to the next boundary - * is to be normalized (TRUE) or just copied (FALSE). + * is to be normalized (true) or just copied (false). * @param pNeededToNormalize Output flag indicating if the normalization resulted in * different text from the input. * Not defined if an error occurs including buffer overflow. - * Always FALSE if !doNormalize. + * Always false if !doNormalize. * @param pErrorCode ICU error code in/out parameter. * Must fulfill U_SUCCESS before the function call. * @return Length of output (number of UChars) when successful or buffer overflow. diff --git a/deps/icu-small/source/common/unicode/unorm2.h b/deps/icu-small/source/common/unicode/unorm2.h index a9bd02f256361f..24417b7103c12e 100644 --- a/deps/icu-small/source/common/unicode/unorm2.h +++ b/deps/icu-small/source/common/unicode/unorm2.h @@ -31,10 +31,13 @@ */ #include "unicode/utypes.h" -#include "unicode/localpointer.h" #include "unicode/stringoptions.h" #include "unicode/uset.h" +#if U_SHOW_CPLUSPLUS_API +#include "unicode/localpointer.h" +#endif // U_SHOW_CPLUSPLUS_API + /** * Constants for normalization modes. * For details about standard Unicode normalization forms @@ -132,7 +135,7 @@ typedef struct UNormalizer2 UNormalizer2; /**< C typedef for struct UNormalizer * @return the requested Normalizer2, if successful * @stable ICU 49 */ -U_STABLE const UNormalizer2 * U_EXPORT2 +U_CAPI const UNormalizer2 * U_EXPORT2 unorm2_getNFCInstance(UErrorCode *pErrorCode); /** @@ -146,7 +149,7 @@ unorm2_getNFCInstance(UErrorCode *pErrorCode); * @return the requested Normalizer2, if successful * @stable ICU 49 */ -U_STABLE const UNormalizer2 * U_EXPORT2 +U_CAPI const UNormalizer2 * U_EXPORT2 unorm2_getNFDInstance(UErrorCode *pErrorCode); /** @@ -160,7 +163,7 @@ unorm2_getNFDInstance(UErrorCode *pErrorCode); * @return the requested Normalizer2, if successful * @stable ICU 49 */ -U_STABLE const UNormalizer2 * U_EXPORT2 +U_CAPI const UNormalizer2 * U_EXPORT2 unorm2_getNFKCInstance(UErrorCode *pErrorCode); /** @@ -174,7 +177,7 @@ unorm2_getNFKCInstance(UErrorCode *pErrorCode); * @return the requested Normalizer2, if successful * @stable ICU 49 */ -U_STABLE const UNormalizer2 * U_EXPORT2 +U_CAPI const UNormalizer2 * U_EXPORT2 unorm2_getNFKDInstance(UErrorCode *pErrorCode); /** @@ -188,7 +191,7 @@ unorm2_getNFKDInstance(UErrorCode *pErrorCode); * @return the requested Normalizer2, if successful * @stable ICU 49 */ -U_STABLE const UNormalizer2 * U_EXPORT2 +U_CAPI const UNormalizer2 * U_EXPORT2 unorm2_getNFKCCasefoldInstance(UErrorCode *pErrorCode); /** @@ -212,7 +215,7 @@ unorm2_getNFKCCasefoldInstance(UErrorCode *pErrorCode); * @return the requested UNormalizer2, if successful * @stable ICU 4.4 */ -U_STABLE const UNormalizer2 * U_EXPORT2 +U_CAPI const UNormalizer2 * U_EXPORT2 unorm2_getInstance(const char *packageName, const char *name, UNormalization2Mode mode, @@ -233,7 +236,7 @@ unorm2_getInstance(const char *packageName, * @return the requested UNormalizer2, if successful * @stable ICU 4.4 */ -U_STABLE UNormalizer2 * U_EXPORT2 +U_CAPI UNormalizer2 * U_EXPORT2 unorm2_openFiltered(const UNormalizer2 *norm2, const USet *filterSet, UErrorCode *pErrorCode); /** @@ -242,7 +245,7 @@ unorm2_openFiltered(const UNormalizer2 *norm2, const USet *filterSet, UErrorCode * @param norm2 UNormalizer2 instance to be closed * @stable ICU 4.4 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 unorm2_close(UNormalizer2 *norm2); #if U_SHOW_CPLUSPLUS_API @@ -280,7 +283,7 @@ U_NAMESPACE_END * @return dest * @stable ICU 4.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 unorm2_normalize(const UNormalizer2 *norm2, const UChar *src, int32_t length, UChar *dest, int32_t capacity, @@ -303,7 +306,7 @@ unorm2_normalize(const UNormalizer2 *norm2, * @return first * @stable ICU 4.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 unorm2_normalizeSecondAndAppend(const UNormalizer2 *norm2, UChar *first, int32_t firstLength, int32_t firstCapacity, const UChar *second, int32_t secondLength, @@ -326,7 +329,7 @@ unorm2_normalizeSecondAndAppend(const UNormalizer2 *norm2, * @return first * @stable ICU 4.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 unorm2_append(const UNormalizer2 *norm2, UChar *first, int32_t firstLength, int32_t firstCapacity, const UChar *second, int32_t secondLength, @@ -351,7 +354,7 @@ unorm2_append(const UNormalizer2 *norm2, * @return the non-negative length of c's decomposition, if there is one; otherwise a negative value * @stable ICU 4.6 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 unorm2_getDecomposition(const UNormalizer2 *norm2, UChar32 c, UChar *decomposition, int32_t capacity, UErrorCode *pErrorCode); @@ -385,7 +388,7 @@ unorm2_getDecomposition(const UNormalizer2 *norm2, * @return the non-negative length of c's raw decomposition, if there is one; otherwise a negative value * @stable ICU 49 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 unorm2_getRawDecomposition(const UNormalizer2 *norm2, UChar32 c, UChar *decomposition, int32_t capacity, UErrorCode *pErrorCode); @@ -405,7 +408,7 @@ unorm2_getRawDecomposition(const UNormalizer2 *norm2, * @return The non-negative composite code point if there is one; otherwise a negative value. * @stable ICU 49 */ -U_STABLE UChar32 U_EXPORT2 +U_CAPI UChar32 U_EXPORT2 unorm2_composePair(const UNormalizer2 *norm2, UChar32 a, UChar32 b); /** @@ -417,7 +420,7 @@ unorm2_composePair(const UNormalizer2 *norm2, UChar32 a, UChar32 b); * @return c's combining class * @stable ICU 49 */ -U_STABLE uint8_t U_EXPORT2 +U_CAPI uint8_t U_EXPORT2 unorm2_getCombiningClass(const UNormalizer2 *norm2, UChar32 c); /** @@ -433,10 +436,10 @@ unorm2_getCombiningClass(const UNormalizer2 *norm2, UChar32 c); * pass the U_SUCCESS() test, or else the function returns * immediately. Check for U_FAILURE() on output or use with * function chaining. (See User Guide for details.) - * @return TRUE if s is normalized + * @return true if s is normalized * @stable ICU 4.4 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 unorm2_isNormalized(const UNormalizer2 *norm2, const UChar *s, int32_t length, UErrorCode *pErrorCode); @@ -458,7 +461,7 @@ unorm2_isNormalized(const UNormalizer2 *norm2, * @return UNormalizationCheckResult * @stable ICU 4.4 */ -U_STABLE UNormalizationCheckResult U_EXPORT2 +U_CAPI UNormalizationCheckResult U_EXPORT2 unorm2_quickCheck(const UNormalizer2 *norm2, const UChar *s, int32_t length, UErrorCode *pErrorCode); @@ -487,7 +490,7 @@ unorm2_quickCheck(const UNormalizer2 *norm2, * @return "yes" span end index * @stable ICU 4.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 unorm2_spanQuickCheckYes(const UNormalizer2 *norm2, const UChar *s, int32_t length, UErrorCode *pErrorCode); @@ -498,10 +501,10 @@ unorm2_spanQuickCheckYes(const UNormalizer2 *norm2, * For details see the Normalizer2 base class documentation. * @param norm2 UNormalizer2 instance * @param c character to test - * @return TRUE if c has a normalization boundary before it + * @return true if c has a normalization boundary before it * @stable ICU 4.4 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 unorm2_hasBoundaryBefore(const UNormalizer2 *norm2, UChar32 c); /** @@ -510,10 +513,10 @@ unorm2_hasBoundaryBefore(const UNormalizer2 *norm2, UChar32 c); * For details see the Normalizer2 base class documentation. * @param norm2 UNormalizer2 instance * @param c character to test - * @return TRUE if c has a normalization boundary after it + * @return true if c has a normalization boundary after it * @stable ICU 4.4 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 unorm2_hasBoundaryAfter(const UNormalizer2 *norm2, UChar32 c); /** @@ -521,10 +524,10 @@ unorm2_hasBoundaryAfter(const UNormalizer2 *norm2, UChar32 c); * For details see the Normalizer2 base class documentation. * @param norm2 UNormalizer2 instance * @param c character to test - * @return TRUE if c is normalization-inert + * @return true if c is normalization-inert * @stable ICU 4.4 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 unorm2_isInert(const UNormalizer2 *norm2, UChar32 c); /** @@ -593,7 +596,7 @@ unorm2_isInert(const UNormalizer2 *norm2, UChar32 c); * * @stable ICU 2.2 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 unorm_compare(const UChar *s1, int32_t length1, const UChar *s2, int32_t length2, uint32_t options, diff --git a/deps/icu-small/source/common/unicode/urename.h b/deps/icu-small/source/common/unicode/urename.h index 30f4b7af39adc5..20232cd209c2d6 100644 --- a/deps/icu-small/source/common/unicode/urename.h +++ b/deps/icu-small/source/common/unicode/urename.h @@ -130,7 +130,6 @@ #define izrule_getStaticClassID U_ICU_ENTRY_POINT_RENAME(izrule_getStaticClassID) #define izrule_isEquivalentTo U_ICU_ENTRY_POINT_RENAME(izrule_isEquivalentTo) #define izrule_open U_ICU_ENTRY_POINT_RENAME(izrule_open) -#define locale_getKeywords U_ICU_ENTRY_POINT_RENAME(locale_getKeywords) #define locale_getKeywordsStart U_ICU_ENTRY_POINT_RENAME(locale_getKeywordsStart) #define locale_get_default U_ICU_ENTRY_POINT_RENAME(locale_get_default) #define locale_set_default U_ICU_ENTRY_POINT_RENAME(locale_set_default) @@ -918,9 +917,11 @@ #define udtitvfmt_format U_ICU_ENTRY_POINT_RENAME(udtitvfmt_format) #define udtitvfmt_formatCalendarToResult U_ICU_ENTRY_POINT_RENAME(udtitvfmt_formatCalendarToResult) #define udtitvfmt_formatToResult U_ICU_ENTRY_POINT_RENAME(udtitvfmt_formatToResult) +#define udtitvfmt_getContext U_ICU_ENTRY_POINT_RENAME(udtitvfmt_getContext) #define udtitvfmt_open U_ICU_ENTRY_POINT_RENAME(udtitvfmt_open) #define udtitvfmt_openResult U_ICU_ENTRY_POINT_RENAME(udtitvfmt_openResult) #define udtitvfmt_resultAsValue U_ICU_ENTRY_POINT_RENAME(udtitvfmt_resultAsValue) +#define udtitvfmt_setContext U_ICU_ENTRY_POINT_RENAME(udtitvfmt_setContext) #define uenum_close U_ICU_ENTRY_POINT_RENAME(uenum_close) #define uenum_count U_ICU_ENTRY_POINT_RENAME(uenum_count) #define uenum_next U_ICU_ENTRY_POINT_RENAME(uenum_next) @@ -1079,7 +1080,6 @@ #define uloc_getDisplayLanguage U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayLanguage) #define uloc_getDisplayName U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayName) #define uloc_getDisplayScript U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayScript) -#define uloc_getDisplayScriptInContext U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayScriptInContext) #define uloc_getDisplayVariant U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayVariant) #define uloc_getISO3Country U_ICU_ENTRY_POINT_RENAME(uloc_getISO3Country) #define uloc_getISO3Language U_ICU_ENTRY_POINT_RENAME(uloc_getISO3Language) @@ -1123,10 +1123,14 @@ #define ulocimp_forLanguageTag U_ICU_ENTRY_POINT_RENAME(ulocimp_forLanguageTag) #define ulocimp_getBaseName U_ICU_ENTRY_POINT_RENAME(ulocimp_getBaseName) #define ulocimp_getCountry U_ICU_ENTRY_POINT_RENAME(ulocimp_getCountry) +#define ulocimp_getKeywordValue U_ICU_ENTRY_POINT_RENAME(ulocimp_getKeywordValue) +#define ulocimp_getKeywords U_ICU_ENTRY_POINT_RENAME(ulocimp_getKeywords) +#define ulocimp_getKnownCanonicalizedLocaleForTest U_ICU_ENTRY_POINT_RENAME(ulocimp_getKnownCanonicalizedLocaleForTest) #define ulocimp_getLanguage U_ICU_ENTRY_POINT_RENAME(ulocimp_getLanguage) #define ulocimp_getName U_ICU_ENTRY_POINT_RENAME(ulocimp_getName) #define ulocimp_getRegionForSupplementalData U_ICU_ENTRY_POINT_RENAME(ulocimp_getRegionForSupplementalData) #define ulocimp_getScript U_ICU_ENTRY_POINT_RENAME(ulocimp_getScript) +#define ulocimp_isCanonicalizedLocaleForTest U_ICU_ENTRY_POINT_RENAME(ulocimp_isCanonicalizedLocaleForTest) #define ulocimp_minimizeSubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_minimizeSubtags) #define ulocimp_toBcpKey U_ICU_ENTRY_POINT_RENAME(ulocimp_toBcpKey) #define ulocimp_toBcpType U_ICU_ENTRY_POINT_RENAME(ulocimp_toBcpType) @@ -1245,7 +1249,18 @@ #define unumf_resultAsValue U_ICU_ENTRY_POINT_RENAME(unumf_resultAsValue) #define unumf_resultGetAllFieldPositions U_ICU_ENTRY_POINT_RENAME(unumf_resultGetAllFieldPositions) #define unumf_resultNextFieldPosition U_ICU_ENTRY_POINT_RENAME(unumf_resultNextFieldPosition) +#define unumf_resultToDecimalNumber U_ICU_ENTRY_POINT_RENAME(unumf_resultToDecimalNumber) #define unumf_resultToString U_ICU_ENTRY_POINT_RENAME(unumf_resultToString) +#define unumrf_close U_ICU_ENTRY_POINT_RENAME(unumrf_close) +#define unumrf_closeResult U_ICU_ENTRY_POINT_RENAME(unumrf_closeResult) +#define unumrf_formatDecimalRange U_ICU_ENTRY_POINT_RENAME(unumrf_formatDecimalRange) +#define unumrf_formatDoubleRange U_ICU_ENTRY_POINT_RENAME(unumrf_formatDoubleRange) +#define unumrf_openForSkeletonWithCollapseAndIdentityFallback U_ICU_ENTRY_POINT_RENAME(unumrf_openForSkeletonWithCollapseAndIdentityFallback) +#define unumrf_openResult U_ICU_ENTRY_POINT_RENAME(unumrf_openResult) +#define unumrf_resultAsValue U_ICU_ENTRY_POINT_RENAME(unumrf_resultAsValue) +#define unumrf_resultGetFirstDecimalNumber U_ICU_ENTRY_POINT_RENAME(unumrf_resultGetFirstDecimalNumber) +#define unumrf_resultGetIdentityResult U_ICU_ENTRY_POINT_RENAME(unumrf_resultGetIdentityResult) +#define unumrf_resultGetSecondDecimalNumber U_ICU_ENTRY_POINT_RENAME(unumrf_resultGetSecondDecimalNumber) #define unumsys_close U_ICU_ENTRY_POINT_RENAME(unumsys_close) #define unumsys_getDescription U_ICU_ENTRY_POINT_RENAME(unumsys_getDescription) #define unumsys_getName U_ICU_ENTRY_POINT_RENAME(unumsys_getName) @@ -1259,6 +1274,7 @@ #define uplrules_open U_ICU_ENTRY_POINT_RENAME(uplrules_open) #define uplrules_openForType U_ICU_ENTRY_POINT_RENAME(uplrules_openForType) #define uplrules_select U_ICU_ENTRY_POINT_RENAME(uplrules_select) +#define uplrules_selectForRange U_ICU_ENTRY_POINT_RENAME(uplrules_selectForRange) #define uplrules_selectFormatted U_ICU_ENTRY_POINT_RENAME(uplrules_selectFormatted) #define uplrules_selectWithFormat U_ICU_ENTRY_POINT_RENAME(uplrules_selectWithFormat) #define uplug_closeLibrary U_ICU_ENTRY_POINT_RENAME(uplug_closeLibrary) diff --git a/deps/icu-small/source/common/unicode/ures.h b/deps/icu-small/source/common/unicode/ures.h index 839779fada804d..fff84043e84785 100644 --- a/deps/icu-small/source/common/unicode/ures.h +++ b/deps/icu-small/source/common/unicode/ures.h @@ -27,7 +27,10 @@ #include "unicode/utypes.h" #include "unicode/uloc.h" + +#if U_SHOW_CPLUSPLUS_API #include "unicode/localpointer.h" +#endif // U_SHOW_CPLUSPLUS_API /** * \file @@ -163,7 +166,7 @@ typedef enum { * @see ures_close * @stable ICU 2.0 */ -U_STABLE UResourceBundle* U_EXPORT2 +U_CAPI UResourceBundle* U_EXPORT2 ures_open(const char* packageName, const char* locale, UErrorCode* status); @@ -186,7 +189,7 @@ ures_open(const char* packageName, * @see ures_close * @stable ICU 2.0 */ -U_STABLE UResourceBundle* U_EXPORT2 +U_CAPI UResourceBundle* U_EXPORT2 ures_openDirect(const char* packageName, const char* locale, UErrorCode* status); @@ -209,7 +212,7 @@ ures_openDirect(const char* packageName, * @see ures_open * @stable ICU 2.0 */ -U_STABLE UResourceBundle* U_EXPORT2 +U_CAPI UResourceBundle* U_EXPORT2 ures_openU(const UChar* packageName, const char* locale, UErrorCode* status); @@ -245,7 +248,7 @@ ures_countArrayItems(const UResourceBundle* resourceBundle, * @see ures_open * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ures_close(UResourceBundle* resourceBundle); #if U_SHOW_CPLUSPLUS_API @@ -291,7 +294,7 @@ ures_getVersionNumber(const UResourceBundle* resourceBundle); * as specified in the resource bundle or its parent. * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ures_getVersion(const UResourceBundle* resB, UVersionInfo versionInfo); @@ -325,7 +328,7 @@ ures_getLocale(const UResourceBundle* resourceBundle, * @return A Locale name * @stable ICU 2.8 */ -U_STABLE const char* U_EXPORT2 +U_CAPI const char* U_EXPORT2 ures_getLocaleByType(const UResourceBundle* resourceBundle, ULocDataLocaleType type, UErrorCode* status); @@ -348,7 +351,7 @@ ures_getLocaleByType(const UResourceBundle* resourceBundle, * @param status The error code. * @internal */ -U_INTERNAL void U_EXPORT2 +U_CAPI void U_EXPORT2 ures_openFillIn(UResourceBundle *r, const char* packageName, const char* localeID, @@ -372,7 +375,7 @@ ures_openFillIn(UResourceBundle *r, * @see ures_getUInt * @stable ICU 2.0 */ -U_STABLE const UChar* U_EXPORT2 +U_CAPI const UChar* U_EXPORT2 ures_getString(const UResourceBundle* resourceBundle, int32_t* len, UErrorCode* status); @@ -383,10 +386,10 @@ ures_getString(const UResourceBundle* resourceBundle, * it may need to be copied, or transformed from UTF-16 using u_strToUTF8() * or equivalent. * - * If forceCopy==TRUE, then the string is always written to the dest buffer + * If forceCopy==true, then the string is always written to the dest buffer * and dest is returned. * - * If forceCopy==FALSE, then the string is returned as a pointer if possible, + * If forceCopy==false, then the string is returned as a pointer if possible, * without needing a dest buffer (it can be NULL). If the string needs to be * copied or transformed, then it may be placed into dest at an arbitrary offset. * @@ -404,10 +407,10 @@ ures_getString(const UResourceBundle* resourceBundle, * terminating NUL, even in case of U_BUFFER_OVERFLOW_ERROR. * Can be NULL, meaning capacity=0 and the string length is not * returned to the caller. - * @param forceCopy If TRUE, then the output string will always be written to + * @param forceCopy If true, then the output string will always be written to * dest, with U_BUFFER_OVERFLOW_ERROR and * U_STRING_NOT_TERMINATED_WARNING set if appropriate. - * If FALSE, then the dest buffer may or may not contain a + * If false, then the dest buffer may or may not contain a * copy of the string. dest may or may not be modified. * If a copy needs to be written, then the UErrorCode parameter * indicates overflow etc. as usual. @@ -424,7 +427,7 @@ ures_getString(const UResourceBundle* resourceBundle, * @see u_strToUTF8 * @stable ICU 3.6 */ -U_STABLE const char * U_EXPORT2 +U_CAPI const char * U_EXPORT2 ures_getUTF8String(const UResourceBundle *resB, char *dest, int32_t *length, UBool forceCopy, @@ -447,7 +450,7 @@ ures_getUTF8String(const UResourceBundle *resB, * @see ures_getUInt * @stable ICU 2.0 */ -U_STABLE const uint8_t* U_EXPORT2 +U_CAPI const uint8_t* U_EXPORT2 ures_getBinary(const UResourceBundle* resourceBundle, int32_t* len, UErrorCode* status); @@ -469,7 +472,7 @@ ures_getBinary(const UResourceBundle* resourceBundle, * @see ures_getUInt * @stable ICU 2.0 */ -U_STABLE const int32_t* U_EXPORT2 +U_CAPI const int32_t* U_EXPORT2 ures_getIntVector(const UResourceBundle* resourceBundle, int32_t* len, UErrorCode* status); @@ -490,7 +493,7 @@ ures_getIntVector(const UResourceBundle* resourceBundle, * @see ures_getString * @stable ICU 2.0 */ -U_STABLE uint32_t U_EXPORT2 +U_CAPI uint32_t U_EXPORT2 ures_getUInt(const UResourceBundle* resourceBundle, UErrorCode *status); @@ -510,7 +513,7 @@ ures_getUInt(const UResourceBundle* resourceBundle, * @see ures_getString * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ures_getInt(const UResourceBundle* resourceBundle, UErrorCode *status); @@ -524,7 +527,7 @@ ures_getInt(const UResourceBundle* resourceBundle, * @return number of resources in a given resource. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ures_getSize(const UResourceBundle *resourceBundle); /** @@ -535,7 +538,7 @@ ures_getSize(const UResourceBundle *resourceBundle); * @see UResType * @stable ICU 2.0 */ -U_STABLE UResType U_EXPORT2 +U_CAPI UResType U_EXPORT2 ures_getType(const UResourceBundle *resourceBundle); /** @@ -546,7 +549,7 @@ ures_getType(const UResourceBundle *resourceBundle); * @return a key associated to this resource, or NULL if it doesn't have a key * @stable ICU 2.0 */ -U_STABLE const char * U_EXPORT2 +U_CAPI const char * U_EXPORT2 ures_getKey(const UResourceBundle *resourceBundle); /* ITERATION API @@ -559,17 +562,17 @@ ures_getKey(const UResourceBundle *resourceBundle); * @param resourceBundle a resource * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 ures_resetIterator(UResourceBundle *resourceBundle); /** * Checks whether the given resource has another element to iterate over. * * @param resourceBundle a resource - * @return TRUE if there are more elements, FALSE if there is no more elements + * @return true if there are more elements, false if there is no more elements * @stable ICU 2.0 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 ures_hasNext(const UResourceBundle *resourceBundle); /** @@ -584,7 +587,7 @@ ures_hasNext(const UResourceBundle *resourceBundle); * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must close it * @stable ICU 2.0 */ -U_STABLE UResourceBundle* U_EXPORT2 +U_CAPI UResourceBundle* U_EXPORT2 ures_getNextResource(UResourceBundle *resourceBundle, UResourceBundle *fillIn, UErrorCode *status); @@ -601,7 +604,7 @@ ures_getNextResource(UResourceBundle *resourceBundle, * @return a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file. * @stable ICU 2.0 */ -U_STABLE const UChar* U_EXPORT2 +U_CAPI const UChar* U_EXPORT2 ures_getNextString(UResourceBundle *resourceBundle, int32_t* len, const char ** key, @@ -619,7 +622,7 @@ ures_getNextString(UResourceBundle *resourceBundle, * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must close it * @stable ICU 2.0 */ -U_STABLE UResourceBundle* U_EXPORT2 +U_CAPI UResourceBundle* U_EXPORT2 ures_getByIndex(const UResourceBundle *resourceBundle, int32_t indexR, UResourceBundle *fillIn, @@ -636,7 +639,7 @@ ures_getByIndex(const UResourceBundle *resourceBundle, * @return a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file. * @stable ICU 2.0 */ -U_STABLE const UChar* U_EXPORT2 +U_CAPI const UChar* U_EXPORT2 ures_getStringByIndex(const UResourceBundle *resourceBundle, int32_t indexS, int32_t* len, @@ -648,10 +651,10 @@ ures_getStringByIndex(const UResourceBundle *resourceBundle, * it may need to be copied, or transformed from UTF-16 using u_strToUTF8() * or equivalent. * - * If forceCopy==TRUE, then the string is always written to the dest buffer + * If forceCopy==true, then the string is always written to the dest buffer * and dest is returned. * - * If forceCopy==FALSE, then the string is returned as a pointer if possible, + * If forceCopy==false, then the string is returned as a pointer if possible, * without needing a dest buffer (it can be NULL). If the string needs to be * copied or transformed, then it may be placed into dest at an arbitrary offset. * @@ -670,10 +673,10 @@ ures_getStringByIndex(const UResourceBundle *resourceBundle, * terminating NUL, even in case of U_BUFFER_OVERFLOW_ERROR. * Can be NULL, meaning capacity=0 and the string length is not * returned to the caller. - * @param forceCopy If TRUE, then the output string will always be written to + * @param forceCopy If true, then the output string will always be written to * dest, with U_BUFFER_OVERFLOW_ERROR and * U_STRING_NOT_TERMINATED_WARNING set if appropriate. - * If FALSE, then the dest buffer may or may not contain a + * If false, then the dest buffer may or may not contain a * copy of the string. dest may or may not be modified. * If a copy needs to be written, then the UErrorCode parameter * indicates overflow etc. as usual. @@ -690,7 +693,7 @@ ures_getStringByIndex(const UResourceBundle *resourceBundle, * @see u_strToUTF8 * @stable ICU 3.6 */ -U_STABLE const char * U_EXPORT2 +U_CAPI const char * U_EXPORT2 ures_getUTF8StringByIndex(const UResourceBundle *resB, int32_t stringIndex, char *dest, int32_t *pLength, @@ -709,7 +712,7 @@ ures_getUTF8StringByIndex(const UResourceBundle *resB, * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must close it * @stable ICU 2.0 */ -U_STABLE UResourceBundle* U_EXPORT2 +U_CAPI UResourceBundle* U_EXPORT2 ures_getByKey(const UResourceBundle *resourceBundle, const char* key, UResourceBundle *fillIn, @@ -727,7 +730,7 @@ ures_getByKey(const UResourceBundle *resourceBundle, * @return a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file. * @stable ICU 2.0 */ -U_STABLE const UChar* U_EXPORT2 +U_CAPI const UChar* U_EXPORT2 ures_getStringByKey(const UResourceBundle *resB, const char* key, int32_t* len, @@ -741,10 +744,10 @@ ures_getStringByKey(const UResourceBundle *resB, * it may need to be copied, or transformed from UTF-16 using u_strToUTF8() * or equivalent. * - * If forceCopy==TRUE, then the string is always written to the dest buffer + * If forceCopy==true, then the string is always written to the dest buffer * and dest is returned. * - * If forceCopy==FALSE, then the string is returned as a pointer if possible, + * If forceCopy==false, then the string is returned as a pointer if possible, * without needing a dest buffer (it can be NULL). If the string needs to be * copied or transformed, then it may be placed into dest at an arbitrary offset. * @@ -763,10 +766,10 @@ ures_getStringByKey(const UResourceBundle *resB, * terminating NUL, even in case of U_BUFFER_OVERFLOW_ERROR. * Can be NULL, meaning capacity=0 and the string length is not * returned to the caller. - * @param forceCopy If TRUE, then the output string will always be written to + * @param forceCopy If true, then the output string will always be written to * dest, with U_BUFFER_OVERFLOW_ERROR and * U_STRING_NOT_TERMINATED_WARNING set if appropriate. - * If FALSE, then the dest buffer may or may not contain a + * If false, then the dest buffer may or may not contain a * copy of the string. dest may or may not be modified. * If a copy needs to be written, then the UErrorCode parameter * indicates overflow etc. as usual. @@ -783,7 +786,7 @@ ures_getStringByKey(const UResourceBundle *resB, * @see u_strToUTF8 * @stable ICU 3.6 */ -U_STABLE const char * U_EXPORT2 +U_CAPI const char * U_EXPORT2 ures_getUTF8StringByKey(const UResourceBundle *resB, const char *key, char *dest, int32_t *pLength, @@ -811,7 +814,7 @@ ures_getUnicodeString(const UResourceBundle *resB, UErrorCode* status) { int32_t len = 0; const UChar *r = ures_getString(resB, &len, status); if(U_SUCCESS(*status)) { - result.setTo(TRUE, r, len); + result.setTo(true, r, len); } else { result.setToBogus(); } @@ -836,7 +839,7 @@ ures_getNextUnicodeString(UResourceBundle *resB, const char ** key, UErrorCode* int32_t len = 0; const UChar* r = ures_getNextString(resB, &len, key, status); if(U_SUCCESS(*status)) { - result.setTo(TRUE, r, len); + result.setTo(true, r, len); } else { result.setToBogus(); } @@ -858,7 +861,7 @@ ures_getUnicodeStringByIndex(const UResourceBundle *resB, int32_t indexS, UError int32_t len = 0; const UChar* r = ures_getStringByIndex(resB, indexS, &len, status); if(U_SUCCESS(*status)) { - result.setTo(TRUE, r, len); + result.setTo(true, r, len); } else { result.setToBogus(); } @@ -881,7 +884,7 @@ ures_getUnicodeStringByKey(const UResourceBundle *resB, const char* key, UErrorC int32_t len = 0; const UChar* r = ures_getStringByKey(resB, key, &len, status); if(U_SUCCESS(*status)) { - result.setTo(TRUE, r, len); + result.setTo(true, r, len); } else { result.setToBogus(); } @@ -900,7 +903,7 @@ U_NAMESPACE_END * @param status error code * @stable ICU 3.2 */ -U_STABLE UEnumeration* U_EXPORT2 +U_CAPI UEnumeration* U_EXPORT2 ures_openAvailableLocales(const char *packageName, UErrorCode *status); diff --git a/deps/icu-small/source/common/unicode/uscript.h b/deps/icu-small/source/common/unicode/uscript.h index 53d57abed14cd0..8448afda761550 100644 --- a/deps/icu-small/source/common/unicode/uscript.h +++ b/deps/icu-small/source/common/unicode/uscript.h @@ -514,7 +514,7 @@ typedef enum UScriptCode { * @return The number of script codes filled in the buffer passed in * @stable ICU 2.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uscript_getCode(const char* nameOrAbbrOrLocale,UScriptCode* fillIn,int32_t capacity,UErrorCode *err); /** @@ -527,7 +527,7 @@ uscript_getCode(const char* nameOrAbbrOrLocale,UScriptCode* fillIn,int32_t capac * or NULL if scriptCode is invalid * @stable ICU 2.4 */ -U_STABLE const char* U_EXPORT2 +U_CAPI const char* U_EXPORT2 uscript_getName(UScriptCode scriptCode); /** @@ -539,7 +539,7 @@ uscript_getName(UScriptCode scriptCode); * @return short script name (4-letter code), or NULL if scriptCode is invalid * @stable ICU 2.4 */ -U_STABLE const char* U_EXPORT2 +U_CAPI const char* U_EXPORT2 uscript_getShortName(UScriptCode scriptCode); /** @@ -550,7 +550,7 @@ uscript_getShortName(UScriptCode scriptCode); * @return The UScriptCode, or 0 if codepoint is invalid * @stable ICU 2.4 */ -U_STABLE UScriptCode U_EXPORT2 +U_CAPI UScriptCode U_EXPORT2 uscript_getScript(UChar32 codepoint, UErrorCode *err); /** @@ -562,10 +562,10 @@ uscript_getScript(UChar32 codepoint, UErrorCode *err); * For more information, see UAX #24: http://www.unicode.org/reports/tr24/. * @param c code point * @param sc script code - * @return TRUE if sc is in Script_Extensions(c) + * @return true if sc is in Script_Extensions(c) * @stable ICU 49 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uscript_hasScript(UChar32 c, UScriptCode sc); /** @@ -597,7 +597,7 @@ uscript_hasScript(UChar32 c, UScriptCode sc); * written to scripts unless U_BUFFER_OVERFLOW_ERROR indicates insufficient capacity * @stable ICU 49 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uscript_getScriptExtensions(UChar32 c, UScriptCode *scripts, int32_t capacity, UErrorCode *errorCode); @@ -636,7 +636,7 @@ typedef enum UScriptUsage { * @return the string length, even if U_BUFFER_OVERFLOW_ERROR * @stable ICU 51 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uscript_getSampleString(UScriptCode script, UChar *dest, int32_t capacity, UErrorCode *pErrorCode); #if U_SHOW_CPLUSPLUS_API @@ -668,41 +668,41 @@ uscript_getSampleUnicodeString(UScriptCode script); * @see UScriptUsage * @stable ICU 51 */ -U_STABLE UScriptUsage U_EXPORT2 +U_CAPI UScriptUsage U_EXPORT2 uscript_getUsage(UScriptCode script); /** - * Returns TRUE if the script is written right-to-left. + * Returns true if the script is written right-to-left. * For example, Arab and Hebr. * * @param script script code - * @return TRUE if the script is right-to-left + * @return true if the script is right-to-left * @stable ICU 51 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uscript_isRightToLeft(UScriptCode script); /** - * Returns TRUE if the script allows line breaks between letters (excluding hyphenation). + * Returns true if the script allows line breaks between letters (excluding hyphenation). * Such a script typically requires dictionary-based line breaking. * For example, Hani and Thai. * * @param script script code - * @return TRUE if the script allows line breaks between letters + * @return true if the script allows line breaks between letters * @stable ICU 51 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uscript_breaksBetweenLetters(UScriptCode script); /** - * Returns TRUE if in modern (or most recent) usage of the script case distinctions are customary. + * Returns true if in modern (or most recent) usage of the script case distinctions are customary. * For example, Latn and Cyrl. * * @param script script code - * @return TRUE if the script is cased + * @return true if the script is cased * @stable ICU 51 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uscript_isCased(UScriptCode script); #endif diff --git a/deps/icu-small/source/common/unicode/uset.h b/deps/icu-small/source/common/unicode/uset.h index ef6bbb5c38f3fb..473cc6fbae4e0d 100644 --- a/deps/icu-small/source/common/unicode/uset.h +++ b/deps/icu-small/source/common/unicode/uset.h @@ -31,7 +31,10 @@ #include "unicode/utypes.h" #include "unicode/uchar.h" + +#if U_SHOW_CPLUSPLUS_API #include "unicode/localpointer.h" +#endif // U_SHOW_CPLUSPLUS_API #ifndef USET_DEFINED @@ -158,7 +161,7 @@ typedef enum USetSpanCondition { * Continues a span() while there is no set element at the current position. * Increments by one code point at a time. * Stops before the first set element (character or string). - * (For code points only, this is like while contains(current)==FALSE). + * (For code points only, this is like while contains(current)==false). * * When span() returns, the substring between where it started and the position * it returned consists only of characters that are not in the set, @@ -169,7 +172,7 @@ typedef enum USetSpanCondition { USET_SPAN_NOT_CONTAINED = 0, /** * Spans the longest substring that is a concatenation of set elements (characters or strings). - * (For characters only, this is like while contains(current)==TRUE). + * (For characters only, this is like while contains(current)==true). * * When span() returns, the substring between where it started and the position * it returned consists only of set elements (characters or strings) that are in the set. @@ -185,7 +188,7 @@ typedef enum USetSpanCondition { /** * Continues a span() while there is a set element at the current position. * Increments by the longest matching element at each position. - * (For characters only, this is like while contains(current)==TRUE). + * (For characters only, this is like while contains(current)==true). * * When span() returns, the substring between where it started and the position * it returned consists only of set elements (characters or strings) that are in the set. @@ -260,7 +263,7 @@ typedef struct USerializedSet { * it when done. * @stable ICU 4.2 */ -U_STABLE USet* U_EXPORT2 +U_CAPI USet* U_EXPORT2 uset_openEmpty(void); /** @@ -273,7 +276,7 @@ uset_openEmpty(void); * it when done. * @stable ICU 2.4 */ -U_STABLE USet* U_EXPORT2 +U_CAPI USet* U_EXPORT2 uset_open(UChar32 start, UChar32 end); /** @@ -285,7 +288,7 @@ uset_open(UChar32 start, UChar32 end); * @param ec the error code * @stable ICU 2.4 */ -U_STABLE USet* U_EXPORT2 +U_CAPI USet* U_EXPORT2 uset_openPattern(const UChar* pattern, int32_t patternLength, UErrorCode* ec); @@ -300,7 +303,7 @@ uset_openPattern(const UChar* pattern, int32_t patternLength, * @param ec the error code * @stable ICU 2.4 */ -U_STABLE USet* U_EXPORT2 +U_CAPI USet* U_EXPORT2 uset_openPatternOptions(const UChar* pattern, int32_t patternLength, uint32_t options, UErrorCode* ec); @@ -311,7 +314,7 @@ uset_openPatternOptions(const UChar* pattern, int32_t patternLength, * @param set the object to dispose of * @stable ICU 2.4 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uset_close(USet* set); #if U_SHOW_CPLUSPLUS_API @@ -342,19 +345,19 @@ U_NAMESPACE_END * @see uset_cloneAsThawed * @stable ICU 3.8 */ -U_STABLE USet * U_EXPORT2 +U_CAPI USet * U_EXPORT2 uset_clone(const USet *set); /** * Determines whether the set has been frozen (made immutable) or not. * See the ICU4J Freezable interface for details. * @param set the set - * @return TRUE/FALSE for whether the set has been frozen + * @return true/false for whether the set has been frozen * @see uset_freeze * @see uset_cloneAsThawed * @stable ICU 3.8 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uset_isFrozen(const USet *set); /** @@ -371,7 +374,7 @@ uset_isFrozen(const USet *set); * @see uset_cloneAsThawed * @stable ICU 3.8 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uset_freeze(USet *set); /** @@ -384,7 +387,7 @@ uset_freeze(USet *set); * @see uset_clone * @stable ICU 3.8 */ -U_STABLE USet * U_EXPORT2 +U_CAPI USet * U_EXPORT2 uset_cloneAsThawed(const USet *set); /** @@ -396,7 +399,7 @@ uset_cloneAsThawed(const USet *set); * @param end last character in the set, inclusive * @stable ICU 3.2 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uset_set(USet* set, UChar32 start, UChar32 end); @@ -421,7 +424,7 @@ uset_set(USet* set, * * @stable ICU 2.8 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uset_applyPattern(USet *set, const UChar *pattern, int32_t patternLength, uint32_t options, @@ -449,7 +452,7 @@ uset_applyPattern(USet *set, * * @stable ICU 3.2 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uset_applyIntPropertyValue(USet* set, UProperty prop, int32_t value, UErrorCode* ec); @@ -488,7 +491,7 @@ uset_applyIntPropertyValue(USet* set, * * @stable ICU 3.2 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uset_applyPropertyAlias(USet* set, const UChar *prop, int32_t propLength, const UChar *value, int32_t valueLength, @@ -503,7 +506,7 @@ uset_applyPropertyAlias(USet* set, * @param pos the given position * @stable ICU 3.2 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uset_resemblesPattern(const UChar *pattern, int32_t patternLength, int32_t pos); @@ -514,7 +517,7 @@ uset_resemblesPattern(const UChar *pattern, int32_t patternLength, * @param set the set * @param result the string to receive the rules, may be NULL * @param resultCapacity the capacity of result, may be 0 if result is NULL - * @param escapeUnprintable if TRUE then convert unprintable + * @param escapeUnprintable if true then convert unprintable * character to their hex escape representations, \\uxxxx or * \\Uxxxxxxxx. Unprintable characters are those other than * U+000A, U+0020..U+007E. @@ -522,7 +525,7 @@ uset_resemblesPattern(const UChar *pattern, int32_t patternLength, * @return length of string, possibly larger than resultCapacity * @stable ICU 2.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uset_toPattern(const USet* set, UChar* result, int32_t resultCapacity, UBool escapeUnprintable, @@ -530,13 +533,13 @@ uset_toPattern(const USet* set, /** * Adds the given character to the given USet. After this call, - * uset_contains(set, c) will return TRUE. + * uset_contains(set, c) will return true. * A frozen set will not be modified. * @param set the object to which to add the character * @param c the character to add * @stable ICU 2.4 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uset_add(USet* set, UChar32 c); /** @@ -551,31 +554,31 @@ uset_add(USet* set, UChar32 c); * @param additionalSet the source set whose elements are to be added to this set. * @stable ICU 2.6 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uset_addAll(USet* set, const USet *additionalSet); /** * Adds the given range of characters to the given USet. After this call, - * uset_contains(set, start, end) will return TRUE. + * uset_contains(set, start, end) will return true. * A frozen set will not be modified. * @param set the object to which to add the character * @param start the first character of the range to add, inclusive * @param end the last character of the range to add, inclusive * @stable ICU 2.2 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uset_addRange(USet* set, UChar32 start, UChar32 end); /** * Adds the given string to the given USet. After this call, - * uset_containsString(set, str, strLen) will return TRUE. + * uset_containsString(set, str, strLen) will return true. * A frozen set will not be modified. * @param set the object to which to add the character * @param str the string to add * @param strLen the length of the string or -1 if null terminated. * @stable ICU 2.4 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uset_addString(USet* set, const UChar* str, int32_t strLen); /** @@ -587,42 +590,42 @@ uset_addString(USet* set, const UChar* str, int32_t strLen); * @param strLen the length of the string or -1 if null terminated. * @stable ICU 3.4 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uset_addAllCodePoints(USet* set, const UChar *str, int32_t strLen); /** * Removes the given character from the given USet. After this call, - * uset_contains(set, c) will return FALSE. + * uset_contains(set, c) will return false. * A frozen set will not be modified. * @param set the object from which to remove the character * @param c the character to remove * @stable ICU 2.4 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uset_remove(USet* set, UChar32 c); /** * Removes the given range of characters from the given USet. After this call, - * uset_contains(set, start, end) will return FALSE. + * uset_contains(set, start, end) will return false. * A frozen set will not be modified. * @param set the object to which to add the character * @param start the first character of the range to remove, inclusive * @param end the last character of the range to remove, inclusive * @stable ICU 2.2 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uset_removeRange(USet* set, UChar32 start, UChar32 end); /** * Removes the given string to the given USet. After this call, - * uset_containsString(set, str, strLen) will return FALSE. + * uset_containsString(set, str, strLen) will return false. * A frozen set will not be modified. * @param set the object to which to add the character * @param str the string to remove * @param strLen the length of the string or -1 if null terminated. * @stable ICU 2.4 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uset_removeString(USet* set, const UChar* str, int32_t strLen); /** @@ -636,7 +639,7 @@ uset_removeString(USet* set, const UChar* str, int32_t strLen); * removed from this set * @stable ICU 3.2 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uset_removeAll(USet* set, const USet* removeSet); /** @@ -653,7 +656,7 @@ uset_removeAll(USet* set, const USet* removeSet); * to this set. * @stable ICU 3.2 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uset_retain(USet* set, UChar32 start, UChar32 end); /** @@ -668,7 +671,7 @@ uset_retain(USet* set, UChar32 start, UChar32 end); * @param retain set that defines which elements this set will retain * @stable ICU 3.2 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uset_retainAll(USet* set, const USet* retain); /** @@ -679,7 +682,7 @@ uset_retainAll(USet* set, const USet* retain); * @param set the object on which to perfrom the compact * @stable ICU 3.2 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uset_compact(USet* set); /** @@ -690,7 +693,7 @@ uset_compact(USet* set); * @param set the set * @stable ICU 2.4 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uset_complement(USet* set); /** @@ -704,7 +707,7 @@ uset_complement(USet* set); * from this set. * @stable ICU 3.2 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uset_complementAll(USet* set, const USet* complement); /** @@ -714,7 +717,7 @@ uset_complementAll(USet* set, const USet* complement); * @param set the set * @stable ICU 2.4 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uset_clear(USet* set); /** @@ -743,7 +746,7 @@ uset_clear(USet* set); * are ignored. * @stable ICU 4.2 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uset_closeOver(USet* set, int32_t attributes); /** @@ -752,51 +755,51 @@ uset_closeOver(USet* set, int32_t attributes); * @param set the set * @stable ICU 4.2 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uset_removeAllStrings(USet* set); /** - * Returns TRUE if the given USet contains no characters and no + * Returns true if the given USet contains no characters and no * strings. * @param set the set * @return true if set is empty * @stable ICU 2.4 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uset_isEmpty(const USet* set); /** - * Returns TRUE if the given USet contains the given character. + * Returns true if the given USet contains the given character. * This function works faster with a frozen set. * @param set the set * @param c The codepoint to check for within the set * @return true if set contains c * @stable ICU 2.4 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uset_contains(const USet* set, UChar32 c); /** - * Returns TRUE if the given USet contains all characters c + * Returns true if the given USet contains all characters c * where start <= c && c <= end. * @param set the set * @param start the first character of the range to test, inclusive * @param end the last character of the range to test, inclusive - * @return TRUE if set contains the range + * @return true if set contains the range * @stable ICU 2.2 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uset_containsRange(const USet* set, UChar32 start, UChar32 end); /** - * Returns TRUE if the given USet contains the given string. + * Returns true if the given USet contains the given string. * @param set the set * @param str the string * @param strLen the length of the string or -1 if null terminated. * @return true if set contains str * @stable ICU 2.4 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uset_containsString(const USet* set, const UChar* str, int32_t strLen); /** @@ -809,7 +812,7 @@ uset_containsString(const USet* set, const UChar* str, int32_t strLen); * @return an index from 0..size()-1, or -1 * @stable ICU 3.2 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uset_indexOf(const USet* set, UChar32 c); /** @@ -822,7 +825,7 @@ uset_indexOf(const USet* set, UChar32 c); * @return the character at the given index, or (UChar32)-1. * @stable ICU 3.2 */ -U_STABLE UChar32 U_EXPORT2 +U_CAPI UChar32 U_EXPORT2 uset_charAt(const USet* set, int32_t charIndex); /** @@ -833,7 +836,7 @@ uset_charAt(const USet* set, int32_t charIndex); * contained in set * @stable ICU 2.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uset_size(const USet* set); /** @@ -844,7 +847,7 @@ uset_size(const USet* set); * and/or strings contained in set * @stable ICU 2.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uset_getItemCount(const USet* set); /** @@ -865,7 +868,7 @@ uset_getItemCount(const USet* set); * itemIndex is out of range * @stable ICU 2.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uset_getItem(const USet* set, int32_t itemIndex, UChar32* start, UChar32* end, UChar* str, int32_t strCapacity, @@ -879,7 +882,7 @@ uset_getItem(const USet* set, int32_t itemIndex, * @return true if the test condition is met * @stable ICU 3.2 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uset_containsAll(const USet* set1, const USet* set2); /** @@ -892,7 +895,7 @@ uset_containsAll(const USet* set1, const USet* set2); * @return true if the test condition is met * @stable ICU 3.4 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uset_containsAllCodePoints(const USet* set, const UChar *str, int32_t strLen); /** @@ -903,7 +906,7 @@ uset_containsAllCodePoints(const USet* set, const UChar *str, int32_t strLen); * @return true if the test condition is met * @stable ICU 3.2 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uset_containsNone(const USet* set1, const USet* set2); /** @@ -914,7 +917,7 @@ uset_containsNone(const USet* set1, const USet* set2); * @return true if the test condition is met * @stable ICU 3.2 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uset_containsSome(const USet* set1, const USet* set2); /** @@ -936,7 +939,7 @@ uset_containsSome(const USet* set1, const USet* set2); * @stable ICU 3.8 * @see USetSpanCondition */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uset_span(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition); /** @@ -957,7 +960,7 @@ uset_span(const USet *set, const UChar *s, int32_t length, USetSpanCondition spa * @stable ICU 3.8 * @see USetSpanCondition */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uset_spanBack(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition); /** @@ -979,7 +982,7 @@ uset_spanBack(const USet *set, const UChar *s, int32_t length, USetSpanCondition * @stable ICU 3.8 * @see USetSpanCondition */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uset_spanUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition); /** @@ -1000,7 +1003,7 @@ uset_spanUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition * @stable ICU 3.8 * @see USetSpanCondition */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uset_spanBackUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition); /** @@ -1011,7 +1014,7 @@ uset_spanBackUTF8(const USet *set, const char *s, int32_t length, USetSpanCondit * @return true if the test condition is met * @stable ICU 3.2 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uset_equals(const USet* set1, const USet* set2); /********************************************************************* @@ -1067,7 +1070,7 @@ uset_equals(const USet* set1, const USet* set2); * than U_BUFFER_OVERFLOW_ERROR. * @stable ICU 2.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uset_serialize(const USet* set, uint16_t* dest, int32_t destCapacity, UErrorCode* pErrorCode); /** @@ -1078,7 +1081,7 @@ uset_serialize(const USet* set, uint16_t* dest, int32_t destCapacity, UErrorCode * @return true if the given array is valid, otherwise false * @stable ICU 2.4 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uset_getSerializedSet(USerializedSet* fillSet, const uint16_t* src, int32_t srcLength); /** @@ -1088,18 +1091,18 @@ uset_getSerializedSet(USerializedSet* fillSet, const uint16_t* src, int32_t srcL * @param c The codepoint to set * @stable ICU 2.4 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 uset_setSerializedToOne(USerializedSet* fillSet, UChar32 c); /** - * Returns TRUE if the given USerializedSet contains the given + * Returns true if the given USerializedSet contains the given * character. * @param set the serialized set * @param c The codepoint to check for within the set * @return true if set contains c * @stable ICU 2.4 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uset_serializedContains(const USerializedSet* set, UChar32 c); /** @@ -1111,7 +1114,7 @@ uset_serializedContains(const USerializedSet* set, UChar32 c); * contained in set * @stable ICU 2.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uset_getSerializedRangeCount(const USerializedSet* set); /** @@ -1127,7 +1130,7 @@ uset_getSerializedRangeCount(const USerializedSet* set); * @return true if rangeIndex is valid, otherwise false * @stable ICU 2.4 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uset_getSerializedRange(const USerializedSet* set, int32_t rangeIndex, UChar32* pStart, UChar32* pEnd); diff --git a/deps/icu-small/source/common/unicode/usetiter.h b/deps/icu-small/source/common/unicode/usetiter.h index f3f470f95aa5f5..45d268a05c9b90 100644 --- a/deps/icu-small/source/common/unicode/usetiter.h +++ b/deps/icu-small/source/common/unicode/usetiter.h @@ -176,7 +176,7 @@ class U_COMMON_API UnicodeSetIterator : public UObject { * If there are no more elements in the set, return false. * *

    - * If isString() == TRUE, the value is a + * If isString() == true, the value is a * string, otherwise the value is a * single code point. Elements of either type can be retrieved * with the function getString(), while elements of @@ -197,7 +197,7 @@ class U_COMMON_API UnicodeSetIterator : public UObject { /** * Returns the next element in the set, either a code point range * or a string. If there are no more elements in the set, return - * false. If isString() == TRUE, the value is a + * false. If isString() == true, the value is a * string and can be accessed with getString(). Otherwise the value is a * range of one or more code points from getCodepoint() to * getCodepointeEnd() inclusive. @@ -205,7 +205,7 @@ class U_COMMON_API UnicodeSetIterator : public UObject { *

    The order of iteration is all code points ranges in sorted * order, followed by all strings sorted order. Ranges are * disjoint and non-contiguous. The value returned from getString() - * is undefined unless isString() == TRUE. Do not mix calls to + * is undefined unless isString() == true. Do not mix calls to * next() and nextRange() without calling * reset() between them. The results of doing so are * undefined. diff --git a/deps/icu-small/source/common/unicode/ushape.h b/deps/icu-small/source/common/unicode/ushape.h index 3064e0857281c5..9a85b73e4cba80 100644 --- a/deps/icu-small/source/common/unicode/ushape.h +++ b/deps/icu-small/source/common/unicode/ushape.h @@ -98,7 +98,7 @@ * the return value indicates the necessary destination buffer size. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_shapeArabic(const UChar *source, int32_t sourceLength, UChar *dest, int32_t destSize, uint32_t options, diff --git a/deps/icu-small/source/common/unicode/usprep.h b/deps/icu-small/source/common/unicode/usprep.h index 7cdc6cdd18ea6b..be06189e2e9e6d 100644 --- a/deps/icu-small/source/common/unicode/usprep.h +++ b/deps/icu-small/source/common/unicode/usprep.h @@ -25,7 +25,10 @@ */ #include "unicode/utypes.h" + +#if U_SHOW_CPLUSPLUS_API #include "unicode/localpointer.h" +#endif // U_SHOW_CPLUSPLUS_API /** * @@ -181,7 +184,7 @@ typedef enum UStringPrepProfileType { * @see usprep_close() * @stable ICU 2.8 */ -U_STABLE UStringPrepProfile* U_EXPORT2 +U_CAPI UStringPrepProfile* U_EXPORT2 usprep_open(const char* path, const char* fileName, UErrorCode* status); @@ -197,7 +200,7 @@ usprep_open(const char* path, * @see usprep_close() * @stable ICU 4.2 */ -U_STABLE UStringPrepProfile* U_EXPORT2 +U_CAPI UStringPrepProfile* U_EXPORT2 usprep_openByType(UStringPrepProfileType type, UErrorCode* status); @@ -206,7 +209,7 @@ usprep_openByType(UStringPrepProfileType type, * @param profile The profile to close * @stable ICU 2.8 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 usprep_close(UStringPrepProfile* profile); #if U_SHOW_CPLUSPLUS_API @@ -257,7 +260,7 @@ U_NAMESPACE_END * @stable ICU 2.8 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 usprep_prepare( const UStringPrepProfile* prep, const UChar* src, int32_t srcLength, UChar* dest, int32_t destCapacity, diff --git a/deps/icu-small/source/common/unicode/ustring.h b/deps/icu-small/source/common/unicode/ustring.h index 0d2274a0cabb51..3243acbb7ebfce 100644 --- a/deps/icu-small/source/common/unicode/ustring.h +++ b/deps/icu-small/source/common/unicode/ustring.h @@ -89,7 +89,7 @@ * @return The number of UChars in chars, minus the terminator. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_strlen(const UChar *s); /*@}*/ @@ -106,7 +106,7 @@ u_strlen(const UChar *s); * @return The number of code points in the specified code units. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_countChar32(const UChar *s, int32_t length); /** @@ -127,7 +127,7 @@ u_countChar32(const UChar *s, int32_t length); * than 'number'. Same as (u_countChar32(s, length)>number). * @stable ICU 2.4 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 u_strHasMoreChar32Than(const UChar *s, int32_t length, int32_t number); /** @@ -140,7 +140,7 @@ u_strHasMoreChar32Than(const UChar *s, int32_t length, int32_t number); * @return A pointer to dst. * @stable ICU 2.0 */ -U_STABLE UChar* U_EXPORT2 +U_CAPI UChar* U_EXPORT2 u_strcat(UChar *dst, const UChar *src); @@ -158,7 +158,7 @@ u_strcat(UChar *dst, * @return A pointer to dst. * @stable ICU 2.0 */ -U_STABLE UChar* U_EXPORT2 +U_CAPI UChar* U_EXPORT2 u_strncat(UChar *dst, const UChar *src, int32_t n); @@ -183,7 +183,7 @@ u_strncat(UChar *dst, * @see u_strFindFirst * @see u_strFindLast */ -U_STABLE UChar * U_EXPORT2 +U_CAPI UChar * U_EXPORT2 u_strstr(const UChar *s, const UChar *substring); /** @@ -207,7 +207,7 @@ u_strstr(const UChar *s, const UChar *substring); * @see u_strstr * @see u_strFindLast */ -U_STABLE UChar * U_EXPORT2 +U_CAPI UChar * U_EXPORT2 u_strFindFirst(const UChar *s, int32_t length, const UChar *substring, int32_t subLength); /** @@ -227,7 +227,7 @@ u_strFindFirst(const UChar *s, int32_t length, const UChar *substring, int32_t s * @see u_strstr * @see u_strFindFirst */ -U_STABLE UChar * U_EXPORT2 +U_CAPI UChar * U_EXPORT2 u_strchr(const UChar *s, UChar c); /** @@ -247,7 +247,7 @@ u_strchr(const UChar *s, UChar c); * @see u_strstr * @see u_strFindFirst */ -U_STABLE UChar * U_EXPORT2 +U_CAPI UChar * U_EXPORT2 u_strchr32(const UChar *s, UChar32 c); /** @@ -270,7 +270,7 @@ u_strchr32(const UChar *s, UChar32 c); * @see u_strFindFirst * @see u_strFindLast */ -U_STABLE UChar * U_EXPORT2 +U_CAPI UChar * U_EXPORT2 u_strrstr(const UChar *s, const UChar *substring); /** @@ -294,7 +294,7 @@ u_strrstr(const UChar *s, const UChar *substring); * @see u_strstr * @see u_strFindLast */ -U_STABLE UChar * U_EXPORT2 +U_CAPI UChar * U_EXPORT2 u_strFindLast(const UChar *s, int32_t length, const UChar *substring, int32_t subLength); /** @@ -314,7 +314,7 @@ u_strFindLast(const UChar *s, int32_t length, const UChar *substring, int32_t su * @see u_strrstr * @see u_strFindLast */ -U_STABLE UChar * U_EXPORT2 +U_CAPI UChar * U_EXPORT2 u_strrchr(const UChar *s, UChar c); /** @@ -334,7 +334,7 @@ u_strrchr(const UChar *s, UChar c); * @see u_strrstr * @see u_strFindLast */ -U_STABLE UChar * U_EXPORT2 +U_CAPI UChar * U_EXPORT2 u_strrchr32(const UChar *s, UChar32 c); /** @@ -349,7 +349,7 @@ u_strrchr32(const UChar *s, UChar32 c); * characters in matchSet, or NULL if no such character is found. * @stable ICU 2.0 */ -U_STABLE UChar * U_EXPORT2 +U_CAPI UChar * U_EXPORT2 u_strpbrk(const UChar *string, const UChar *matchSet); /** @@ -365,7 +365,7 @@ u_strpbrk(const UChar *string, const UChar *matchSet); * @see u_strspn * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_strcspn(const UChar *string, const UChar *matchSet); /** @@ -381,7 +381,7 @@ u_strcspn(const UChar *string, const UChar *matchSet); * @see u_strcspn * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_strspn(const UChar *string, const UChar *matchSet); /** @@ -409,7 +409,7 @@ u_strspn(const UChar *string, const UChar *matchSet); * when there are no more tokens. * @stable ICU 2.0 */ -U_STABLE UChar * U_EXPORT2 +U_CAPI UChar * U_EXPORT2 u_strtok_r(UChar *src, const UChar *delim, UChar **saveState); @@ -424,7 +424,7 @@ u_strtok_r(UChar *src, * value if s1 is bitwise greater than s2. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_strcmp(const UChar *s1, const UChar *s2); @@ -439,7 +439,7 @@ u_strcmp(const UChar *s1, * in code point order * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_strcmpCodePointOrder(const UChar *s1, const UChar *s2); /** @@ -462,14 +462,14 @@ u_strcmpCodePointOrder(const UChar *s1, const UChar *s2); * @param s2 Second source string. * @param length2 Length of second source string, or -1 if NUL-terminated. * - * @param codePointOrder Choose between code unit order (FALSE) - * and code point order (TRUE). + * @param codePointOrder Choose between code unit order (false) + * and code point order (true). * * @return <0 or 0 or >0 as usual for string comparisons * * @stable ICU 2.2 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_strCompare(const UChar *s1, int32_t length1, const UChar *s2, int32_t length2, UBool codePointOrder); @@ -485,8 +485,8 @@ u_strCompare(const UChar *s1, int32_t length1, * * @param iter1 First source string iterator. * @param iter2 Second source string iterator. - * @param codePointOrder Choose between code unit order (FALSE) - * and code point order (TRUE). + * @param codePointOrder Choose between code unit order (false) + * and code point order (true). * * @return <0 or 0 or >0 as usual for string comparisons * @@ -494,7 +494,7 @@ u_strCompare(const UChar *s1, int32_t length1, * * @stable ICU 2.6 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_strCompareIter(UCharIterator *iter1, UCharIterator *iter2, UBool codePointOrder); /** @@ -537,7 +537,7 @@ u_strCompareIter(UCharIterator *iter1, UCharIterator *iter2, UBool codePointOrde * * @stable ICU 2.2 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_strCaseCompare(const UChar *s1, int32_t length1, const UChar *s2, int32_t length2, uint32_t options, @@ -555,7 +555,7 @@ u_strCaseCompare(const UChar *s1, int32_t length1, * value if s1 is bitwise greater than s2. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_strncmp(const UChar *ucs1, const UChar *ucs2, int32_t n); @@ -573,7 +573,7 @@ u_strncmp(const UChar *ucs1, * in code point order * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_strncmpCodePointOrder(const UChar *s1, const UChar *s2, int32_t n); /** @@ -595,7 +595,7 @@ u_strncmpCodePointOrder(const UChar *s1, const UChar *s2, int32_t n); * @return A negative, zero, or positive integer indicating the comparison result. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_strcasecmp(const UChar *s1, const UChar *s2, uint32_t options); /** @@ -619,7 +619,7 @@ u_strcasecmp(const UChar *s1, const UChar *s2, uint32_t options); * @return A negative, zero, or positive integer indicating the comparison result. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_strncasecmp(const UChar *s1, const UChar *s2, int32_t n, uint32_t options); /** @@ -643,7 +643,7 @@ u_strncasecmp(const UChar *s1, const UChar *s2, int32_t n, uint32_t options); * @return A negative, zero, or positive integer indicating the comparison result. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_memcasecmp(const UChar *s1, const UChar *s2, int32_t length, uint32_t options); /** @@ -654,7 +654,7 @@ u_memcasecmp(const UChar *s1, const UChar *s2, int32_t length, uint32_t options) * @return A pointer to dst. * @stable ICU 2.0 */ -U_STABLE UChar* U_EXPORT2 +U_CAPI UChar* U_EXPORT2 u_strcpy(UChar *dst, const UChar *src); @@ -669,7 +669,7 @@ u_strcpy(UChar *dst, * @return A pointer to dst. * @stable ICU 2.0 */ -U_STABLE UChar* U_EXPORT2 +U_CAPI UChar* U_EXPORT2 u_strncpy(UChar *dst, const UChar *src, int32_t n); @@ -686,7 +686,7 @@ u_strncpy(UChar *dst, * @return A pointer to dst. * @stable ICU 2.0 */ -U_STABLE UChar* U_EXPORT2 u_uastrcpy(UChar *dst, +U_CAPI UChar* U_EXPORT2 u_uastrcpy(UChar *dst, const char *src ); /** @@ -701,7 +701,7 @@ U_STABLE UChar* U_EXPORT2 u_uastrcpy(UChar *dst, * @return A pointer to dst. * @stable ICU 2.0 */ -U_STABLE UChar* U_EXPORT2 u_uastrncpy(UChar *dst, +U_CAPI UChar* U_EXPORT2 u_uastrncpy(UChar *dst, const char *src, int32_t n); @@ -715,7 +715,7 @@ U_STABLE UChar* U_EXPORT2 u_uastrncpy(UChar *dst, * @return A pointer to dst. * @stable ICU 2.0 */ -U_STABLE char* U_EXPORT2 u_austrcpy(char *dst, +U_CAPI char* U_EXPORT2 u_austrcpy(char *dst, const UChar *src ); /** @@ -730,7 +730,7 @@ U_STABLE char* U_EXPORT2 u_austrcpy(char *dst, * @return A pointer to dst. * @stable ICU 2.0 */ -U_STABLE char* U_EXPORT2 u_austrncpy(char *dst, +U_CAPI char* U_EXPORT2 u_austrncpy(char *dst, const UChar *src, int32_t n ); @@ -744,7 +744,7 @@ U_STABLE char* U_EXPORT2 u_austrncpy(char *dst, * @return A pointer to dest * @stable ICU 2.0 */ -U_STABLE UChar* U_EXPORT2 +U_CAPI UChar* U_EXPORT2 u_memcpy(UChar *dest, const UChar *src, int32_t count); /** @@ -755,7 +755,7 @@ u_memcpy(UChar *dest, const UChar *src, int32_t count); * @return A pointer to dest * @stable ICU 2.0 */ -U_STABLE UChar* U_EXPORT2 +U_CAPI UChar* U_EXPORT2 u_memmove(UChar *dest, const UChar *src, int32_t count); /** @@ -767,7 +767,7 @@ u_memmove(UChar *dest, const UChar *src, int32_t count); * @return A pointer to dest. * @stable ICU 2.0 */ -U_STABLE UChar* U_EXPORT2 +U_CAPI UChar* U_EXPORT2 u_memset(UChar *dest, UChar c, int32_t count); /** @@ -781,7 +781,7 @@ u_memset(UChar *dest, UChar c, int32_t count); * When buf1 > buf2, a positive number is returned. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_memcmp(const UChar *buf1, const UChar *buf2, int32_t count); /** @@ -797,7 +797,7 @@ u_memcmp(const UChar *buf1, const UChar *buf2, int32_t count); * in code point order * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_memcmpCodePointOrder(const UChar *s1, const UChar *s2, int32_t count); /** @@ -817,7 +817,7 @@ u_memcmpCodePointOrder(const UChar *s1, const UChar *s2, int32_t count); * @see u_memchr32 * @see u_strFindFirst */ -U_STABLE UChar* U_EXPORT2 +U_CAPI UChar* U_EXPORT2 u_memchr(const UChar *s, UChar c, int32_t count); /** @@ -837,7 +837,7 @@ u_memchr(const UChar *s, UChar c, int32_t count); * @see u_memchr * @see u_strFindFirst */ -U_STABLE UChar* U_EXPORT2 +U_CAPI UChar* U_EXPORT2 u_memchr32(const UChar *s, UChar32 c, int32_t count); /** @@ -857,7 +857,7 @@ u_memchr32(const UChar *s, UChar32 c, int32_t count); * @see u_memrchr32 * @see u_strFindLast */ -U_STABLE UChar* U_EXPORT2 +U_CAPI UChar* U_EXPORT2 u_memrchr(const UChar *s, UChar c, int32_t count); /** @@ -877,7 +877,7 @@ u_memrchr(const UChar *s, UChar c, int32_t count); * @see u_memrchr * @see u_strFindLast */ -U_STABLE UChar* U_EXPORT2 +U_CAPI UChar* U_EXPORT2 u_memrchr32(const UChar *s, UChar32 c, int32_t count); /** @@ -903,13 +903,13 @@ u_memrchr32(const UChar *s, UChar32 c, int32_t count); * * U_STRING_DECL(ustringVar1, "Quick-Fox 2", 11); * U_STRING_DECL(ustringVar2, "jumps 5%", 8); - * static UBool didInit=FALSE; + * static UBool didInit=false; * * int32_t function() { * if(!didInit) { * U_STRING_INIT(ustringVar1, "Quick-Fox 2", 11); * U_STRING_INIT(ustringVar2, "jumps 5%", 8); - * didInit=TRUE; + * didInit=true; * } * return u_strcmp(ustringVar1, ustringVar2); * } @@ -992,7 +992,7 @@ u_memrchr32(const UChar *s, UChar32 c, int32_t count); * @see UnicodeString#unescapeAt() * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_unescape(const char *src, UChar *dest, int32_t destCapacity); @@ -1040,7 +1040,7 @@ U_CDECL_END * @see UnicodeString#unescapeAt() * @stable ICU 2.0 */ -U_STABLE UChar32 U_EXPORT2 +U_CAPI UChar32 U_EXPORT2 u_unescapeAt(UNESCAPE_CHAR_AT charAt, int32_t *offset, int32_t length, @@ -1066,7 +1066,7 @@ u_unescapeAt(UNESCAPE_CHAR_AT charAt, * only some of the result was written to the destination buffer. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_strToUpper(UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, const char *locale, @@ -1092,7 +1092,7 @@ u_strToUpper(UChar *dest, int32_t destCapacity, * only some of the result was written to the destination buffer. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_strToLower(UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, const char *locale, @@ -1138,7 +1138,7 @@ u_strToLower(UChar *dest, int32_t destCapacity, * only some of the result was written to the destination buffer. * @stable ICU 2.1 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_strToTitle(UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, UBreakIterator *titleIter, @@ -1171,7 +1171,7 @@ u_strToTitle(UChar *dest, int32_t destCapacity, * only some of the result was written to the destination buffer. * @stable ICU 2.0 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_strFoldCase(UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, uint32_t options, @@ -1200,7 +1200,7 @@ u_strFoldCase(UChar *dest, int32_t destCapacity, * @return The pointer to destination buffer. * @stable ICU 2.0 */ -U_STABLE wchar_t* U_EXPORT2 +U_CAPI wchar_t* U_EXPORT2 u_strToWCS(wchar_t *dest, int32_t destCapacity, int32_t *pDestLength, @@ -1229,7 +1229,7 @@ u_strToWCS(wchar_t *dest, * @return The pointer to destination buffer. * @stable ICU 2.0 */ -U_STABLE UChar* U_EXPORT2 +U_CAPI UChar* U_EXPORT2 u_strFromWCS(UChar *dest, int32_t destCapacity, int32_t *pDestLength, @@ -1260,7 +1260,7 @@ u_strFromWCS(UChar *dest, * @see u_strToUTF8WithSub * @see u_strFromUTF8 */ -U_STABLE char* U_EXPORT2 +U_CAPI char* U_EXPORT2 u_strToUTF8(char *dest, int32_t destCapacity, int32_t *pDestLength, @@ -1290,7 +1290,7 @@ u_strToUTF8(char *dest, * @see u_strFromUTF8WithSub * @see u_strFromUTF8Lenient */ -U_STABLE UChar* U_EXPORT2 +U_CAPI UChar* U_EXPORT2 u_strFromUTF8(UChar *dest, int32_t destCapacity, int32_t *pDestLength, @@ -1333,7 +1333,7 @@ u_strFromUTF8(UChar *dest, * @see u_strFromUTF8WithSub * @stable ICU 3.6 */ -U_STABLE char* U_EXPORT2 +U_CAPI char* U_EXPORT2 u_strToUTF8WithSub(char *dest, int32_t destCapacity, int32_t *pDestLength, @@ -1378,7 +1378,7 @@ u_strToUTF8WithSub(char *dest, * @see u_strToUTF8WithSub * @stable ICU 3.6 */ -U_STABLE UChar* U_EXPORT2 +U_CAPI UChar* U_EXPORT2 u_strFromUTF8WithSub(UChar *dest, int32_t destCapacity, int32_t *pDestLength, @@ -1438,7 +1438,7 @@ u_strFromUTF8WithSub(UChar *dest, * @see u_strToUTF8WithSub * @stable ICU 3.6 */ -U_STABLE UChar * U_EXPORT2 +U_CAPI UChar * U_EXPORT2 u_strFromUTF8Lenient(UChar *dest, int32_t destCapacity, int32_t *pDestLength, @@ -1468,7 +1468,7 @@ u_strFromUTF8Lenient(UChar *dest, * @see u_strFromUTF32 * @stable ICU 2.0 */ -U_STABLE UChar32* U_EXPORT2 +U_CAPI UChar32* U_EXPORT2 u_strToUTF32(UChar32 *dest, int32_t destCapacity, int32_t *pDestLength, @@ -1498,7 +1498,7 @@ u_strToUTF32(UChar32 *dest, * @see u_strToUTF32 * @stable ICU 2.0 */ -U_STABLE UChar* U_EXPORT2 +U_CAPI UChar* U_EXPORT2 u_strFromUTF32(UChar *dest, int32_t destCapacity, int32_t *pDestLength, @@ -1541,7 +1541,7 @@ u_strFromUTF32(UChar *dest, * @see u_strFromUTF32WithSub * @stable ICU 4.2 */ -U_STABLE UChar32* U_EXPORT2 +U_CAPI UChar32* U_EXPORT2 u_strToUTF32WithSub(UChar32 *dest, int32_t destCapacity, int32_t *pDestLength, @@ -1585,7 +1585,7 @@ u_strToUTF32WithSub(UChar32 *dest, * @see u_strToUTF32WithSub * @stable ICU 4.2 */ -U_STABLE UChar* U_EXPORT2 +U_CAPI UChar* U_EXPORT2 u_strFromUTF32WithSub(UChar *dest, int32_t destCapacity, int32_t *pDestLength, @@ -1626,7 +1626,7 @@ u_strFromUTF32WithSub(UChar *dest, * @see u_strToUTF8WithSub * @see u_strFromJavaModifiedUTF8WithSub */ -U_STABLE char* U_EXPORT2 +U_CAPI char* U_EXPORT2 u_strToJavaModifiedUTF8( char *dest, int32_t destCapacity, @@ -1676,7 +1676,7 @@ u_strToJavaModifiedUTF8( * @see u_strToJavaModifiedUTF8 * @stable ICU 4.4 */ -U_STABLE UChar* U_EXPORT2 +U_CAPI UChar* U_EXPORT2 u_strFromJavaModifiedUTF8WithSub( UChar *dest, int32_t destCapacity, diff --git a/deps/icu-small/source/common/unicode/utext.h b/deps/icu-small/source/common/unicode/utext.h index d36c1c035e70f1..084362be78fc9d 100644 --- a/deps/icu-small/source/common/unicode/utext.h +++ b/deps/icu-small/source/common/unicode/utext.h @@ -180,7 +180,7 @@ typedef struct UText UText; /**< C typedef for struct UText. @stable ICU 3.6 */ * * @stable ICU 3.4 */ -U_STABLE UText * U_EXPORT2 +U_CAPI UText * U_EXPORT2 utext_close(UText *ut); /** @@ -204,7 +204,7 @@ utext_close(UText *ut); * will always be used and returned. * @stable ICU 3.4 */ -U_STABLE UText * U_EXPORT2 +U_CAPI UText * U_EXPORT2 utext_openUTF8(UText *ut, const char *s, int64_t length, UErrorCode *status); @@ -222,7 +222,7 @@ utext_openUTF8(UText *ut, const char *s, int64_t length, UErrorCode *status); * will always be used and returned. * @stable ICU 3.4 */ -U_STABLE UText * U_EXPORT2 +U_CAPI UText * U_EXPORT2 utext_openUChars(UText *ut, const UChar *s, int64_t length, UErrorCode *status); @@ -239,7 +239,7 @@ utext_openUChars(UText *ut, const UChar *s, int64_t length, UErrorCode *status); * will always be used and returned. * @stable ICU 3.4 */ -U_STABLE UText * U_EXPORT2 +U_CAPI UText * U_EXPORT2 utext_openUnicodeString(UText *ut, icu::UnicodeString *s, UErrorCode *status); @@ -255,7 +255,7 @@ utext_openUnicodeString(UText *ut, icu::UnicodeString *s, UErrorCode *status); * will always be used and returned. * @stable ICU 3.4 */ -U_STABLE UText * U_EXPORT2 +U_CAPI UText * U_EXPORT2 utext_openConstUnicodeString(UText *ut, const icu::UnicodeString *s, UErrorCode *status); @@ -271,7 +271,7 @@ utext_openConstUnicodeString(UText *ut, const icu::UnicodeString *s, UErrorCode * @see Replaceable * @stable ICU 3.4 */ -U_STABLE UText * U_EXPORT2 +U_CAPI UText * U_EXPORT2 utext_openReplaceable(UText *ut, icu::Replaceable *rep, UErrorCode *status); /** @@ -286,7 +286,7 @@ utext_openReplaceable(UText *ut, icu::Replaceable *rep, UErrorCode *status); * @see Replaceable * @stable ICU 3.4 */ -U_STABLE UText * U_EXPORT2 +U_CAPI UText * U_EXPORT2 utext_openCharacterIterator(UText *ut, icu::CharacterIterator *ci, UErrorCode *status); #endif @@ -323,7 +323,7 @@ utext_openCharacterIterator(UText *ut, icu::CharacterIterator *ci, UErrorCode *s * shallow clones provide some protection against errors of this type by * disabling text modification via the cloned UText. * - * A shallow clone made with the readOnly parameter == FALSE will preserve the + * A shallow clone made with the readOnly parameter == false will preserve the * utext_isWritable() state of the source object. Note, however, that * write operations must be avoided while more than one UText exists that refer * to the same underlying text. @@ -339,8 +339,8 @@ utext_openCharacterIterator(UText *ut, icu::CharacterIterator *ci, UErrorCode *s * If non-NULL, must refer to an already existing UText, which will then * be reset to become the clone. * @param src The UText to be cloned. - * @param deep TRUE to request a deep clone, FALSE for a shallow clone. - * @param readOnly TRUE to request that the cloned UText have read only access to the + * @param deep true to request a deep clone, false for a shallow clone. + * @param readOnly true to request that the cloned UText have read only access to the * underlying text. * @param status Errors are returned here. For deep clones, U_UNSUPPORTED_ERROR @@ -349,7 +349,7 @@ utext_openCharacterIterator(UText *ut, icu::CharacterIterator *ci, UErrorCode *s * @return The newly created clone, or NULL if the clone operation failed. * @stable ICU 3.4 */ -U_STABLE UText * U_EXPORT2 +U_CAPI UText * U_EXPORT2 utext_clone(UText *dest, const UText *src, UBool deep, UBool readOnly, UErrorCode *status); @@ -357,14 +357,14 @@ utext_clone(UText *dest, const UText *src, UBool deep, UBool readOnly, UErrorCod * Compare two UText objects for equality. * UTexts are equal if they are iterating over the same text, and * have the same iteration position within the text. - * If either or both of the parameters are NULL, the comparison is FALSE. + * If either or both of the parameters are NULL, the comparison is false. * * @param a The first of the two UTexts to compare. * @param b The other UText to be compared. - * @return TRUE if the two UTexts are equal. + * @return true if the two UTexts are equal. * @stable ICU 3.6 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 utext_equals(const UText *a, const UText *b); @@ -385,11 +385,11 @@ utext_equals(const UText *a, const UText *b); * * @stable ICU 3.4 */ -U_STABLE int64_t U_EXPORT2 +U_CAPI int64_t U_EXPORT2 utext_nativeLength(UText *ut); /** - * Return TRUE if calculating the length of the text could be expensive. + * Return true if calculating the length of the text could be expensive. * Finding the length of NUL terminated strings is considered to be expensive. * * Note that the value of this function may change @@ -398,10 +398,10 @@ utext_nativeLength(UText *ut); * be expensive to report it. * * @param ut the text to be accessed. - * @return TRUE if determining the length of the text could be time consuming. + * @return true if determining the length of the text could be time consuming. * @stable ICU 3.4 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 utext_isLengthExpensive(const UText *ut); /** @@ -429,7 +429,7 @@ utext_isLengthExpensive(const UText *ut); * @return the code point at the specified index. * @stable ICU 3.4 */ -U_STABLE UChar32 U_EXPORT2 +U_CAPI UChar32 U_EXPORT2 utext_char32At(UText *ut, int64_t nativeIndex); @@ -443,7 +443,7 @@ utext_char32At(UText *ut, int64_t nativeIndex); * @return the Unicode code point at the current iterator position. * @stable ICU 3.4 */ -U_STABLE UChar32 U_EXPORT2 +U_CAPI UChar32 U_EXPORT2 utext_current32(UText *ut); @@ -465,7 +465,7 @@ utext_current32(UText *ut); * @see UTEXT_NEXT32 * @stable ICU 3.4 */ -U_STABLE UChar32 U_EXPORT2 +U_CAPI UChar32 U_EXPORT2 utext_next32(UText *ut); @@ -486,7 +486,7 @@ utext_next32(UText *ut); * @see UTEXT_PREVIOUS32 * @stable ICU 3.4 */ -U_STABLE UChar32 U_EXPORT2 +U_CAPI UChar32 U_EXPORT2 utext_previous32(UText *ut); @@ -508,7 +508,7 @@ utext_previous32(UText *ut); * or U_SENTINEL (-1) if it is out of bounds. * @stable ICU 3.4 */ -U_STABLE UChar32 U_EXPORT2 +U_CAPI UChar32 U_EXPORT2 utext_next32From(UText *ut, int64_t nativeIndex); @@ -528,7 +528,7 @@ utext_next32From(UText *ut, int64_t nativeIndex); * * @stable ICU 3.4 */ -U_STABLE UChar32 U_EXPORT2 +U_CAPI UChar32 U_EXPORT2 utext_previous32From(UText *ut, int64_t nativeIndex); /** @@ -543,7 +543,7 @@ utext_previous32From(UText *ut, int64_t nativeIndex); * @return the current index position, in the native units of the text provider. * @stable ICU 3.4 */ -U_STABLE int64_t U_EXPORT2 +U_CAPI int64_t U_EXPORT2 utext_getNativeIndex(const UText *ut); /** @@ -569,7 +569,7 @@ utext_getNativeIndex(const UText *ut); * @param nativeIndex the native unit index of the new iteration position. * @stable ICU 3.4 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 utext_setNativeIndex(UText *ut, int64_t nativeIndex); /** @@ -584,11 +584,11 @@ utext_setNativeIndex(UText *ut, int64_t nativeIndex); * * @param ut the text to be accessed. * @param delta the signed number of code points to move the iteration position. - * @return TRUE if the position could be moved the requested number of positions while + * @return true if the position could be moved the requested number of positions while * staying within the range [0 - text length]. * @stable ICU 3.4 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 utext_moveIndex32(UText *ut, int32_t delta); /** @@ -613,7 +613,7 @@ utext_moveIndex32(UText *ut, int32_t delta); * or zero if the current position is at the start of the text. * @stable ICU 3.6 */ -U_STABLE int64_t U_EXPORT2 +U_CAPI int64_t U_EXPORT2 utext_getPreviousNativeIndex(UText *ut); @@ -651,7 +651,7 @@ utext_getPreviousNativeIndex(UText *ut); * * @stable ICU 3.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 utext_extract(UText *ut, int64_t nativeStart, int64_t nativeLimit, UChar *dest, int32_t destCapacity, @@ -768,16 +768,16 @@ utext_extract(UText *ut, /** - * Return TRUE if the text can be written (modified) with utext_replace() or + * Return true if the text can be written (modified) with utext_replace() or * utext_copy(). For the text to be writable, the text provider must * be of a type that supports writing and the UText must not be frozen. * - * Attempting to modify text when utext_isWriteable() is FALSE will fail - + * Attempting to modify text when utext_isWriteable() is false will fail - * the text will not be modified, and an error will be returned from the function * that attempted the modification. * * @param ut the UText to be tested. - * @return TRUE if the text is modifiable. + * @return true if the text is modifiable. * * @see utext_freeze() * @see utext_replace() @@ -785,7 +785,7 @@ utext_extract(UText *ut, * @stable ICU 3.4 * */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 utext_isWritable(const UText *ut); @@ -794,10 +794,10 @@ utext_isWritable(const UText *ut); * @see Replaceable::hasMetaData() * * @param ut The UText to be tested - * @return TRUE if the underlying text includes meta data. + * @return true if the underlying text includes meta data. * @stable ICU 3.4 */ -U_STABLE UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 utext_hasMetaData(const UText *ut); @@ -808,7 +808,7 @@ utext_hasMetaData(const UText *ut); * newly inserted replacement text. * * This function is only available on UText types that support writing, - * that is, ones where utext_isWritable() returns TRUE. + * that is, ones where utext_isWritable() returns true. * * When using this function, there should be only a single UText opened onto the * underlying native text string. Behavior after a replace operation @@ -828,7 +828,7 @@ utext_hasMetaData(const UText *ut); * * @stable ICU 3.4 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 utext_replace(UText *ut, int64_t nativeStart, int64_t nativeLimit, const UChar *replacementText, int32_t replacementLength, @@ -850,7 +850,7 @@ utext_replace(UText *ut, * at the destination position. * * This function is only available on UText types that support writing, - * that is, ones where utext_isWritable() returns TRUE. + * that is, ones where utext_isWritable() returns true. * * When using this function, there should be only a single UText opened onto the * underlying native text string. Behavior after a copy operation @@ -863,12 +863,12 @@ utext_replace(UText *ut, * to be copied. * @param destIndex The native destination index to which the source substring is * copied or moved. - * @param move If TRUE, then the substring is moved, not copied/duplicated. + * @param move If true, then the substring is moved, not copied/duplicated. * @param status receives any error status. Possible errors include U_NO_WRITE_PERMISSION * * @stable ICU 3.4 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 utext_copy(UText *ut, int64_t nativeStart, int64_t nativeLimit, int64_t destIndex, @@ -897,7 +897,7 @@ utext_copy(UText *ut, * @see utext_isWritable() * @stable ICU 3.6 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 utext_freeze(UText *ut); @@ -972,7 +972,7 @@ enum { * @param dest A UText struct to be filled in with the result of the clone operation, * or NULL if the clone function should heap-allocate a new UText struct. * @param src The UText to be cloned. - * @param deep TRUE to request a deep clone, FALSE for a shallow clone. + * @param deep true to request a deep clone, false for a shallow clone. * @param status Errors are returned here. For deep clones, U_UNSUPPORTED_ERROR * should be returned if the text provider is unable to clone the * original text. @@ -1008,9 +1008,9 @@ UTextNativeLength(UText *ut); * * @param ut the UText being accessed. * @param nativeIndex Requested index of the text to be accessed. - * @param forward If TRUE, then the returned chunk must contain text + * @param forward If true, then the returned chunk must contain text * starting from the index, so that start<=indexUsage: * ICU coding guidelines for if() statements should be followed when using these macros. @@ -124,7 +124,7 @@ /** * Is this code point a Unicode noncharacter? * @param c 32-bit code point - * @return TRUE or FALSE + * @return true or false * @stable ICU 2.4 */ #define U_IS_UNICODE_NONCHAR(c) \ @@ -145,7 +145,7 @@ * and that boundary is tested first for performance. * * @param c 32-bit code point - * @return TRUE or FALSE + * @return true or false * @stable ICU 2.4 */ #define U_IS_UNICODE_CHAR(c) \ @@ -155,7 +155,7 @@ /** * Is this code point a BMP code point (U+0000..U+ffff)? * @param c 32-bit code point - * @return TRUE or FALSE + * @return true or false * @stable ICU 2.8 */ #define U_IS_BMP(c) ((uint32_t)(c)<=0xffff) @@ -163,7 +163,7 @@ /** * Is this code point a supplementary code point (U+10000..U+10ffff)? * @param c 32-bit code point - * @return TRUE or FALSE + * @return true or false * @stable ICU 2.8 */ #define U_IS_SUPPLEMENTARY(c) ((uint32_t)((c)-0x10000)<=0xfffff) @@ -171,7 +171,7 @@ /** * Is this code point a lead surrogate (U+d800..U+dbff)? * @param c 32-bit code point - * @return TRUE or FALSE + * @return true or false * @stable ICU 2.4 */ #define U_IS_LEAD(c) (((c)&0xfffffc00)==0xd800) @@ -179,7 +179,7 @@ /** * Is this code point a trail surrogate (U+dc00..U+dfff)? * @param c 32-bit code point - * @return TRUE or FALSE + * @return true or false * @stable ICU 2.4 */ #define U_IS_TRAIL(c) (((c)&0xfffffc00)==0xdc00) @@ -187,7 +187,7 @@ /** * Is this code point a surrogate (U+d800..U+dfff)? * @param c 32-bit code point - * @return TRUE or FALSE + * @return true or false * @stable ICU 2.4 */ #define U_IS_SURROGATE(c) (((c)&0xfffff800)==0xd800) @@ -196,7 +196,7 @@ * Assuming c is a surrogate code point (U_IS_SURROGATE(c)), * is it a lead surrogate? * @param c 32-bit code point - * @return TRUE or FALSE + * @return true or false * @stable ICU 2.4 */ #define U_IS_SURROGATE_LEAD(c) (((c)&0x400)==0) @@ -205,7 +205,7 @@ * Assuming c is a surrogate code point (U_IS_SURROGATE(c)), * is it a trail surrogate? * @param c 32-bit code point - * @return TRUE or FALSE + * @return true or false * @stable ICU 4.2 */ #define U_IS_SURROGATE_TRAIL(c) (((c)&0x400)!=0) diff --git a/deps/icu-small/source/common/unicode/utf16.h b/deps/icu-small/source/common/unicode/utf16.h index 3315214ae69d86..9d68902d2de0f3 100644 --- a/deps/icu-small/source/common/unicode/utf16.h +++ b/deps/icu-small/source/common/unicode/utf16.h @@ -23,7 +23,7 @@ * This file defines macros to deal with 16-bit Unicode (UTF-16) code units and strings. * * For more information see utf.h and the ICU User Guide Strings chapter - * (http://userguide.icu-project.org/strings). + * (https://unicode-org.github.io/icu/userguide/strings). * * Usage: * ICU coding guidelines for if() statements should be followed when using these macros. @@ -34,6 +34,7 @@ #ifndef __UTF16_H__ #define __UTF16_H__ +#include #include "unicode/umachine.h" #ifndef __UTF_H__ # include "unicode/utf.h" @@ -44,7 +45,7 @@ /** * Does this code unit alone encode a code point (BMP, not a surrogate)? * @param c 16-bit code unit - * @return TRUE or FALSE + * @return true or false * @stable ICU 2.4 */ #define U16_IS_SINGLE(c) !U_IS_SURROGATE(c) @@ -52,7 +53,7 @@ /** * Is this code unit a lead surrogate (U+d800..U+dbff)? * @param c 16-bit code unit - * @return TRUE or FALSE + * @return true or false * @stable ICU 2.4 */ #define U16_IS_LEAD(c) (((c)&0xfffffc00)==0xd800) @@ -60,7 +61,7 @@ /** * Is this code unit a trail surrogate (U+dc00..U+dfff)? * @param c 16-bit code unit - * @return TRUE or FALSE + * @return true or false * @stable ICU 2.4 */ #define U16_IS_TRAIL(c) (((c)&0xfffffc00)==0xdc00) @@ -68,7 +69,7 @@ /** * Is this code unit a surrogate (U+d800..U+dfff)? * @param c 16-bit code unit - * @return TRUE or FALSE + * @return true or false * @stable ICU 2.4 */ #define U16_IS_SURROGATE(c) U_IS_SURROGATE(c) @@ -77,7 +78,7 @@ * Assuming c is a surrogate code point (U16_IS_SURROGATE(c)), * is it a lead surrogate? * @param c 16-bit code unit - * @return TRUE or FALSE + * @return true or false * @stable ICU 2.4 */ #define U16_IS_SURROGATE_LEAD(c) (((c)&0x400)==0) @@ -86,7 +87,7 @@ * Assuming c is a surrogate code point (U16_IS_SURROGATE(c)), * is it a trail surrogate? * @param c 16-bit code unit - * @return TRUE or FALSE + * @return true or false * @stable ICU 4.2 */ #define U16_IS_SURROGATE_TRAIL(c) (((c)&0x400)!=0) @@ -379,13 +380,13 @@ * "Safe" macro, checks for a valid code point. * If a surrogate pair is written, checks for sufficient space in the string. * If the code point is not valid or a trail surrogate does not fit, - * then isError is set to TRUE. + * then isError is set to true. * * @param s const UChar * string buffer * @param i string offset, must be i>10)+0xd7c0); \ (s)[(i)++]=(uint16_t)(((c)&0x3ff)|0xdc00); \ } else /* c>0x10ffff or not enough space */ { \ - (isError)=TRUE; \ + (isError)=true; \ } \ } UPRV_BLOCK_MACRO_END diff --git a/deps/icu-small/source/common/unicode/utf8.h b/deps/icu-small/source/common/unicode/utf8.h index bb001303747efe..58bda2cbe51290 100644 --- a/deps/icu-small/source/common/unicode/utf8.h +++ b/deps/icu-small/source/common/unicode/utf8.h @@ -23,7 +23,7 @@ * This file defines macros to deal with 8-bit Unicode (UTF-8) code units (bytes) and strings. * * For more information see utf.h and the ICU User Guide Strings chapter - * (http://userguide.icu-project.org/strings). + * (https://unicode-org.github.io/icu/userguide/strings). * * Usage: * ICU coding guidelines for if() statements should be followed when using these macros. @@ -34,6 +34,7 @@ #ifndef __UTF8_H__ #define __UTF8_H__ +#include #include "unicode/umachine.h" #ifndef __UTF_H__ # include "unicode/utf.h" @@ -117,48 +118,48 @@ * Function for handling "next code point" with error-checking. * * This is internal since it is not meant to be called directly by external clients; - * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this + * however it is called by public macros in this * file and thus must remain stable, and should not be hidden when other internal * functions are hidden (otherwise public macros would fail to compile). * @internal */ -U_STABLE UChar32 U_EXPORT2 +U_CAPI UChar32 U_EXPORT2 utf8_nextCharSafeBody(const uint8_t *s, int32_t *pi, int32_t length, UChar32 c, UBool strict); /** * Function for handling "append code point" with error-checking. * * This is internal since it is not meant to be called directly by external clients; - * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this + * however it is called by public macros in this * file and thus must remain stable, and should not be hidden when other internal * functions are hidden (otherwise public macros would fail to compile). * @internal */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 utf8_appendCharSafeBody(uint8_t *s, int32_t i, int32_t length, UChar32 c, UBool *pIsError); /** * Function for handling "previous code point" with error-checking. * * This is internal since it is not meant to be called directly by external clients; - * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this + * however it is called by public macros in this * file and thus must remain stable, and should not be hidden when other internal * functions are hidden (otherwise public macros would fail to compile). * @internal */ -U_STABLE UChar32 U_EXPORT2 +U_CAPI UChar32 U_EXPORT2 utf8_prevCharSafeBody(const uint8_t *s, int32_t start, int32_t *pi, UChar32 c, UBool strict); /** * Function for handling "skip backward one code point" with error-checking. * * This is internal since it is not meant to be called directly by external clients; - * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this + * however it is called by public macros in this * file and thus must remain stable, and should not be hidden when other internal * functions are hidden (otherwise public macros would fail to compile). * @internal */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i); /* single-code point definitions -------------------------------------------- */ @@ -166,7 +167,7 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i); /** * Does this code unit (byte) encode a code point by itself (US-ASCII 0..0x7f)? * @param c 8-bit code unit (byte) - * @return TRUE or FALSE + * @return true or false * @stable ICU 2.4 */ #define U8_IS_SINGLE(c) (((c)&0x80)==0) @@ -174,7 +175,7 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i); /** * Is this code unit (byte) a UTF-8 lead byte? (0xC2..0xF4) * @param c 8-bit code unit (byte) - * @return TRUE or FALSE + * @return true or false * @stable ICU 2.4 */ #define U8_IS_LEAD(c) ((uint8_t)((c)-0xc2)<=0x32) @@ -183,7 +184,7 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i); /** * Is this code unit (byte) a UTF-8 trail byte? (0x80..0xBF) * @param c 8-bit code unit (byte) - * @return TRUE or FALSE + * @return true or false * @stable ICU 2.4 */ #define U8_IS_TRAIL(c) ((int8_t)(c)<-0x40) @@ -445,13 +446,13 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i); * "Safe" macro, checks for a valid code point. * If a non-ASCII code point is written, checks for sufficient space in the string. * If the code point is not valid or trail bytes do not fit, - * then isError is set to TRUE. + * then isError is set to true. * * @param s const uint8_t * string buffer * @param i int32_t string offset, must be i>6)&0x3f)|0x80); \ (s)[(i)++]=(uint8_t)((__uc&0x3f)|0x80); \ } else { \ - (isError)=TRUE; \ + (isError)=true; \ } \ } UPRV_BLOCK_MACRO_END diff --git a/deps/icu-small/source/common/unicode/utf_old.h b/deps/icu-small/source/common/unicode/utf_old.h index b2428e6b31e282..160f5ad0a9f248 100644 --- a/deps/icu-small/source/common/unicode/utf_old.h +++ b/deps/icu-small/source/common/unicode/utf_old.h @@ -109,7 +109,7 @@ * Where such a distinction is useful, there are two versions of the macros, "unsafe" and "safe" * ones with ..._UNSAFE and ..._SAFE suffixes. The unsafe macros are fast but may cause * program failures if the strings are not well-formed. The safe macros have an additional, boolean - * parameter "strict". If strict is FALSE, then only illegal sequences are detected. + * parameter "strict". If strict is false, then only illegal sequences are detected. * Otherwise, irregular sequences and non-characters are detected as well (like single surrogates). * Safe macros return special error code points for illegal/irregular sequences: * Typically, U+ffff, or values that would result in a code unit sequence of the same length @@ -181,7 +181,7 @@ typedef int32_t UTextOffset; /** * The default choice for general Unicode string macros is to use the ..._SAFE macro implementations - * with strict=FALSE. + * with strict=false. * * @deprecated ICU 2.4. Obsolete, see utf_old.h. */ diff --git a/deps/icu-small/source/common/unicode/utrace.h b/deps/icu-small/source/common/unicode/utrace.h index c7d51ff44f5bf7..bb8e3e8109cc66 100644 --- a/deps/icu-small/source/common/unicode/utrace.h +++ b/deps/icu-small/source/common/unicode/utrace.h @@ -112,11 +112,9 @@ typedef enum UTraceFunctionNumber { UTRACE_COLLATION_LIMIT, #endif // U_HIDE_DEPRECATED_API -#ifndef U_HIDE_DRAFT_API - /** * The lowest resource/data location. - * @draft ICU 65 + * @stable ICU 65 */ UTRACE_UDATA_START=0x3000, @@ -133,7 +131,7 @@ typedef enum UTraceFunctionNumber { * - "get" (a path was loaded, but the value was not accessed) * - "getalias" (a path was loaded, and an alias was resolved) * - * @draft ICU 65 + * @stable ICU 65 */ UTRACE_UDATA_RESOURCE=UTRACE_UDATA_START, @@ -141,7 +139,7 @@ typedef enum UTraceFunctionNumber { * Indicates that a resource bundle was opened. * * Provides one C-style string to UTraceData: file name. - * @draft ICU 65 + * @stable ICU 65 */ UTRACE_UDATA_BUNDLE, @@ -150,7 +148,7 @@ typedef enum UTraceFunctionNumber { * * Provides one C-style string to UTraceData: file name. * - * @draft ICU 65 + * @stable ICU 65 */ UTRACE_UDATA_DATA_FILE, @@ -163,12 +161,10 @@ typedef enum UTraceFunctionNumber { * * Provides one C-style string to UTraceData: file name. * - * @draft ICU 65 + * @stable ICU 65 */ UTRACE_UDATA_RES_FILE, -#endif // U_HIDE_DRAFT_API - #ifndef U_HIDE_INTERNAL_API /** * One more than the highest normal resource/data trace location. @@ -249,7 +245,7 @@ typedef enum UTraceFunctionNumber { * @param traceLevel A UTraceLevel value. * @stable ICU 2.8 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 utrace_setLevel(int32_t traceLevel); /** @@ -257,7 +253,7 @@ utrace_setLevel(int32_t traceLevel); * @return The UTraceLevel value being used by ICU. * @stable ICU 2.8 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 utrace_getLevel(void); /* Trace function pointers types ----------------------------- */ @@ -331,7 +327,7 @@ UTraceData(const void *context, int32_t fnNumber, int32_t level, * * @stable ICU 2.8 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 utrace_setFunctions(const void *context, UTraceEntry *e, UTraceExit *x, UTraceData *d); @@ -345,7 +341,7 @@ utrace_setFunctions(const void *context, * @param d The currently installed UTraceData function. * @stable ICU 2.8 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 utrace_getFunctions(const void **context, UTraceEntry **e, UTraceExit **x, UTraceData **d); @@ -467,7 +463,7 @@ utrace_getFunctions(const void **context, * If buffer capacity is insufficient, the required capacity is returned. * @stable ICU 2.8 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 utrace_vformat(char *outBuf, int32_t capacity, int32_t indent, const char *fmt, va_list args); @@ -488,7 +484,7 @@ utrace_vformat(char *outBuf, int32_t capacity, * If buffer capacity is insufficient, the required capacity is returned. * @stable ICU 2.8 */ -U_STABLE int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 utrace_format(char *outBuf, int32_t capacity, int32_t indent, const char *fmt, ...); @@ -505,7 +501,7 @@ utrace_format(char *outBuf, int32_t capacity, * @see UTraceFunctionNumber * @stable ICU 2.8 */ -U_STABLE const char * U_EXPORT2 +U_CAPI const char * U_EXPORT2 utrace_functionName(int32_t fnNumber); U_CDECL_END diff --git a/deps/icu-small/source/common/unicode/utypes.h b/deps/icu-small/source/common/unicode/utypes.h index c98de9e6fc3dad..6c57218db8d477 100644 --- a/deps/icu-small/source/common/unicode/utypes.h +++ b/deps/icu-small/source/common/unicode/utypes.h @@ -479,13 +479,23 @@ typedef enum UErrorCode { U_COLLATOR_VERSION_MISMATCH = 28, /**< Collator version is not compatible with the base version */ U_USELESS_COLLATOR_ERROR = 29, /**< Collator is options only and no base is specified */ U_NO_WRITE_PERMISSION = 30, /**< Attempt to modify read-only or constant data. */ +#ifndef U_HIDE_DRAFT_API + /** + * The input is impractically long for an operation. + * It is rejected because it may lead to problems such as excessive + * processing time, stack depth, or heap memory requirements. + * + * @draft ICU 68 + */ + U_INPUT_TOO_LONG_ERROR = 31, +#endif // U_HIDE_DRAFT_API #ifndef U_HIDE_DEPRECATED_API /** * One more than the highest standard error code. * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ - U_STANDARD_ERROR_LIMIT, + U_STANDARD_ERROR_LIMIT = 32, #endif // U_HIDE_DEPRECATED_API /* @@ -715,7 +725,7 @@ typedef enum UErrorCode { * in the UErrorCode enum above. * @stable ICU 2.0 */ -U_STABLE const char * U_EXPORT2 +U_CAPI const char * U_EXPORT2 u_errorName(UErrorCode code); diff --git a/deps/icu-small/source/common/unicode/uvernum.h b/deps/icu-small/source/common/unicode/uvernum.h index c66776d10b5826..a4cbb9e0fe8661 100644 --- a/deps/icu-small/source/common/unicode/uvernum.h +++ b/deps/icu-small/source/common/unicode/uvernum.h @@ -60,7 +60,7 @@ * This value will change in the subsequent releases of ICU * @stable ICU 2.4 */ -#define U_ICU_VERSION_MAJOR_NUM 67 +#define U_ICU_VERSION_MAJOR_NUM 68 /** The current ICU minor version as an integer. * This value will change in the subsequent releases of ICU @@ -86,7 +86,7 @@ * This value will change in the subsequent releases of ICU * @stable ICU 2.6 */ -#define U_ICU_VERSION_SUFFIX _67 +#define U_ICU_VERSION_SUFFIX _68 /** * \def U_DEF2_ICU_ENTRY_POINT_RENAME @@ -139,7 +139,7 @@ * This value will change in the subsequent releases of ICU * @stable ICU 2.4 */ -#define U_ICU_VERSION "67.1" +#define U_ICU_VERSION "68.1" /** * The current ICU library major version number as a string, for library name suffixes. @@ -148,17 +148,17 @@ * Until ICU 4.8, this was the combination of the single-digit major and minor ICU version numbers * into one string without dots ("48"). * Since ICU 49, it is the double-digit major ICU version number. - * See http://userguide.icu-project.org/design#TOC-Version-Numbers-in-ICU + * See https://unicode-org.github.io/icu/userguide/design#version-numbers-in-icu * * @stable ICU 2.6 */ -#define U_ICU_VERSION_SHORT "67" +#define U_ICU_VERSION_SHORT "68" #ifndef U_HIDE_INTERNAL_API /** Data version in ICU4C. * @internal ICU 4.4 Internal Use Only **/ -#define U_ICU_DATA_VERSION "67.1" +#define U_ICU_DATA_VERSION "68.1" #endif /* U_HIDE_INTERNAL_API */ /*=========================================================================== diff --git a/deps/icu-small/source/common/unicode/uversion.h b/deps/icu-small/source/common/unicode/uversion.h index c8c7a374c820b2..dde3059261047c 100644 --- a/deps/icu-small/source/common/unicode/uversion.h +++ b/deps/icu-small/source/common/unicode/uversion.h @@ -141,7 +141,7 @@ typedef uint8_t UVersionInfo[U_MAX_VERSION_LENGTH]; * values of up to 255 each. * @stable ICU 2.4 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 u_versionFromString(UVersionInfo versionArray, const char *versionString); /** @@ -155,7 +155,7 @@ u_versionFromString(UVersionInfo versionArray, const char *versionString); * fields with values of up to 255 each. * @stable ICU 4.2 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 u_versionFromUString(UVersionInfo versionArray, const UChar *versionString); @@ -171,7 +171,7 @@ u_versionFromUString(UVersionInfo versionArray, const UChar *versionString); * The buffer size must be at least U_MAX_VERSION_STRING_LENGTH. * @stable ICU 2.4 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 u_versionToString(const UVersionInfo versionArray, char *versionString); /** @@ -182,6 +182,6 @@ u_versionToString(const UVersionInfo versionArray, char *versionString); * @param versionArray the version # information, the result will be filled in * @stable ICU 2.0 */ -U_STABLE void U_EXPORT2 +U_CAPI void U_EXPORT2 u_getVersion(UVersionInfo versionArray); #endif diff --git a/deps/icu-small/source/common/unifiedcache.cpp b/deps/icu-small/source/common/unifiedcache.cpp index f2dd916559588c..493ab79f6d9067 100644 --- a/deps/icu-small/source/common/unifiedcache.cpp +++ b/deps/icu-small/source/common/unifiedcache.cpp @@ -311,7 +311,7 @@ void UnifiedCache::_putNew( } keyToAdopt->fCreationStatus = creationStatus; if (value->softRefCount == 0) { - _registerMaster(keyToAdopt, value); + _registerPrimary(keyToAdopt, value); } void *oldValue = uhash_put(fHashtable, keyToAdopt, (void *) value, &status); U_ASSERT(oldValue == nullptr); @@ -338,7 +338,7 @@ void UnifiedCache::_putIfAbsentAndGet( } else { _put(element, value, status); } - // Run an eviction slice. This will run even if we added a master entry + // Run an eviction slice. This will run even if we added a primary entry // which doesn't increase the unused count, but that is still o.k _runEvictionSlice(); } @@ -403,9 +403,9 @@ void UnifiedCache::_get( } } -void UnifiedCache::_registerMaster( +void UnifiedCache::_registerPrimary( const CacheKeyBase *theKey, const SharedObject *value) const { - theKey->fIsMaster = true; + theKey->fIsPrimary = true; value->cachePtr = this; ++fNumValuesTotal; ++fNumValuesInUse; @@ -420,7 +420,7 @@ void UnifiedCache::_put( const SharedObject *oldValue = (const SharedObject *) element->value.pointer; theKey->fCreationStatus = status; if (value->softRefCount == 0) { - _registerMaster(theKey, value); + _registerPrimary(theKey, value); } value->softRefCount++; UHashElement *ptr = const_cast(element); @@ -474,9 +474,9 @@ UBool UnifiedCache::_isEvictable(const UHashElement *element) const return FALSE; } - // We can evict entries that are either not a master or have just + // We can evict entries that are either not a primary or have just // one reference (The one reference being from the cache itself). - return (!theKey->fIsMaster || (theValue->softRefCount == 1 && theValue->noHardReferences())); + return (!theKey->fIsPrimary || (theValue->softRefCount == 1 && theValue->noHardReferences())); } void UnifiedCache::removeSoftRef(const SharedObject *value) const { diff --git a/deps/icu-small/source/common/unifiedcache.h b/deps/icu-small/source/common/unifiedcache.h index 5c0bd76f4a2b94..865f4545105cb6 100644 --- a/deps/icu-small/source/common/unifiedcache.h +++ b/deps/icu-small/source/common/unifiedcache.h @@ -34,13 +34,13 @@ class UnifiedCache; */ class U_COMMON_API CacheKeyBase : public UObject { public: - CacheKeyBase() : fCreationStatus(U_ZERO_ERROR), fIsMaster(FALSE) {} + CacheKeyBase() : fCreationStatus(U_ZERO_ERROR), fIsPrimary(false) {} /** * Copy constructor. Needed to support cloning. */ CacheKeyBase(const CacheKeyBase &other) - : UObject(other), fCreationStatus(other.fCreationStatus), fIsMaster(FALSE) { } + : UObject(other), fCreationStatus(other.fCreationStatus), fIsPrimary(false) { } virtual ~CacheKeyBase(); /** @@ -88,7 +88,7 @@ class U_COMMON_API CacheKeyBase : public UObject { } private: mutable UErrorCode fCreationStatus; - mutable UBool fIsMaster; + mutable UBool fIsPrimary; friend class UnifiedCache; }; @@ -147,10 +147,10 @@ class LocaleCacheKey : public CacheKey { virtual UBool operator == (const CacheKeyBase &other) const { // reflexive if (this == &other) { - return TRUE; + return true; } if (!CacheKey::operator == (other)) { - return FALSE; + return false; } // We know this and other are of same class because operator== on // CacheKey returned true. @@ -359,7 +359,7 @@ class U_COMMON_API UnifiedCache : public UnifiedCacheBase { /** * Flushes the contents of the cache. If cache values hold references to other - * cache values then _flush should be called in a loop until it returns FALSE. + * cache values then _flush should be called in a loop until it returns false. * * On entry, gCacheMutex must be held. * On exit, those values with are evictable are flushed. @@ -370,7 +370,7 @@ class U_COMMON_API UnifiedCache : public UnifiedCacheBase { * hard (external) references are not deleted, but are detached from * the cache, so that a subsequent removeRefs can delete them. * _flush is not thread safe when all is true. - * @return TRUE if any value in cache was flushed or FALSE otherwise. + * @return true if any value in cache was flushed or false otherwise. */ UBool _flush(UBool all) const; @@ -395,11 +395,11 @@ class U_COMMON_API UnifiedCache : public UnifiedCacheBase { * Attempts to fetch value and status for key from cache. * On entry, gCacheMutex must not be held value must be NULL and status must * be U_ZERO_ERROR. - * On exit, either returns FALSE (In this - * case caller should try to create the object) or returns TRUE with value + * On exit, either returns false (In this + * case caller should try to create the object) or returns true with value * pointing to the fetched value and status set to fetched status. When - * FALSE is returned status may be set to failure if an in progress hash - * entry could not be made but value will remain unchanged. When TRUE is + * false is returned status may be set to failure if an in progress hash + * entry could not be made but value will remain unchanged. When true is * returned, caller must call removeRef() on value. */ UBool _poll( @@ -463,17 +463,17 @@ class U_COMMON_API UnifiedCache : public UnifiedCacheBase { void _runEvictionSlice() const; /** - * Register a master cache entry. A master key is the first key to create + * Register a primary cache entry. A primary key is the first key to create * a given SharedObject value. Subsequent keys whose create function - * produce referneces to an already existing SharedObject are not masters - + * produce referneces to an already existing SharedObject are not primary - * they can be evicted and subsequently recreated. * * On entry, gCacheMutex must be held. - * On exit, items in use count incremented, entry is marked as a master + * On exit, items in use count incremented, entry is marked as a primary * entry, and value registered with cache so that subsequent calls to * addRef() and removeRef() on it correctly interact with the cache. */ - void _registerMaster(const CacheKeyBase *theKey, const SharedObject *value) const; + void _registerPrimary(const CacheKeyBase *theKey, const SharedObject *value) const; /** * Store a value and creation error status in given hash entry. diff --git a/deps/icu-small/source/common/uniquecharstr.h b/deps/icu-small/source/common/uniquecharstr.h new file mode 100644 index 00000000000000..10cc924f7f9eb2 --- /dev/null +++ b/deps/icu-small/source/common/uniquecharstr.h @@ -0,0 +1,98 @@ +// © 2020 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html + +// uniquecharstr.h +// created: 2020sep01 Frank Yung-Fong Tang + +#ifndef __UNIQUECHARSTR_H__ +#define __UNIQUECHARSTR_H__ + +#include "charstr.h" +#include "uassert.h" +#include "uhash.h" + +U_NAMESPACE_BEGIN + +/** + * Stores NUL-terminated strings with duplicate elimination. + * Checks for unique UTF-16 string pointers and converts to invariant characters. + * + * Intended to be stack-allocated. Add strings, get a unique number for each, + * freeze the object, get a char * pointer for each string, + * call orphanCharStrings() to capture the string storage, and let this object go out of scope. + */ +class UniqueCharStrings { +public: + UniqueCharStrings(UErrorCode &errorCode) : strings(nullptr) { + // Note: We hash on string contents but store stable char16_t * pointers. + // If the strings are stored in resource bundles which should be built with + // duplicate elimination, then we should be able to hash on just the pointer values. + uhash_init(&map, uhash_hashUChars, uhash_compareUChars, uhash_compareLong, &errorCode); + if (U_FAILURE(errorCode)) { return; } + strings = new CharString(); + if (strings == nullptr) { + errorCode = U_MEMORY_ALLOCATION_ERROR; + } + } + ~UniqueCharStrings() { + uhash_close(&map); + delete strings; + } + + /** Returns/orphans the CharString that contains all strings. */ + CharString *orphanCharStrings() { + CharString *result = strings; + strings = nullptr; + return result; + } + + /** + * Adds a string and returns a unique number for it. + * The string's buffer contents must not change, nor move around in memory, + * while this UniqueCharStrings is in use. + * The string contents must be NUL-terminated exactly at s.length(). + * + * Best used with read-only-alias UnicodeString objects that point to + * stable storage, such as strings returned by resource bundle functions. + */ + int32_t add(const UnicodeString &s, UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return 0; } + if (isFrozen) { + errorCode = U_NO_WRITE_PERMISSION; + return 0; + } + // The string points into the resource bundle. + const char16_t *p = s.getBuffer(); + int32_t oldIndex = uhash_geti(&map, p); + if (oldIndex != 0) { // found duplicate + return oldIndex; + } + // Explicit NUL terminator for the previous string. + // The strings object is also terminated with one implicit NUL. + strings->append(0, errorCode); + int32_t newIndex = strings->length(); + strings->appendInvariantChars(s, errorCode); + uhash_puti(&map, const_cast(p), newIndex, &errorCode); + return newIndex; + } + + void freeze() { isFrozen = true; } + + /** + * Returns a string pointer for its unique number, if this object is frozen. + * Otherwise nullptr. + */ + const char *get(int32_t i) const { + U_ASSERT(isFrozen); + return isFrozen && i > 0 ? strings->data() + i : nullptr; + } + +private: + UHashtable map; + CharString *strings; + bool isFrozen = false; +}; + +U_NAMESPACE_END + +#endif // __UNIQUECHARSTR_H__ diff --git a/deps/icu-small/source/common/unisetspan.h b/deps/icu-small/source/common/unisetspan.h index f1e78ff3ee2b00..9a1307a9078aab 100644 --- a/deps/icu-small/source/common/unisetspan.h +++ b/deps/icu-small/source/common/unisetspan.h @@ -65,8 +65,8 @@ class UnicodeSetStringSpan : public UMemory { /* * Do the strings need to be checked in span() etc.? - * @return TRUE if strings need to be checked (call span() here), - * FALSE if not (use a BMPSet for best performance). + * @return true if strings need to be checked (call span() here), + * false if not (use a BMPSet for best performance). */ inline UBool needsStringSpanUTF16(); inline UBool needsStringSpanUTF8(); diff --git a/deps/icu-small/source/common/unormimp.h b/deps/icu-small/source/common/unormimp.h index 7f280551f7ef8e..e09c5c1c916773 100644 --- a/deps/icu-small/source/common/unormimp.h +++ b/deps/icu-small/source/common/unormimp.h @@ -418,7 +418,7 @@ enum { * The same bit is used for NFC and NFKC; (c) differs for them. * As usual, we build the "not skippable" flags so that unassigned * code points get a 0 bit. - * This bit is only valid after (a)..(e) test FALSE; test NFD_NO before (f) as well. + * This bit is only valid after (a)..(e) test false; test NFD_NO before (f) as well. * Test Hangul LV syllables entirely in code. * * diff --git a/deps/icu-small/source/common/uresbund.cpp b/deps/icu-small/source/common/uresbund.cpp index f4efb8ccab5a0b..743df1f8c505ce 100644 --- a/deps/icu-small/source/common/uresbund.cpp +++ b/deps/icu-small/source/common/uresbund.cpp @@ -1792,7 +1792,7 @@ ures_findSubResource(const UResourceBundle *resB, char* path, UResourceBundle *f return result; } -U_INTERNAL const UChar* U_EXPORT2 +U_CAPI const UChar* U_EXPORT2 ures_getStringByKeyWithFallback(const UResourceBundle *resB, const char* inKey, int32_t* len, @@ -2210,7 +2210,7 @@ ures_getUTF8StringByKey(const UResourceBundle *resB, * INTERNAL: Get the name of the first real locale (not placeholder) * that has resource bundle data. */ -U_INTERNAL const char* U_EXPORT2 +U_CAPI const char* U_EXPORT2 ures_getLocaleInternal(const UResourceBundle* resourceBundle, UErrorCode* status) { if (status==NULL || U_FAILURE(*status)) { @@ -2357,7 +2357,7 @@ ures_openDirect(const char* path, const char* localeID, UErrorCode* status) { * * Same as ures_open(), but uses the fill-in parameter and does not allocate a new bundle. */ -U_INTERNAL void U_EXPORT2 +U_CAPI void U_EXPORT2 ures_openFillIn(UResourceBundle *r, const char* path, const char* localeID, UErrorCode* status) { if(U_SUCCESS(*status) && r == NULL) { @@ -2370,7 +2370,7 @@ ures_openFillIn(UResourceBundle *r, const char* path, /** * Same as ures_openDirect(), but uses the fill-in parameter and does not allocate a new bundle. */ -U_INTERNAL void U_EXPORT2 +U_CAPI void U_EXPORT2 ures_openDirectFillIn(UResourceBundle *r, const char* path, const char* localeID, UErrorCode* status) { if(U_SUCCESS(*status) && r == NULL) { *status = U_ILLEGAL_ARGUMENT_ERROR; @@ -2420,7 +2420,7 @@ ures_countArrayItems(const UResourceBundle* resourceBundle, * @see ures_getVersion * @internal */ -U_INTERNAL const char* U_EXPORT2 +U_CAPI const char* U_EXPORT2 ures_getVersionNumberInternal(const UResourceBundle *resourceBundle) { if (!resourceBundle) return NULL; @@ -3016,7 +3016,7 @@ ures_getKeywordValues(const char *path, const char *keyword, UErrorCode *status) } #if 0 /* This code isn't needed, and given the documentation warnings the implementation is suspect */ -U_INTERNAL UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 ures_equal(const UResourceBundle* res1, const UResourceBundle* res2){ if(res1==NULL || res2==NULL){ return res1==res2; /* pointer comparision */ @@ -3052,7 +3052,7 @@ ures_equal(const UResourceBundle* res1, const UResourceBundle* res2){ } return TRUE; } -U_INTERNAL UResourceBundle* U_EXPORT2 +U_CAPI UResourceBundle* U_EXPORT2 ures_clone(const UResourceBundle* res, UErrorCode* status){ UResourceBundle* bundle = NULL; UResourceBundle* ret = NULL; @@ -3068,7 +3068,7 @@ ures_clone(const UResourceBundle* res, UErrorCode* status){ } return ret; } -U_INTERNAL const UResourceBundle* U_EXPORT2 +U_CAPI const UResourceBundle* U_EXPORT2 ures_getParentBundle(const UResourceBundle* res){ if(res==NULL){ return NULL; @@ -3077,7 +3077,7 @@ ures_getParentBundle(const UResourceBundle* res){ } #endif -U_INTERNAL void U_EXPORT2 +U_CAPI void U_EXPORT2 ures_getVersionByKey(const UResourceBundle* res, const char *key, UVersionInfo ver, UErrorCode *status) { const UChar *str; int32_t len; diff --git a/deps/icu-small/source/common/uresdata.cpp b/deps/icu-small/source/common/uresdata.cpp index 1bb938be62c35b..4e3309f497522c 100644 --- a/deps/icu-small/source/common/uresdata.cpp +++ b/deps/icu-small/source/common/uresdata.cpp @@ -963,7 +963,7 @@ res_findResource(const ResourceData *pResData, Resource r, char** path, const ch if(t2 == RES_BOGUS) { /* if we fail to get the resource by key, maybe we got an index */ indexR = uprv_strtol(pathP, &closeIndex, 10); - if(indexR >= 0 && *closeIndex == 0) { + if(indexR >= 0 && *closeIndex == 0 && (*pathP != '0' || closeIndex - pathP == 1)) { /* if we indeed have an index, try to get the item by index */ t2 = res_getTableItemByIndex(pResData, t1, indexR, key); } // else t2 is already RES_BOGUS diff --git a/deps/icu-small/source/common/uresdata.h b/deps/icu-small/source/common/uresdata.h index d1b67babf29049..7c2152e57b500d 100644 --- a/deps/icu-small/source/common/uresdata.h +++ b/deps/icu-small/source/common/uresdata.h @@ -402,7 +402,7 @@ typedef struct ResourceData { /* * Read a resource bundle from memory. */ -U_INTERNAL void U_EXPORT2 +U_CAPI void U_EXPORT2 res_read(ResourceData *pResData, const UDataInfo *pInfo, const void *inBytes, int32_t length, UErrorCode *errorCode); @@ -422,7 +422,7 @@ res_load(ResourceData *pResData, U_CFUNC void res_unload(ResourceData *pResData); -U_INTERNAL UResType U_EXPORT2 +U_CAPI UResType U_EXPORT2 res_getPublicType(Resource res); /////////////////////////////////////////////////////////////////////////// @@ -434,31 +434,31 @@ res_getPublicType(Resource res); * and set its length in *pLength. * Returns NULL if not found. */ -U_INTERNAL const UChar * U_EXPORT2 +U_CAPI const UChar * U_EXPORT2 res_getStringNoTrace(const ResourceData *pResData, Resource res, int32_t *pLength); -U_INTERNAL const uint8_t * U_EXPORT2 +U_CAPI const uint8_t * U_EXPORT2 res_getBinaryNoTrace(const ResourceData *pResData, Resource res, int32_t *pLength); -U_INTERNAL const int32_t * U_EXPORT2 +U_CAPI const int32_t * U_EXPORT2 res_getIntVectorNoTrace(const ResourceData *pResData, Resource res, int32_t *pLength); -U_INTERNAL const UChar * U_EXPORT2 +U_CAPI const UChar * U_EXPORT2 res_getAlias(const ResourceData *pResData, Resource res, int32_t *pLength); -U_INTERNAL Resource U_EXPORT2 +U_CAPI Resource U_EXPORT2 res_getResource(const ResourceData *pResData, const char *key); -U_INTERNAL int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 res_countArrayItems(const ResourceData *pResData, Resource res); -U_INTERNAL Resource U_EXPORT2 +U_CAPI Resource U_EXPORT2 res_getArrayItem(const ResourceData *pResData, Resource array, int32_t indexS); -U_INTERNAL Resource U_EXPORT2 +U_CAPI Resource U_EXPORT2 res_getTableItemByIndex(const ResourceData *pResData, Resource table, int32_t indexS, const char ** key); -U_INTERNAL Resource U_EXPORT2 +U_CAPI Resource U_EXPORT2 res_getTableItemByKey(const ResourceData *pResData, Resource table, int32_t *indexS, const char* * key); /** diff --git a/deps/icu-small/source/common/uresimp.h b/deps/icu-small/source/common/uresimp.h index 2e477dfad3e98f..12154dcb7c68d4 100644 --- a/deps/icu-small/source/common/uresimp.h +++ b/deps/icu-small/source/common/uresimp.h @@ -157,7 +157,7 @@ U_CFUNC const char* ures_getName(const UResourceBundle* resB); U_CFUNC const char* ures_getPath(const UResourceBundle* resB); /** * If anything was in the RB cache, dump it to the screen. - * @return TRUE if there was anything into the cache + * @return true if there was anything into the cache */ U_CAPI UBool U_EXPORT2 ures_dumpCacheContents(void); #endif @@ -218,7 +218,7 @@ ures_findSubResource(const UResourceBundle *resB, * @param isAvailable If non-null, pointer to fillin parameter that indicates whether the * requested locale was available. The locale is defined as 'available' if it physically * exists within the specified tree. - * @param omitDefault if TRUE, omit keyword and value if default. 'de_DE\@collation=standard' -> 'de_DE' + * @param omitDefault if true, omit keyword and value if default. 'de_DE\@collation=standard' -> 'de_DE' * @param status error code * @return the actual buffer size needed for the full locale. If it's greater * than resultCapacity, the returned full name will be truncated and an error code will be returned. diff --git a/deps/icu-small/source/common/ustr_imp.h b/deps/icu-small/source/common/ustr_imp.h index 85d8e6d8ee6970..5b249ade3d21bb 100644 --- a/deps/icu-small/source/common/ustr_imp.h +++ b/deps/icu-small/source/common/ustr_imp.h @@ -29,7 +29,7 @@ /** * Compare two strings in code point order or code unit order. * Works in strcmp style (both lengths -1), - * strncmp style (lengths equal and >=0, flag TRUE), + * strncmp style (lengths equal and >=0, flag true), * and memcmp/UnicodeString style (at least one length >=0). */ U_CFUNC int32_t U_EXPORT2 @@ -37,13 +37,13 @@ uprv_strCompare(const UChar *s1, int32_t length1, const UChar *s2, int32_t length2, UBool strncmpStyle, UBool codePointOrder); -U_INTERNAL int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ustr_hashUCharsN(const UChar *str, int32_t length); -U_INTERNAL int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ustr_hashCharsN(const char *str, int32_t length); -U_INTERNAL int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 ustr_hashICharsN(const char *str, int32_t length); /** @@ -53,7 +53,7 @@ ustr_hashICharsN(const char *str, int32_t length); * @return If UChar is a lowercase ASCII character, returns the uppercase version. * Otherwise, returns the input character. */ -U_INTERNAL UChar U_EXPORT2 +U_CAPI UChar U_EXPORT2 u_asciiToUpper(UChar c); // TODO: Add u_asciiToLower if/when there is a need for it. @@ -70,28 +70,28 @@ u_asciiToUpper(UChar c); * @param pErrorCode ICU error code. * @return length */ -U_INTERNAL int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_terminateUChars(UChar *dest, int32_t destCapacity, int32_t length, UErrorCode *pErrorCode); /** * NUL-terminate a char * string if possible. * Same as u_terminateUChars() but for a different string type. */ -U_INTERNAL int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_terminateChars(char *dest, int32_t destCapacity, int32_t length, UErrorCode *pErrorCode); /** * NUL-terminate a UChar32 * string if possible. * Same as u_terminateUChars() but for a different string type. */ -U_INTERNAL int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_terminateUChar32s(UChar32 *dest, int32_t destCapacity, int32_t length, UErrorCode *pErrorCode); /** * NUL-terminate a wchar_t * string if possible. * Same as u_terminateUChars() but for a different string type. */ -U_INTERNAL int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 u_terminateWChars(wchar_t *dest, int32_t destCapacity, int32_t length, UErrorCode *pErrorCode); /** @@ -133,7 +133,7 @@ class UTF8 { * @param t The i-th byte following the lead byte. * @param i The index (1..3) of byte t in the byte sequence. 0 length) { + tailLimit = length; + } + c = (UChar) u_unescapeAt(charAt, &ahead, tailLimit, + context); } if (U16_IS_TRAIL(c)) { *offset = ahead; diff --git a/deps/icu-small/source/common/util.h b/deps/icu-small/source/common/util.h index a2be25056e9acb..2a709e408a2698 100644 --- a/deps/icu-small/source/common/util.h +++ b/deps/icu-small/source/common/util.h @@ -64,8 +64,8 @@ class U_COMMON_API ICU_Utility /* not : public UObject because all methods are s /** * Escape unprintable characters using \uxxxx notation for U+0000 to * U+FFFF and \Uxxxxxxxx for U+10000 and above. If the character is - * printable ASCII, then do nothing and return FALSE. Otherwise, - * append the escaped notation and return TRUE. + * printable ASCII, then do nothing and return false. Otherwise, + * append the escaped notation and return true. */ static UBool escapeUnprintable(UnicodeString& result, UChar32 c); @@ -95,7 +95,7 @@ class U_COMMON_API ICU_Utility /* not : public UObject because all methods are s * after pos, or str.length(), if there is none. */ static int32_t skipWhitespace(const UnicodeString& str, int32_t& pos, - UBool advance = FALSE); + UBool advance = false); /** * Skip over Pattern_White_Space in a Replaceable. diff --git a/deps/icu-small/source/common/utrie.h b/deps/icu-small/source/common/utrie.h index 532ba778eb6ed1..2fd2c461ffb250 100644 --- a/deps/icu-small/source/common/utrie.h +++ b/deps/icu-small/source/common/utrie.h @@ -460,13 +460,13 @@ UTrieEnumValue(const void *context, uint32_t value); * of code points with the same value as retrieved from the trie and * transformed by the UTrieEnumValue function. * - * The callback function can stop the enumeration by returning FALSE. + * The callback function can stop the enumeration by returning false. * * @param context an opaque pointer, as passed into utrie_enum() * @param start the first code point in a contiguous range with value * @param limit one past the last code point in a contiguous range with value * @param value the value that is set for all code points in [start..limit[ - * @return FALSE to stop the enumeration + * @return false to stop the enumeration */ typedef UBool U_CALLCONV UTrieEnumRange(const void *context, UChar32 start, UChar32 limit, uint32_t value); @@ -667,7 +667,7 @@ utrie_getData(UNewTrie *trie, int32_t *pLength); * @param trie the build-time trie * @param c the code point * @param value the value - * @return FALSE if a failure occurred (illegal argument or data array overrun) + * @return false if a failure occurred (illegal argument or data array overrun) */ U_CAPI UBool U_EXPORT2 utrie_set32(UNewTrie *trie, UChar32 c, uint32_t value); @@ -677,7 +677,7 @@ utrie_set32(UNewTrie *trie, UChar32 c, uint32_t value); * * @param trie the build-time trie * @param c the code point - * @param pInBlockZero if not NULL, then *pInBlockZero is set to TRUE + * @param pInBlockZero if not NULL, then *pInBlockZero is set to true * iff the value is retrieved from block 0; * block 0 is the all-initial-value initial block * @return the value @@ -688,14 +688,14 @@ utrie_get32(UNewTrie *trie, UChar32 c, UBool *pInBlockZero); /** * Set a value in a range of code points [start..limit[. * All code points c with start<=cswapArray32(ds, &inTrie->signature, 4, &outTrie->signature, pErrorCode); ds->swapArray16(ds, &inTrie->options, 12, &outTrie->options, pErrorCode); - /* swap the index and the data */ + /* swap the index */ + const uint16_t *inIndex=reinterpret_cast(inTrie+1); + uint16_t *outIndex=reinterpret_cast(outTrie+1); + ds->swapArray16(ds, inIndex, trie.indexLength*2, outIndex, pErrorCode); + + /* swap the data */ + const uint16_t *inData=inIndex+trie.indexLength; + uint16_t *outData=outIndex+trie.indexLength; switch(valueWidth) { case UCPTRIE_VALUE_BITS_16: - ds->swapArray16(ds, inTrie+1, (trie.indexLength+dataLength)*2, outTrie+1, pErrorCode); + ds->swapArray16(ds, inData, dataLength*2, outData, pErrorCode); break; case UCPTRIE_VALUE_BITS_32: - ds->swapArray16(ds, inTrie+1, trie.indexLength*2, outTrie+1, pErrorCode); - ds->swapArray32(ds, (const uint16_t *)(inTrie+1)+trie.indexLength, dataLength*4, - (uint16_t *)(outTrie+1)+trie.indexLength, pErrorCode); + ds->swapArray32(ds, inData, dataLength*4, outData, pErrorCode); break; case UCPTRIE_VALUE_BITS_8: - ds->swapArray16(ds, inTrie+1, trie.indexLength*2, outTrie+1, pErrorCode); if(inTrie!=outTrie) { - uprv_memmove((outTrie+1)+trie.indexLength, (inTrie+1)+trie.indexLength, dataLength); + uprv_memmove(outData, inData, dataLength); } break; default: diff --git a/deps/icu-small/source/common/uts46.cpp b/deps/icu-small/source/common/uts46.cpp index b9e6cb023bb379..f25b4e12f124ca 100644 --- a/deps/icu-small/source/common/uts46.cpp +++ b/deps/icu-small/source/common/uts46.cpp @@ -714,6 +714,16 @@ UTS46::processLabel(UnicodeString &dest, UBool wasPunycode; if(labelLength>=4 && label[0]==0x78 && label[1]==0x6e && label[2]==0x2d && label[3]==0x2d) { // Label starts with "xn--", try to un-Punycode it. + // In IDNA2008, labels like "xn--" (decodes to an empty string) and + // "xn--ASCII-" (decodes to just "ASCII") fail the round-trip validation from + // comparing the ToUnicode input with the back-to-ToASCII output. + // They are alternate encodings of the respective ASCII labels. + // Ignore "xn---" here: It will fail Punycode.decode() which logically comes before + // the round-trip verification. + if(labelLength==4 || (labelLength>5 && label[labelLength-1]==u'-')) { + info.labelErrors|=UIDNA_ERROR_INVALID_ACE_LABEL; + return markBadACELabel(dest, labelStart, labelLength, toASCII, info, errorCode); + } wasPunycode=TRUE; UChar *unicodeBuffer=fromPunycode.getBuffer(-1); // capacity==-1: most labels should fit if(unicodeBuffer==NULL) { @@ -925,10 +935,10 @@ UTS46::markBadACELabel(UnicodeString &dest, UBool isASCII=TRUE; UBool onlyLDH=TRUE; const UChar *label=dest.getBuffer()+labelStart; - // Ok to cast away const because we own the UnicodeString. - UChar *s=(UChar *)label+4; // After the initial "xn--". const UChar *limit=label+labelLength; - do { + // Start after the initial "xn--". + // Ok to cast away const because we own the UnicodeString. + for(UChar *s=const_cast(label+4); sTo do * diff --git a/deps/icu-small/source/common/uvectr32.h b/deps/icu-small/source/common/uvectr32.h index 91a2dd2009eecb..92746a4f4782d8 100644 --- a/deps/icu-small/source/common/uvectr32.h +++ b/deps/icu-small/source/common/uvectr32.h @@ -214,7 +214,7 @@ class U_COMMON_API UVector32 : public UObject { inline UBool UVector32::ensureCapacity(int32_t minimumCapacity, UErrorCode &status) { if ((minimumCapacity >= 0) && (capacity >= minimumCapacity)) { - return TRUE; + return true; } else { return expandCapacity(minimumCapacity, status); } @@ -233,7 +233,7 @@ inline void UVector32::addElement(int32_t elem, UErrorCode &status) { } inline int32_t *UVector32::reserveBlock(int32_t size, UErrorCode &status) { - if (ensureCapacity(count+size, status) == FALSE) { + if (ensureCapacity(count+size, status) == false) { return NULL; } int32_t *rp = elements+count; diff --git a/deps/icu-small/source/common/uvectr64.h b/deps/icu-small/source/common/uvectr64.h index 6d26863eabc00d..4dab16396c1d13 100644 --- a/deps/icu-small/source/common/uvectr64.h +++ b/deps/icu-small/source/common/uvectr64.h @@ -203,7 +203,7 @@ class U_COMMON_API UVector64 : public UObject { inline UBool UVector64::ensureCapacity(int32_t minimumCapacity, UErrorCode &status) { if ((minimumCapacity >= 0) && (capacity >= minimumCapacity)) { - return TRUE; + return true; } else { return expandCapacity(minimumCapacity, status); } @@ -222,7 +222,7 @@ inline void UVector64::addElement(int64_t elem, UErrorCode &status) { } inline int64_t *UVector64::reserveBlock(int32_t size, UErrorCode &status) { - if (ensureCapacity(count+size, status) == FALSE) { + if (ensureCapacity(count+size, status) == false) { return NULL; } int64_t *rp = elements+count; diff --git a/deps/icu-small/source/common/wintz.cpp b/deps/icu-small/source/common/wintz.cpp index 115512e704cced..047f4290f10d0e 100644 --- a/deps/icu-small/source/common/wintz.cpp +++ b/deps/icu-small/source/common/wintz.cpp @@ -16,11 +16,12 @@ #if U_PLATFORM_USES_ONLY_WIN32_API #include "wintz.h" +#include "charstr.h" #include "cmemory.h" #include "cstring.h" #include "unicode/ures.h" -#include "unicode/ustring.h" +#include "unicode/unistr.h" #include "uresimp.h" #ifndef WIN32_LEAN_AND_MEAN @@ -35,89 +36,111 @@ U_NAMESPACE_BEGIN -// The max size of TimeZoneKeyName is 128, defined in DYNAMIC_TIME_ZONE_INFORMATION -#define MAX_TIMEZONE_ID_LENGTH 128 - /** * Main Windows time zone detection function. * Returns the Windows time zone converted to an ICU time zone as a heap-allocated buffer, or nullptr upon failure. -* Note: We use the Win32 API GetDynamicTimeZoneInformation to get the current time zone info. -* This API returns a non-localized time zone name, which we can then map to an ICU time zone name. +* +* Note: We use the Win32 API GetDynamicTimeZoneInformation (available since Vista+) to get the current time zone info. +* This API returns a non-localized time zone name, which is mapped to an ICU time zone ID (~ Olsen ID). */ -U_INTERNAL const char* U_EXPORT2 +U_CAPI const char* U_EXPORT2 uprv_detectWindowsTimeZone() { - UErrorCode status = U_ZERO_ERROR; - char* icuid = nullptr; - char dynamicTZKeyName[MAX_TIMEZONE_ID_LENGTH]; - char tmpid[MAX_TIMEZONE_ID_LENGTH]; - int32_t len; - int id = GEOID_NOT_AVAILABLE; - int errorCode; - wchar_t ISOcodeW[3] = {}; /* 2 letter ISO code in UTF-16 */ - char ISOcode[3] = {}; /* 2 letter ISO code in UTF-8 */ - + // Obtain the DYNAMIC_TIME_ZONE_INFORMATION info to get the non-localized time zone name. DYNAMIC_TIME_ZONE_INFORMATION dynamicTZI; uprv_memset(&dynamicTZI, 0, sizeof(dynamicTZI)); - uprv_memset(dynamicTZKeyName, 0, sizeof(dynamicTZKeyName)); - uprv_memset(tmpid, 0, sizeof(tmpid)); + SYSTEMTIME systemTimeAllZero; + uprv_memset(&systemTimeAllZero, 0, sizeof(systemTimeAllZero)); - /* Obtain TIME_ZONE_INFORMATION from the API and get the non-localized time zone name. */ - if (TIME_ZONE_ID_INVALID == GetDynamicTimeZoneInformation(&dynamicTZI)) { + if (GetDynamicTimeZoneInformation(&dynamicTZI) == TIME_ZONE_ID_INVALID) { return nullptr; } - id = GetUserGeoID(GEOCLASS_NATION); - errorCode = GetGeoInfoW(id, GEO_ISO2, ISOcodeW, 3, 0); - - // convert from wchar_t* (UTF-16 on Windows) to char* (UTF-8). - u_strToUTF8(ISOcode, UPRV_LENGTHOF(ISOcode), nullptr, - reinterpret_cast(ISOcodeW), UPRV_LENGTHOF(ISOcodeW), &status); - - LocalUResourceBundlePointer bundle(ures_openDirect(nullptr, "windowsZones", &status)); - ures_getByKey(bundle.getAlias(), "mapTimezones", bundle.getAlias(), &status); + // If the DST setting has been turned off in the Control Panel, then return "Etc/GMT". + // + // Note: This logic is based on how the Control Panel itself determines if DST is 'off' on Windows. + // The code is somewhat convoluted; in a sort of pseudo-code it looks like this: + // + // IF (GetDynamicTimeZoneInformation != TIME_ZONE_ID_INVALID) && (DynamicDaylightTimeDisabled != 0) && + // (StandardDate == DaylightDate) && + // ( + // (TimeZoneKeyName != Empty && StandardDate == 0) || + // (TimeZoneKeyName == Empty && StandardDate != 0) + // ) + // THEN + // DST setting is "Disabled". + // + if (dynamicTZI.DynamicDaylightTimeDisabled != 0 && + uprv_memcmp(&dynamicTZI.StandardDate, &dynamicTZI.DaylightDate, sizeof(dynamicTZI.StandardDate)) == 0 && + ((dynamicTZI.TimeZoneKeyName[0] != L'\0' && uprv_memcmp(&dynamicTZI.StandardDate, &systemTimeAllZero, sizeof(systemTimeAllZero)) == 0) || + (dynamicTZI.TimeZoneKeyName[0] == L'\0' && uprv_memcmp(&dynamicTZI.StandardDate, &systemTimeAllZero, sizeof(systemTimeAllZero)) != 0))) + { + LONG utcOffsetMins = dynamicTZI.Bias; + if (utcOffsetMins == 0) { + return uprv_strdup("Etc/UTC"); + } - // convert from wchar_t* (UTF-16 on Windows) to char* (UTF-8). - u_strToUTF8(dynamicTZKeyName, UPRV_LENGTHOF(dynamicTZKeyName), nullptr, - reinterpret_cast(dynamicTZI.TimeZoneKeyName), -1, &status); + // No way to support when DST is turned off and the offset in minutes is not a multiple of 60. + if (utcOffsetMins % 60 == 0) { + char gmtOffsetTz[11] = {}; // "Etc/GMT+dd" is 11-char long with a terminal null. + // Note '-' before 'utcOffsetMin'. The timezone ID's sign convention + // is that a timezone ahead of UTC is Etc/GMT- and a timezone + // behind UTC is Etc/GMT+. + int ret = snprintf(gmtOffsetTz, UPRV_LENGTHOF(gmtOffsetTz), "Etc/GMT%+d", -utcOffsetMins / 60); + if (ret > 0 && ret < UPRV_LENGTHOF(gmtOffsetTz)) { + return uprv_strdup(gmtOffsetTz); + } + } + } - if (U_FAILURE(status)) { + // If DST is NOT disabled, but we have an empty TimeZoneKeyName, then it is unclear + // what we should do as this should not happen. + if (dynamicTZI.TimeZoneKeyName[0] == 0) { return nullptr; } - if (dynamicTZI.TimeZoneKeyName[0] != 0) { - StackUResourceBundle winTZ; - ures_getByKey(bundle.getAlias(), dynamicTZKeyName, winTZ.getAlias(), &status); + CharString winTZ; + UErrorCode status = U_ZERO_ERROR; + winTZ.appendInvariantChars(UnicodeString(TRUE, dynamicTZI.TimeZoneKeyName, -1), status); - if (U_SUCCESS(status)) { - const UChar* icuTZ = nullptr; - if (errorCode != 0) { - icuTZ = ures_getStringByKey(winTZ.getAlias(), ISOcode, &len, &status); - } - if (errorCode == 0 || icuTZ == nullptr) { - /* fallback to default "001" and reset status */ - status = U_ZERO_ERROR; - icuTZ = ures_getStringByKey(winTZ.getAlias(), "001", &len, &status); - } + // Map Windows Timezone name (non-localized) to ICU timezone ID (~ Olson timezone id). + StackUResourceBundle winTZBundle; + ures_openDirectFillIn(winTZBundle.getAlias(), nullptr, "windowsZones", &status); + ures_getByKey(winTZBundle.getAlias(), "mapTimezones", winTZBundle.getAlias(), &status); + ures_getByKey(winTZBundle.getAlias(), winTZ.data(), winTZBundle.getAlias(), &status); - if (U_SUCCESS(status)) { - int index = 0; + if (U_FAILURE(status)) { + return nullptr; + } - while (!(*icuTZ == '\0' || *icuTZ == ' ')) { - // time zone IDs only contain ASCII invariant characters. - tmpid[index++] = (char)(*icuTZ++); - } - tmpid[index] = '\0'; - } + // Note: Since the ISO 3166 country/region codes are all invariant ASCII chars, we can + // directly downcast from wchar_t to do the conversion. + // We could call the A version of the GetGeoInfo API, but that would be slightly slower than calling the W API, + // as the A version of the API will end up calling MultiByteToWideChar anyways internally. + wchar_t regionCodeW[3] = {}; + char regionCode[3] = {}; // 2 letter ISO 3166 country/region code made entirely of invariant chars. + int geoId = GetUserGeoID(GEOCLASS_NATION); + int regionCodeLen = GetGeoInfoW(geoId, GEO_ISO2, regionCodeW, UPRV_LENGTHOF(regionCodeW), 0); + + const UChar *icuTZ16 = nullptr; + int32_t tzLen; + + if (regionCodeLen != 0) { + for (int i = 0; i < UPRV_LENGTHOF(regionCodeW); i++) { + regionCode[i] = static_cast(regionCodeW[i]); } + icuTZ16 = ures_getStringByKey(winTZBundle.getAlias(), regionCode, &tzLen, &status); } - - // Copy the timezone ID to icuid to be returned. - if (tmpid[0] != 0) { - icuid = uprv_strdup(tmpid); + if (regionCodeLen == 0 || U_FAILURE(status)) { + // fallback to default "001" (world) + status = U_ZERO_ERROR; + icuTZ16 = ures_getStringByKey(winTZBundle.getAlias(), "001", &tzLen, &status); } - return icuid; + // Note: cloneData returns nullptr if the status is a failure, so this + // will return nullptr if the above look-up fails. + CharString icuTZStr; + return icuTZStr.appendInvariantChars(icuTZ16, tzLen, status).cloneData(status); } U_NAMESPACE_END diff --git a/deps/icu-small/source/common/wintz.h b/deps/icu-small/source/common/wintz.h index 9140d2729a98f8..b1ac8c07903738 100644 --- a/deps/icu-small/source/common/wintz.h +++ b/deps/icu-small/source/common/wintz.h @@ -28,7 +28,7 @@ U_CDECL_BEGIN typedef struct _TIME_ZONE_INFORMATION TIME_ZONE_INFORMATION; U_CDECL_END -U_INTERNAL const char* U_EXPORT2 +U_CAPI const char* U_EXPORT2 uprv_detectWindowsTimeZone(); #endif /* U_PLATFORM_USES_ONLY_WIN32_API */ diff --git a/deps/icu-small/source/data/in/icudt67l.dat.bz2 b/deps/icu-small/source/data/in/icudt68l.dat.bz2 similarity index 55% rename from deps/icu-small/source/data/in/icudt67l.dat.bz2 rename to deps/icu-small/source/data/in/icudt68l.dat.bz2 index 60bc3e084f4322802bcf00750c10c329f4edb52d..fcee4ecfa17efeb84a5663b4684b338b2675da51 100644 GIT binary patch literal 10124683 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%0Ae)m_}%S2WpBMeE(j(#7j)l9uTY zX~xrA*ST0f z6PV9*d}E3Vy#K4bh`SF43;C&$i|L%I9HJ*;4KZ5G<-|@Hsug69_yo#+_b*fvIiahE^nhb9F2h>kV@*(dAv!0+U)Z5b17vG z30z%mgow_%pvJc7DwiZ1TFnk6*b)t*Gcgk=**l~JTjkkN$#v-zYBBPYT7xW^sHVB? zRgX0llUZ7XS};cec3h8(+td2LRFB#1!N;fj7>)rEit1vI=FP=cbHdCm%;yjO}Q6>yXTn z19rA`Sn3FO;}ZkAPejeQVOvrOf(6Jr6f(hXM$47qV{XAiTF-ZR48z-3Q8a66W|pT0 zC zxpSx|E~V;goljq0UVEC~rnT3zc%>D*W2+kCSZ9w^b0U`=;o-54isMDXwwQa%vq}h= zF&k&H70;;Z5I8;J$kV{BK$p{omoyO)o2lbb48Bz4E0t|!^m+X1tB5F98Si%0b)B)n zvUlOti5Mz7m*nS+4Id4uy3E4XIL2;<=GvaC#SVv_!fqhSP>!#cmkdha$1dj<<#WFY zo2uSAuZM>fefv6NeRGROCSu!{vgnc3rx(818m+LqyX!t+@Q-`=pLX%Bw!bk=rJ&eA zsJeQT#wsveGY~jn0m4E%Tw>WId&nN4AQu(+ z4Q6E;n>nhg13^q|N~1>@-+G+r9MUt|XK1L3zs0|IsMvS!yAo{4BGO~CF5P5BB)eGD z;MnOb14_t(Y)zo{7v@VAj+>^T9?cUy<;MD&#=JP`#rG#!J@eFgX*H(-=B~+_F~fZY z30dQL5ENsR_F7h&AT-e%s9fBgFLx)5#rWQ_*`UNl+dOf?c=YPi$2>8%ycV49&S@lB z=K~ycVC7>H2Xe9|Md%{Q=QK<~V@?lAIo)}&fX26c<#@~)!Vcs;HW4u*6FG%-zEwfV z&_(vq+6-!HVHwp23M;tL46azuIL&3JK&Yt1w?!^!FxL~6b{9z)Q23uXs)9 zh#~-!VbEae1p-1W1fy9bFp|*4w{Z^`n)8J_{Osp@S$yY3!N*DEVd6V|(T+m%3Tbil z_8jkoA0vCvb%0dK4o|B{V6x)=uCHMBexF0000dd4Y&e|0TO# z)x7z~y)#c9DxT$9JF{{PMwd321kl;brDnrab5SB7OK6awF6c_VSKg7yAeXqX*ayX! z<2g2ifV;dpUDPA-zkm}OsOOdFv1i5)SO5TZ^oN5r_V*AcsH!PhfnK(sn$*)6ss9tp z_Nc1}tZZeyxPn3o)|5cCeI0V=ATRK zgkN+#0Qi!W1OQnHL_zV~O(?KEp}wslq~z6D_37a%FA3W7<>1e(&b-h_z(hS4OQ3Xr zigltw>6mOleVRlwN)+PT6!02h00=Lgf5OPF-dlJv_%CAp?*?w?@-OpTu^(~TPS>gV zn5r?+JWuU6=)JZu?gf~%7-}j5mxW^HXKx~5l-^EF3u(!20OmMQwVxET8CM5fI;(Gf z+|hPWsEO9CtuJGa5OX{{&0rn2pWVq8?W^WSR@}3g@VmpjnCf4TRXHYFv&!w~Mi+Z! z-?MA*gYI2!eG47At8a@W$NTj=8EECWZ!(8lKaEw{>m~QV@skH}1@qgw=8Cj{ZH3Q& zZp~NtEuL~U2i_}ciLkQMnO1nAzr)DL*N+Gx2@%H%H@9O|2wN5;Zm5xPle@y^tpCXY zP`{3FVa757;TpcvaKb7~EFudlg(rk|TMw$0C;0nsPbYpAlrENXn-Yya6o6cQu@WPh zFQnE6_YR9BfAu_kqSYXTa*~W(L7=|~_YpsLcYwE|cwY{;-2e6c0$T=AH){2G0P}<( z5-t=$*YDHFoC!LWqp8k`^w@rqLnnjSI-k4{fJIr4%u8?Xy2}<>AijHM%%n+*ua)m4 zKq~nf`ZaQdGG)BsD*mZ(lxr_QLzg8NOUs>`kxTL9oBAlblyV-Kk~Rb{A`EYybs5B! z#MvKPQYu_9LsEfSi6%Ica7PojnN`?N_+Y7zI<}{MjYZ7nVgM;mzN?20kU4bCewc}=a=MV@egh=g%ec|@w@FIMA$mrq84-Bn!4>fM!fNm3=UG_b;= zY15{3$m9jLo>1CDizwdp#8`gPD5gVddEax(Nnn8ht6Ln4<+{1DQ-PqqTF3`+JzKu# zNCZ*DLR}T6Med|AGd;Q1-aP&hN!BG)#Ji9!Ic<;Ticf6>mr8=! zDSg@_3;3}ICoV#PCMiidfN=6)l%b4$PJKj(_q z5!;FQH_LdvQ~b&5c^GJjT^4FnL18S6A$W=`P^Sb!qZkBHtXbH=b*q@RO8=pr*ZVu^ z{cpGZf9z6+l`d*tvfHjNMLvwa(Yg>W1M{ zH~d@6RguSj{y|5xfcKzU&XyJD8)*mdchjVb*1hs!3n6E0&%u`Y6S$*~v744fU^JQ~C#?=NonWl|uDfIR# z-Amgvs+KnE+$;UNwYAa`*!%rFzSy(=2QA~L7*NqP_k0&f!YX;VJwq9L(hkVPJ*%>* z=%F8U?`oll@be5{5TtMhzKT+d|E0B5C_w{4Lo9~fWHn;nC#o*6KZOAWE++W!dL56&4LfiN{cV_i? z)tCoxU*I)t+N%kCaCzN@i1_!s>9YU$uX{h^gmcJHGz%A&bi^VYXY7;5`vdpqPR+LM7c^uB|wOv$P-*9#I}vcEQy`i+=L{8(w32SVH}bf5*E~~!XVKQ zZbda>lvVRJGK))O#TX&Mt!qm(IPYs&grSt%Hah z%ltfoV#$X6rxtlWuXkbOWv6jDQ#shJpYvo{S9o`egWQdjNrps)%pqy#5P!-?)=K9iCD|f-2pguDX`~O&l-?1NC z_S~`s!_XPSqZVGfbQxgL$|vx}U}RB(9*?l}uvlKF>{z9>G65L+UvI>-BOFBq6#`Gu zkFqPN=SUeMIlmP#I9mk>oD#o4iT>>@e(jjhD2@;j0Vos>2jYM@J&3qOz)0k^@VYJvFrVX}Wa0>e+Kx6ESMdbvzQ`yB zydvX71NGa(8i&69i>UNp$#(PDY`tgxF~6u zoo|Jknw-Gw+1G1)opo0CvzB(WXL?yXUL~n89bX?smcCUVrehbta%V@-w0zlRb+MXl z8Zp{LG}X!M2Ojr${>w2&uTO%7Wtz#tsI_(*{}J-Ob*> zGbqW-aA&#Yx5yRRld~z}U!H}0vszT<_}LDr++Igx1!39sZ7L>HDsSE=KzRT5`3{kI|{B=LG-K3sV0=|v=mB-~K+yes(F)SQW->iaPZ zNcIG#`d@2&jDzU<*}*^7tsx8$ydSvXVoveY`i#UktX;!h^8uD_)*^WiL`%A{Jzy!n z7_0OfF&4ZV9qXY26zN*(OTlY}FlmMKR)$i&D?3Alr)5Ms&i~PBH#C$b%Kzu*_O>WN zVxnHH!1WQarVSI6?U-Z=V1j}e-|a#XEKFem8_B;5;!kqw$3>+8=SWy`-&+(0P`n>HMdsZZ|FC;A678MFUtsWbbP+t2t z;NB=}qGq5cXBi}91Qq-pnr@NdA{RQv4GA<23k{R>bDB2ahVrV@=WkwAqGm5U+l;!z z2#cFlLx2)B13?LZj;%@wpD<#9q|9K7sm~^xL!{P`L)?<420xp~@zRACuBT5BCaAR-HM%+v5ceLLW@+>p|)MKq*M9{EGv&2oRSKWvfanl>Czg67+!5PiF% z<>ll`$Jlz0KYJuR+$_`LneBh}KjDdPT34-mW*VJ036N;o(lUFBrNR77=Rm=||5wK3 zWZzF=WV3j0*Pd@j?<7xIaEL#tFR{!`ji~G+8o!py;e`tup%7)>&C71!Ml58h3-InN z*BC*$*~{^|CV9&6xX&0Ya<&lT!U`he5+{LN!r6+k8LbR(0{I*x2p?4T)VEQ_*|~0e>un3gD0MiQ!C%Kg!Am1&!!$|V`>nR z9O-Hg+yV7@?Wl($HrY5e z?Md*MVqTtWxtEcd5=U!pktGOY8@y28kX7yhiPpR^IY~7evz=TNB6&vCL|sxXu{{r3 zZff8QucG@6e4PB>$AS921po9h(}Mm}ujk`W|LRP<$~bCrcNfp2r;6*KS?v2()fuSI zvTjg9-%MOWSZ>!q?3=?E zgOe3TW8wk;6eJq*%@jU&$9Lf4!J$x6(nUT(9fY4yY@0H&IIfR{u$`4Z-T$v~0^e!6 zvhNi9<<50JJ_=lP(gLq^8C2fT^K%>!lx{{&ay$M9v>%fm7{4K}yyH|Wq6HKWY75%K zHf11?NolJdp&t|7Yj6<)P6(q5QK5rGFI(`lrZ{nLtjv1i2~Q;ia4{IdLf$_-5(gb5 zXb{2_pPEA*=LC$DI_xxKK8NnK<(~v?crNQd_rfx`Q4_a4yN61*kav<;0%cYS%63W0xmC$N^COXm|K_r9jxP^-~x6~ zjwb|wc#_Q;-3gvb4A3vq3VlMY;{-t4D)f6L>lY>C9-lwX{(2U>OQ7V>r||%Fjnl`d z(E^Pml#vn|V1%f?map&x!7tZpG@%dw1$P#ctH!E$Hyt7a!g;Nj&MyzO1((f0(ZpL^8ofmJ@@7#%b zyaEclZ5>_q-x7l@?l3vT+ZKb2@SAo0|IViemt(@Ft1?lIWnrbWPMhmAp8Y+ZK0R%= z9UFyMpIq|>9zAtuOE9saObf{cQR-})g+Crj?@gX{EGZU|+-ACyyjC>U_~XpmLOT#Z zd4%lPHYA=|7J{|(4qt&s|xMHj=JX)BDgzbj#*WdIUc7TLQ$@T zu#D`a^5K0*t=4Xq6hK@!!{f?0Mj64uah_Z*%yj40$5|3a2n!u=j14Ju^@Q7VG^;7b z;|r#i^hHY~k-Y}(C!qnXr8rmz{C)N1cE5oE0w9chS=Y# z_o^K+4g$k?F2q1KSW3=3F>WUG0+@E{h=d|kWk5ELwBZgh!e?beDpos-r9sw~4`C6I zX+C*Slv|cikpvlch&Z7k`I64Wap}JvxmQ4CHn&{}+X`1c?*me@JLOL6^S1fMedzOucm;MJ-N7VPj@? zlz^23g~nkST}pVv9=-H-gVz)0MRiCWbJLF?XSN&bC^##tbOBM~^Rv(n4@mm0+&9T!*of9`(RZ zUL$$C-C^__IC@Qn?f#9V-uJWNDN6|vNW(@KNlw50bDg8I<_H5%fim)!Q;~fNj-%Of zuk|0#rlMJj`qHP<8W!U+gbVM+!W#ZN2Lj3a;3xmaZ1m%Cyqzw4>Ouf6+7 z``@7V9k0ul`R7mH_k5fOT;(2=5){T)KD(AU9Y6D6@BZZHPj2XxW}{g%tsxwX6BL3T zy3W~-0TK_LHw`J=TlQ^EN1E>B5jr3xo~P{U6}W|NyNO$hr$vpzH6E&a^ghW)0Gau&KJGw}1BXjKu+Sy4)+{dQ(+8`NX|X#YYlj)(>Z8eb}( zr?gac0szh>;d84=1MI3DIHj%{p$k<8CnZ&aX2Yih?IAN*VAx`rCb4t-+&#GxJ1N|} z93%Y=z}Ev507AcjY4irpS9PO2tnJE`{ojnCAj(ksMj|(7i;pw-9{<%#&CoSulk=p( zW3I7Uiq#ct=Tz7z?qvXqK;G|(@K4l^ zoV#JxYyD|E3nsIUUuJMk)35ECuVZt#Dqm#v=#>=t$Bcb?#odd5Ve3(4ndm=7Uo*~j zwqXW7yei#obytQNfOkh2IINZI%LEjA>?ktvJ*1}RVJ)QZ`m56wEd`Ck9LNB0VpmTY zakr(04fxUbWS<_7j<0RjopCCoc}0!9p@I;*g|Vn1{-V zRPcMEpx^wqT91dwtjK%Tf*>z@lTrL1%1IpgC01Fg3t)M^t()R z`OR}g;qtzC=%_8TZevLGAby9MVmninOz$|(SCYCQ+uhdjq2gx@>TqYH^v#a<4m(s) z{>y>Xek~BX%S)!&IJ4i3c7@2n8s6|{x;xg$?faH6&>!i|pkbwBG~ZKK>e(v;SRWK9 zL{Lbz+=aT`kU=KOI=JQmpMxEsoCNa>(UuNVp#oJ+A`Jx94 zC#L9?%mvi=CNs5KYA4?E%#K#|-gu?k?qc@2$shaGjh>l+VE=?DVO+Ic^>H%Gu8OR@ zWeSMl3-7j#TqUVy`U_vvRtwPUY$sSCMP@C|+Fuu_ss{K{s;6V`${+B5%dHPM1ZyEJn2fuf!6nZ&B5HU z|9JRh>!-!$N=-9ONtrq14Q1~%R(5&QfUn2Az2_1?nti<^*9ioD<5)BT?`eTIEsWWu zxMi>&{9**yn{qj`YQ@p-$ZTlldUA?=dlm~aYrbl6^>_mTyd@3H>oXBdi0K5_aVQQx z&R!sa&591Uhebc-92!}8YjTv2UD@G(1p4wFkUx2uA29%EEh7;p#K8$jd}93 z(2wTWT?FFn<`zPB(3XT_L@n75#`X02%qPlt>6RVzsw}8JLIcDW0qcv=hKo=T17rS5 z_^nxsh-CRXwR_%?H3A9*sk~|K*W@%3iFR~0@A0q`2%C1-HiucaC|7^G0=Z5*4%am% zYVx|S8$RLmJUthX;Qq&O1OUS7K!6IZ_B{v80>KS`;D-9goy^$4fD(L@|Mi~i4Fb#K z0sv^Yl(1pHPF#KQie^2V)Cr{1MpS_(H;A$Q((+nuWwz?ZC&=eEBSZYK>M|RY=ya{ZxiyQ z-?Y0AJy1{M-17%<2ymdM;eeFle)bFLR7Ad($kL zXeqgD7@ybJr`xWt#S0Os838zhrZ)V-CvJyme|T~t2Z;eRNd74sR=?GT;L>RSif`u@=c@8U_Oau$;NSXN-|^Q+b=-a}8FK!hs&3i6#lunO z&0%8j`@hit8()=O!)-fL;hyfhTyp!ocfs!6b+~rtzm4xZjM~?!(T5lP8L#~Vq||86 zxItbAEAH|-Wr7Z$2bXrZ)ZOxtF*$FRrY8Xt0Q>xL`5aC>S2o3(|8$*@{;~1?KaK-a z{?T#%n5_3>N)<>q+WCDS_cxdB|JN|Ea};lXpW=Qs*kiCY_zG8vD;)Z6&JFcD@qPIcR?Qi$Pzc1K3d zqG|Oi%mtg#PC+KqR>1ZAFDJK@t8o&;|4#k)7!DohX_vKnc20tSk>%FEUQ~YLr{s(3 z;y>n*A6{0gwJXBiuXmeu0A$r|>FS7hv;~3U4lXhE!_jDOZ-;#B&Dq0CVtC+9NC*KK z#0xF2q15q`&*^)t<+Zx`Bs25gd48j?bRRy0F|7+n*1?=}+!jt6RmXb^ zzjC*AVnnBT^FHUt_a8Eq!9QU2W#o=T@RR&1{ye|Fn(4lg`7xRf!m8B??<;Ss>lgp# zvnW8T?0M&J0Qa+jCF%OEO5U2)v%-3B{-+u8R1n{}i1@iMNy>k6Q#iinEBSw3Q9?lu zoNk>M$FJ&FCdz$9$|`>&$XotJ6Qv^`m3~Tu3R}g^{ur zkx@rvkvf8OYVtgr=J|U(vWYYRuugEghja0>E5*lKJ%8{$@plu<*DUpInFP7^fd>zD z^RtpT^i%cau5rvPw=5S2ils{h->s8yi$@N?xh(BpI>8G$&dSyo_lvI2b$kkEu~BLw z#~$z+Nsxl)T;j#4Q+he@E8-HC0`dfPf68XNnd-dM?YbPD49Tz>NfLHjOsT`F>$iV9 z{cAgFD!@PMInm*8Pq%ecn>mKD_-(|suMPdUgATb0BDNeTW>e>CpiGGrTgne&gekPc$Ke>$eu3XdwdM8q;RqJR5w|i}Wj1?DF;hJYJTEzc;n&=5BXU@U_CK9&&wEQ$t8Lye zKSaLwg?!HsZ$WwMA}mJQ$@O&+J1>$ME4WaHuh8|=&OL|woP=F|o=UZg?*1YdcUYD6 z3n9%S>4X>#FR~>sNxxd%QI}4iQ8{7_A2L(ntHGV;6zuKZ z$pyD3Ln^%fMKoxTA|mo2!L<5dAK3oZt5mb>nm0r>zJB_ZuSj=fsqXh#)|(TTH2+Ej zyNj0)RYW_T&d$y63G<85N(!D;sGy3uBvMIK@>=biMo6E7+szGgpGqDdm!=;>m)Pmc zuhQu1b}{l_n!<>x7Q=$AWn9|DA#JjlMf~@57bH8QgxOXpWdl~v$s7n@FkoY<;ndg< zj76^3ES(0B0@-<4TNC(7!nsq0Yh4BHQMJR326g?OCU)&dO#~%z@b&s@a|2e!H4UT) zY!zwhJ+_3nj4Z>}mQ~lbdJ1RkYU>g4%2_#!N)`eHNWMeS z^m+TaIR1a=Jw@k;NdeRBt=}xnhItbk-vP zDG{4(d>13~cKf0w#4%s9r}J^ZRTcUyjN}D0(upLZ4rUbz~HWFoFmF+vy zuK9P}^%<90G>(!&ERg3Tr6HKJu@V^=W?w0apyyUPN28=zNAvG!=sImEw#!WhM3OOE z`LkPkm3Qf6@A&3%V!c2IDRe~DTog9@9GEwHEhQ~Qqi)rr zr7sf|RmjIVKJ{3CY!b{!@B14Jf*?GU@CVBAP<`I6O^|{Q2)u50vXdx|udkjm!TM$r z^UF@h5B$2H_jqy-g_4>>)AFwRX+N4oN83q4h`wcqkNR?zy*D4S*Vx4N`uv0bF(~yo z`2O3}UKgm~poG)pA_l>lJ@knUwBHoS;kJ^NG#%VTn$1KQo<0snHpbR2lOHQvqy3y6 z$L_S*sqmf}N3!C1Yu@kOH>mHqe-|byb6oY+`F5eS#-3ClDyquP2H4no=p(MqL`gv3 zy3?CWyr|W7xqQxNdur~?Sm$n}#6ShiT@?20!g33$b$j_U_WC8rE`y)2zgSTuZ{u%T zr{gSUN`?ec*nljQLE#?4H4k2DSDyg2K&5r%V$MFb%!668!rm~yx6UKJ!oL09{C!qH zutQeDxmN>n-&XRDW}S?g%sb#zoy4f%w19SL1$MGiu>-{?#*vDUEx2Ig1%KKOO|>6bG&lhL%r7m7d~LqezV z9nkE3We2&k&We|qvrY?)ZTqsg@gd?+wWqc`skD38JV`9v8ecQ{688wB= zU9VJEhlDNs`sHboF{`$B8*DpT12q7j6{~gQ2-k< z7Pq^S|)A+r?KKw?0{FIClt{dM9Hyc7*ZE}tW%?yseN{HJ2Dw)9; z9*@jn>;Evn_9|1XeJX#`jL@|4z$1jdS-J8oDiH*!HP<7M0gKP^|HHl78@Y&==(S$n zX{&ijH@7;4T>Z_)6AY_%Vz7I)(P1BYwUyva-GOR#cXfM4g_5@NYfcv<8NHs`qT$Nm zqA_bJiz>%svpnDA9I#&~g~5HhzewCO%QCci7#h`{&HXjB@fra$_$zkbdCceY>n#_{ z)p-lyE5P73;9t-w#&1wNI7AeKEn!=B?Y^oxTxoaGL-XD<0O!_9~Qry#U{vKwU zzq7o~;AXyI6g1W{?qh7pSIIAhtluO ze#TQW?BxF+N^$a=ynyC?nH+8`+&>MQ3xT`{2F~lGlRPpP{B7$uhn}(2C&Km#Nog9} z0Iv_HDp0!!Z3G|v9x10j$+4e2rY0*SHs2AcfSGA`f|LuL+na~(VW<7LW}Xl8O(&AYVre8}O*8S~ zWviAAFB8ef?en0j{ePcUZ+E29Jp6hay*59qExWg1@;u=5 zCyLHzcG-7U$)UgXezwalFXPne^!lx-Y9nu$%EoOzu3IeqZRz>x`V(=+wKIfW5X3U| z>i^fKYidp5*;nEg?M|zCbrIW0yIlZ^-x%FiW1N{e<(xhcS*={A;PUxsvn+I)-aa1Y z=Xiou|E&4@4slOYN%LRz+Wj@G&Iu&16{ZcU`>8}=Oc+PKMS`QuPLTne4wl%xcpxVM{LSRQv!hi_P!Sl z@J4=E_n+ue%0L< ztOm#l1_-5m;}pOF3y>%nAw(fY8>Cquq*ZnT%>Ep;X^J0mh3(X!drfdXoK$^|KOJb| zBWHFmwKvrAO;>dOAH&&X@7H^*BS(4te`H&Kg~DF}?z2(wH8G+%7%eSK8ISrjxhrPM zh`;U1*Qf4dmOr_zw_Jp1&X&3+Cp+;p9zj2^D*S)-hSVZ^5t)um%Gmpg+cyzdu=~Sq ziNFT~u#?ZzF@WHbjw_$Aqz2v1Zp+o>{a1VLQpLvjA~JYwbe|0hwaHeR&xj%$EVHk2 z$AuV`{luiUnVAIY8*DOl@e&~Od>!QIm9L-OHJ8;j_xMf;WQPZ^tObD$is3!mr z{b>(<=5n)z83TVW9!9~d4B>usEn5u}L43nqz&JBk)pVT=1=GB%-utPmritD{T1|&n zA+fZz)@ZXnL8ploY$^LQz;^DTa)6MBc}}|$sx6Yg%^g0<)U>Q$EaIb5^FRW!M}#0C zP9~5fw+KOdNLM-D7{5t%0r8zozn4GK=8k`Btjkxy{;%D~0jzw?SuBQjUcxnxRKqyc zIA7jU`ftt3rliPa1rWc3TirZr`&s49X>YId_lBPKbym_sNoSaUR)b2)%>M6G&}rUv zsAFQ}-oez%svYc#9p<7~yC*?jS#|5s87(d~-CXdcYgZW20;1diRLFQ-#00Z^KH6&? z+;~>GTnXvfn8VM#du<|>cmqP5AQ3`St~lPljpfT3&rve+_UZV?wIKj3_QfeVKcjP2 z=W43}7tiNBZ@sqoIpgf0Q`_}BL|o-HKHHuBWw}36!NMQ9sEVRnZg`?(2$LL#OWL_3Gt4;ql5* zxdi{upZ~Qg)Bks4TUx0-ibX(&iEV}ZUQ4ZU=pR3{Jd*9sAYxYdvF%(_VK%gQd5#W@fEQVOXSGiFr8XpIath?*p zqAU)!SDd!d)!qF38v8rv&b;N4Q*|qlISojLaKKRq-ge;WHKo8$q!$}%K58c>2-(zu zKt?sQQkl8y3`fBS%1!C9_m^V>F$dl%sPUydHOrq@-A@FDQjnma1BY{TyX_0T@W|e; zH`Z^x4IWC-Q*p*Hu)t~j-!~p?A{q@(@p6iqIx0it1?H2Y6 zh)T_F)ke?EwMKlP%l{K2KSR#LyY*H)&`iy`X;esOda(8^+$;x^nG4(aPEBJj z>$2Uf#U+!Sm%Q;k75q(uElgg*Pq`f3YC|dDq3>9&l0)vGd(i0r-k-{fJ7b&h=Dxn| z|4--tQoUEGyzv?t%I_vDES`62Of7eZnn=VR@bG2_r-;~@Xh~NXGdMsIX=&i?TU{Z~ z&E=i@x(GP#2J5WG)l~hKv^`AS_up6SCaY0g(ebV>;a|ns-s!d(dghm{PkMQT^IVH9 z3z49v>eS!^AMo*ZY`pKq_QQPV;IVigW=_L1pf=go?T?_(cct}Z-yaX!$KX@rO*cl* zALkq{@8B~1Z&4pK9!Y>}f-ANFiI)BHexRh>^0hg6JvL9lapPvL`JByVeS^K^-t1*8 zAZYBcI#|aytC~^RMb+$N47^`~IJIw*8GcQ(=z0-hFblZx`1ZjiqTaY+8FmEOv4wKU zdq{(Q)Re6qX|R(3Bz6&MtAT*hsJK;icfOo(U96m3bk%+cxb~gQd0o;e13f=Z^%5VrHDA=gr}(h*ycO!U5U<0 z+sZiHk!rIJZNHQV1xLsLxY6ZRd_P_=Ifva<`}0@09uVVi7vkgg{6D_{Gd5I+z+vsM*Di zI;%I|>wy882n?(*OUTlKE;vJ59$2HSbjKJ;WV97cL{#O;>knbe_ml#FAb`xOa3Miu ze+_M>sW4I6PjI|bLvwdO`u27*oZqq1pKc4_vtWjj*Jmh6)8eH8pb-KkY}_{2#Oi)x zY%@mvmnE5@z{7yuWGIn45alC>;+Fr+X*P`To`c=x(24KdB<2$s*0J7jUaC|w z>G1q*c=NZsRR-&655#h^ST7&SWmYIPo@$NuwgX(m?Qyb4Z0$H}jdaQv5boyZIy~5! zFKPAqe2ctMkcq~Ab_>rv2oKT&w)V~D5JW^oKwry;NMHY^3?(N~Ns*D4R-{N)YE;qW zma+^a0zr1Y=Wm~z)z5AkF<;J7?uxAL)SH&;|GmIpq_C&6Bp}ETAua=$f)q_9lT@^< zf$_{&s?^c0M2gJuk(0>!^-DMSMvAZxQzbi|HA0OlxHs+IIxIZYHDVvz1lM0$6Rr8|3pOWzGNxtLfqa3Et( zrXN|SDRmAcqO4%&D)YQXCg;xh+88aqub@!I{7eY4=i5O)vlEcn4S4Sj%6XFPEirYP zhg%(z9(C6?I>|=g%qj+ewVBg%em$dMBoi`*y!Tg>XvGFEW;6FYyRnPwY9z{yhLc&q zQ|YrKs^3`8yDN^vjm*enV`$aHaamMoPXok`3Q++NmJ&}5wjxjJb)87By>~!1Rb*ag-p%}PTPiIT!45GIP`2bka zCcl;C-8oQYuz=cQ%-wkXv;$2ddbg7|U=Uk4N zS7yM^)<<-Be@iVMq2-;@l0mg33d%ekc8{S?^0R2uS)5o5Gqnl$;n(r$t92}4rug)1 z5w2_Z3o&w>cqedAhK0G>CqWAr@~p324wS`7v3|FwAwLXg*pdyKJl78hzH7iO@vxMb zD_VEZ(naOh-{j_2w4%kUie?u|Y!4Y#(tj<(uYZy?s4b+D>+Csm80@Sim(w7!xSGLo zc%<4K7qmQjpP}-e2*z6LtNnTc%P)_NS8;`ldce830@M|PbaRf>5%FJ;28cPeNWRCd zh3#go1RVtcT95>yt8ayy6{>T`FnglQN+L;Cv;=14+XQDGTAjW}DCb4&u`0mRyI79D z#>Kj46ii+oH{r&@SskmEJHKxs$GXa59#pC;SbPM%Qk<&VOr%#Aj^5b{k)&&n*6mhr zkHgd5*T35X0EUNKiScgk8jkX+-PV>bf_=g@=Xo6kqy38<)ETrGXPu5JX-oVd-Z+Lg z8HMs6fxs$=fnXpZE+C*l!k&ja9fVZV3`O;jJU-&J10 zfJ!Vb9Krw#`XB%#2?7C*mV2DMapY!Z$MTe11=@zjefPC}lA!f2j5nas>N!WeyV|Ac z{T3ffJZESA=l68D<$n5QchAr9FSv$y?{S|xkZpZm`ya5i_T`IM_qu|BY{JWAnvrA= zg}`O5_c-@Jm5aczpeW^Q0oo0G(g!S!(K*O2MzuV2pbx=ric=2eEz zSz%mp3K&(nO&b-&3JYbr$8_Q66t>uB3=J@)JVmDa8}bbk4iigOMxd~m8CNwPnTlI=>8QWyo=zp z#@B5|aK}VN-1%8y02zW6gF0v~km2dhuyov_rJcX6BqLYR<69C`%!FxP>=-spQ+jyB z=n((_3{1y-{!8d!_pVy%GVNfc0&0l6h!HKM1N&AskFy?^)f8z8cpN*DM%ZTU)K9QT5R<7>(JPOu1e7hsf)M18|GwWHl#Z+6xpr0A3*f$+N<#L3=9w;#jvj@;FjisA8?d#y&>A!9Sq z*83g!!Qp`ZUA(zyK77u`xwc7ExY8ILu#!gM3I)X)JNkQ!Xng~up@}<%e(TpJt`T({ zN{$t~sN&_qN?Xw^=ZZ%?1&Oj{Iv*8wb_Kf-h!$&yZM1I>vh~Y(9?T|-dUO@$u-MM4 zhZeMut}b7y^shrTm|b%_qk||i)5>m~lgQwfMm@=VY#13b^Kbfy+rj_J-%+;K&qk+c z{b|GBpIuaif+P9(V)764HVPkSdgIZK>{lK2H+EX#3_W(W<>(&;+05N6Ij)WKK_}m} zu{E|ge>p0LqfJ_|skrdfnb7WG$7*dg)GfeeJ2T430AO>pawtYXp@cKOUzLnxM_vWM1+(bw}jU36R)0k zcVzzPX+xXnECy-_RVX>gPkpi$edJR~;VPAdOI?(g2K7Y+00c<~%gdL4l6qkPK_tOh zFai#1edIq8`Cm=D(|$Bc4f=Z^int23?zqVT&0ANdB*cn`DMvs!406C{R^+{=mK8vI zw36vK+A8*0X3vzFUu4;{f$Q=+?_QDg4C86w>*ZqjH5?SEul zxa;k5-{UDx2}x{|`43pTkS%o{S3nD0#BF9_AsP5MCfJaE|DtQk10_N7RC%KNxJXd}&R9 z+C}5cu`s9?htkmvUF}7Jl>6b_lX$Pv&YeZm92Yz{u}j|JPE_XqC*^z5kC{>jhC!^g zw%1LqxnD2pWCAC{CC?9aY2eXm5o)PU^TyyfJ{}W`^%q~;+E3Tv^1pjPH?}MvXUA_^ zJgz^#_&Y5z<2kOwy;5>=S@UK<&QH?6rP|rBd7U|QDKH>&BoDxF^Qir z=3h}lb)+bWP#$SGr^GSuk#U5NB*C$uh|t8pcBoY$ljkTvRHfluj3#x*B`<{&iSSPn zoTd%EZFPwwWKt)rRYN9npi|X)w48@bmx3NdR1`|2rKp5$8MuAQs0J*Jv@NPRfPpr% z=aDhjT`|>o?RRvAaJZNoy_=4$oK{;!)jM6r$Uqk{ICqRYl1^2wHPmsZrS9Bb`j@fN z@v6F6#O&{;b62hdZW9>CZu)P(ULyw?T#cM&gQ2$=M_E*iB%~0XPc7Qevb4`hVql;r zMQ5zutix_u|1XRCIlA(_lO<17@ha97q9Rx{r6UL-YVIL~tOU~WX>ZlwRo$8M^kRGY zb|Lg*yOli8CW$B5r3DV7Ip}L#*H9%^)%-Az`Qt>k$|Hc*5xw=kUOvI74It~snmODYUCbA>n z8hCrf$=pTnEqR7KJ#*zv><;XiEckJ7Kyjozne~unYKr7Tlsi@ z>wb;pq3AE!BaqJG7{RB=?_{(p=fxdl`8{6#wjLvPr7%nk%MtKNa>oKm;s_iH1mlG4 zQXgMrm7X5!5o@%oDY3nu4>`_^18+>1aYK<7>DyG1E!byS?qszU*pEeC3T_%4}b6@=j=(a`7Dxh zaE!H}4cGSvx*0J3xKa&S5Wit@Z(aIDVVTj!V6QH0i1Bp-h0w9X(G!`pyzXnu&XJ&a zGSw0Gm0)dPdc-Eqm1I;UVnPwuo3dR)2^N{(^Q;?^(^*PH#<720(DTX97axjsyjA=r zCoa#%JjX^lFgpF1LQ;+eS*GRXt0v^(^?!z}V;X7L$XWJkK!6l8LjhaEHS0kt^rh9o zdMg>e-l?7~RE9wwJYU~CY=f^%MHW@tA>y;<&wrAVP7a7;pw+(5yDGO`i~qrAheY}{ zkNaKaC>H|@;eNuH*jsgj@`?;H^d)xyImeRyk39e1Uk4xVjbP&hG>OBsegkCa?5RfDny8VnFge73 z&t|z_E!WMP33&xnb#?ZqwMEi45}i}HE40CCEmW(UDAFx=12Y*Dm`|>+05Lx(hAlsm zYQNN_23z_2XtQk=G)YVZ>EH&Dui~;dmG2fxl;jkV<;b8zfDaOmm|lf!<;n8pl!#K4 zf;8Dbo;i0bt(|9mvrwZ*_|4GlZmpFgiw!P{?_EX*Cnjgro6{j+zG2f_QX! z*MnU51#2G|U|DligcR48=D?5pp#xAlhs2{Put&Rc^04ewAqN`)YD@7|TlPA(I zt^WEDmHhDB*Fs=yR`y`#gR{e;_97_v@f6{auf_C)6>2bs|8w7V=LNAkA^-u0f>J5R zsdKy?7KMII_ik`+5}7_}s))3?#31e(r3*Gw;C5vTL}7Tj0{@l7&46B72XYb64RU&l zOzG){Plr2W*lV!2Ym(}u-xZf1LR-MP2owCdEyp9d|D>K11r|cdeiUeC?-oJ+=oc(s?^6eNOD;qq%FHGvtRYVb%ks%=cq0lE%o% z3Y#H$LP_y=;BX|XN^v<~SU<+;_~G zh*V&dIHL&+-RbDmLgZ`X$O9{4R*g6A@wTna>pUG~b2&a}@b!D^G&hsip62+nd_Uep zop841ANy`US6{ytxx1I!{~vr^jz{IExpBFY_K9}7OLlqM|6KXuHCAoZM-vs>u=95) z`08C}q;ecRWWR>{(6wLxi?7;OA%OjDUU6BT-^f|D9Ay z{>V@}smS3sKS{SxBenOg(psW1E_fb}?RVBM7y9W^dGc8d2D3T-;+-O0w%VHJwH%;n zDdMmin}hGZra!T;v_{(LYBak^T6`sUod<%o-?)FAw?DJjQ_cje>-(AT6w4?gi zXjbEBdA}RDLEnN*2ErA{FTQwv{P;WlriwyNCfQ(@tyIU~>d&@KXSvhoF=>F(W0YNT z*bL0yxA>2Y_A-WYYRf}-ibl53)?4G!b=UM=(sWt_XNs+{NY2nNDiC-!u1EX1f~Btf zV6@5N`+Ut+y5O&`+|by#eiv^$jAUz2xlFkGX3x2PPca9B1AnA~d*vmGbm`V?t=cEs z-_FiY7Gr?t9fQql-#--XDJJ-Cgn}8Lb0bvj^Qd#a9y=CT``uO$*}vM8e|5kDE~t`u zrxM+>7?XnfJY~**#pcSdiiRD1vQJsv^eNYRpfXf`19T$H4_`iRZRxVnsC1patRFQAPj;(yKTg4qZ^WQWp z>0v8==3INSwiyR0GCi~pL-~SdP>IJ#H8c#tFa=UX%9&)X3~?@ZC0=5w^MK8E@>jH` zTDzRObP!NceuSAYJy#*VkF-a@MXa=)F)UoA-_E~n!MF^4UBnVSly^ztn;REXt`N}+Ct z_q}%*PWrUB?f+@MV?GZB280N55((*NNo4JAQ!qq8xy-&fJn$h4YBHL)KAp#mxE$JU4HhzsOI>YFLvbk(u|44|(C} zJ^l^nvN|Fr6b1QF3Nvvs)eKM@pVSgCg9pO01EdUPD~uH~Gv_T?6eM&PS2{4@_<~4n zPJLxB+*RiUV!!S85kB1gclX7da3fazmFGU*P#8o)UOt6Ds>Ww4dMPDgxY=Bt+|_ZE z@LtvQNF=3!tWlpMWQ>%SijAp-2HVGLWOek~Xfi@SjEskm!f6Ea5xbMphktYh!5*2m zhjSWpW1-yI*{-IzVTdqnPMNOe^OJBv(zN*)lbJV&;$rJEGF#nXn69-FMjlJVw}P-% zaZnlNLgQD9C|4s8R}6&!=3TiRWPM&#KOsTot@YDwGmPwl;wg%0X~74DmKPlKh&19i zJvkx>< zLQxP97Ow7*2*qOQnw1OR{tdzeKPP(yZ~A9V!ra&@r$uiB1Nv(I0W$HU}w9dpeqnrQ84 z1pz@_r8F>uh6Qa)9<(~W`tm?Y=xb%&|44vIEnQ|0NNU777&T>%_wg&$^C2HpEn=Fg^lxd+O7@nwm^RYfNX7 zg7LSfg=gEbTIfTe!H~vm@P>V~B`Pi$msfvY+f^p|vhA-Mx+LAq(dv%;uU}5l=3Cx= zxcvr4+Ty-a!KG1Nm0jx z3xZs{M9TCGQx=QD9Sf@GlO*?>|f7PgOd6XLp;ntQhS4lZFldCrdVcsHnLc*sn> zih(C*7orF7xrT+Fb1;mqzVhXrhzZzD6MPc)e_0E6z?a$ZDu`>8d!AA6VtU9yNiCi= zCl9dpN-$rLR^Nv~3-rKZa(uTY=itT}{a=M>9+Qm5JoG`lZd!@myG&SK4uKm~6snn5 zm5h$Y*)uS=1!hmwp~ywPv0wf;q4)v-cYqkLZ))9Fk_kJS0RM_+vebQmclegrx7*vk zT5{PDq?1=8VYuXBG-zs6BNb-ZAg*`(S^W0sAV0L4XW7YVn5vkC!{lTgp@u!h?$-#r zALplU7v5m8-{_%j8leqh6w%ABHXVZVrAtA+tF9BoG(pGB|s_2Y>CB`8@68@-a%d>mu`pmUS(;|B%lK_w}j|Zaz0e-o&49^xgahRa_(_QFg zHT`_vI-lpWtMk%*{=HoP%I$UC+h{F39d6H!THM0AVz_oLfwNYPJhV7<3lxT2Ibcv8 zy@*ahEFc)uMnp^k0#uA)xfI|ql@Ve@ei^G>yVG;!X)K)=kk{5DzQ{9*I5^r0tS1xm zA9|9H!C^n8)2`jT9bfy>&OpOSd9|=t{|A#>_{Wwf#65aydAhpW;3@ z_V4olEO{?C<6FV!z*=9P`?_;j;Fo8hpC2CK?^iDLC!Xk8J|rrOjdBGg(Uw-TxW#$c z*w>4!7J+NRmLaUctu<ImBF+*wAR9LJFWLADIga9Cj2Wn|bnk@KE-7R_kw@#Yo=`Jl1xiUqcl+9V+e9CZOJiGX7* zkzS@*_}nc7RkJ`>ad-y?E&X%is2MO^#VD2Y5`>KEN>?xOa+X*7(6jFL8_ZX2V(c^H z=QbqLTOJl>YwnEY*gO=fV6{!(dkrhUra|C(onq_+0JB7W>F&?ULs2)4yu8_=A+^6f zw_B^k2)xljA%LwG#?_hRDcyl)|DMfrH2V=9=gbW=)(_g%MV4A+34*T-txD6aX>9&%&FLQIj7uF;o~QZI`WU){`7(t4n6$g9<~wN zVXa~htaE%%_lBIdMw0u;i`q#f@aP&ZMhZ()AzzG1G2+lZ-q6_XGKlQmpLJJ$wWV&e z7V_SlH8%@|x7%{lU-}tFc8a_~gkQ|8Shw?9l6-VZ+Xt&x)4@3?IRb}-c2>GsCv@HH+0DomBZ<$rupqMC_%h5NyWRdY!ZI zKkM{{rUXWdJku#I#wC$xO9*Yl$Lt|GY@$p)R@F6PtUll>>Icogq-J;lpn1f+7 zbQnZb6!M)mVub=I9YtT?Dhbf8u84ci;%fX_$wlQCI;!R3({TD^HP8}9s`$IPbV~Vw zcUZJX{<{jxSEwc z)3l45O+~5Osdae^ZJwzL>cwuHPw&s!g3)J-5tfD4;uX~_2f%`NeSE<)Te$&@2-2TM zQb{OM0_hXY*sGPITvwdN1B)?i)dJ)6u2W8J!D1^HH8yMvI02+&eXWo{=` z&BIi-qHk_@feaq0sL8awZ~ivhs_2k&v5VnM`VWswOGg)OWntl~tXs^Yx7(uKaZeYW zeO|HYKNE+h{pH1WX&y@L(In}FBgO>nyEgfClgLa5{!j-~{%VImke)XtCAX{(+c`B& zyT{u6qQ(As{1=z6U-kYUy`4Ya`NUuwuB}ut;SCauwP+x5wIHEhu(%$f|GaOLs+})N zWs?O(EWv&ZE9*dCqRht>P>vQN^5-KQ=UR&blVpNK*1xCGF~{VKPjJec%&@5_;8AAx zh(x)TzPf5*r%dU|x?Ey_yelodKs-VOc@l2MI76i-$lIZDiz_cUvLoV5YqOBH7kAf6 z8e*j!oXmicg*vm+{tSSH0!U!3=cKMw3=Mci1J{G_Z82vayt}V6=T@v22Hvq|D?eZ2 zL4vH1;z_~@A}*mpH;s)WA<9YI?_&MzVl%6TVe9lY>}Vi%L27dXAB8B>PCL4R$2@+% zLedH^;o$Ws2VEVzAu=(twX`IWC?v-D?3O9C@8eL7!WVFeDl+W4tB_Z7{vDSl#?BA8 zIa5vUj(NtICGg6q5+4mZ@6U?#sJF<8$pE)w&H33VjSd7`lv2>MsV7+)GkCaWYTF>r z=m%A8cZxnvbJBhGEhQ3^pdckF1cnw}i;&l54nYEksrQHp{pum#Z zO)c2oG?$Ump=1b&>W>cZi}dvF-4I!1s^!ZVcPJc9sBK7xi6u9xBBi{h&i9Yoa2R3> zdY?nd-*eyJGSA;}6WvPPHc;ulZ=NXfg?dHQT0ptYSsiGepBD>r3>l*5kQf5klG;D0 zVs@UyeA{GvvF;meVfw4oA`f9kR~K+ad;Y4Aj%2|F8w5n;mC6OkeP+@}As*b0Zp!6I zXBvEFj1rTOnj~@gc7w41&LnM2>r``Cc~W(or%25t&JhQ_DJ|&rUx#X#%h-+~gC($s zbuvt;EGST5laAmx<~l;qq{Ck@gc_OccFCTi_JruO$#Y#5c1TiFB&-pzlq4m}1_c78Al6{KuVR|IwTc_-zva>8R(C!0T)@CZqr<1D=YMKM zpg;}H2i8d>5$qKMQ{2f_>gZOAOD5Mh3gCb<3zUS>38>@6RB z&UMynZF24NF}oY{67n9mA)@}4{oliR3^z&^otcCzt==5sKmf# zqXh}fYfPkjqSf#`CGAOjnmcEe;s!vwQ!*b%yP~~rL;Unj|9)r1XDtfKA1ISXefEqPUg)&DmHG0u=mTrDkTe9)g)hMKZ$yob#C4nfPT@K9;+659}+At8Rnh zMa*jpqR9y;n742gP^o4h-Ca%#uh7N-e_mH2{d~-{(K@CtD{}l<rEgopJA?&@pb1KVi9>lza2VhbEyR%y7NZEf(-%2G2P*1Y&q*MF zprTSHYn1UfkvewF{r$NS%zcYe#ZS=x7L>@CgZ7o#8oUEd-1si((c()E?d&R(gf+N< znUqQ>Y99*Afd)`7VXZtQTur2oc5mVu4k1g^+mMIUjts?W-XvYm26m4){-JotTwwCO z_u<0O`P$}tD;MDFK2ITuyvf&t7{=QgW|a^A{$}IJy)h|B%oLwJw~WoZ{xbXX;bi%10?$7;{{@mS@4*QE0kOdPANqEB-Byf!fO^ zhY3HNRl=Yx)VUl$X8IF0J{DE1ljE0bYu4eqz0;Bg2HV8j#i6f=e{1hlnf+hu~boF=1YQ`#7+A$`Ie{_Dh@leUny$L~igy@@DSHRS0B>>n0mYtM zY@vD6Yw(Dd?!m%N!sTeG z#H~N0&&Qdcr-LTVUAkhxx{duPR+fpa#!I)bpJo#Q6qDNMD zD#(9`6)LbRg-i!$WclaMJVA0g{+kmm$aZ7E=mLlDnM3|3*Wlq)1SGjTNU9U8;6Mlj zLtjf?vFUHW)Vt={Ydnx8lcIi{p3maQa7r%HE>fYMXS;h~SA&`+wjVFG3Gu)mHqtYY#KUoo2gA zq%lK$RJMMF^#y~d+uHRT1MVuyNVrBTU;gM_b(t(oG)3l-OkLSy-a1Ol^6}VI2tcyF zKfW2#2OMieLVC!X?b_O@J~QHq3qj#0>!ozDH_#qcx}YEe_+yu~sZycvu(gJLc%A(J zz;rke0j1ks@scA86R6nrJ?(!g_slI9yI)OWQG@U~e=is){M`(e~#S8*q-0#rz}oe%0qsz0I%rgcY(?V14;U8((@tfl*FmKUu`C0zg2ZQj`i( zg@nYP*COX^=Fz+sr*3^r6r_h=#RYjvgZE?E`I|oHU~tq{`wo(My@N-};^+KF&qf)?*f{YwFEetzWJM((SH=^|)6z_+~5K zvhJS0=QiTiO>aK}qoaO+t%DsW8n((78OaCOl^(@3_13OJj(yEzEJP!8EKSk=Yn7jU zrwx~XN#@7%eV9D1GAo&yy8pP2WR&xjY5vzAgmbl~3eOcj%FoC3xlo9;pDxx?+nL7coxmZ8->9()(nJ| ziLz??8$FrfP5F@%jnh2B!l^BUf?h`<6HX~%+&fQv=!*9yReDX|CD&)@wNL5ZUw7Ld zE4szKMb{~Kd5V(HvL@W|I!b;13K~#c2}XWdV++(C^yEO{IUJA8clSRo&aZx)2l1mo z7!&vMlF}NIQVaTNY2)KbcZ{aij`K;;Xn!gSa5s6Ef2>^R24k=UdL=+f2nc%PpMm}T ziy|&hE{!D#)y>bjY1~A)Z}Q&rCECy1@^JH>U+&iVfN@-{{+Bcm=4G_7{e54d5crKK zM+9&Ss1zhdOt!uz+6~uJeV1~?_$q8x&;5M$!h(igNqpJ<*bcFf9M&?&usEBKmj2@n zk)^nPnLRZ0a4#87i*6eoeXYpHugV)lI77>3933xVoH~t0oglz!tQ(sUFYltBTjgDm zKgywQL+JK~xy$ovz+7g6e3slTst*MtmK!HQm&G@|C*t7-);FPTP0MzVzGbngrHTI{+KJP;bufMZZ;EGER@DaG383}z3t&_ zdGmgUjC{EBRuA}@?oTeJ{ceCHUPC}_vaOeZuxH&}g6MwqLKs8WdMze3mT4SkQxgsS z*f&5D8V@p%)mQx{g69cx9%w(NT2KSad!PEjXS{jsEIx8Qu)B_@jdyJ0G^SnNswrLW zP8NM|VkgQW4MJlD_~V4rCxKYx@Y%)r2}<>*zN#@$3!zB5v<^c0w~NBfrmuD@wCw}p z;c8%3?&6-Qzumz_hF?+0-z8Diym8q;$#a$CF%|es zm*#6qdadYyMTltkP7EK&Ut9V* zKY?eeFXJp;hxcqyyM8a7V^Lhr9+50X4SJPgm3d!bjYu|}Q`9UNay^llo3s>5{;3#- zF2Ox{W>}quFPMy+xp6;YzaTs|4?iO^F}@n^@^M=)6smGb4ORn@Hcuo z2US>!Bo?+!x^Xn@er+(wB%+G4?^kNp51K}me=iswR9@V>zfaeChciMeB^+&UGCi5^-2!+~K&0dBJpaxfoKK7Bc5;k-=lHi4mjAn?Tw5BZo8c*Xl4D5y zVpft^B$*A;Ixc5ZAuw<#L2b1(Sd5pA7}#wLcHY)}=df#b%rxC>=ZlFzO9o6FIspNeFBBs_CGfk z|If$E>Er#mOka&cK?h!W%C$l3d@AQe3Zub15-M7$7UJBpl7jC5{)6f-MH8;9-jpq* z(y$~M2Ol%yKO;8SG}0?9uw+t_d}?>@_U%~|f<|_V8=H0f@26T$oFTN3M0JAL|5_Sv zE&G3%nCdl70}!u2h$VKMIn(mB5cXCuf~m|PVNC{d z9%)q;k#ICvtV6AjN{wCX1jT~(1)GP=u80+gQH>XsXG~f&TXNoRSm;=sNheQf6g5uT-|wM4_qu~-fuj*DOKdFz_$!?&zKN6v}q-Q0P!lkt@e=-uTWO%yg0 z>o71Mr`lS$D?)vI;<&YzcV!gkja2+y>r3=PbsMlf}6X9wX z!`LI(p!rb@2tJtDf;-EpN~K55`Io-gO(W-gztv7A1#tU|_q4(}wF(Lz7(TahK*tr2 zCm-f@1NqWLwF;!^yb;=nD+?wOFpzHI3ommv3AfkpZW7YZZYIY^S!SaB(y)(LZEM}C&W~?{Zojgd&g|8gL>$U?vgT1@LjcJV9EQOZA^Fc`KZ0=F1 z(#`>xH)}dkDT|f*9|lEt)^gz=T+k`>vdBhp#`-Uh$#VURBbeaat8sk@j7uvZGn| zuyd_<6T?eq;T7|cR9@Mwvg}ukx88-H6Uk$G@5`qi z`sUF=_m-0e?fH;ghe62NxEW~&Sj5ALptwXF%sR)pvXEW;S7lVk09h;^qa>_8MJ-D8FM(YL$+-brexOe`(IN$Nlf7)nF zA8v!v*WaVr`iIBrJ9S&0BGgAs1O#Q;t%IGSf5`~~tN@YDNdjR0V?u^Uhg;pB!QIAR zJI$Y;AJ(y!(A}Kgru04PyO+lC1NWZ)bMINseg$tmTcf!_&x416%S?^)ZMW!Y^^SiEQomepiT{0{SyQj-7O|yd%5H7u!Ed96mmgi%BAKqT| zM5a#+qquV}CAT;;w zuK8s=&x@j9V!S$*c%^<1(%ax2XNuBIxvzh#;4qb6)_(nOR9N`sbN^@Lj>fCP8p5ow zux>0lix62*#XtJqF<&l<$cx*tf^XJaL{5CzhjM@Ufh4l@6 zL=0kB%)6-!<`62B-gMkQ+;5WB<}urOnxFg{U)DOt0KCVWvXAwD6!cyBkrZq?AB}jh z{-;7ylS)7`Eh}%p?724Gvt2^Zj(M zswqPGo@I_Y1!^@{t+hv`@lDn)R2pMwOa>#l`=;0jZ*#S`Y`Yx~gR_52*ZEW`!G5#V z$*Uay;y33aj1#s~K}(4CV)fI~T(GYHU6|>OHl}MuHF+-AJA2yFhp*e|=-Vvc$Ab~d z{p)#m{{DK|^20<&Sikow)8Fm^b2zS0|L=6R9}{|Vzu#jo6o1C!i*|{@{(u7!wW&V! z=e1{U-n&);(OIieIy`&1S*Sv-xUWJ6|7P;rHP-${3vbW!S$Hh1PR|-k+@%AH^W)ur zh@!FM6Mw(G^EW2KIhN9s3=H9(q41#zZAGhS7+gEL-MbRO~s(zG(oqF&eG)gak1GsSA?Dav3~D90jg%rvu)<4i=k=UwOK# z_Cb%FKsCX}YwW2mP+~-ky9g9Sh7vs(z$PGwltL{3;5*CtKKr5R5|F|*<~uLvsqw+u zanjW=U)X|B^ber4)R7abgNqmL06F(FK%77P4lw$X;K(`ABU2h?EFQr=lPA8zRGIW*7q zG<6VXbIt&Y=CS9T4+D>$quTVLGAQ$YGwkLr5MH;qVgta505K3S6~{B$8siq3;siJ` z^<_8%^=i?5QXmiyR1?o!|N6k^O#6WQAHsKagm~AbF=VKMq|-#G+;%%={_5U>b?E!2 zy4};_R*vlmaCvoO@QRYcglNM9~p*X}r`xlSkKhOL;+}3yL|7N!fz}s%`k|!O!qPZYOL|m6N`5h>4CnQ=V z>L>pk%=Vy;SAOoydXL-HUE`r$u~I?n?43NqLhM+o*szl;KJ`=)ZRy@AJyKWmvU)Bj z{$uLDZnOZuaPjKtT|$`O~du# zyDcK55(|uw=?9VM->DerUltg!0MNMG?SN29js2mppX(~8G-AMbmaNI(4f$iuY!P0N zSzjanf7tiTRq9akgEle}HU-eOBCqK>Fk=8AeRToPo&18E3>h6AB?bq`1qQE%SCmf=ufcnqQ~YfTP(hio(LWz0_>h0?q%N`G92}p2C;dq< zYOuHCQ2tii7GzC0ZvVVb89(+O%k8x5tRkFKw+piSE^0-pd-i`|lg59Uq=XEjnjaJK zsrLcGXrs>`us}NEB%&Ru|=xI z)9I`HeHJZDnY6R2IS5up(-rzZp*L9nkkJ_JNn>pOj2Kt?-S5-sw0fw8wCGMk?`~Xs zJPc0Pef~MTG@7x@PI4=J{X9cArzW1Mx=n=T`MfqZbN0mP2oB4%J1M)zb_UrSE259} z+C6jdH}%m|BS)W7Z{g#cWM4cskG}GopI?GmiDp=hpE^WaE=B5wBI5py#@cJ{j2VG#oP2M5O`tgpA%c$x7%ZO&8`#Sp$^J}3- zJJ+gUvK|N5o}D$r>;6G`@2}K4C0+AAKZ>aS5PzdN8IM;+##^^w;OPj0Ry~R);=W0j zhg-cE0N|c5f&^dJ*xkjJ{%1i?@%`ceYJo}{&-)LD=KIc(Gry#Tl63==|-{|UC$~=S=_(J#pwC8JE7g)ukf9=%CCRAie zZO^K)uK0XW+vf3fHocCXVvl~l#5GbiPJv{=U08UUb5l_~&x)X=$AH}huG)y!R-z>W z3D@7xim{uVOblU{?rg7~fA6bD_{Gjwo-7Z{_+Q1Y<0lr+)j_4{?qBb3w>}gXOx#QE zlOcE5>bewTL51twa1&BzFpIjyUUK&BZl{l}w0&r?yIuTWQzP83!fkK$e-n2?GCTKW z#r^(y9wENB&Zby6ebcXX2Ua- zqq@NtXg81`1>ArF03QJX5GP6t52d^5u@jjOt;T+NbsVkfT;Bixem>rf#nu^T=ky*UnDtYP~TWl<6L`S-Q7F>$N%l#o6+~+Zvqq{X<)7R*ZZ{qw^hTfRAw)r_tSR z4ON;^*^@7M&hIhu-ERKA0bdbwAg>{0 z!s_@a;c@(@ESJ$=bVFHxRm|9Apegg3hA-Uj0>d(0%u%wiH@joAFqUKMYX1v%f{T(M ztbNCk^FUtm*2|ogAWq5UZTx?8XT;ZREH>&EB0YACe5IC}E`}LKa6wEv=ap8S4x7%f z$+FX$>??&$q{aumVPvQ>xYk>(ev1h9!A*7Loy(!b_`67^h{HSE9u@}9kgJkXx%NS6 z`3ZgA?dc(~)C)@6ob0+OyfQSE4uV2cx)7()%q^hu^JSmorv}9 zHXgS+v#aaqHQ#U3(X)bv$c_V?m3jY32>wr*fX7$T8M;2AdDGOL6Rd&ox`ZpGOP-S#yD;JqT(RMi2Jxs z!4dks8+%g~IB-b2PGVbIEv2+XhP^jf!?$&5RuD;30Fd&85d;V< zb8l!x!eULZ(A1^TqV36zDGs=bC&) zlC^w*_G4}J*ajH=^UPl5Ox^c^lhEZIHg69WzJ@ zcKF0_b;-N#{aA$h`UvXO=VQX{dZ*C!FgCnq!o(0XFdZ%<^#o1FV~xw#9UL{-P2nGQ zq8iN;_3D3{Wad(T?i!p7zN+_GspoD|_6x7*p~w(YAwn}5Lgef&`;&uL$0%s9g^9x0 z_Q!rM>HqB+;fL^)G=fYJ*hDMC93UJG9=$AYK>eaQA!VE>Uap(T8T*5 zZ5ZmW(ZR~k^6ZJ84WX{z`()iDf8Xe|s{CfJVi_2gtDi`~1r>vsd!6K+A~J#i%`$_? z!hVZt^iDkYtT$9ZD8{ccP!ICF|5kTqOvcg)1FuWe%bXk$0ROoFS$qjeS~)?fbEP}c zMr{uXS*AoS#S4jx9$$y?mNfpbvLCiaFp~vX(yF+ICC zhs|h_RJOf|x@Q0E^VPR9-a@w95UFTU2_EC7uo=%n8G9}bDBmWUW`)FU0*h28WygeK zEPnlymbg^4qNY0Xa9M;gSq;9;MUIDFGkRLM3|;wWq_{yJ|6=iDD*D>>LUH8`W$>93R-L~SU z6`EbjXnKpbR~)YMVklhz?a6Z3@3l$IvC<}ZYkKbLa+WFx$h8`NjwSjlkcVh)emh0q zJbl&wxjNoq+0G2KX~}mh&eczry8Ery>F{Zua^hM#ndAU2u(}+qAH4@gmd!Wk36ACF zw$-H|^`O&0oR-%ad%(Z{7Od8$U%N9yS-kxwT9FIw(wgUav0S`=KI^iad(JY?tAgUx zem8m!yM;5$0?WyLb%fhw^nCh7N@Y4+SM$74U5nmq9!HhuIAn@Y?N6M8Z%EaCne$ML zsLJM@oFT^cC4T;o?TvP#j@;gv;NU&T3MH++9K23UF^ZK zNJcE)YVAqU=a(ZqzWgEp!$hW8Gz|HP*nhJdR352dtY{jt!osiVCyKUqIxhi8;GA&( z`&0bhrajka^nmpaNP))&k4oPqR?lmo;Y=C&b47K7_B!hQVG-NG%*yooG|-V+I`Gt= z^7|h{{hy@tXrE8V`j0=}`<@upWi_-0f3{%E{t}B(fg^9Anv?5Bh0G)FA0BwSSSCpJ z52POq2LB5?rCt^%M^A9Aps=I~2yCTcBjKtp0w6&U^|aXZzr$5^&ua2 zbtV$wwx{Ascz=Cy@67T@k@IUeQ6&T1MME775MFr}i-!wmh2=d`=@Ogx(V3&FK z)1WQHp#}cgVCtCy|2Xy#R$SY@_e!q~2Ne9s3E=mL5%qO`ZwhsW&CYsWf(e(;`sGi% z)Yc_TRQ-Q36ZKyXN>xFwmC4MBI;3g;9oMb=dq2B(Q>oo?`XD77u~DYQQm{r^wex9M z-5wxUD30l;Z-QZ=v7C7yA+Rtc5<3U$o8N-d%j4?+P02Pg-o$x^(XvL37D(d^2sVOr z{jZa)=7|V|l3AUaaB-ZlO;cqiF=bm&xe-WVk*4i}HCAPmPsyN%xm?J5rR&~)2d&s0 z>+O4UkWJUe;rakqHms$j;Tb@JZl)Py7O>Y`Yh)P~Od)P-{91%B*Z9rK&}ik8xXUg= zZPLvxec?xVwPf1DtlPcw_p1k_|Ja#J3t0i`O!{&Il>Lsjdo$kuj9wV`S1T`z!Lb4} zzS2p_ed$-tzRoCJv=!${O34D$wC?;J$k?&G_r^kvmNQjraMsFCAc&rLD$~r4_nTCo zT@V}UQT~b7V3G>pt#lAY287WxY6+0AKvtnMs^nU$T5os;lORT9L}U&IV3O_kdBgr} z96sNd!LLtN2f66IokHX;gEvgXC2$b%fAW6y0Oy~+z1K0*(aV?gzZ-X2H8w2!`Rp00 z^u={9uzsIrGQV$Gp(A(Va}VY-P5foDjg=BF1 zU&>T#8-G!;P7~Xd4LR$}M>@p^j>g4Os~fo;&2)CWYAk3wDO*~xJjXdRKZnxH!M(_Q zjbs%2e_zHfCYs`$3SYG@JvqK##)(J$5&jNS5bcV3{vuovzmsJMztG&uXGDf$qEt_45s>aaFDT?eZ5y9`S? zDYoB3cMZt%OoOP-cM~Sq#?~W`L7>lS#+MW7y|f>+OcN0vXoCneJW&wuJmIT8(1@h7 zQ$Pu!NMG`xIp0;I{&YfN~_2`s(kfL`wJQ<(onP`Klrl_%Bn5gVW z-Hs`MANQQDhV!h1fw0O$76S)if=Dfiu6#HQAmd(K+6S4`NK^QQGqYlte>%s%j*0hb z636442j+i2gba<*ijTg<)sKr>?fwBz=!qmK_4%Uzoxt>fK-4{9Q&U>zZnC&ItY$;) znHO7#{Za?L6ZWL<9OFoPzgW2~eK_*I#tnyCxvl+CUPhj`|Gz?Yb809tUwFai_O69s29a?;p$d@5>J;qS1JW(aC7c! zv~J5JZl;W*YtK;uQ@XHq9PInRW}{tp4~nq4x;KP6+Rcrv#6O|RD+SQka_81hqZhRk zrCVv_Rxj>6vAxe?HoO~@6dt>P$LYU|xY=@-AMZuT$Y1F)IQrfiO8@I+EqfT+I#c_Q zrR?Zb`m$H7t`*A(>Am7_bF*?2o;y1H3p~CPvGCS-yGZNzIEQ;}S{1Igt2Nl7!PmM^ zzK05ytG@?3)BVdMcN^>N*xc96;lD%vJ{Kc?-QI9N&D-3h5G|?!_vk4AXidn@$bmgJwT6cNh zZo1}rm2cO3dba!7`zqjt@MPKS7yoRMdd_UK#nov0O*Dx}+Ivv@S+{49c?w&*Jrx^T zoFGiVde684GZc=#2|X^IOxE@ChF&Jn-^0pubbe4}5f#J3w%m&Ast+x2_ecr4KlK}U zuP6daB4O5ll8c^_`Lx3sa;ddBv{WMg@0{G|c730glZ^3|<&Y#cR$t5mC?9K+FZOHM zR~M3Y-2edrR+!NWl?aBgp@OZQ!N$8n0TBcLc8PclD8}Mo@0O;LG2+xqQ_lb)BUN(S zG69wZt&0zyk6G$DPL3S~^)KaeN`*dU-r@Le^IF>alYyPi>&{t4&182b$I_byo$vJ+ z4jlcPxgiqTcKdj|+%er4*#-N7vD4tbml$mX5?xy5cOT6E5VywIqFA-{yhg9{7 zSl)sk6FoM8-v-AqX9?qc)^!^sx5dclbow?<;!N4q6vCAqt<0y@B41!cr)NLULRD!Y zr2v)O*JoGy?4PzubpU}1sbQ`DG4i}j`r^8KN74lJ%`ovd+9myA)m71o(Lk3kHlCeS zeyVAQR`k+(o%)51Bm)Y&^gjS!ymnSa5^rL*{KboW-wgj8AH<9ZvnwR?H9fKEz^(!Z zQu)WYIP=~Efxd{rSl(`3+q>p%Ll`$-SH*+(Yawlv%48`sxxe4LcaoX@Et(zI(Daf7 z9*>1}mb85F^L4F8n`r^;VDAB==X~HRx<)|rgQ<7TCslnFY5MuvwW_)>oqP`HIE07# z!$sMzisf%B^3oGFKJ)aZFS&|+kPpcoYF)qET!z8)n#Rk0SH0{QwC5V6GR{c2@Fc@BO*|U18g(y$T#2|llY|~Bmm2r5cm21YC2=f zr^tm^;+U6QE&~dJfmC_l75eAW?HE8E|0=2!cbpZsp*=fq4`=B@5IKiB1tRGt5zmk8 zp5%C?we#XDSDx*o3UPqidDd6U_&=jvi}A4IpMY0i_ePzJ2fisef6ZK@@Os_olD5HY zFB?B+BQe+Ic=pq@4^6T54X(#-x%`enM=eYhw51~LuwKpGo5MBfw!i-M&Oqrk(n{TZ zLkH=#&s4_NQRfL*p#`<)yPpEyM5a##Dz9B=66b83$gTpBWGKuJ9s_Z+~ zESk(-h;V{HJ?gI-Y&jF+LG7Ri7$f~GBrN~Jhy8!)M-jO3v}WPW=W|%5XWMz-aScR6x38d@>E6^i9HH@dX65uYc*GVi zO9EA=q^za93T$XThg(Td+h*m$Y#)~v<@=c~4B#S1^N2??lPnk1?BL~UCwU)Dlp*OO zNucTNc@xIzCaTP9rSZ#BO}(RoG~xH|*B6|XE|%EGvt|!jKEp>^?>(sHbDH^RsM@WC zM~eHcaOwRDysw>5s3nd~UB(s(Oeq_C3B!wk>(ualK;gX}J?M9eg>qjrD;)C(( zay*Bf%ZGi_x$W*VeVygCjfUTCH=SJUIXgXv3xD=ZuF0x`3W(Fxx-5z*%IPnx^I0A> z!ux*1%H!a)bl91pv?qqRKGG36xexPBxufnMymHqGO860(NuYTmTU^Wo@se?oQ6i-bIv@2C{looc)8cg2U50pa~p*g`pEwC zW?u&Zl2GrK^<~hH$Yz;R)4%Q7TDv|p$c%9Q6!ac`$b@;E8GtaX3;*MrzLg9QfA#8G zuTR`lP#lo_rA}IRlztO^>#v{LL0p`2^1K%e1VR`vL22;RA1@n(L%6(oZ+Pt*zO9l* z&hWZe>=QgfxvTyPi(Y{w<*h<$ zXB*mg`XTmX%YRQ7UjXt4wei2!0B!9VoYSE6pOYo~6tdNFl?#;*7wk51jJ&PgnYVk{ z*=oI<$)pp&S51-Icb%M9BwMd~tiS5yG^oGq+OdDD@S(=q1#E+z@skM^@<|Thz`({Q zjq(}3fExi}XaDabIg4;2_PC){IRt-D+v%uN8s{=5N6h}FWNNjmCVN4(NPN8YKp=gtFVEvn{92in?PiN`8NvcUHiUG`$mR} z;Jc2)5{%GNjsd?o1%lbg#yHiMMpR16E;i$g%;17Fi$W;Sia@mrferoC$h3q(HX>%9 zmqMzlt=phhwXI=MPze=PItEUJ;fW?Og&`t9sYJq&qZq&zV?;0t7{~fw3nkHH5K%_6 zGu2@-1d?qtQE8ASR1;_l$bw=RfdK$O#w;*Wh|^Vr1wav_1xyX{);`r1qu*0HOk-AxJGWD2Rw4w9u_I(?H`Awc@86BA|^KA5{Xf0ikK3 zQA$>lfu@=S7Mc)L29c!^8Vy9qGL==K$S6>tP+FlVQk4)D4W^o*B~>)|bRy}2S*pQU z6-8QV5U6023djkTP&P^$rBtSdk)oPa5v-_aS{EuQq!e9wm0_NuBD7{Xm7aOxs;fZN zBUDl)8PJL*n90L_zY98c`F^{6E)3srd=%2)+9xf{k^t8YOVC16 z<{*b!h@g!6iIN#KQLckL@9;Jy8wp-@ste27-Dz_`txZ<6qD3GgwXLdu+YC4HC!o;) zG^I2YaesPZmq_ji4mj$)9VkE-1ThrT9s5@pAxfhT8Zv5%+1kqTH?d%YMGYXR*5aup zH6XM}DHRc0xl~#xD71{C$g5RE8ni@J3IKA;EKnK}sKzm75mXApio__O!;DOU14;x@ zs-enITb4!HRppWb1+`F0qZcZwiyEE|6b7r+bQ%(>fV2v8lnS&I66^om!ob8LiWCZ$ z4FO^yAQS4L1lkfL#0~D)3QQ0Z!`@=e71|0|B21^-K|u}7=xr&YH5H{sM3ufu1*);6 zh#F%_0XBq+nn^2C=;c-PHV}k}LP)eKl~AG(2n`WZg<2F)1r~)AFvL|-ktk70q-YY5 zL{O!xpdeKNt)^3_&l>$h$Q&bz33#l$unbL|PNM@_*HVKcd%I!J1 zpt&kE;gwvO;W7=gDykx32!uU$)zPo&Wf|uK$4J_c5g>pG0Bj-wyLY zFw;d=2~*x#+*uSvX+bFj6KF%N^;wU1-1d4QFbxwHfPsr@Z0SQ((8QUisou((3BxnRl~PJOrWEt2Zd|PlV>$bZ_?iDoQuxnIS71|_I!MPGKAA6aji;N~e6s-US6DSniGiv7DnglK{w2Ca# z1#a@U6FL~yn~?7==k~8EEc*6PM7rmi#1($?{BL+2*0L3nwsqny&2FA7t(QxiLbZ9# zE(>MEijJ187m9{7K*dY6P6jUOHI0g@m~i3?l3J#emjXOTH#sm#N07RR+aiv4dgRYd z)@BuhZA)VWMFpvLC->zNO%Y|mSr(}9;UG+@(=!&+S+C}q!U!S)B#6ouWaA4a1R-VP z_esV^j4=uaCWgrZH1FQ=Zv7@H> z$%v>acO~iLwWE-qa{2QYKI*B{c=L5esVJmBDbq5v{blrzE@DkZ$cUAz}(bFxX@riAcgh z8zTe@v2zXpkqFxgXj0}zo(6u4^Q1z)y#O4{@Y;lio}mFX|vK9`OW+Hyw; zUi9Ja)v|7TiY)a@tRV~{iP$vEa8IcRD1!xPL+V`LV`MT#4&W?6!##ij!nIiU7j8 z(v)^kbErySGELJB_|=$Ai-Oujkh>;KaR}BmOT$o&r(KMe4GSzn25@Rl*4f%x5L`Qh;XMO`TLd7Nv0gM-sWcv z>o*STfwy`P>*`O378$n03!cMoKkitf3=T-8wD2JY&NF;h7R}YN7ZUAly!dlam=ksc zXp3Nk>`1Dxa0wplwsM1MZ+##`2@kDgA!PF4xoN{qS1fbV1cOz>jB0Nwkucit`A&k_!?W_G#lxnp`SRi*ucU z2AoN%Hx}%v2Z@RM9*2=;X_P`c(6OYl5=2H3?+*Opc9A8)DH4I$0MQ4u!EH8=e1M6t zs0@~fa-&48DjH;h3g(@JCE!;fhsM1MF07+(RV5CHvj;(X?jwX5AkJdzYQj{IWg-zM zz)ZA>JWl7V+q!qSSwjz$E=#dpxm8UcJH83??Sdk)B>|}z}yO#i>4UdTBtV3dMkpwi2 z7Fa1FmD(ve)?ya(4D76?$faUP?<7PK+lZ)!Q9)_%&Tq|h`2|8 zd*s1RAu%rI{h<6XM z%7(2M_7SO&L6B@Xy_wjiMnv9hxrwoLfuQU71yQbxP2Cn<8R@(!YO#ti*LBCZn8Sx{ zFl7=3E^fGPk~!Lh5DxgrkaG9X}zI}mM1+nJ+kG5>3B0zO)7Y=zn| zkWxWHD;-VnoM~~CgI6$y%pxm|n-`epx2*0x?)bpz)lOuJq=bZnC2Qa8a5Jp)9k%UP zL@{`^Rc);_2GlvOR`yg?V@!9>qXZSH1ue9?gy3)?bfy_3M@89ckcv$yEHWkP8)%8* zA2;R5NMBkAYV@p6y5E6HNJSKbGq{fK6y!p0CQANON~+56Ggw~$z4X`a^0KeJVPv{3 z!0@GZk#6qzj`NH+a>+SO+9DloYZ!64{jbN`s`s8pV;CD9yQCmOVKwE;h*lnd0n^}U zFfU>09FlvaEz$)yN-u>kYdvpHgwu$f|nlJ<`J=T!ZF7eCpqG|&Qm8jVidGsNYQOw!KU70 zC>T*(C1rC%2IQ&9s^+3x()eULZ*bR~VIt_%en!A#J8exWo~@lU4%??)O^w8+ne;Lm8ey z<~S`DCP*aMj#6OWX%;YPkbXnAPSZ=cg>^3Rwa||Y$?K#j!8YJR(B$-+SzCs(vMn+}kb+z^T-=7^VsF@j zqdxXOe)1*0An`srTZ7i&$He^YZy_AHJ zw@rr2$2aq@AQEwOdZNr7N+6pXXhHxGcjT=wgr#B>wppDk1}el5YzYRRf&@4!&yhyi zD9J}w#{<$)Br^?jC}jYF5JK{jCnnRrvN%f04EgbMW4aq@LGe=IjT$g)B#AIaNKtvV zBvlmmfINyqM7KuSjTIw43Jeo8!zRRlg3|G2D+jY|GmC1#!x&;}^J6j@1~zpTzF^D; zd2R^C$VU~S43Ks~0$N0aiBLyW&t_nD7%GCUOs3>Eb<0O>As2RayBj3oG!-Rby3~eA zAZ}G8)yM?c^FTzyb|YdCB-?kQt#5nE1qA*RWCD8TWr)(EnoM0@G(ft^GP}66o2P-5OF3&aq^rKil>>8Y%(~GvUJV^r3*3hW$rxyo&@9Zw-8F1iWCpGk9`01wum?vg^b}i4&gJFFjJmY!gyoE=4)%D$lYNr_lbB5UpPs;FN;DgZy zeVUEnmPX3SZJL@=DU*iGOk4-7kmJqEteaCq9RdnDAju$w)b!+(*<6KSPVHV0?0Q5l zIdEAZB4-HbgryTprx3{(B+73$h(#1a9lMSKHt?Vza^>G}Ica1@=ZhMU!5o#(p`e>{ zA_*X$kRby{QW$9QT?l%iBpFCXcActe5{l?4S>-Gn4?0&LEev-$)x8+gZX6t2bUn*OF^1lBfXO5slIuHlsN{mubc3$-Z<*6) z#~ey}c;S<(;B3Jogds)|4RG=4n60(&d2y)dMCcPsyN+XzFeAGn9e0Ao;Y!nOmd+fp z6JTvKEg8Z)?XA*{R?U`B;^ z%=BdAkk-!6GYCV&d8pF9UZ@QY*0wIEw^8 z@}3^t5EMwAn4=QCzEEX$&yV!p@8y11uh`sZrKa;$Zmo%EklWnQWEf{lowVGFX`9K8 z$JN_$CP<)cZgY5K8xSjBi}D|{svauKC(M;31PmmSHpxWjtb`%I<0wC^pLyzW)9`-- z17b8wszH<7 zYjvHvqfo+DCthX0m6t6$Jsxu1+|uP*%I)a9;`mBJ?&P;PyUL}1TOo^ms@h4s(gA}^ ztmib+C@9WLos{I|L#E)E3m}d1%yj@MKV?A!?@usZ8ntCY&M@3gpTqfRTv*PrpH116 z8GHm+!h{%@vA^Fzx0U^?#^?ix&vTCkdw-_|>m9N(+A!Y>bqK7_0jmsEuVWk-OF00u zm{4+~3A7lNvhb#l6{`&fAY(vvI1qJu`(caA%gM^9JmWOsR-GDi5TfRq0#BhDzHE4W z4qp{M-IZzFBN(lbd^{J0No;Df6y0A#eLzhyvww(MXbDIn8Xn{}r#govFP+)2FDO>i zSHjn29CQvf*w@zl^8;-w5-l*%6|Bo5@PICajdoa)m6mZKn+ObdV(O(NS3t|6n=V7f zt2FDkLR}4xCCDzT;)W&BMJ%$>SAPpO>2tLO$D)*0bd7UisgM3@-RE(CZit9+RIk1P zStthYK4BAInd(3%b_&gfsj&XCQ}=iqrfIX>;*_y1Q*GUfxXZh!4mchgRC^G*#hSuo z3^FjKAxhPmYiz(3nmahJUTr(4W!>J~&`lLhoL?yhL)coY{yR@HyyVg(#AIN?CP|`# z0)jHbmbNJvK3FsW(s3P-5eDuH0pn#w(-l;}5by?xSBZA8j45yTnYt2(U5fUS7c|Kv zYs;Y)lodq^>;d3sv838u<_301!eZ@R z{b*mt{se=cV5ZBAQ`XzFG+(lwIuf$dq?`!V;6RDifm2P%C7>F-GaL@;5sbx6P+4Ka zA=zU65<>`~h@DkP2GvBNLqeNWk8xrRNz!_$3sk_b%i5AGyG>zVmo3E7uPvjOD#d|R zC5vhmW*vhSww0C(@U*Lam<)P-KV>k;VlRI6>^lx>@?P%qE`Tqns@1Jm*nMY+pJ9+qQ#RULO_4Ih+G~CBI6ujQJmo{AWo~M{csTY%M`eQV?(7}( zJ`u2gty>#r3Au1lxr5YH55O;TVs=Rvnhp}I5~Y4$LwCVuQIa#s?PZKL#omVInL;XY zQ)wRZ#NkP6xWXjC3KM)<=3#)3>WUs`^?eWf zn2NCpE`Aot=9Q$YaA}289m)I0-7Jttp5KJ@Gj64`8y+W&)?4(BSzYc=>`bu{MxEQ> z;}*(XH#8fnJ51At=U`N2O}Jp_XzHtNR!reG1*Ijl&kW-TXvgh6oR#h z);t)v+yFsknMB{?A)*2V(6Pcf0$u|{sly7q-ZMP}^8o?w9J}aCYXiNK49Xk4jys#$ zQF`t4FO%EdKttxZ0h!F`F&9r(3+NV~&!0n2tMu6QJMH#U<$3>WJ{zaL{m*-b<6f~{ zzg{Y0s>~#~naoTK1fmlK0)UDIDBCJAgr7me_z8JI$ir$rfscTM6Vm9$F{7n44bT3V z@gx{hM}(yc3$Eu5PWOhGl}|G5JmS)?oPI~k8lpcsQWuf0i3}o~tI5D32PDL-&Ry67 zf)I~;2p{e7*F!&)n5tH;so>YDJU6y;34O?HgXG6G{4?kSo0P1lVpqkOSF2>_!CJmYKbp{C&IfjezI`xS+GX;V4%-mjpr*{tCZce}T>{gM${v<=lS zxcki3hu8WAeHFCSi?mQf8mJ`Y|ISv&hMP`m?CiJf@%*0lF4APG@OayokKEhrs_+Zd z{uPkx&;H-wsvFWgr};Jj97#sZ1Xzi7gu8zt_NuM6E>DNNr%fnOF@Dc!m)1QdhXj z|AE2!nfl*d`rqBocO8b7j;pG+YiK``Lee5alw&3Yk9DJ(i`nnMM@4x=&&D#TX{NTqKUgFt%S-{Rkc?a9(lJDnNkQOj`v4ykcpsfSsEb! zkfu?$%F!y()eeJ$g7Qt4t)p5IG;PG(hd$+|ZMDWs^v#Qdq5{N-C#u=u;QXAUwIQL0 zCVv}ZcFX-9>qEI0{KT*w$|Mp8FU~AS{w@EG9-k9L?0$_%=gsaw+^y+?I*|Se4<6m$ zzQ6Np{%X4i@P6y}ZZE?8f9mpR&F7O&h8zYCOk{#3q*X*}<~iHP2@uqhODKXYk~r@? z8^~5g4z!37joqLYktBqH-T!Od?Lq;=Y>osh0ubOOWWhA9(IEUD&Mq`1dA(odozLSQ z@wQK1bPW)a19M;AhI!Tce2tC{i&s)gQxKHD_|p!Ni-BblMB=V4NGXfY%EsHJpzI5v(ysEsM0d=3fIIR|hATiGI|9sS-T25hUF%>KzYGNJ$59 zPg)G5y1J$=6tQKp43bG1{!5ZfA3mS{<{Y+2XYCX|)5MSWr}lUX7sEB&h4PE}XJ0Bs z&QOpyB6EeCoVu?9dVFPcz%~ zQ{>%Au;%!`A)!2&e472~5Iva#l`eCF8A}D*y>GtA zz74oFehKy!Vd6+LV@NPZVMld}P)qJ0jhf5nev~3oCE;rBK% zKR9sE2IvriN=V@f#!tCu^xZC5V-$uGIY>$UQGLXQm}8meC=xJiiP-hEgpcu>;rxZb ziZ;l~WReYfEs_V%Wdpwq zjU^&+9rl=GW`A$qOd=;fn^&IyPC(_?*6u+tRmuj$5=P6-E#Vgp26_Ci#)z6ts}hPN zl6NezrdNluS^T_Zh!l}5?9o5#JC;eI5A5Q&m26{JU5F?l1^mR+bLbb{ol!QazG|`*xEn>xq!CqmrBf;L6 zU_rKobM%{waaMk=>HgD=#}fm_uh#+L1W6oqKsXBAA92|kAo<#cIUizuh1QE#liW7M z(fu^fygHeN>=^^J;Iy=9%AzETX7>#xX@vhJuAb#-bIU1cl0@P#wko|$B4xR`&|@VH znGMOXoEK1rO4800sI9fFB5#=B%I!_PGnkJXLKV%96cL2GPn~)$!=*1I%SOZyK<|;v zo0uZ;S~jkZZuT#4Ya9GZq{?(n)2eSJhU-L01b|Z6?BRuL=!5eO2dHe@(#OS#(CY?@Ve`cDvQxtDN2df+m|IQWb}qc^9#Q@Q|Vr z!#88|bzX+J3`N_T+fk%si5Mn?vAiUV++uBRU2M2FB}~#%orb8%IuR*b$v<%Ry{|SW zWy8A|{~DP~>*07JJ3oCt{N?{k_i`~}dK-1In)Y=beZMz`c^~}WC*J-I{B{jF0@d|1$DEOXaL7`g!(xSr>)KxOrAZ!9 zu!0u8bVqR&aLK$PL_r+NYg%`!C|GYpCaoHNe3>&-Ehb#h!KN0DGbt8|cE`Qd)JFv3?b|YCusO(kLM9O{*tj!$oc;<`D|UIe&S;K20;l zKxH3lz1tm{RKP32@E}B>h&JwUDc(z9+oIU_Bhmco7vbhV9>XD|tVz&>0ob9obnh?! zC!+{l+@*%ikMRm2^V%b`gIT+qQvHb^`hC6j`MC&_u^SO5O+1GN-wNnDSpA|NM|n}D zPRROSCA7zW=#JjMwtOWehKMGWkT&s~`Y~q7Xyo58mbA6GCeu+c>flWBl+q$-Zy2#` zZR1Fr5KowqfQIJ7h7}welPGyN@wz#>zFQJPtx#jEtaU>Xa8`zzHpv%rpo_p-5Sa-l z7UqI*vC#by;hJq**bSut){C)X;4eQA@C=pA#emVA@m#1o0@21r5%Q%H0*c64O+k zB?y+tMbWPoe&+_u2bz#{GDC>_EI`SY2^<){>sjhHVBfx-(1f3{ggfL%<#&*|gH^bX zYdzxXSYq&)gX)6%(g(UxHNh=n&`%^XU2ykJrxgvGsg}WJyjG@*q!e)?tHpZDH%e}a z>x4lhJTRIl!MJ%YMmV^DrFb4lX54)i8Py{nsc%qo`EjU(NcZRl@yDw_Bc?C^_DXjo zrF84NV@=D>5wEez{Jt*tZINk3bV+Ws;9%%F3~swAldcSWEVr6wOi`rjotv8^D|uP- zd?G%Ks<4;j5ty=rAoRp5z*c64aGD1*S_ z%ck8|R8bMw{>N#FS2n>2j|X#S0Dw~0xS-hh63Nl!@7#ubvz~i0QILoT+@b*tgg`t{ zM_IcYkZD`RGuX85a=p$Dr;%9GKD>#vgikN?(~dM-IB{-nEXkAtHM?zeb8XOrIiF=~ zS}YgJtA3b|J8ai#69x+itx_B4EozS0O%1TDK1s-85JSXK5UqQ~oOn~dtO<*sL%ly) z0Rw|_i1NtmFl z1oToVx2hv?5|Um?&YO3tL9qbXgKME}rBM+!Uz`iljGCp9ILr|zYqR(XkO9v$U%qc5 z1TDEK_ByHe-<5RS?Fmv!%QD8_EG!UUiSHoEBMEv2*ZU|Phxl`Iv=6}Vb~>eGKvpRV z=N8r|z0g*=3G!kOplmy*yhjr!;$$T!gLT%ecuQMJ%N#%IlRJYgFyF_gqFb=O`9H*D zNYi&{P7wV3e$F&P7(Z)AjUNGqgw@M#m!-9$%oWnoFQ2idr4S;{Ugm@MYm=2dyX^Qm z-EE1gzfJ|*$>(8YodxkOozl(Q6*6iFz;H2yV&>AKMl$)7@gK|>Tijq=(;^6o4sQ9~ z!h&A1-gbYsk#F%yGuMauW>OVNjzE$`qcQ|T84!%=w`=$>C`-(`Duh9f34LVAX4f?g zVigGP-E_U2#};t9cox>#ZwJvLCN;_}OjcG1Q-l5Qu8azjAMof1+ z-r0a>EP8Ir#F9n`m!2I?Y)QA&a&~1E`TknK5uH=E!_JWzGCV077zm@cCJmeK69PIC z26CCB69V;#Yy1d9J0bk8pG%L%)lnBHGTQz#Vf5kH_?pLkfsK{0Xul8eY6S#_hm*D* z0T4x?0wYLc+n9Q>N61k!;Ot_JyiO~`TTql6K`LmkV$vL?inV`6*7 zTDUez1QW3teWti;c(~O8+;=v5kWhYHA`Y<0Yn$wARa?gmxjDVYjvCVBmPT!+ZMvC; z((1O|32TTE7hWNVBpd9RHY5^g+k;j&D%zMeD$yXRHelH9wWxfEw)$RoH=29uw>llj zs|hO!5?Mr&K+x+D&Wh&UBXd#2vtkG&JR!r9u$j*;QXq|sr^HBoiuLNKF!QI5ud> zVA3e`L69KX5N(}m93dvi*V0SdMNkk#+@Y!nl0l6aO%fUi6Ki$DZ@k%_JXAz3_Y?#p zGADiHdY{;9SSBI*>7BoW+Y|9Ly?TG*pEWawaV&LVAIUql8EjUPeL;K z%OLv8IO9EvWQaN@!sxAi5FMCRX-M0V0TW|&hq)O@I0p*J+o85%Wl5AkW=wI!!iC%G zF9fd#Qn=8elVmnR?QGlNhigP(D@jQrP7zCzN?RgGETF-^tl1h7L4*h$;*E*ISIn`Y z5;j9DYC{(aU6WXJz(9jzu_oPJ<&L#G-I1w86T{47NU|X0_LH1Xa%}~hYG+<9c`MX1 zjisVBB(r!{*0gX(h7sY3ixLZj&ss!tL&zc9Rl7#sqIlCR5QV`JQi)(m54lg7QrJ!WMJ2q4%?o-^0X029HsP1!E;tXjay=yPU~oZ zaCtC@Hg^*38uwL$2MWks@;KI5;%p(Scd-o#Q(RR=5cMkFVYy&}NjFxa%xs?oIXw;G z9%OJf_05C>)lTtbLlw_xx#LJ&0y!5D!6f1#*SYTxBIq)CkUoOsAaj^^Y=x^Y6bQ@TVRA5HJ#2tPagFVlbB z{@Sl8E<=K|1s)slYG=%b8ouiCttcTT|Lxv>i^W6Zm>Bnuwh>3Q&SFNhNF&ejZ=uA| z2rOp(o4R3d!urYmpQWQdgNMJ+V0Ee4aY?DjP;tPn*M3@~ z*s|JH`j70Ek3*|L&*V&`VAmnNmSAW{ksv5+O*aMKbXOVuGfz*h_s`1J%DxxVh7Gc> z+zb}G>$*neLI%W!QK(_;s$#vjdb|W{s`BxI86bM3DMeX%Yk_-xmLr;pk5K%-h6Q*K zQ`&X+IT^Qv>r8>MwWV=iFrU`+l*LU1Me7Lg z5cJ6gvqzZn-2&`bWQVf9Jd+~UCf++&%%;3&dN>o8mT7B9^Q}XP2;nnthU{PH$qKtmzZT6Eaoq`x7s)HBEg+!72h?0^ zP{n!FDg`5?NCvJ_W?>>yn>NIHspII|fbmpvOZp|b?E2^4I3U}+Uea0ojPPDs;AWc%VM>q~9BD1C19 z9f+ch5QHF!8v>O zg&u$WsXm_CzAbp_-G0A|%!~pk+r({yXf9I(M*^5V^sUJ#(ws&en<$X|>bB4jB8omz z2pS;^|LwbvHc{fQKIep6lnzW>+kbGaCJGBi$vzH2VgeILmOpLqJ3g<#XZxA|r}m4t zRaW=q*zXJmkKwxS`;3c6q2sbPD ztuQ)r=t+w-eF%%+!Q}my&%GXpo7sTH8!+YB z&Ul@jzo(A*`43$S;CwbeYW8V$G2y=Nb91vq*_1|%D`eZot#yZlfjS$X-k3kW&aoLEvsxWYkNUZ1`XAz&z80S=JzUT3Q=)PC-TZae zs>Tk+^Y|`)fd9~F{V(?G>?2Q2K_=w_Jk>i#+Q;&px*K2-c~(cloAOWTz1MQ0)#@JO z^-|El_N4==0LZm>ex)8Qr%kwV@G={Ng(W4iJ zo>K?HOz(wrN88-FOWmYSg(n+>o-lXO2jYea2hwiW=}ZIdh|uB$`8v7IxOts0vJ!)5 zDI`H8|8*uu_7Z%!I5BSl-|pKGb*K9uyy1Jza|JsIc*e6Qy``GampxInH- zPjZ(C2%8?_K>h~mG?!us8>NNth`AbR^1q|NkZq?@#=JhJD_UvJ8?6|`G_zETxdu+D z-EE(7EJrP?s}8?^?jz*>B@N+qqyab|6U#i{{&iI-z)=Yu&ms}G%XArG;pHv_sK-Q! z9Sm+rjA9txveay0B4g27La{#;0Z_7#kV#O7aN-teJ=l8U?X5Y&&TTZMijG=rZZ{)K zMwOaug1gfzCR^*YTqYXPf>R-bOf)7)no=&T?(1SiytgrhOf@uIx(t%hR>;Z}5-U}c zCey*PL16+4!rS0YrT{}Jf;boiLPXe+#c0+_CuE6)jUk~3h9@qJG>mYYGSH$TLctj@ zt|~n{4yKMH2eJMh%Cz`H>6sahf{cc?^}7zKk?mkmXjJ>ikD&TrUE5vNdjuu=%pgYJ z&Ht_g@+A-p;CRfjJB*FwcusZFmGKlQMpiW@_~|BUFunu<>UQ zU=xGbVi0E8h4<>_J=Pt2mfv+D;68!2+XFEH5L&g7B6v0i$$TnA8jB!zR$Vmlu`)kL z_%!&|gjkkzD0QnaK!fA-H@Kau$c|(~2zNGBr?z(OkErX=O`}z@f(^T1!2X@r0%q13n7eZpi_KaPDUf)26Fy%0vo>_gyDAe{>Im9W>qL0du)AloZK z1RJM{w^e59^FzS{vJAE{8)*=I>>+6@dIYVlxMZ95X`7ofO6FH-=FlerF7dLlCq%4C z&d$z`-B3027JN%QJ!d2h2Fdh#M52HrkCDR@HYlP8aND@iFqTppStPl}Z52a$M=5)d zl4hAMxe!N(A;g5CRMEF8)un9TXfJapCgWLW7K2_;A1{ldIh)@{jZLm!)~J1Fncwz2 zozKsdNH(qCNaRVi%+H!vCA_Y-qB~s{HM-V4_P;-UE;{e0QI-UQ;o+n~6`w3cVDpFeH&J6#g^NaRHWN^*}!TH?sLcPrlWV@pF}pLdieZjbw9Po`^v?nr}fX$+(cp{ajTsoU}x^UZn+Pq-tr z`u;u)eI3HL1R7li&0~-c5qp#3}po{fSX{VE$@g%6`_qy zst`A&Fy4$HY-o)zu<4x5k=>K39+mmEL zlCqOeF)k#lHm$3T`N$0Sr40z*$n|eEMEFRJuQ6hBKtzx>IDg>BWQYW6bSxW50{w~) zhfnq~jqB#LQ_n3Qk3L-}vOUzfLw(M~;d3_afez8|RJi@MZ{xTRC!@Jw5JBnJ8p!Vx zd%SskUtcw*i#be>cgYHs(_F2bN}K7et>o15U3z7Au#~qAH&I2_|DMMGy4jp(A&(%S z&_@U|(pww#t|p8c=wL9c2tWRs=C*U95W=zH^wQ_oTYDZk5RhJSU(4q5Xxp-au;apS z+}gCaw{6)PiCg5}W21Iy&l4*!DbOKqvd|*%-^44+BadVTS{#Vj=_5|znY4aq^(+Yo z>LnBYajF`xEsm-~nhQ5pW7;l6b;UD0n5mHHyd)r%sT|tx9)`o;N2|}WOPc}`mFN1%f87gZ}m@52#uaP38rm2XrL zH(f`LUgBrI83jT+1Pm&%4^e z;Ukn>vH=*`GH_(s%%(L#BViuJtxA6RAxdHUNeyTohJ4ega|F;$A_jbw z%Km9&4bOCm*%GA$Y>FA6wVc(i(1RrMc&MIuQecvmkv1m}&BqCXI?pZDyHfg(gh2aEABlLxH zL0FJM1M~Xl)`=KJ4W8saGWP~O@<%0lWp*lK&|waT+LjNorT;1l!+8o)7WGu{fy-ky z>BdIna!S%cifmyNfjcB=BZyiUBHmsbF)1~7&GM1{U7^wKVFDex^Sk*e6i0;#Eaff; zAn_rXDdai_AhJC7D*Ad|G)mRbl${G=)U*k$?2J~aQ z{3#aTU?Pu|#40cdN38eEZ_P3Zv1Z-=)CYc$q*PM3l5k|fIeWLX>&nvNLx7iiH!eYU zQVw!av6k44xUm#LNbXd3kYl=a?xl1!Gzy4_8x5Tp_@x;|Yb&VVPeti{9)#r}d3!`U zy+yIGuS|vDx;v0p*PV!u_R8tsp9$`nBBckzI>ZuMRDBqa{b3MK zd%(t#VY%C+hiy>xyoj`Ht^WR(dl09rpvX2LNkp^|J>r?kX0n~opnT+@5#}U#-S|x& z%F&|5*MRwP#q}Ry7pDGPkKG>x?~T1TQ3Tkb=)I2vto6{o4Y?bdHt2iB!sxYRg>IL~ zi0%zj2T~P?A$R#jjB{grM#YUw2#FkIic&nz zlBveL?FL1JsoXa#Z5DE+V__kYQZ8;^te*@{5pR2yd59T$GamS{D_oN^{FDw&pI(=0#4XT{ya*(c^8 z`k92eAcBzUFA2WWnP{WSbT)6=jlJ`p+v)IR`qyuT4M~)W^9<>xElA=(^>Y^-HPNHlO$x>khMw3myBAn9Hz9Pi4C@J@mB6>*Nl^V z=cysWgwUBKu?>D=7!?+_*zI#A$wcHQZ^1Ez>c^!%ly0+1w12qX~VgE^1)A}rx9mC;j$D1b;x z&GEV=&gG07U&G>V=q|Nw%fb5yUCH695n?wssZr4ca)OtmibfZL5G*TEWDWl`-U>Ea zyT>y4olHiAR5XLMlz!NTV(A__(&um+K(1mHqQz@7l(()L1%39fcvu zinK2WB?NIJreXFZLDZwJ{lvstu-ueSno+b6Zr#hm{|tm6jwO+EZnDWBhcDeiJxg}I zA`m2H3Ojiz10|<*lJKC!`9*uUarrxu4utCbjVViqL2s@2{u~KN~tt8OQ_kt z^R^FBj~#c!bERAH;T`T6cDd^1#yj$c#SGy)?1LH=cn!+3l#xIc*n_b)WO!QHU6ed0 zy_v)=WFlGXDU?u1Bs*b%=#IBW#n~7oA~+WD${FT|TMCgjZ@$El#E1k4K!KZ-pyiqf zqIPlP4^U9;3~}%3r11NN_WT^ZuLD4D;`Z!1!hr(M$YUi&#QmPGhd!}Z(i}1+pyFbJ z5D29sNn_L;&-^3cmPLGC;fS*zuU#@vpu-?+uR9rZ;Kg5XXedA&{oS0k0AZ#G-mF zVw3V;IXdLfC44R;k~AN5|;-G9N0U38QaseDEUrR=OXm;m&vy zIe7JAKjMKU>}*#tpzNT*EOtlGuOGa=)Sf6Kj#FZ_QKn3F|>4H z(-g*(;KksSg%DD;IR&Y0gRyT_7OiC7%0=`a+RumgzfU^epPuc06(XO{oE_Jr6D@Yx z5pv*6WJ!n-JFM|;P`}7=R@av8)u)1^xODtT3>I{3U*CG)$lP*&O`_6w8i%g3%@;TK zu{GtdFF2R(<&hmJm{oaGK~BcQyRq`Ck8&Zs~6#&?pA8K&}3>%>?>w$F^YEu=6)AeuS?)JmSs+Y z3px3ZWaJ%R@iU0E;C&6$c;`I<9g%+HV+0}COXj2Y4oE%cBV19qY@*_cAp#Heeℜ zOIFuq6b7Rp!Mie)SN0{Ab)T1L0istcZ&6X%;i$YiFo9x`&&wKy33983VUzLE=c~7z z8FYsE8+Sa;0KEL`0|-^dX4|PkS-aZ>sH{{*;vys;C!m3^dWr79wAhoB_0l8?CIEs83CrOI-G`XTgH(Q^JVj=*O9 zo{0YjnX#?C{EG`vBL%LSNjrvkDQ~VL)d~RgB_d)`R^dt9CxfiG@}A{KHhX;El_U+$<`(Ni|=Nb#;q%i%1w5 znUNBh1@&1^KB>|R|5*JFrQzi>9K*dX9c(rS-6_(@ZEO{;lM8Lyn4j*7+R2K6W^yFCL2>KWm)5oUa=nSM%Z8xZqbXVNB=tiCN2ees@){ zZlubQRiQD)^c6#q_`WSkzxTe*(QCrF{{aD0GX{`@aSQ^kjC}3ql+V#HMc8}B1Np&7 zAjCB?_`H~Ix?GA=rEmSC)hE!z`laY1s?Ogl3*Va4U!oLaevQfQkFtG#s}=jY&i{^T zp}$$}M^r7#*u&edU8&B5xBJ|3zsX}DU8%eE?1o#glh@yeA{55u`a*8r%XPPbzY-^HT>T%=rkVl;@Unl67&i3$G`3O9jXCQ+YJL} zJ0*^GJRH(0IhDBt&J5zx3Rr%A7xSBdfN7IsXL(+!(C|um)gKse+$-m@JO~(HGZF$n z6cT5}GyX&hRv&mf%sEj!%Tmd+1-evtwW<8ynUCkgrr`1qAQ&KVSU;otKyw9kJtpG6 zKb_Qf6Wgpoegvv`I!s7G$n~0EAYPQ8EHAFg9D&HI0L~P+?VvAriH?LSAbP!Nn{|KQ z*aom+JFp1X<(|QcrCSkl2?x2KV?Xzl$B_8!x;j+m!5Z?y)}Qu*(@SQIS`WQ;YiA0Y zCq>;nz(Rx^Ve$b0rF?bdgXwNFKBqeAK~uwZ3k!ZF_Dx@K9=6=f3DrTJ-?bjxPmx^F#aJp@QmI1b#2QhAO@b+IYG6U+5P{x zk?Ou4cFhPxCnTJW3tZ`8rSx>HBSB1BY5Z(dJ|yhi=N6eLB>titzT*X3w%4NX5$b!B zKpw3iNRTa727~g(2DuvEr59KKimU!TkTJH}Y2;txvrh(dH^$33GM*EQmy>iF=-5`D z57t>~ud|Ukt+cY#Hq1)+YIA&2-Z^#d>i&8DV3JoNb7QUuU{H%YQGIu&ABv&(U|D zK~LG=&k#PGCPzURX#3i=*nIzc7#tX(KGIe?yjVG6Fv3dX2%?!T6vTVQmXrqRv z8)|h=n$KbHP+;ua%i6YHyQ?`$j-Q6_F)hZz&CT(=Kj$gi3iG|y+L2*o-td<4c`8^$ z6+8z2?y|>0+JCRZ@$7DYKlu6w`szF1Ve7cQM+@b6RyFtQkcdaaV+Pm_ro@7^NHmR7 zHA_^DQXy2(iU1+3#&-w+QN+1XVG<@ZNsG=+V8+nxF~jb+SB!K^x@RVr<(XG${tGbS zv|LmK=n~;i4UWlv=&Z*=rqac(S;ie+9~J@*N-|F=c*4P_)9%@Gpx#f2qr2m@>vzNL zpVg7fLOUd~z))`mgWGLO9}xPXSciK~qn1`OXlR2-sNd=4fW70V0=%P3`sBH@;w3f1 z4K{*%jNUPrCk$raK?+5)5f(-29wXnMJgZ+Z3&6lKkQ0^Ky8O@kOPifPr9XW4!Xas% z)48Uj3Q03i^}^yQFstWsYS26A3QSq~(wSK0VzVb7nJ zo;Uc|*xA2!=~XnyE8{(vsw>y1ci`Pk?z3K()Dh7bhjPhZ42iwONNh|Ecf;NY}OOst5mhCgDaL%`t>FS=^mRJn&6Z)}|Yi_J~~y1K~TAIz|Mz?O^1;g-%U9(i<7gzeo54k^)=S0%iJ{A@i7vzfLHJ}zMSk6^|H$WOw3}~P>r&~*IY8q%KCILlIn!HjIhFuG%~5<&$k?|TyKDYh z-MD3F!${%h^Xz${6cG}Rc5NDc{c2ofUEVmfJ}QikO7+#a_qbNfL0O852)3Zlbg8s)ALN+z~6RJ~N?_fWhlIaJojVGA}W{JmBSwrF!^gskY zuEYI{q4B!_f}YqqoVL)|fC^QGjhGFx)1#~Afe1<+icMBUnG}%AT(%@wxrVJ%k`szf zIKVk`VTgV3*KKOIb{!YJZBq-EVV({k^=$E7zp-PpjdTuRnirgdsv-M@cE$!EHiASS zaC%^ip)%yk-s^;a7}4Yb1yThdz#;51NC-Y*Dc4AIylEoN@e3cB^)spU8bf}~Yzk3n zrQx32{JuHQhHlxSW3%3xrI9Ky$`Tf)d)jwT5>2Mc|1&qiT^%u&-o>IgB=sZfkL&XBMSXwq0qUipa|kFrEPeAu|%H zQoG#WAiTw|AbXKs6CTinQ-w23Pc`cMxV~!TF5!``>4j;6D2fzi5BQ282Io> zk|1Q#Kv3bW-{K1w3!3067z~}Wxy-CpZmv7`_QB!*UT`yGljKlca(H+hFY=pb$9|_Y z2)xrgLkg3lZ9ih`Lyi5#)~_|E&0*ZpzNaT0As~nn2y}Tm#VZh?8hO+B$-bZIrqS(& z)EK`f_WAgD=HndsnMg;IM0Mq->6!gasKPfl_UP-i6p=3~M$?@pjDHN%)pd_W3tr!Z zJC`z9q~6S_^G8Grc9UYYX6x+pQsY@5k-<6wegOoPZ@CYTa8f7a<$u^LY-5~wmZT2*>`%O z)mNq6!*hnidghudfK5OLcs@`lJXh^jFaRV_syKickpSntFRAsj3p$udbAa1zu`}~^ zXJzTqIC|cCR8{50|3%jMK2CDR>9f&lA<95gGwZt8?F3Tfr#qK-vU~QEsRqFGzz7k- zKn2_tRQPt7^=Twu+bqf$!?gK%{0=W3^_pI?EQ{57)L{MZ9Kw~SnQz}*maLwn6t2)H z2+Kw)=bv&^t%UM=;%hHHWbdJ}#OT`-v9N=`Z(6$qeq%@7hdMdo{MRu9a>lwFPtz!5 zuiOYP`#bu?Q9kaS!WsirnJjRHr|jmMW4l41j)?e*(wibDcese}Z%&>18ydt#f3%?G z4Y+}oMGRvVG$(&7PIt4sN;+-7XPHdA_<{mK0Te}{8bt6c9VsdGKgoFSVV3sW`1rur z^LY)s!itL4X{yM+#&|D5vzPXjt3M>-lglt`*(Zqm-`~p$hkBk8;-kCsx30XtQCd{s zC$LKtMMe2gBB~FMkkspXA7P6!=ubWAcI&9(d(La3>0_MU*n1!3^4jxly(AaaJaCG? z%;Svg13!uTHTJ?e*H6p#d*auzJe9vVPO$luxs?AP?TDTdB zj;ZHY(emGZPDulY_NG!Tm-YB$K%@%#Az~*lU$G(~^8l10q!7M?nsgOt810{U467kR z@hhPj?pn0B%i$31>b0AhMQZ|G2}Ymu?L@jk>p|q{`L%^?PQ(o@T?qL#) z?Mqsk@;AG`9S@=x4k5YJ*y?RR-QI%1j(U~k3&rPES7BxW;}@%5PTjS}0tEthp3IW4 zQWsA8jk1tjorP_)Kh*NT2P*gbda}gqHQxQE!^w2m<1AMEgD;QUJ; z#qH}94Xymq5OWe^LBWzh<~tWMTwfwCzZu?+yJ^uU*E*{C0HnaK8Nffn!#;ka-s)lM zEGXaO{h6tiw?il^k*GSK<&SOE{&f7ifdV>z?O*8pYPd-?RRy+t`1mT5LbKb z_4m%BNu3>S^2h{F{fP__ujV{Gv*=kbz0vlr?+J@+RD=R>~X>dRFS zw))6H7Pp-`;o}|hX?)axkN}8TlQD`l!x&?Z1uDvL3FFqj3Diw;-6rxKg6mAqP6^?&O(`fVzrlH1_Bw&p(XE(2pz@X-y7qAhwRyA zL(W_vG*#yX>RE?fdJsJQqAvz%k1~n+BtS9FKqWZ7yIJjizrellJNxg0>%312>0DzN zG{HYq#31=ex4P{+`al8(X<0YV?x+OiF_WiE3G+Gg1=B9?>B`+NExNA3rtMq$@5pX=cFN@i;<82la|3?S-&!hj z98b=U6aO|p{P+Ir(SP5?f4{xLe|ybdZM*$3x?<^g>tF<$O{5@g0z(*tlR$>S0N5cg zO`rzBXhwxblm?Q4q(vxI8a@7~h;r+ggLF{l;DJ;P380Yj@4zS*sx1u>%ZNZA1XSPK zU&I?VoY-LFe+A9%@%DAm!5ME-j{AML1M*%?hePb@23h>5|Invy|MR`|ik(^|kvyOo zPjOg0ZZ-+A=c24Iy#d~5V~z5|BoM>UbLcF6Ibs;>Hv%9WArTOv$wPq*DD7PJoESs> zKgHS0DmHswi}tp@8E%J64Ytb9S@mLNj}{+yA6@=hVY9q*IrwR>`m*_0f;%78EJ6J2 zuV+qNJXT5EV1ww~f97G@`E&I#L^fpTA^$s{v$rbE41bP(&(D6pE&m@oO}1_E3oi@% z&dBdQSAenj&s=#Y_0WZpS^Zdl15f*O(sxH@EvL>teCd(;y$PekZ%XlAJ4K0aHkPBQ zf#sx5t^vQYXhKLJTH@@-DCJZ4C4=bKRsWo1AHY=pyy*d3Uvu+u__w@ds&5I;w#E6f zqP$g7ZL{R#z3j=R@7y28sxDYHb1lH=G_;7Kh^{2&d6|qF64enyh4yw>A*&LP^ro-8 z#cznKxeGWSHbzJo6u@<-`(}k*MHzvSa0*!}hhS3(q!s3h02N@mX={ocrTs7}icAl_qOJUuH<6aD2|3@b$q*_2R?kf(W7b$ny{Vu(3B`opf zCZ9VGtjV8KhxF=owVqGa+xo3YOVs3Ae;bd7#-ew@52TWZv1RR@T3@e}y71x4OMjbq zqWdwL4QN_!ze)^5!JxFhxMfRtI9rqL!G{J@>-^1Carj;PqgaNypo+_4zgJ>4j3)yR;7j7|mhmhOb3FI`w9%atd`lwZRQ0LOc2w%BuDm_>X6gKG-hw!GIJ_CIA4DJs zO~?rV{4`JR>wXY~yYTzayQ`JJ%3%!+lK6=pffAI75*ragXsSkrnih(rp`ZaoszpgA zz#mw6TwJBuQz@h4oiHM=w|LCKKf_0F@lW$~p^$EgvxgOHL?bp%oTp8y zq)Ps{s?#Kr7>3y;BOKv3b;^lGM_5?N4Q+=m8!44_H+!zEL#04o01rlrP7X1dx!mWH%}hm zm*xLm%qj%b;7nSNxzPNi+K0W#{Ve4-fwJ!m5mLi67Jqtef=iKdR?WG-OD<5Ij-&)x`47@9qnKDeol0WwL3Rw5(g!hpQq!dL} zYxI0Xy~!vqaY;BY@4&K{3pWTX{!Q*BuGQhs0fSz;VPi=#8S z_8#{}fYJ6614^q)N-Chz{#55wko`*fmv#Nxiv!9;&n zdP3`&E^`-lKviBf!+PPsa!=w&F8^-LylZXNkVId$;$to=UrIwm`2rCK%Y}MIp?fp) z?_LJrADjB`swaWgqjET4z%}?(XYV*CWx<6at=uRo4e{0yU<%t3&XI1e>g#qLfp)43 zrn*q0#IfnS|Hs;hvH*VHRpfHsuIU?XPp99#UJkz;S)h9Wnf~AKJdUsQ=_kp;f1Q|# z1^VT_{pAmrL0hrktM$rw-N1N%ILWy@4aV|4GAD$A$B!1--Yr~h0}-_tYCmfZgOko4E;^~34RoVV`!Udgv|0AYwrkcZTFcCMAO zBF+)^D@s;u#ft~XJ2A)NEwZk+fdj2B!S?=2Jq}K*Bmm>9O>N~hJJol%)I9Nbw(OOX z%coVxz|Z4*zZCmg29W$`Epge7wd(b9jqh2k1YPfq#QI#%pN-qs7oLrOdc_;mVb(A`2Vx+FsrkQ3#n-yI^VwVG{B7@I z*j`U8nk1dd0ze?pz#MbeLzNYN01P5R17mTd~Tbu7C>z`2c6ZwR2ZFRiU-Q7iAs^nP}={Wh6P{vtoNJvW%GICvsbb z7$DvPWhcM>a?;mc90xaK>EcQMrPXTL$CCz6^)0hbqU&PJ1br@9*x0=I-X+G5;62?f2PX1XNW$i(Uo4)r3W_ ztC3Hn&RP?;ib@+}f2ts9{QKX8O6QjBOVNJ_ABR(2^w(rE)BP_)iTtQ0+e_3;oE+pwf8MPam$4_`E8y$?j!l@ATP|P3T$S-QU-*F}m{R1?BZ)U4fZ2d^Vp$=bUPA-v4nrcO$EeDk?EuHSIi+Cc$MHRR z=eEEEtkqRdto+vRCnwj|AJ+f1dTotO)?c~K$l0(k*xaUx&yinslIhacg=I75j=^iI z{`#-^3kHWjecRo&b>H*&MpiTTwjDn2MQ-w6`;k`JE|;SPveo~4D1DqynQx;pbm!%% zeVP5;%H5s+HGFc^MeT5YiyNW!75u=~VECNQ56&wsl$P(;yKNSp-<=-~tg;lCyJlAV0H;7$zlekJ*fAJ6m-xi&o=VrlH5+|)|1w`n zRnv38NyXQ2AO)-fyD4?hZeUe700N0sQ|#pVU!BkuRF{V65egA0p`=2Zp|3>1R1XHq zrK$uP5okmPkwv21LEIe%DVnObr2_u3ytkwr0^m$=r!rD@y>QSnK;<{Igu}=UI8Pvv z*X~uU83HDGn9~d&-0(-S+54aR{y60uoamO4hxB>T5fKokT=x@9H%$K&VMwX3K>AO? z?kTlFQ}YfgQFlfQw9?fizHMrCQSY~%p6XXf|6rYLO-J@=EGHQPKRtMTMBe>Vrgj;e zXI^GRl6Vrb-hHnfewft(9e2zMG9RZJzlo2jlIOPcZCFt|=2yj!abD({EPXB8wM0{` zqH4)5N`*JqE-11vd<;eQtk&7El<2h=C}nBD|to7**op+Qhpsk|)pA@g;)86KcPd+wJ93ojR9$Opql1m;u+6WAUi^In({ zPOrPgWnE_tffYjjToo=!qYz2-h$0|B}pprTxzS=FVB8?wBgI z?qs9P$bvt*#Zl)NbW*Mq8QZUYVjQcf|6q zlKRMHL!@dv??HO{36O}>8*7?_LnwLnYjiT3@)5veG1#UEmO-``Ir00UeovWy4A|6Wk)Y5Xx5o< zikaNARHm)Oqal1L(7!(;5^j~fx4hWqe&L$vhf%Ev$xoLRme*;}2v0fos; zi2`Qx<1l}4i?j!Oe?kH%>0gCuX_z>rwQ_2TgzXUNZw>=6y5$Oq5Y&XkpqUY> z5eAf{X#^2fX=u)L-doRhTJTuzt#V$=IebC^iTeit*ul2aO*BiZ!0~xPTxFnT$&JIr z&9kFcN<8KXwJYM#TDroN?)PjQxm4YNKtwJ$y)Ks)$zX<)Y6>aA@6&r%a9>IR0li&7 z5FKbFH>>z5PmkrLfLaOgr{*ma1^f6dKZP)Vf@BFtY)t&+0)TpKN_!TGK;gVY?;ocN}P$4dZkdleA=sa7vS&T9(iY5 z%r7|GO!^N7t@_{eXa9|JR?$uXW)eW8a_=9~c&HEghVTw*vs74;!DzWzZGQ8Dmy* zd#1qqS!CMLE!m-k4HV2cER$_a5fG7Mw%(cM|PmYPIGq)-tN0t$kF6i5#$ z?UPQmHMOAUV;wc!`km>^zC7+ISi5qGvv&xZxf>d=_ud|Q*6`!$bh>U|_;CTQ!HvpF z2h1R3j*oAqNLQ@t{I6jGk*yCGz zNU+{2pGa6qa$f?B>H%f`#}5(;fiNX&%`Qhhr-k|L*H>W$YQ$d<+Q`H^aqlyA+kTN*}cGV*=_r zt}7^e@3&zt%?XGnTyV(J41&Q<;ZwAppAEQS+CvtHygX5-GX`w+9ky;vP7N}Zj7M78!1yY1*Ko*2RX$o3er4?$aXjQ5f zsZ~VnOzyO-d>1>a8#iMsT0VH%LWa5pV(oiJD4!MD>W z@MI*GXd*Du*Q0&d-|&82qKa#ztXTvE1V~N5kfKZ%{Qv&HBIMAIHTM#W^Xw^A9}g$l z`=9l`_4^m;Kf3rdtxaxRF|;(uh&OM-d?vXLINClel@&!jym-BJnNi4KX&*VARbX3Q z8ZltmTLD1IPgJyO(nVsER@QMwTy@_rzM~xcKOPew3}(?zM>J|qShKCkSJ0DsH<5qp=y;HR8#GA91I?P z;f{um5UL8TA|e)s1T`im#pucap^KH9MiEw&6hyHomln{%5t&1pZRVW`Voj+#FR1rlL6j2ccp-K@21))Jjr52P#QiT<2gi2bW6;%O2q@@w11XNX} zsv1E>s!>HmpjD+PT18N5gi02ar6@-YIZT=}#w^+q7cppi-4e7PamH?On6TbuI8_g~zrRec?k54(bHVj=m*wYQl2N4b3QO?}E_I3Ll3e>f#zO#Fdkd;FODp-JQNN5PFZT`k@ z4(~L)cf5=#YAG*Eo-QP_xKvhb<#ajNZic917&dww{w8R!u)o$c@oAM33|F0&WbvkG z>X=H+vtgz#Qf1YN1_l`+eG`?qWP^rdm0^;&q~M(+K)3LDPLJ$~8VwZB-N z{?}{IEJ8GUEJm4U_sew|TG#T$<;L^(8LrfqBNJB*`R>rz6{j%Hxp>O|rL(KuC)f}q z_>eXkQil&kXWdydh)dI!s(z}ZqdX;eH33c%6rd#$0T3xbv&N#Mf}x*5vkS*ZJBWDb z_IecaM_)ueLcN0r<>oj*V^2e8n6Y=&AEppm5qe`OztC{(=h)W(gUG34b{Qwyit}48 z^c5-(e+=zA{Vz5U@XXw6qQvJ?Mx+Y8yoQqNeV%oXkl?`XgJm@0CKJ-*eQ#L6Pxbre zP6vc1aq#+;yHWwfPfPIKdquO$f1}^psG|{u5GFpV|DGTf8$~fUp_HDGs>O4Gv;X%i zVv76+u6YmBN6NHpAzSlShL~~IXcVeojzHU;5$lEaLcbfAnR!L`)S`gheblgu6Kl-v zfME2=&2y5jv8PYFAvhWH!W9~b2`YoNtWwtYz)y$ZayW82eL~i7l2AsSiJlZg3a=Mh z!si){rqV=qJf_d3+S95+a(B~JK(igNB|-mViOl&meoePrIgXFQ_>~Nvf`@L;Sbvk9 zs5WQ?_4w}oLFh)(WZBq`(q#lhO5GgQ7Ow4YhqksPMACaV%`(%sSCgAn4--ff8(Am( z*EnRHIgQY2LS+(2N)Xu-i78!`4c6N{cbdFxKTO&{}Lc3WLD; zJR(IzfSW@MK(Db$3XW8xTZp+A%hL{(%o;)mHBG)eV;>BIM1qC+(Z3*sgcRU~D|<+GGd#Ry?x z*13g<+`Ns3Y2KUEII5OGq|6g58OqV!Ne!KjfK; z&|mlZ6o8VXx^5xtdL7l7w}#B?GZ0-@v;Z8>=JQVY6 z<^nT!DncZNCV35yMRFQfvLqs50+H;})cW7gL*SX|=?!2G!|!|h{PZK7 z^|K!`*|))k>X`O;d^))65`Vw;TEK!&XH#eNgd!lUlnLwVPxL;^gbMygf$njI)U)z1 z9PJ$@&_~aor!RqA61K-Lz{9Rj?J*n-SXfAjLFNZb>P=1O?obU`l1xBy3a9%gV|&yw3TQ0I7$s$KeDo3FC(&ie4#!b-^Ou*U)y+`S?A~aqv$wTTn)6nBzE*wenJ6C&zj#=jD@+gg8V}T?izkT{w>Tq&% z%a-sCKB4%I_7fFo8Kv-qdL?clXT}gym<>9V-ztG?NU#}H0!*! zsi{F!XrWU(En7z&mj#|M8RNqd5|Mw+nw~C8x$HVp z;io6d=+?aUeEM%%9-=t4z88u=`iI*&-D0{i+ov6C#!Km`71Uz; z#mN<=wWu|c{4UjEUa9A-vV5VZJ^0A0RZMh|C6|XVjcb<&^Lk%jocl@>eufl z&{3G@Rr*ekrv=qyUk8)u2Ov-|9AXk3K1uXS_QtW*H0iUMQGHXwg5KSap_N+uW17<# z|AWj@P5;cQ7Y$n!K}U@0B4?)s+?A#U#z&Dl)bqz>Mj;z-42O9Lbv(U%Qu?>fC26SE zG>OPdj}q{#K_`3~CrlEOj25}dKgVcqd}#b-?@RL+-SQ?V?@x=HaQtt+`n&Hl>HTZ{ z0KiA*eG+lxFg57|+4QQbyyMEPs9%!bCn_}b5-9$t$@jiQRc~Qt!<$9x<=O4IXb$1t zu>HEa{pP=!mpxIS#o?rTp2n{~G(gA#3>rMIJ{LXHF*WvuhEgCEBHU#jnjOhJf!Gzp z?##_%b7$;?mV6(Rm6#efglYU;DSJNmiG|PN{8ymU`1rMdm*lhFR*ie_aV~bVKg;>d zi8CoQydsc3Po)A?X^OEa8wF~)J@U_|{;$Cdsn26@%9K8T>L%Y>oQdh7C}MTe zHhBXdaFsV*VDts&IIGR?53KG_ujFO3b-_AH$u479VDIUx1BV5>368V_lx`rTo0j(M z>$YY?7LKo*O3ca=8_wQcR2AXc<^Lq0{(*xaG8c+T^MnQ>#arQ{jJgpRlRZ0*4digWt?*yzpulT$R3e6U4N2&q zMAHU_(nV9XxzYP*X8_|sN~6^}JzI3Ekw^I!f&84eMn`?I9 zrdO4jI|wpOpnxRy>YdOOY_-F-(bpaiWRNmaJyB_y2#jz*Sg$BpxbR$_*{;}Gp4zD8CK2i^fh+F zAaPXkbkHF#F`Wa)Eo&()ABRj*qR&UEwvlW^J)&IA9d@QRdMH=aMP%QF-Y2Hf2IT3a zz|M$qsuo4cinT&RyCaKwR7I^uqI|6Nc$2 zB5{X1;-f_Ku<0?I@G2Jf-tnTzdS^WN$kS6=#jb6OtzgCVIhrhQq~BvXd?$w5i;!zL z;Bme7BYUAFa9Pr^z2YsU^A4|!UmIm^cvPKrN^_kw7t~)bt}m`9SXx&d7C3H(W4o); z95^5LMCTVQZ=H3wU< zt?@2Nbbfc&>?0`z6(#^aZdT&RK}VZckeM`Phz1jVfsr5K;dNNbKNQqBT^sEek@>r3x(y zptMrZv~pN9qLeKyA}Z3Usz6an)P~w~yiN}}{9ewS_(|kp-%lvB_hDND+2nU#8plGp zixE;`I4|cN6A3?ipiqep8Cg}vAPRfW=vO%@hdEt;|GnkIzI0OHi10WBkVv?ivfMn@ z&=!3#?TYVW34)G~-+YGCjNzD1jAQNhylGs&=p$UO*nYdc-S~gx%X}Pvw~nrNBcyS1 zC6nq$!P1R>Rc73&lffVzMf9i3ZTIm~zwsf0?lxCH>7mtCYH~~u9P93N06nXowe<85 zroB4Q%vd!#mFCT+pc7G#bw%k8VXob5mwnG^x~gl%0r5Bu)8$NV?LS?lX!|%9lQfcT z{3Z`hsuJiIdsJ}IcJ|!T6c+2|0Jt8o!v{;!jwQ)sY&+| z9;Jj45(xfET=0}+3Q!tBDwK?32^6ktrd{864U@e3Q3Tf*%U(5ctUs|`)`#ErERyGJy5ErZP4Uv5o--g)C|c=uTCGDdG|M-1-S;iWit-`)gi9 z*S138$=18?^kv$jQ9>}=6RV@GI14W`a+2;s9;V%kPoG=X;ttbLE-@MO$`{H0xyT*? zyzavEjy~L9!WWFPv7{kkR ztSgB;TN9T6q+@?SvDUlhr>KP)TU>5|TGA$>{@O@qOt(k*;J3^C?(&=t@?A4H3oqg=hMLb?G)lvBsZ zAKLa0+x&Uv|9WUw(LAL2{ySa#r|KF%OMF{UsgYJ_np48ia28c@jlPzaIe7A^A6p!q z#8jBFpn<)9gAl?HzM!iy-fR#Oc*jN5*p5u=WYr>G)WiU(00>9#^_Y9{>9iUW=BK?> z8Qa$OeIKq;NzllF_s2qx+@sN;BEGEs*SnS1q$Nq|CIG|P_ge@`H^#&WvGgfR=chJ} zW5hW~0Jsk*7iuL5!5{zy_gImDGFA*KR2N>K@qo=$IeIV?`F2_CUS`en?QJw$&Zip{ z|F#;2u;9vQO>3Z~dl*Nx0V<4`44t1XOidJT!N zYb*u`ktGhFM%3Vc5C=g3=neUc*Ut=iBct9JnNgAufe>{Zmkho^ktNB=%H!zG8tri} z{>W?id+){>hfanog@ac4!pw9q4mBCV*QoHgOPz0U_QRPVY}_^!L_lUvpD*(Fx%cfZ zeLt~%qq0=#)K|Bq>&#k+Ndsv%(8fP2+Sai=TF^gx^>AW6Nrr&?_1_9fbV%CjkHjE% zK8x_iHgf$gj)Qoa3|P=ruz>>K*`V<^w+KHi2No)_hYd}tmRU27toy02*mXhwD+UWc ze|n=vRXpH_IOb!0@EyA3i*rwn*B0j|u*b#Q;^hfsa&(CdDGEfbT5`)GgXC-$uE0^a zwzy6Z5jt<|=S*2of`x@IZ}M4ZA!pGG zp1TEyTWCOqzv4ErHZ$vO^sek;m1IX|Qr2jT6d_;NmI}NpuFx6}F1I?KL~F_GzkdiQ zO7*?fa@89xxA8UgpxFH%-K1s|HVZtA@v;ndIB0YCqDv^~{y64$irFjT1lm~cD`q~C z6gyA*F_ht2uvA9PVEI#rSvt`s_HfD;KXy&d)PL}0LKJ*yyX}QhEV(Ic4)W)*t?RiM z$mdvFXI1~~;owv9mdX8XvTmH04Z8)s?P?(HwJovt*4?(ZS`~^KlNJ3VvBQ+|Fc(O0 zo~JDkkcJXZ`?lG0YwVfDhuDAXY}0jez>ikFu(17iHFg|Q)%$%3bqfRQZZE4BB5xOH zr)$&k@L#f9cl&19-BFKKpN)f&r)x8G=qZD$_lUHo7f zxHW$pF^YNuL#!kaGSFvY&9qC&HbzVz!{H-ez1d$JTfV$UxdjX+kWnsU6EwjPQ_ZRq zAJy|5wSFx>{}6e9E5B>2x`=6#OaDJ(rP292te?-{bos0MS_RYTjXc$h=|6p%^2IY7 zB(d<5O)Vs}B#;Sc<6idqUQY|deTTU7BiDK+=oXtE;ESQcv?DuC*GNN0*EWMS z)6K8)%>nWe{v&v{<l8Lt|3av$aNcstuQU(^xyK2B@@EB7KDR&r+LAo_1V6%$BA zfY7A?1cCtO8cUMfD@SE#K60LajalpmmLzU$B#FU_9M9^c)Qd4MSd<27nr#nDovSlj z=x10rA6B>Ao_Us^yUVpDdeppFS@$C^x~gwSEBf)wo~u7mz{B+z_G+3m%m&qBSY~QOF<@t-}V`@Jf=YsZ^hj(|Kb+18|Z9eVZ zhvQ(=?|isi%QTG9-8i(vm4lIz!{y@RtkOC+{Mex;diIXO^+=OSA@#WNB5uck0od}9 zn3A3hzwpqQiseowhCH}o0D&IXw(?HsanLb-M!I${(|PP9elMHLf4ekVH|WA)5{>R$ z7Fs&mBipbH@w4eNa%es4xm<7&Ouh&4+ft2-K6P$RK@D`=+#Eh1NPN#V(H}wx`*2%4 z>Vl!qD*Bq(c#97dwxNN*&O)KaejP`7Tumx$@3xrX%WYMLq!Xz@p~!}Iv7nb6;;Mq? zzM0~}_`9IEe0Z&`EK|!_@jaf7*QjxIn1?M2K%$X6%O((jlX@VStESk25I{T2;%1jf zSLK-AVlO!A(F=~PIlD%Pkq)9c#gO7`O94D5j##&FhWI8^C@;D zwV|UmDUvs(IGY%j(S0|Ti4-rm?W)KUYk9R#lqBpaR#4V{<7xrNMm(shaK0If9v_n%b3|f^uIc zya-DU3M^=Lo6{I>ppwDc6DzX4xy8-2-?{rWt?Dg&u_Dd)0-WfSYs2C3>V#n zi_Y}ASScn&VLErYiiB;lw60eQq-?>_TO1=HiH^mzs!rT-$9>JXRBK325sil-S$XDz zB!^;3*x2y4&sfJ;0;LNQFhewRkhs-~wI0&|vM_`@K?8{v)VPdP^~N?4p?5>EF2viTtW)$1^Ssg z0zx_#3xHxvl4E7p^t_LB!at6FjziJbEM~8yU2fqkp`)^7o+S8;{o#-JS<>I0?+jS1 z@aJ1{@wJqypXH;k>%BC+=At*5-lM#jzvl3ZX)`5~Va>JE&?Wx337j=u4nN%e)aJiN z*Rh}Lr@YDbShV7M$Ox8Pq#=ye$`deE1lzd-j2u0If+M>UW1UAPs1q=qp z(XgG4U%~I@ZFQD6PW+>w<#{?dj4i*Kt@G(K#(Eqn+Ve*av)0$4T|JaCk7$|X@-;b? z(C#lJw+$1*r`ecUYkRjE&Z%PSJ3MRqz#`t$Y7vk*!UE#0{e&UZJuk|RAk3>yg_T;i zUbMiwQdCO_xF9UhcCQ#>x4hG_?`@RCb;MC z|KZ>I6}Bm$LDIThnA>Z6&qe0PRxCkR@^l}YOXqn#S5)hlb_U0qt+w%RbsIeo?3+yC zJmx?u*|8|j1-^J;Y`&cFb`rN;*lVf>RLrsaXw9DU( zB&0Fg?5k?C`Tzo9T$~U5ub%$@xpDpbEL(>5Onsf+rlM)H2T12HTO-f@9m~5i<$xM6 z)VMkc%HF9^;^-1ttV$h337f+f^8x*uwC8S-I}-0*b!q^_L#V+*YKk%y3-&P)p3<>XC)eQdlSbWE3B~NT7nr1*Ln$fYVJYN{xA` zDSYgQjNOI(=c$+Ir`LR}9RT_qyz64`#MokRnv_jSAX+glBNfI`&beI`2LO0t^@@ft zZ^n9pyE1g3wYuvej;+3F1!2^wlx^kfofvQMYsek6J7)J}M?_GiQyO4WD})X?!W1}NGB5-DC(ttQ`thki5BtAkzGnph zkqcu@K;o&-Ww1%#O5YxEE@n^&l?9R#Q;8q3{j&rWgjE@H?*A)Ze?#Z7J$*j0trPhb z@TJPRa5j4BoeAT`i>zLLQ(0~qe8p*|FBY<)yf0nosI@6aTvhH^qT<}n+`Y@01q)bp zP2r%Z69qE0&!;~b-#~Y6UbkD}F#S*UFn@V>nvw_S^htpa665#8WkEkFsR<+UCs_?o zHoctD?&t|mu@sGIJmx>LUT}bNhgr4equo3ddN4tvTUU45e4ss_jL=t^im#l%x_t##M%fnpg0(vM0@MgZ}@!;vTH5 z{VqJPzv2wUIm3b#GR@;n3jleUJAzcgO&9(t5D*cUD-klYKvvEm+>3r*fcyigxf)d@iC32~CcHpRYbCc%{aF zhV$v1*C}<(6zSBm8JYbKOG%eShaR4~hBPstw4kD>sMQKk?yv==L>g;^z!s@!rS#1O zR6rNOPOJaMFu{UR?*D|p7H*F-y2QTqA5Zt~`+Hyh zYvHx1XkAytf&l}o57Xi5Zr157mFvW$7370O!t^ZTL6adzdc0cSCN%s-QClS(ocw#< znSQ5nt%JqA#(c3=shr(+X+164&UJ^5fl0FWmJ|neUoH6+-35qN@9aW|1PCG{bPv-? z4;7zHtn-KPB_AdujCbDOm5*)6Z1A{0H)D&|T0G(p;K3U%7rUVcCNnLgC*b=&PKtcg zU%brKH?>)_G80et@6}0iW^xTd$~6y}vsA=|HYSG49lciW>ZYUbGE90rc)8M1IYXK} z8Gusoc}f|mW(lAnmc+QUuO;AIz9neE*4k>nL$$4bs}sn>+hc2y*qx{GgVyXkcI=I! z`C#zPXTu4lfKfr5B7XwxHB)2m8`gWG8_#arfr9cWz}H1qjp(7UWvKPs5YZwXVF$^A zgUrmN(8mA>Qw0?mA;$qht+#Vnl4=i-Qe%5z=NPFE%0_ybzO*{s01g+P&?Yduz;)0D;M|{?hZq=vpm%;Z+D9-qP{BcN?wfU zD~=-zOXAjOjkyxV-LAnYE>j#rxQlwWn!bPjmQOeJzQ35+iwa_a5a7^%+cMIwy~ewB zG33~b7U`^YOo4TNu-*|{S940_FG{+9=39RJsU?@w8DO_Fp_xh?W{=x08vUQ1lgIHT zM>y?B%;rq_+Le6MNOrPN)-M-)^qY2-2Gk@|mLCLBrSXwPFp|p|4M>CT3H+cLPt9+v7%9Lesg%gMm z@TRKYr8$vqyjB@oA4ylN#dM5lohQAxGTL29xxmubD`IL+t$K|xDz9a-J}WRp^x}<@ zxG0_G(nQ;mCIUB}vW}MzWUz6XF9VerSGBBpj?*WmoQ-ue_0y--{h0?E{FYSKTjO*0 zl5UTF_?pfX>(*LREa-I*%QncE^1=qQuRLqr_h=0aV8e0tn!D5 zkkF}Ej3eq9zs7X|$#%ZyNa&-`l$(A-1$Egeaq1{J{VFezdfkI!y#>MBA zGXdYFmm09{jzrU3aWe@A|}IEa$dGbE7d z&n|!S?Wsm?Te>lMQ%Dq(GZQAyW>j@*xvuMjro%k< z;!d9)iL`p@I2J(RxRr^4CP$$T=-~w6-=3V;f(R_U=Ww0O?TgNHGf{cUPJD$D+Rslj z4eVQOT{i_0IY`2kh1gxWIEP%Y7{ip!?@M03ZdW!YWE#fH2nkl(_+R`MeyOg(3dmGc z_+z$mMO6hH;KFyVX{fDc^p$k4HZ0y4qC{{VBG+b$nFr?vKdlcV@N=)Btgl7v_G*8Q>7@bE9Q^5uh$ENTxzF_9 zMBB96udlOunyeAbl~DGwc(+5CRo_H81MYB9a*3F5s^?A_BS|QJ+zur(2}r-0({NzN zUytCNay=${p1?u?QV0SNgOf)D@xVK9&Tbo=2Z)IC#H}rF1#xO*$iR>}E6u6<-F)~F z7NdqKuaVe?k*z?t?SD>zc{v9<;V5V{X3R%m*SyvV=%xm8TX=SfyGK zFqMp8vr1V>M#A@H+KP9>tjyl3xaJM#>kYDX1LA$phf5EaU%7aaGDrYBv)h=ls3nWb zHZy<)1^&<51qPqC`@O_IyT~7e)!WSLAt7y9h4i16w=dKra9oxrkfS&~Ds-Lq6TmNG zPMbuylIDH8>%9tS{~{RfnugP@Q){rinSP&kX_dHSDGBsTK8^yRPo(ymSTI{6^rhFt z%4``XlFUtI*G#2*6+iP|{ufHPNnTl{j%<^BOKty&VP(!%gZ;Xtd#r8lTRt1dZIa0_ z-BDZXRMSruF#ox)TIrdue$|hA)hs5POgdS0U~Fuf*YaxNvRb#4xka}2B+^%~O*GO| zCM2GU8pfp4b;WBBNk^=;Vcims19r5pVXGy0H+vhKx6zVeip(_T%xuF;G8-}CvqR{S zrh>CjhJm6P5U6C$){HDt$yInHDy<8UBB4DP1C0g*Xb*kkG6|tb)JI;4b=0Z%ZHre1 z!*;E0l_Z*`&oy#9?Y7rhy>&E2*DZBV6qS@&TbW$7T`T3X&NAY{rS@G`ZC+;d#U&|B zPF@Wc>#~ckjvK8t?zFAc$-Uj4DN7W>IPh4)(>D@Y7{sKuHCsM?yZ7|9G)E;GDM&@2 zI#9?ttOPWK$<~r%mCYphWH#oQA%ZiEx!Lq2R#Z+2oQ|7Qz;*oSm5G|e+`tROh zT_*Bdl=Qml=hnx5S{~Z%p)9a5@k?8eCIhsn-0Hrh=& zuMG>d7D*`s&Ry1@BE!a%h$NCK$9#!SIy|voiagNMJ)&uoSs28&N$iT^%fviqRuBP3 zf;A9~W0GS+hZx|Z-B#`CSTbsC$&(SYM2w)>haCJj%_B~39JwWdzUJz;UqR{=LQ1|N zH04%qY7<~Xi!y`vXfsfnu?$3Up53uT?=&Z9!=vN~=kfQZ9(%1($<< zyZ4w^NhPUrTWwQdx-&VH*D_g9W8pQ^KI*m`O%w?oGz5fz?IbEE&S6jpN&qBPPJb4( z>4VLf2uRgMW+FpKm~e06%*+ce7JPVKS@%)Np!RoI^=~PJnlzR#*{0Yq&t#~P>r%;U zN>ZEnT3YpCOYOFb?6S(WS!OG;LCeRry2esnrYGDGv;ndoF;qNwJ)*y(Pzug7YbJ5O|2w=v+cc{7@Ia^b^vSI@kaI(hV{%1nue(sUKO zx$t1Jo8>kb&!ItyDl641JQ@5kC!s~v6h;WIMQzYXCD~4<{c?qf`N&bp0EQazlRzM3 zkqK9l|O6c88HkSP&yZQX`YqO_!{c z$s@mcF}H})FbF?Hxgt_3lru#nlFlqe+>Onod0fhC&dO=p;qP{)-f;5o_VqJk z-rm=4^HLM7d&)Q}RQx8ztAk;{R<`1jO;cx@xgK`gYpmZonj-6#x~Gat$}FwSu3D~@ z^4VtnabZ&XE~_@L0`$ctDNIgOSy5D1E#k_EG{`E$c6`@~LJ&j(5XXr8*+{A+q-m8& zNmB?KTm(&+S;ZY9X-o?l#1AcMX^M+#3rPx9nM|OaScJ}W0e@BE&l(^so_)!3TXl0` zy&0U!Y?&;mG4Pu7&%IX8DrcFireo8YcqmNr?=DmV5`YO6Q=rDJK4|l%f*LiES%|RG zCOk+_9e_(?hO`&178o;)eF*2>Ij$+4xXyS6RU%%IXt_Lj8`BEg?iX1g)h z5wks08Mv2J%Tmc}N>ZIH?JQdR>mj7W$ENJk>MJ_1Iax5}*1?-+E|!h3^FrGG?C!gZYytbNhYbY&0LQ=ZMD{K9ZeB+%Ux5&C1n;? z=2tCOO8IQFez>ryeV0|6SBH9Hl9Z+=EcdFedtZXe&0Cr))81~c&!lH4LKyKM87W1? zl!YRxCn{kBOMZ#73pk^r%_)Imwt?lXQ87_%L1`hs;ohaiBIu4FS$H?=zj=jpl3JG~ zw$(NZqcfRJb0w7qJ`-It?yFx7GtAY~G3iXZ^d@hQN)YuwZtQ}Cy< z?M*rxr=tEW%)qkYXUB!*o*460&m;}|w&iYO%GJ+KlPIG%3sW3vl4_3{Tqn-dW+^o(7>MJ`N?5}qIFm^o zGfFmq^Ck=^N*I)pSo7h-Rny%IcaViLI`Y?D5lLH3wmFtdRq0&S@pPV zpc9i6Q$#%$R8A5&`wH~3+?OS{S2i2bnarlilFEZ03=`j; z7wg%@RJ3QI?X58(raOv?nlsu&0uqP`6=R`Btv+b;rh+OXPOOsb#Ym{I+HwI82QD6r zcwSmJk;$OgFIqcx`f!%Jrit=He)rps-%y@p$o_59I$ zGVb@8N?ZEkjkKAO*G+R^Vz?}s)rnb|Kp3YLspmgHiN$u97ppbifRZZMK+Ui?`RUo@ zsbD}bIBs0>&0gP$SFNB{H@9Fi$J5e-D8((RJV*^PF~& zqg7r<8a@R_^fU!NL~s|=sbtl_9Rb~H{{0iMeu?CA5>g+Cy<;~!j_tZn%nGl{TgZl4 zpTGHaTgX?E^h|B;`kOvC!1PeK^%WnM@s9seqID4|C(u?9< zB~C^sp3V0$7DUUMETsruRjN-Z*h6G4h?dx`OgkDVT6XMIMTiFM3;S}AF2sX~RJKw32+ z<#@#sH8)3kpKm9$2B}0!?Gx{Q_8jM^mEd@A5ZCHuaf3`_X`u9HvZwj{ZLY#BJw_CD zea~~v_5H6rq7jJ>HFw;4ymzG5x{qcxJvaW`gZO}m*-8&~9R2?po6sTw9T)`*ScZ+- ze=pik@bh0g&1IcpLf7N%NY?_Beo}))_`n{6D9WN}nS9$z50h2;uedsA_rUPv7U)dl=NlEM3`JcWUNZU4Hn zAPoNL3qGa`g_J^eaX975l+ctH+_vjb3qlG^tU(k;H(cv1B)EtWel~*>ti5$q98K3R z8l2z|9D)aTcXxMp8Qk3=xJ!b&!{F}jZoz{DcXz#$=Y8Jqo^$W{@7}#;rn{=Ew*2xS4qC>u5)jt;$g}+*?n&+-g>=)F2@!!{ZqZ)h(C*hWdz3rA8B{f&Lfc2P2Ss* zG+uFL>$3LI*7)1=oxSpHE5Q&|SgxXWQNZdKOTVxM7#R4@<$2Xx zpJ2o*GT8QxW(Jz-PgT8o2$E*rZRPBCppD(M#RQjG156+sc~VwX+&K>Sq5^Fj^3G_o z^)%9@p(13)gv2eR&80#TAz_V;cc`b819V#kt&nYTgF+6)sW50V(fR1knHIaC2o2hs z2BZD>o(HQ_>z^oWUWP8-8+$8j2xoVtn3ot8Y&#ZH&-7)iKzBf~1?xs#`JxNs=-sG_ z{$v{Br-Ib9Lj|vs)9y*{^JJk^m_sQRh^CD6v`=N#TYZs*Qw_HiNmH56N5MbM=lLos z3nA(xD5#WtJT3E3Z@84Yi!%5W-HtI|Z`ngbTpg4(QWI)^m5S7BNBlTBLsbo!YZ|=G z`>voA+sV0I?O26{R*Ng9G#fj~eBb`aJ(Z%JQI%;D2UT{QUGjuigb=5nXZ%yP6XFMk zbz*UcGBMW!0T{orY-JdW*UAkF{AyoI`7hnm-`*LmbE}~$c@>j1m2*%-T66Y_52JV7 zb_)c4{m1(lKKeo(zbl`rXqy2DYpvFF8BjhU_Z@k|MP5$Oylp(0p!QZ~{WVx+^^FF?MUax?<7u>5lm;)i zk~h9Ciwq9JlKO=+^*e@fJzP^ovbT~Y$~7K;|J*DmT+#h3U{!p5B)`{~#DqiKlInfHMtLTE(*f1@=8ltYf?F&U zZsLI}tAW#>!=G2SDS^Gg0`54@9!_CQuH?bHW2a`m_q|zVovrx!MkUYBLu{_rv4P|( zz|_my!9>2Mx89QV{NXnx6aSLZgM*~l<1;_XtB*?hef)=e{oBnSv!p3l8eX)(FUt>z zOJHiBG{LM2FNQ{!)H{(hpeIA1iq3H17j2tnaFZ+f%8Qzcg#7cFGB5B?MoH$Rm1671 z#mzfkV9PMcm*=1}@3!9wXDeTEHwY5?Gos-!)YIu%*;lp05Nx&fIQtDWx2bmO6a1=< z$kynQi0kl1P7jXXk{_P7X1zn8!cr}WD6=WEQzcMaEd6!4~cdfN~4 z{%8F+A?mUdQ^PI3hZ}c$6(&2D4E$<)SV8?0qZvTq`)q=#vFTtd%7qGB{qKwJu4{gq z-QRr#k*ThI) zgdwQTX9*V*w=b4X^nO>H7|^ zIv-ow`$@v^{6WJAcHaUUm1UNs(tU(RdKyIk+q^{a2}#1X=lnIlaSJL|{8|=CW%H_@ zW4G~hyq|s|JSDRB&)lFq!7Fn9-<=CWyPCwilq$HgyN@&-AW($3a z(%_1%)-2y*mtOa|rT@{rZ%c-T`iWMjd169?;b5Q2i)g5K!xSbW0Uwh) zx|3nN*ok~a4~s6r4T)o|U;b>yG~P((nxxy1fIt5d;dS@UPtvE`?ibrui?&&97QjgR z1R3=l&(zTurI4@=qdW zx;YQH=f+UE&8jyc)z#Qquumy2zY!-w%Yq7}M6f?&=xoS^zvwz5 zkf+$HDJfwFqbpe+d=pa2MK1y>sfk&Li4_&9sTEO4qZSpxVFqYJNUJJQ3I9Z=ah(Lx z0gGTR%v7bdi^NpHgoHzKm83D_nPLjrgO?HW$Oq88^)#-|9NNqi2n-b1bl(e6drn}! z!0<`TxhDSUcQnFy`PGceMbg2F(e)a8BKC_W^u%gU`y4aBlPCM6;-kWRjT@ID`IXms zR>@_O(a{Ha?Ohv&@wL6!mrN2}VRu@`+xqy%-)M|rw2XaybSfd#lR^|d{uUUyxAdHouPmubF=dc$$$5ezxlNt znlX^cTDxy?h#9z`rlw{E1OhQ&NhpH_$u5fnW@ zEa2ZOz_PRi78Yi5z+d8g#V}4 zUn~EiQI`KdiP22fF`UOPAG5WwZ*>c z#)^%Fk=|lKO&k#ySPCxtPozc70fCXNguQLn-6uW*BFi70*X!+0+)jIArc$tFpg{Co zP@OGHivU?p@)r`#^uKWm1d8DTfjJ?6jfdCNl*;(G5epMYdq_|^rL%!ft$@XS5g_2$ z|Jne;_GNnOCC+GG?(;k-|HN?rC*b`9X3IAo{^jWf4hUpz-5xVi=pLsfj87 zJ^Rc0Lj$Wr|G|aNz#@!*km9s+X+^ER|NEc*phSd!RME}BD!Sqi+Idp*Rc|}_C(!;H z1=1O0z<(ec|3cFQ%wLfHS6hJL81S#C|J9EF+oHdDQT$KQ3J6q|e1plk=$iY43Erc` zZCPlU55A!Mm-|n0t9($3$%=9&kxi;90s+8$U>aE>5zy{0YQq1;WdbDSAC><7p$6#w zj~D+z4#dS6C*K%G(oyyi@;aPUqs)-vRbGnOwch4GJiX@>s+p$ra#9-tTTpJ)N~{8z^!Bej3x zM;u^mrVY~b3rKtbW=$io*chajTruG9;eQC^C(s8((=$$;7v3BHTrdS?2&gJ8Q%w%H zEcM527vT!833fD|HYj;Uo(=g0_DPtc#S#9=p9m6AWkgykNP$FhH&9xtFo6&!2Y|*m z)xS5I2+)N~f1Q+xmuf8aHQS~&9CG)6TKz9glIMhE2V@J_)L21|2Mr&pvmihU)YMeO zfuL*!WqxC&HM}+uVCqfiJUqe|3~3e&gN-mL{C;0Fx)C!V9Lik5Zok()YL(H`_;AfX z)X$+$?tF%g0D+bL#B%SR;4A}WLf7}iw~Oy0=y~8?T8=vDp(GK=Uma9{=2s%H_He_% zNpda5gnZ~%HFHUuCV)}Yhh?9_r)c zm#a6EgJtOkm{5saJ{?`Je>1n;*+f4P&G9wT9bkvQ3~fs-h@~5_q8}7^OkxziS7yyV zel^^nd>vns%M>AJOWB#g_8L)0}9`~ z6zlTKxK+UP2NxPdRN;^cxG@tq15LGj0GSFiZ518k2|nvO@Err-tjx zE}zBr$qT>bJlDVlb_!%g_ujCRtPgQ1*>E`}iXI>xXbjO!t@P2=5+a(USE$xV}=)zB7_*)($boEi^KQ z&vK#a`-+Odc@sK9Ov3xQWcH(vz+O|H%Ty1{ksTj-H)j;R1VKJg?IuBk`i3Mi^o!^O z)TiTt?7)=+-3|#9teX3)Uw)J_w^zR#VyqDrW0{tXw3ck6Ztont z*;}BUPH7Q#_1xL<_c)bLmhIAHP$xTzqeFeV`=LT3UPidJNilVEGA43)Pq2(VH+e{G z_IRs}o&h*bs4U;A?LHbl+w|{s>A?F!ZFBJHfPSvl=y~>y>w8U}`yq`p8=N}8-KXqw z=LqUaW0T>wg_vVWt!YQNv!tRbGJHHvIdRp*JYrZQ$DM=bCi8C;RK)G+_-`AP96c*B z)+H2v9oeXhT9-?l7RNoR=S-PR>|Q zeD>7&!P~Rqg_Az0?hl1)(kInHWWF>oo-_Rqn}H?g6t8JsX4tqC<~gR-nrj59Q9_&( zs%aS&b=L4#;~@kD(!3vNkO2v&g3(Z%uoDy>#Bm47kl4rIewv5fWZ78Q-fCdT%w>)W zt_+xwyW477ba=&c@yqE9#y{1k^lyxWPo&Yg#`f0elhUbk;)9E5TjqXa@LpPT58_sv z6%ET%^@aSTNN%P%O=RI!Bdaa)`X&G4pv}9#fOrPwPYjC$OdiuEp(l|AyuVuVK`EGMdM`@XUlZnsX9Fo*NW%;caqDL8o!x1|_7BPHO2ob$VY>^VV;R0J8 z=<;&6=dSU-twV#}Q&QLn9jTTw>w(x6;55`Mff>8Qwb3jqe()7fW;speE6dke|T5Sf>q`qmsFUndeNslo6*#Up$tJ2A{A zM;i22M*N+)Kb_G(KAGI!IG#H{zG{2s+{D3z{kwxEe-S7hL*Ea$VqZ{|*Y=&tn`xqd zOE0d}CTjCIgO{p{d{Atn1Js_`kgrZyxr)g$Z`f||5u17oKZrT$%154TfP3t+QJ3gn zs-#N%pl;p0u9khEYVItKkwmrZYN*X?dQ_4Av}wn~In{z{lMp##iNdegci-g6W;f=< z5_^`+n%0Rv>H11LT<0FmHZ9W@6?5QFR0nACKEgA9UUA%TP;9lGsuF9$#cK7ojlpd$ zi$pZNqZcaa3(1>n8sR|ZW#J#O=8M5eFV&_+<7~2eO69nZkVN7Gec<%&aB*-u5sLqbcotZ}4{QfOhrb3H$H(a**@8cQEtR_6Rc-SGW3w=?imQZwBmbRk7 zfs6}QM4DLXX&8(@IspA<@PyV_Q=w4F_SiPqmim@DwVx!lij57;zq<33H2*Rfd#Ws_ zV+&_B$3@r?(mJZT)o9~J7&55;T9oCXF`HH2tjsZK&akD4$N9q3nN^AL88ho-l4tUk zRs zE7Va826{;ET-u!iQ^x;k1+54cA$s>H5`HY)(20v!`YPX8eZ;BZC zh8`M^y*91O>&=v!fE07~Vp_K!m7V3g$C({Nfz=`sI{fDpIjsH+6N%3ii{qSQ9JOuM z0yRNV0CifU#@5X|y@M@yt+Ap`uf-VpbnwM&xNH;Yvrv|H1-~e4?g`ozH8!CpYu^m1 zZ=bEIbBofVwOImVzl8$w%Pa5j)D?S%+%MGUCUpbG>b3?J`-dkjn^ftc3O--xvPA4Z zEPFl(iyuS=8#kD4i|$3lu?0Ma1>Y9f*&~+A7tn+ylv=PN6=N@&SpCX@8)ZH^##=Bq zZAudNre|^6kz@&Tm>sN{vS4H0oSt1P2p@I4wP%`(-f$@qlFc#QqA05vTK~ zJ;7HG)IR3PaLoH(&{5W0v=y(GEm^lAH5Rezh+XJlnHD1*4Kl`)=W{3y+No6w07F)r z+tw$%VxzjJNZEdKxQTh4&QrR#${VrFmW92(KRAGm?*sktXsoRx(~QaJ_5}TCnAFW# zA-QR2jvV5-U9%d+s%N;pfG?P@d?E=Pq~=Bb4@o~0AkSV;6~ofhl- zP-i80Ln2!1e50Q=%%QLJ<3u9pY3K_?(uDdLCtyibcA|obG>M{7D8GE>RMdy;WiBH# zd6ccOplOihsZ&DWZKVeH*Yt*jZ6i4lUkU7=*wBzkEygiESZO26wHkBFNjKD1&oTO@3n$F!vyKi>?xmZ#9J1^cIyS=aILj>65`$x1 zZZQRm=ixG;USEG%5STEt;_LogHqiJbE(WXvSUhHEOPJZzJ}|S%zv$ZmvlG%@OT}Fy zIkfH7H)dnZudJ+oboW(KvnthW?9Y7K<_qZG2W&x|{Cwa>Phs1mB!g7WrNInfZsLWpYJXv4NUjN0aPX z?!I!6`M`5}w-u@{S>}0<&UY%s&Tcozbnw%|C|UiHk3K%E^=_drQKM6k{1iWJBtxji z@Z!yHmKUi+c1|rwFNgx3PYWjI$60NNs-A|mf5abf1QQ+?NTGj}L$g0Tu{IVb8vu?n zkdA_O@hwQfoAkYMXdQ^q?(Ox3L`o1#8V1E?wFfrJ)KoPn&CV(00h5gi!S*~BTHjR2 zd;YfI15IVYuf1!BXgW2uRY|@8f{nL3C%s0$#=L#rzn|kF`pYVmP$}UQ*w>F-nU(>1Wn03Lh{f5jj z2&nCVvy`?MwtYe*zMrva!I3=N5isph=#zr$(P3gW?~TCf*e2R#JEEPF;$wm~BqDQi zf5EgHh(dGOGnK>tJLm5oj%dQ@8Anq%`Uc^H{=K%h@ zb{_qA_#Z)eSZn({p5I8&!e5HOD;3#;!BqoHP1Ey!`Nxr`H^)?HGX#GjLI8w=69#=R z?S33@kdBrg93A6#-QNVy%%dEJY=a8+9dRB*FWoXn$mm%0uIkHnR!nJrfhl237U};0 ze74xVy(q3C%+bzQyg<)u*Hj4KGIG27$=Z8c!gmx8{ouGl!p)lI(d|0{_;_K_K|JKU zsa)$H$NSOV%(yotw?WU{Yz}3a!^{keGB=ww_r5>iElvuvLrS2E^dqH22RIuV?KPYz zlEf`KxPQ>xT#WxRM>^VTCcV2ITrZ``?lPbdSvi}16WZn5P`BkP`hJo95OToqRuk~@ z#43WR_xoHOhJwMz1i9(}O~LlO#+&@n8&V^QXgZvN2)^2;(10k?p<@Ix!aVu_42;JN zAD`q1hf_)Y8S5<@!XTItn2zv=had-vi_%3`Xx^~+xV@Y$ z-CY zed2GEJ0thgP0JnFr6c1yAtbh{xfP9JQ%yNx(vls~$wp-#I)dRo+`+#fN;$h;oGO&M z841suWHqOp2E3^4v9wJZ)q+HF1z>&kMz9uqj?{@GsEzxKE5TO76JKI--W;P4oEEs( zIh_F4%c)?}W+k}z0dG8baI%FGNxRaYJGNkhS7IwVKggReS- z;zIvE3Zo}bETcr81Ip=iuW{_`x2)Q?(Ff5n-qUd!oFJqqKtwgUD$Bp~b)>2qjG=Es z?%(;7`-Z?;08CNBn1-|2W&T*w*AahDDeD~k&dp~pug=atNn&Y+FhUw-H_CQ(Q`3~* z)2@9!|0s1sy;S3UC?72X$*HGjW|DxxwEsu_5=B2kR4m%IiT#I(T+`&Pm0QaSzJ1n_ zc|uv|*o`O8gjrX^6rpEJIm8DkQQ}Z{N1Z~!mm^OU4!NOOHEhwjqDxQ3SvBuz7#8sW`01`AG(%(;o zWdb!sh-a8;149`!(AbtXscbj*d9d02C8K(5-g_b_W=oY7VK91%p1sbxe4rU1|(fN}BXh*#_b2d+* z0l@&G^*iw-l5fQ#Vf|xS-_vEV-ek}cxf6A~eol_%kN`e0Z%Z5T;@Cv*lgUcy4Pi-| zA)gfh!0yP6n^%n3K=Z(Ln7?JYC`Y#;6Jf zEw)1tmcqBZ9+phbFLRXdDl*=|qqB)>;CO4}n?g8`J`^B$8Hk7dQ#DQiKFm1xnTdpC z3sBC;4v$Zehq6u$)S{kzn$34-BDZJZYwFJx(4jCNs^<-j4oirGS6sBL&IkkxW-$Pe zz0FG>I&p!Gz&LxWC@dY;*quT`Xc8I4q8m)z&h_CDe^YdWM5FkDy2cI*KI;4X=;!Zb zEVSUAb6IPYhjLbJ`O`1ICc1Nm`Q@D@Y?Wf1K9gB3j9<9o^L=ygE;#BdN8_NqNariy zd^2xMzPpSwIwGbw${5=vZ36pr46DLUBYpt5QgB!i-l0Rv2{(CH8jTTK9v)w@c`9h` zcJGRjd#1Y%;i|Iv)2WS8%*c!~^I4RE#BBbW@ahVp__CA-*w4i1?AV>%ksqqyJQo%49RN=^UK*;JzcD66cUYV+6v_a zG`xq;71*Q{vL>;L=VxNAaZ9P?cYdege>d6iV>D!C9=<+=q~r5 zf8i=y`%w~ZM@I$eTm464b0wqQ-Ed--Q&eoys$ekd-QYG;zTMhNgK1|3G+&e*Q zLnz{4waIJ2&7by7D`zGDseB~)i%S=iYG+SY$ygyNQG(dM$ofQDrU6FY9l=~#dhthN z=n+r%-;cE}cbQMHN1HY;Rj>0>URk2*)dUbnIMZzD`xmD4B|`fj6>r`cFI?(`fw?1= z-gYO;`;R*4<1&*LydPT9qnBI5X36gTT)4(jLVk>DPGd+I7>Am$QFU`iqUpYsNR(UA zRyy;vvx3V)nxq&dLb634#taA|lwq>zv!NeHzO7zK9m$x`=;^Vhc`(cjTt#U*>`cp@#Tzhd=a)K7%SLe9!*U z&<^O$o}UPmg>rkUwm zYtxav1q>n3c8D>aZOVPCg!v>=iifwOqZFDJ#Z$A@D1}wpY{%B}h(*rMH6TtKdmVFh`3i*Q}3D z>|C0{MBQ(xdhdz()PrYQgDZopobXdqX}kN4wkUCaK=6nNf>1E{T1rHa0m7vLthl#BbqVUkDdP7) zEQ*h0YIP_wY9=p3&O4=m*vlD&!*_QOzzSurC?;K^F?J~ zYPt;>&4^NgVT5fKMqsGl;LUmr3zh4MJrt-ir|?Ng-mgf`R$SCvx+JE=JT86)dPto> zUd`2Thfc0O)Px3`bsPG*>I$qb;eLO@rvxq3Uhmg$;S3D8#Q=}rxqb2?biVgF&pM|t zbtC-ZaJZl-ig@-aV6xp$tcroFvQVoKbV2ffE-FP7JPR*tG)Z9r0wwy+47H1oKl^;?#3q9q}D9J_n9o5 z_n8K*ieuCLQU!0$(|w#~@{e=&^w0a*oxbu3dHOeDSM2<{cvOtzEv&k;8f#}XKa3BEBPkG(f@XpA39&cKeM zxDZS5FS;UqF6JASuE~KjWQ;O%!{0xrJi6(bkct+voT@_DO`lK9T)}t* zq43qIvKLALk5_3yrE3mcp|?J-J|&%_0e`QvQ#xD60OI%MN8H?V+Sdv53-pR2DkGzd zGVr###OreFrX_>W{@&~NFEWY>Is<#k&&g%cUSg|%T;VbC@_LhY4bR!y#-x9nEspJt zi=Jngo@g^dfAsS7mvxl+T@QIoJXP|xcZ`{;!G4E$uzuq|eO2ZtVDy7Lj| zf8IMgFBb_+6U!03iafByUS&!?4u6yV#%~tYogKSXQl5l*q4{cwt}!L>e&?$$&qtS| z0pMam21gz4tZ6@8t7C4|71id@LTj|}6yDwBizYa)XK=|w=`T6t8kMc| z!DaXovmr`E;}ntc5vBCspW~mV(w12z7cx{%w+y=gZfqnuEoVBc zym1kY(Sk{=5wkd$?%kwK;rMlP6M1mJMcl%$L5SYN0hv+XN)m1Bk9w^+b9FjNYT>l7 zqY($GE1lAf4O6Z%;`XeF0@-Di#P9c2ip+=+F>)T)rT(-ERg6Z_Av;B%_Cqj93KPS5 zHq(S8JP$*KeZwrsk%*M9)lnTYbe@kA`E50LF>ST#$f1%|I*KwFZt%qkkYc~S7*G9f zw({wSp2{pbtQv2ImX@U=M)P-TJy;FJ;bu7;A=gQ03LIoR>A-p_9@dL9GmcFsokVLY z9!e|@+NRc7fV|37I#YnMGJ&s1)GT99K^m;oUcIHemgetGV~B48*L%(TR;ng-BrU~t z{`*6KVK@Vc4-qc)3;PYVT|r_s+_t!y0~~E4%v5Z6S8AwgOLQ1`+m&%X)=(^W{ml>Q zN6V1@Pta3Be8rNV2H334t@jRYZp^|Gdrb%ZyqCdJ3jlD$6Bq|_6D&B0${R+B9|lOH zj@Q^op2pLUKb?Ib0Ii#jgICOugx+E?2c`q@+eFu-?gFv;moLO%y|60ZpPI;tkSUz4 zw8f^l4E+zJ>BOi=z`z`sA!ylzZy8gUjt=!Q>B-ett4-?Q7ORKRf$2>O&^ByJtWTxL zY|Kc>#J5OQzmp}1jH#3BU>7MD;G>&bagdrDz{SVtghDAv$Uc3 zXXVFh;H3K;ZIeV>TXxe=Q=?#VQ+Vc+K+I<0eFQlC!b&Xjptz*!Gyl}@_5}27$u3Gb zEng^tjyonYxi0R83b|iStwK!c}8cu?KW=jMlhYI&gMbOxK>a8FbPw9Kj$;=6%gJ5n-yz*RYdWZ1l58&X)5{ z^!a|*mcrVOG1*)770Krq(fW8!0PC_+z`Zgn@G_@4@`-O{y6~#ZVD}+s*5SyL&#GCw zME&SjtbBQTGRqoO5d<B*|7P-dYc zRgYwvQ$gUm;k|z1LGs-B;l|5w04C_fBA0RKjs~4~d8rwk_I?}a$EfS=_nt59lzpl6s$MST=mw0(XJ;8J z8FkRXo#jq-q9d(=cS3j$8n>{kVetck8$pmb1qt)vgTuNjH9t_WBu>^o3BWM_?or)a z6YJhal{IPr+6-fy7~0wjY%g!BIjs9H!Q>1Q^%&fr?2S?yQjY`{c!%!#l&o$M{jfx9 zKNNn|!>U0UxsgLNq=%sxOjyLM_3{kyk##dApWCEP=Qn7OaJ_WB@tBg^wx*ZelNZ@d zv?=G-IaBz$A=PQ3Ur%uFN)@*N)TlI(15#hHO<06)`sqWSe>A_I`_Qe^)KB|+KTdYf zq=ve++Yx7^tg$Tek3R?(Fr#32l0kdV2~*sSNM7TdSqsJm<%VRQ7%as{@G?}RgC0CE zsc57Asp&AMUT_OJH>fkZ*Qz$Yk1OtwIf1 z>o?ypDmBXT9L}-s?1|d9#BQi`I@LJ8E`6?6o#a41-Ay4`+Y^U2_>wp2EyAu6%VZ}e zv3cDNL^3Lm%?s`Pu%u+S1uRQhRqbup-1YaFQSBVKD2v~CM$lbIfwM$ZWRa2IB6E*( zk3a~|b~DacHtD=y2U~uXqr#je0V-cN1vUcQ_oyQYDTC3EEySu%c1e>*{b*QAq zY-S^?Y|E0xTwdv^(`MF^S=koXwJ5%!P@Tq+o@q2jtCZ(H}rU9lLc7+9J(@nP2P+a&tcu~i*##=OywRzY zNlO%^;lbgXZTP&AxQaNEd+bJBJE&lzE7`^Rf>T?Ty@9KAx&vBw&OoxJ&n>Se`YK$8E^N~^ofBZx zYC(+et#hNi-rLe1Y}JI8*lwJ$WLd3$?$Q7>%J|i5HDQNcW-kH%x!R9K3BY74+;V|i zAQVDU(%n{nRc*0~WFzB05lv1vzs=I-31E?b0t+2RLSxX+%76MX8cegV-=I31F-lA? zgUMDgXp}tHX6DvViNO}#C&w=je@~mt-t=OD0l->usHoXsvczSJ6P|0BtLiyws$a+`a!rhO-e}cn#M{;suUP~l*bQ%GEwQY8 zNZWX$-nZ-fxXukHW|Qu>GCF-xGwusL%GCoSeUR8>sa~?4js_}7VWw8WRJhh{6xRGt z;6#X>o^7YG2X}L4mb`Ly)Xut5!X1|zjG8p=LL%q-lTqWBt+I(7tV>L7v5lWve;vzZ z5@Lru9nGF`?+-4$ul9m*VmABzC@B7R7c=Wj|EqR4z)G=yjqEg*ZUjOofB>D1J#1cg ztbn`j#5ZimG9gG;F`yNl28Q`YB`HGb(p?5UMR59x=@9ZKoCpbp(Ds<$xJ*2&!8U_E zPMh5($H|m02fSMOhuOjq>W7z}`!}op@J}^@nRiJ5#QcT!=l&Tml7;GW>v8qUbJB}h zG2C!JmFbS086ij%k+VJ0S4m&O+`w1T52gLr`e}iW5`4!^f76fNL4l}2{`GdBkanGM zw@U5C;&mH=P>+qXw)OJ6&810Lxje)|cH-wpfk=$C8S+qe)>RXI!5+n-S&X%3{g-Eb zD~=1Na)s|99mKcAVdGoM;78tJU>>Z2O$bs!@bo{M@{RH}*9Dx}iRD(t!IfizN9?bEb9KcyQ_$m=#YC9GU)8{))R^Y6bMyCyV> zFMyq-GGW7w$0|Js<$kVIU7cOM>P$<&>ptw4%-ir1kg~pgG>;!t&u%?n;oQZ)g3? zo*p?ah*~lLs4}t*u|KmOdeQX3Dr<4k-(bv~pW&p4)^U};F{!O7xX&E!RKyAUg6fdj ztpYTG>g*hkv@o|~+fnhZ>27E+bkabA)ZVLzAHD(3?40=PcGEN8IsK*!;%@8gsW8mi z4&$Bq-jvq{G$0i}k56&ztah3N!uHz$>*SI>D3IW9g!?Y8sQ!I6g> zYds&&(U}T0JlT@>(>1;lEvROcJROWLFWn3jh{3}fk1#FB#drzH1CB;o*X1cy{w34( zcc#C4m>|CT9PGR5`~q9URGfwN6SL{&;a(LHSoe@`j`{GumYOHk9>6k)r91yr7VV$> zUIZ5dbqGO87USf!@i}8k=UeQMr&4e|qae45p-sa|f!4!3w1o29ysfNi8dEDV}09JKf4|+u}4)ro;bn7o=ft=)!d^@~6 zUMXR-8Dw-j{PAucP_0z*oL}5X+Zx~;>QdL7wt)3zyqNY0DBtI|?EDFydXe|3^Hk}A z8MeQWU?znWEnp@o33&h?mGN@Vk)BK9U${LT#12hcSB~2A5y4V@vCJ4efd0o2_3CEy`%LZ^#=~&5$mwPQc~?H(Gr~>)CNu#dCh_ zFSOmxB%Mx-vGqIYtQ|*z=DT-uw}jevTm*>4vG+^Q`tX{C3Am_rf~E^hYyPNlSXpg0m*1_9#vKU%kT9` zfEtX3D#XWmKU-Mo?C^n6;w!L|)J;~qx*@NTzCxm?;G6RTH<!-MyvJT_xjkM%Vc8_5?yFC!)tkG$Ud!`s>}tkusqc6J4suNP8& zEsP(n-TA1Nxl@1aMYQc|DKi%3SQVU!73V$kXNZRAznT6(syJ$3SsOlQ= z#00H7Whn|9X+#y*rQ$74mPTR@MDZQVdB7mJr4aUCwbR6?>_O&Xt&Li8{I-2^Rl|dxJCO3 z(Q-RG#>GP3r_1cNe;)33)=EPOCwCQO*ywMi-_~CgU1nh?%V0^axP3U3#7*jK?vc2B+0iiK zP?u3A4Yf>QG38gw)uO~Bvk5&#A=%rrYQvws!x)r2@Is)^zuu%OJBMRIn?&^ubLu~g zsY&=L6fTJrCVap&se#~=4~9h;7aWq4HLpxi6}#* zM(rF2L$4`_QKUN6T+~xZmBBT})gT(-zHHB^lo$V`DVL61kLn{ixQzh)bvV2E($V<&R z<<`2RK$?W8qDe0?5CIXnB84!CGs3jSX;V{a4j>#*OTkwLN(8n}Ev>G36U%L}(oyWd z>*}!Srx(i?-N4#O=UZn2;x}pYT$O4dQQREL-f}wOxZ=l752R$V)oUZaH3q}1jYxSw zbTcDV=W3b0FPNui$v|S8HNm^Uz=K?X8su-vjBV5HN z!fkUiS8$7J$hgHuqioM_{hLrdi0ghlds@Fl4{e~~#$mpIsNJ!qk}oT*>($pAj>^Hu zSz31T=69g3)v=<^qY`w_SS<@d=5Bg)S2REepnMCilIuvPrxx>#US~q80U?4l)l4L5 zpl%_F6mH^?Y#eJ6AzF?NNV!K@LiH5}1J>}Kd(m3xdQWDa1)gVo=DAcHcr6U>Zh_O4FI`?#T)XBIY(Lt?C zq!K)xrJ!s!q)WFX5dw4QWTwJK_Q5g93|G9UAK!k>2aA8s#Zv&m2(`@)d|}-Flf{QL_x8^ zZ&EQ5?Q>(Zjd1gOE9snGq1x_{miXDR7>4bNmLU`$mlW{{sH8*cDG&fvL}eYZr~(I| zPq&uuxwKA2+g?)zm>yA;yS+6bd7bid3D1IS1Wlvb)t6NUMX5q}p z|g{CpVB?{^->wSJ$Jg@>t7~##AL;QKPYV4D3{4WYjV~ ze47LG_6OhD_(VX06{$&ZAtMyCN<|?F0TxI@RzWsXAd_pS0S~0Y<2RkI^p-9R zFGtt^yO{X%#+M#rli2NVr6CvVjyriV2#?XwfW18UYIh83>bjeaG5u{4$~CKMJQFj z2LQ=Zky4o&-imNZW$>z{%4#nY^%4Tr0C4XIMBzQYuT68D9O8yx**JpWv`T~|lME}3 zU`%l?*)Z*UsdAst#0tu}sD*>f%oHzKU}35vh^0%TSZQ zZ6UJq^oadffz}ob&9Eq3&1n0;gnw%Sj+Ii2g0r({D^jGuEDqBEl%;cv0YJ|`p-#~?hiR=zH{kLyCCN$=!UN6n;d;XvEOa1HX#*-R-{2nncD#uD~}q+N0=XlMQ8*k zRe^P0$ms8RpF#30T<9g+Wmt7n)-GNyr3>Er`_KMfGv_e*;mXba#R<2Df@D=J)-k>M zPKFbLRw>AiL_OUDyoDh|g8-7;f@ep-DM&Qx3M96{Up5ujZss%~R6&L2m08X^Et8kVA8dpa4L5f&~Z{(wImjp_1C4g>cmn2PK>J z3Q1puMa&tOK>D=SQKb;Z=#>~-&y|_pLllY!nQe~-=Ql*KXPCt+cKZ%zA2{r@l`NaR zB#qh)*NJl2Y}Hv@%N0WVBzvmG{AkyCBVI(mb0nQRo=IqH+^yi97C!`8aZ3&nxbWh8 zubJi)O_=BNRve4^V%2qfrb4Z8vKsAirED8Fji<_*1uk+0?>lV!Csq3VbF)1E#eFOai`lzt+$>V`+(}qsjUdn+}o`D1%l?Q#noOwqXr^yr>Id zM0>j3p_GVPq{^~J&Z?>1IJAQeq9|%smGd~VTSrSk#u6rH1u3!-fB$%kpEo|sZs-C?XOK?$5*A?{zXrgt5n8KwI_`<}tQtflp#+|iZfYP@8z<#0 zq(~lUgtB6HZ=_N_k0Tfb%-74m&2ia*J5V@VxxkYSj`Z19E7XN=w_`4l$CAYM0P z7PwrHlK1FGC&BzlX4qtPb)?@lL$kiIW6dQlvkF0sj6+VLAToltYi*2KHZuOM+;(E8j!ZVtSx3 z-D@L#hXL`5JunCj1tNgZ&%GUIsbtCmx3Hak#y!_t3BDkz{B)%B@JJ#8*Zb?6H9 zC_>fyh#s6I(A7CkON;7qKc_fdCZw0a;M>-~^;-E?gBB!iJh4A%gtFo1CFUB*+_Y$_^ z^HLJo#=J9}yPT{AN`hX;3yHXFKj!#qU z=}MxU3WOLG(q|OHyi6mKBg&J}|1j5S%`T%~Np?2!vRr?Wcl3b5`Ig8&9(=O`PyU4t zzwEhyt@4;n6i4a5h{ndzBqMS^1>0xdJ;<~$xSqD4pD(BXQ}ea;U%mC-O@4s4we%AP zR@|U6NksvWht;IowSr?#%Ni2g3N-q~gOm1>6CBaJu(?$4&Zc!Y(uae)dF$2v&(zk? zjtD&8`;qmOqv^l7`FtZv)A`WNi26@UQv;JL>@Y!RQgS5YfY9Hw=a(Yi@*X)=E}zMT zLlaQ=8j7Pii4M8x8zpHHk218ok@LD@1Pv-Nojz*g{Ig-B<$Q71ZW$5?io=1&hx0E& zX%5tlv`Pv;LkRj1#O$>&Qp*)65pK_7D&kt_G%SduA@=@kzs#pN#DydmgT$s!)X?zM zskQ|Y?XvoPmi+F>!6lp-VWIDgm9@dE1Qb9d2%S$(auehzSUoWHr2}+wM1(kApzdLu z;1>aUDr=LBswp6ekoF>kWFeH4ry&=>wjPkVBAy|kss{&tQR)>zHYHMe$S;7y;e)D4 zdL#MLyYT29cn~jr?SFfq18NBS!_S{5*lIX2;8^`b#wZehT))(6lH3JrTHme%9@~HD z+va^yheD8YV7{9dx;2$!8u^HRm)J=!xtUhW-mZpD#2J>C-~#%5 zVIV|+zD&)2sVmOX(Q5QXfK)NFCw}o;9vjPNnqbf~A@61{zBTT(OpKRJsjmvsnQv$2 zMAoQ3nO@UH30QWd3T`2ns`u|%;MBuf9pl zm=cLq2lWtqd6r}B*ElLA@IqZ=tGq0vA5dc1x(I*@O3ye0RHF=IkmIY++)xRbM1uWl zd3|g2Qg?rWscTOj)hwDpR|$xA2g~~-=m-V$T^XOf^YvNvyLzR4BKq(j1v)N6I&aYg zpV5v_Lc=*k(XDD5f4$#J>2K(nC*SlMOnfILchWqzB6pG<{f&6HjFo?q!4%t)xlB0s zo0K-wL$v~duFuWISwEqec{PHXPxT5{Bcf_vy^uj@Gf!*fW*SsfRcYkHb}igjuweLk zDwRQ@5OF6BA;gtABLP}h_ioGrJQ2;9ziw=n-NhV+b`-U(KVg$DZPAm`&vA*S*lFuh zTx))Fc7r=DE}|MX2XjT1nAMKjJ6k7_a?9E)ANvP{jS&Iz87VWt2(T$ZF#>}8hi3}9 ze;SwGSb5$3x&Dk0qADh`g}k2oa!wHm>TD((_c<>y}koG`LE@0)E9`$?|vi8})-R zX;zx6K%gXSwW5x#QWz_8rz@tf`QIMkYd#AVT$S2wi4j9bS3XNtDE!45f9EUN$|I&= zwM5nrE9~#XXA6UzzwtfuQFl9ZsQWP&JQJx1L=FnrXlQ8&-ZY5=5^1!=4J6QpF`^Am zoS-l?2q+@7G%A5!ff0=4W=`^eKHSRbLcnR72K_{1$HDhAlpr{yrVGC3JOrP zEdhp=T2xdKq-hXZ7KKq-qAOKjy&x!3UVBj5Z0uA7G@9+|w=#TBMMWF~p9Tc}$Gp_w zZDXOrjGEu=%1S9?TV4|Bw_sDvu~Z6KK4kVxF9PVuW)m&A70hcJfSe-%*zakZk!P6mm{j&wpC|BC z79ZHB#Hbk(I+Li2>gR#-Oe+s}wJ%&Eg7Ks+ukvM&%CN9$R+lz4y88@gmPp;t1^3-$ z<(C%!-$m{7n(Y3je!qs+ou!x`GS&I^eY0gU1yvK{`vzor=+S&uPquANx|8KXdkLRZY{=o3e;wF_LiH(jhT#8em z-a!FlTwRb);^7>x2%#B|&D$An64ZWq8#T>-9+&Rv#Sj1n#eeBzTJwH!!S0{blzdY4!N2N{ z>Olki@(}s1q8yt+ZNG)kXwUwWIYW;vq_o9h<_$4a!g6GjJB~y46y&+^sgZkFiN7uE1+YNRG0 z*M)Y_-*}|HRI!9!pthQ7_Q#V+(0`sTKYMdAS7TA@d9JJD!gTK_%b4IQw@~%*;P<%P zyVs!d-a0Fsmf1Y#oO20;$eZTB>f92x2Df^CnPrX1Oy_TqRUWI;dF517UZA6N&){y0Tj>LWU={1Z%EGZy)vRdf*&se7VT~&=nt$vfYlT@%oyIv;lZ%bsd%F3-` z$$;3PwhkptEJXi2Q~tXuNN=lCB4|>Am&D_#uk{b-A9=UOyEnWZa(kSV^{orYNhwGk z;Ttwyr4oTfE-I4>m@Op!CUnv{YMm_gTz+4MenhnK1E9-y_oelz6T|1HV-=Mu2#P*! zK3{;ro(-1$T=0D8V6*JxYw%cj2fwAFqxDn&cN$e%L2K8sdw%2Oc*^&MAIVGAL-X|k z`Y3zZULWq#e}YT=v-$F3orj)U`4{UFttlz?Y4G=9g=kfq`>VgtyA#4Eywk!uG#XAq zI34DDce0KCgKpg~BzG+*rB;5F$;h`{ejq_AD0NRfkpG(%r_0DvsQdm5yj}5}B`w^1~^Sy>Teu{fTIGPeVArop7)*%{m>AP$nz?`=;rk(XHez7gJKX1~@eyu+d zsxR-754&m$?2=YTGt&B>h3RjVpwcui{?ZB22y8Yy+XWR_ZD*oNM*GINbrUFUnSyhF z@P?;y8zR{d#M)8&XG@35NBz^8n!ov; z%N2SGZ662jOe?6Ju-YYkAV87yB3Vls#o$1Ux5;p`*DlSFfKLzrYr~>IHhoo@%RqMK z!LgEOAzP{Mk4IMchGytjzrv(4_sxqlpL#nB3xM}PWJ%5o!`>?Q_loSqcTeA}&c-&B z`d5AS&YYGK=hMMa$lwdg$&|Zq5o&4$iPoeP+YQ7){MMMyQ zLI46biUT5xwInGprkkgl2g4F_!z@*h|@3b*X?5DhTC80b2_&#(cjy`g(?}5q{b8T@r%P6>GKH zIW>nKyms-$8E6>a6TIo;30M5Is?+I7nE(wr0_&$jHUq+Hk`YDRnp^1}L8i1EyiK(vs?Odpu9ns4oBk4Y zGWl!2YjJ`;KMRYXwQ2WjFjx(48pU_ON{F0pGDX=Q$V9@g%}J;>u4-?y!mIB&!?rWF zbzY~$?sgs3^x1|1W0`I7=E1$5aHxY{vsuCLdoLb})wj8me7CN<@*w^(WG0#fzrf}4 zn}Y@dysA#LH@sw=27^0=(JRo2BZg;S-__zkD!|~LPHuGWg!U@lpoDNF@!Fitj%{=&i37(JQhIy+P;(^nG9VNM&mI=DlvP(B!V0rH!km*yGvlI2ltqMtS?IJoT+DvZP*WZ0oduESvswh_NTAsrp`> z;ATzxpO#F-tA9L%kxcLKN zQp^OIgyeB`sa_5*RY$#s#Q5buzHckzqRL>DO?(3%Ez0lcU`@(ZX9zM z!(&Pb!_~q?L0G+>EvI&lm>F8qA^4R zKU#8Haze35Hv4O(1I=2D0$tI~V{Gvw4m}aA3lyXmoD_A-CbiHjyQX*B6$hBmBX#8$ zcA%lVu$Oh^lfIqQ5b3#;F=tqQM`#d&!wsi8^O<}NC-SDZ#JpiQjx>y!#a9q)=Y49=O{@QIS$~ATvZuO!13Xo%pTA4ee^qNOB^go8L+Et(n-S=p z$0Y*hYe{7uQ8|`jW?sOQnk;dLy1gpL+My)2kK>fWNQ}gs*Ys~Jk^`>e|2$)uwt2I0 zU?8Gm`z_d#Oe53cy(;1ls>gnpJ%bqv6$l3owCN%woIPuo(a?MDm~=KMH_27c&)VX< ztl7VQ^rIsy*)4+wyY99o-HkepE@<%Jkkos;VPEhE2fpgk+C! z?0;??D>+?@T^rb&fs>>0maaiPk~+bVus7^Dg z>Bg-f$S{vpyK`nnEK+fG5;!>Z4K^Xm?;nadpdj)j!b3wE)*ytrN+CEfs)`E6$^UI0 zPHB;^8qS-k`HECNn;u8f(|xv9uDPryHC6|rT_;_24nMWav*ACTTrI(r4YhO=#-!Uf zgiIrYExf^goGH(x2?10x*CNeFmq09qN38PX(x5hB6=P@;93cw6SYxFRb{r??itd`A zk(oVw=Yr?d_4t(fZ<$fX*^d3!sGkS$D4h*;Ey@oDCGaLm@Kvv;G(#bw{n%YQ#eH26 zyqD5)J7B#jqmXj9J{OKtG{Yq?PnVC;=KjAI|2NpJ2p>&KhyUL)?ibkO?qjR%ZvX5d z5UcgSr_C%tpJ9lrY^>{~G3ZUDNkc1Et=Y-k8F?80@w>8Q#C9Q1=OaVzytF#6cZ1w1 zg_4d^`=j!;>G-1AJ)A~v0<e9D}A9EJ=kCVko;Z|#yqfaAda;Vhw~EE z<~F`h1&;2?sWWm;)7|{->RW{Ka_~z15vRo|IIQ-p^1AFvH@>Mj6{5vgv{1WcHKuwN_>Nkx=QH8vfwd@>>s!omRAwT_Mr19T z0?o$O<1a!A7akef+?sV#90-Kewc993GpmOkZDoJ>xrnek#2P*KE@B|Pm?$rEhwbt- zfn;&@oFW}>*(}SgqPo;Fo-=pw$m+W9@{qykKOawn`U#`C;L)UrUd!7)!{qfW8@jTK zOqSx2RK5x1d1}4u-zB>V&^+qgSk$;E>M#x-03za<=ezI&?G!SVy_|awweloh{)VFl z-#UJjk5u46+>9*EquJ=g1d=%FvTI5WWzf=h*TeC;c|D&07&#*?54lfjtOi{K4!`$u z$#cs}eTzo4@oAG;n2K?CbFecJ+J>i2Pfs{FG_^)!mgvL$$utNWA%WH(!t3OSjqhcv_{Vv~Vu4F}rV1E##?kH~bk$8^mj8BUhr?ZawYx zw^B=V>cH~&3rM<0F36{({%hwjPF{&;i%6@?u;crmU*@!K>~8A#$Qt=fqhbUa@iT7z zHTKSF`i@OIjvjHWQ`Ale2b!~N&(J0AV@1KjKV1l;#pkc$_1rG0ItRLT^mjWRS9W5W zMxIQKZ=#*|(w}#+kBj>HcV9K88J@-;X>t8|KSmK(k0o`?=@eREoAyvz$WkYC^C8I6-m zzec3~Sb?GbFcv)q#Rk4B_Oa&O$!WbJ?DK?O9~K?M6|=5N9u7J-eC*-Y2{eKY*t%iq zK3S8_<50gb@WNicXL&Q>MdSkp;Gy>oMsn!MF|KCiP*vM ztT%(m0n*D_XRXuTZH$7S3YD9*FB0}1?<>Ioz2oO%u|DLFw?C`}MLL@Z^^Spov7I>u5pi&?bzW6)J1O7?NO0KZQ zC{Pfp1`P;E$q>XLtihrZNsMwBL?Jx61dQw;nqZn}8Udt+(h(qOeb$d&(10;L4tqO; zVbNurw5959wKqhCD$(uP6Na|2FH!$}Pq6>4H`s{eGo3ka(Fg@wr!A}{GsKy7I&+f| zD7SGWV0U#WgS`G*X~@s0QX`RtfcEhuGDj_|cT-jMxVdZm&+5{B|JdZl5?^7@?~-Qsr0{X<7=BnraCdfi4|>O7#xmZr4VL}xxj^^ENhm6 zV8|%hsW`!(5Gt&G$3A#*?)o!eJPRwg!@$(8ye&~)5a5mQQvJXf%>-PqO^-ZKq@q0I zgvC6={SW`1CU5xPUl+wB5~fjQyED3R-15~_tGM)h`4kPm4x98pm+ZgG7SM{n#Mw^} z+M?^jZ%^7frF%7SN4op?|8wYni<}$^87U+enowv7BlYSTKY&vqa;U`m6-C;PkUsWN z9C9yln5v^PBkAHkG9Ra!|Hg#$x!(t20FvMq$iNIWW+fsF3EGEEE(Y36oG5f<)7&0Ej9AV-N|Ml+Y^o zxu#;ErrD~IC0(f%Ad?Wjh6GLB2>37|-koM7lLVq-R0%B2rJ`iTyZSf&8CN!gcwdPD zNsx|_7KKeXEJQ5|sFsrXG)y3Y;8V>U?FYo;@@g~^NX1%Jp!6Z#%2pUI;t0e^wdC0v zq67p34pMKHoo+Z4s`>G+I)nfm+yMXtKm;FiuUoV(0~C|zD@AI;@*rF$pD=3hKIMU! z-j`|b=?NcgYloWfThtJQNnf?;%dlqiId$accD39oBgoQ2rzuZsV z3Pd4D5J9?uPD6nKWHuyn#)k47phRS;Sen;4iY^r8W^6Pe+vv@cn5v-!=%|yf5NQHL zk$6J!nw+qgWwmB9h9p-8O%~P4%`k=>A|lAbMkGiw^vamVnaWLt6-`n)A#LXOTH#u8#;%tIKdR~drsmMSg6Rmp9p0U)R>l7)?FIN6e%J_02zw5Mb(yF=i0 zmnNo7_HO${LuyURlhyBW^RG$pw06VeiSo;Z&rBRk-@e}vm zz)zf*^~;q}@>q-vmVmZAZ^09*xeRMVy1Ye>ow-cmQ90cs12^)=k8^KZQI*Zbo356~OM&fvw!HPr-xpH~7t|eZP;lP=kN(Pv72>Un zsb$U~dLK#7>7$?TyPsCe$3|F3Rrq!|lgo_agknXk}um@8KsU3#5cAZ_YlDny4w`I{N7gXRc&n9+TPQ+Wt7==;ERw{{JJGC zHG}3!QDQ7e^imE--7qvRX3sG(9X);z^Zt6!bnEosK)$bem3ZqTh9WyIYV8Z7m*VaD zCw8oLOd3+-ML4Lql4Ig3O4j&o4~j+20tUoMdZ5;W!5kJu4m_r}Bg)9YXJPt<)K%T9rp!MZ*}(Y!mjbH}YHcpMkJ;Nr2u z$dk=t$n(>ymCN;o2deYLl4pO*SS)CP-8J(1>@Ix*36)E6Y~Sxq>t(tqqdH1jDM|&Z zq-av95jI(L)1S3ElC02(V1SBgqA&Cmf>g0pRaG^hh_`lx5n*9-UCkJF3T| zv~j-b57Z?DDL~-uws)Xu4`M~cXEChd{@C2qSfCRtnS$}70fT1>kU|L0*Eh(IE|z~= zx^s1`Yn;!k*`vkOk-&{AM>hmq%k2K$fTV0}qn`?Uo;s}zos>i^uduJgwbi=FlWX9h zh$IuQwdPpv`Hz6Sk|PA6#%U)^U=czxgb9G8@0$bziJWq6`yUBsYMz=t7zu*rb@{=N zoPeaQOGKnkDG((ff%yFr&q#E^m&6-VdIL!t^(t!>x0}jYxW^$=l z;J1(nsZw9zf7au;zU=rjlF_0AK0Ot+wnv-rqEEsF91&E~zRi6*UuX0Bij?cuuW}43 zMNKXVyVemfZX&8=R9@THLTAV$Q+QU%14DCc8wHh(O7l&!Lxo{PkUl!LLkf&3bT(d~8L=akawRc#^ zW&|Neq}2L*!T&70*A(dSfxDI%1~E_oJqaDEZwjd90!s3pkXUVt93hJSAl|Nrgbgu$ zsTHs^a=y;ce}|G)CW9J~qG5a-UKAsiu!Rf8v3gCj`tfjw((1IWtHm=1TNR^NIF;tqGO))O@9|uw(MmFY(oUSh_#F%04faF`YZR=;sXHz zuW^l~pBFY0`xIznN`qGQFL|*sOv**`F!)`EpEV^)w1`e2*f>cPB%^KOM)7Si7#FLX zwY#_1OV$Sp3u;uoX%pm##^V7RtjZgyca{PsqYo}`m1~$FeOkMX9YFP~0;yV!4qJKa z*qV2%NU?8G&3Y8MDz#(al{792A~h0>+4W6anZot!ZH)BWnl>xv33#ujfl|mRCybLh zFqjL>d|MJtI*P-=MAk7B_fC9sve5)xk+J8=0=vD>4b5W^My47)NLpvD${D|Io8BvA zw(8nuhNgEy1tvy?oq1O{;%#kpoDrndslNotCfB_+H;4{q{3qT%8*WdM`o#3bxRkg` zpb=cA5>rrVBoThzZ+$gXc_%n7rc|m*)|v{UwMkR!I;rOrX!R)Si&BV=q_vpQz>4k* z=_uP>9x}cJ3aZbDOz|sK)DhDOhLO#dU7HDI;JUhXkb{j9lO&dl?@C4;Ii80UlchUY zjT4e6(Lzv{q%px())Gyu?MVS#l$*JsmXwDk+HEhWjnVB z6Px#|tM%MFX!pFO*S>aU*z$XKnc{Y2qzgRykg(L+2~fqE2EmqZtidFBh{IRv(T62l zsD{ANk%TZrgKQeLOOoQxDga~%BUM^MuLQ@3v*k}$e@+xD`5moP^TO4oN)`^kKD{mm22U!K>p0H_SEg_ zNVBDHu1Nl5{F4LoM%c>7{%LRbnTU)psW~Gx$TJ_%nVckZP2C3n7y1{N?Zd~pkjbKm zKaD@%WA^x8^?3WQGDocK|NYOUN55<9uZ*5X($5r9+WcIv#rnLwJAu(W)SHvL%iL~5 z8Ruk1I~H_~+h66QP4)UTu7q$$=|JB8>G>IV8FW?}bCi3T5#uC?{s;HExKx+?kD7-V zD7Jzigi-U-@sNS*k=Xc1`X{K@PNz0MG|%{R!N$^0$D%z|{?=A*{)|E7z)!Z?*qqqg z(B=AXjWWqKq<>kD&WH0opYTtgpLqUXHT8E{?GVGWjurCK&Bz4=8JOWo@TdcpZ3d@- z;y;$f=V%M}Knno0*!Ph6VX!+kBfK((;5X@nV|*Z2F(--16*^)@1{BI5y#`o#dBhm)5FwS_F|r(usC6l zrSem^ML-~4u(>QL;5ky4d@*jemJmpx?reQ;%YrgDe(G_@V@-B3H#Nm(>Y)nQ>SvS0 z#YCkb@XApk&c6vaB)zwfvUQ3}MLX)_jjhoHV8%>ur%{_(-C}vi4$8fvJ@u)0sD*w) zfZG_F6D74NNfuJYb1-w$sA~Tbsh^2~z@I@^jN`>QCd>THD*u>57#YGBE9f!j%85|Km}?F(*YccV6&0ril;g+A!`_PWTLYF9xVsxly<_(P=eRp z^WH!;blE1{aN;(Q!?8sV(q5Q@fA*F2rAh?gr?W>5z}`b-WgyfjgZD;nDIqInErmFS z)y*J-29Ui)-hbUOY|uhT0MZvYAsD3T2sTSUY^J5MMPApY3@ZX`Wdz);#R_z-NhFb< z1ixrS@T?SJwU-1jD-I&R@0pWorA%y)qYj`&gQQ|B$0A}{BIo%fQ1UdT@hga48P*_kmv5+cNn))~#;=T6dBEa>E%ta1Nxe$c_2e)#?4 z!C=Y(8yvUC|GL^NCh)>nO_Gs~-XTJ55D7Ah7i!b<=*`uHGO+s121{Sv|7^$T*AB2U>z(eA8FY=HoPu}atYVLot8cO$+ zj*wg8+lw~rbW7)zg+vK41)qdtFsu3#|B-{CAAo8QH$`ZeCcWEqdxSgsq<_TYCfUO3 zx+Ix4hK(paz(l!C58$Y-ObP^Dwpd zQ!@aWyKYD}WJHAoj3h-CNeo0pS}99Xn=(^cOmI1fU}PJNBS{-%-u05wBw@GY&{O?9 zW=X~nzwZ^Xb)jZNQ!eT1MaYtJfR3XsqE0ib+C>lY2qX#N-g6K?abMZ|keP;tWDd7~>+G z%oUcUA*u<&FE&Ym8+CcD4})zb6UvGGU*(WlLS)B zvy|dVBBBV1Mir#V3YI=H5O6^u8xvTp4;0Y{Cl1&B3vfb`m@P}fQG^8pmaa|V#9SMg zBr*{V-W(!cu1!@U)j3sonkh}&w8FBKFi^Vvx?Fz+VE=IJK+uu`(D0!f9f(8}Q{DqR zT^BSFAeuHt*jXg9Vr8n5!y!;nV+smQhTWS&;D=G0%bS}pWA;h}WjBL&q(W*=B@GA{ zN=S-CiIq`{z+{UQDz}CW+`4EL{XzysaNsPy;EcgAbfvQ8&JEeqyj(AntGOWCZsV8Anz_=T1L8r;Kix}P*H5H6{1#%Hm?u!q$4E~ zv|$tzS2vNd6hmJv{n%i_TO5(JAqE&_kjm3!=%Pgsh$`$cs#L6v8e$*!VL=D~Dq|-& z^w_;BBMGodx}8!J1Txk&#D0i`aD`naZG)LYiQ_C2QIhRJSddLq|DDtu$egDiaKUcNfxZ&PXwY97+*{h{?=N*-=J*PZ*&$q%oNy6v>NaiZ+Nq zl#Ns~Mt|XnA_KYj|ka)Uwl2BU8bb$Y1b(}@N;gvW_QxKu6M)1+J{OQ1&nS%xGcWhJ;H5LFRGaqnSIyqxN!*c~oe?qcvD zySf^G>rijC+!yr7V8J6FDDN|*BV?$FFa~83h(u2mEaqLeg$60RtysvEiOvHNOomKi z_l1Rq@WkO^M8*yr+^C6aLRBIvEKE##5hR&PN+A8=yh2MD=I#5JcR^n+BUy4I{%hVu zQllkkj4MnQz@uO3gzPGbLdhyc0$YhtASr4JxGIpI3Z}_kSz28|N(LtJf5yfjj3LNp z2+0suFAS~{fp0<5rUw@)a1Pon9IElDgU{mg+Nizer(`9 z4IK<(C8YuVf=1F|g`&f-+K`BrHIlAXH3Qpa+TGN3LrEw5fPe9gKAVkh@tk_sK$yhe4CkHR&S!gws4*h z2%{mea*0wuAu1G0S`loNZbHUgKBN%m)d@M>t3`#^B5Q`!rP6Q^IxoKUiC1oazLb^ui1qx^;4HgIzZJ{5aad@Ib z!^1#_EJ`LBqcse}h8YCd=vIb}nr%iK#Vi=T(+BsR)XmDZ8{xxvV95EShz&Ngz^+5@M30J0E1};$bv$iS-F_FS1j4YCW(MV zFu$}=1dRyB5I2W_Xq*+AVcI7OKJwuU+#z)Eib3Sd@1>m*n8|{b$b^Fi&QQn9E1OC} zcX3fLmZoA0f+GIOyQ%~uNiq&ua&a=mnWZgpsMsizYsv_eh#^DOD2Q+gA7-;gmEnA^ z2#Kl-VkTn6F{5O5k@_RC&JrjmfW%!7YHLEM>xE%*&5A;a!@O&V;W?|M6(mWuC1W!Y z1O%jm_i20S5=DP=7l9JPxv(fUb=iS>N|gdBArixz%e2C=A4;~7c0XU7VmLG}`?L9M zQ7vqAHzV$5Y6Ujn=zg$>BC84RY~^6vi5EABLPa^X?MeiN^p{tFUMga4y$HQshbTiA z)VSj5f>98gwInidUOzJK@LDzvp94e^0rS>0{VoMfhKFyna3gxe2$?eWG^U(DdNe?y z-4RnVT;8H3BG^LZ5qadC(jbR*b9p5hGVshTB2CFLNJS|k42VkhfiY~iV%Aj~5hY_P z!vhI@$*m5Uhea!Yy;ME#R4bD499S_dh(1oo#D_ABiw|EB#TRkP)l? zv6Eb!?XT3Bw6vTOQm?KcX`^vmDbID}fAP(whmzAXjpnhElbWQ0oR~#ogv833``>@*|FAw0hJpDh3Bs^|m>KaZK!P)GRZ+#H#&=klkO$dXI==Vym)muv;vu(hm; zpXX+`5!y#*K9zXZpfD#Ujpwc(IIMBV^8h_S!oR4zBu@d}NXPZzujixWnw5~M7TdZp z>7?ELKTW9>)2{B(GfbrdXAa{zK7%O+T4D%@fQXPgg#ajkh>z#ST!?RhYkq26yeZq_ zs6_s(LmN35BSoOG$JeKA7(cSULZPlf_C16?%Mkh#S25R}mu=KvXWFTa_5WV>#cc?$ z38FJz z5fDDVr9S0A$xt+6;p8Nck`kQ3rZ#-WLrtc3-Pd93x71T-z&|__Z5HU;xiOP!4R)GR z!LccAC&1gs!rFhEVJ*M<3x0lM+LWu?fQ8b;SnJUc#?=n0aSLE>sv7hK(>iB9FH3mbj}rcJi2yP z)j5%E->TU(}u<-0HcYws{H`D`yPf0b6wjBBuzA+ARx_tzOTXsdeS4HxgoT#`V1KX_r!9< zC_r6}2v#Ie&i-Oh)%+>QjyftEZLn!)?L{^Dz=&ky=6E-jDEXtesH{%(b{+2DTq;@x z;27%tnB@w}8#<`@qsu3BDzxrBgJpK;Kg4+P>XNakN#sse0#OmKxy&XxQgbjb_Ayh} z;>9>A4KixgbQns)7`lKq5^&QX&q&DP?!6b>zVuLHd7ApCXtEaB;d`DlgX6zVjYlD> zv|0YEQS%fi`n?B}g)5X}&>js$0Rdv?GwaC*aAkK&6$+sMe-bJqPTPpjn?Doads|j3 zs?SQ)>EkQZQuLo+za|$}NJTAK8Xa8fqto)wKOLeNDU}(Dd;APdd{@wdXIi|O4LH}(U?{f&}?D+c~e;JGRjm2|sdI&vo zTMhoIIzY2o9M!)gznSkn=9;x}e;c^2HCcM-NlhUpz8on2ora3d0!0Oz%ejDAvyG~i zFhxZW0suB30RRJLzX?v&EK;eNt=**L77ccbfsSs%e~D&M3Z=koobpcSpcE0M0D?yw z_&Z#v{WW?Z2Oq1g2s<%@FkR0fKt+{Gs8L+BCXq;b=#HI%?d1WWg%+#c@Lp?xofD+? z3s-@ceXM%sL)OcfyRge_c$(im-eAGYV}aEk)k4LDEN`@@RwpWO66}#`x#cscfkc8J z0+60T`m9ChcV(ka#34)a6Un95*+LZbP?RDUOhy3$BoYQw22UN|2FX2P|He&U;C`&0 zN6U5ktd0NNs4t{~RB(M8IX{cgpChI1Gp;M7j6qYWl9so0&KrSgd70=g9JobK?0p5) zKE^>5{|u+ROnwYH&n>mL-27cSIld2+;7t@AQ#7~Hs&qG^gFDduNm2WwA(p2c$1yCw zQyNOMa;)&kPpT_@8Zy;gc?pyG<6jmXV~h%(%UY-{@_U1dI7Bq?)ImDj?6zVC*r_cr zgR*LZQfB6F@!bFfb5Yud&$ZPOxGtPiris(6L29(tfEh(FWUQtGfuMv4gXi#259oZX zNJ8*tR4M0wNS*Fq?*ivkvt{1+=Z|}ArQUBkaC8e(2}EV}-p9;d_DlS#KW{sJpURur zwxGaLdZJ4cBGA7KN+uDM%`r2pt~%1w=k(he-oo#zZN|3N>WPF)BI^fA2qGq-z4eVZ zBpn68Bj?J{5kv6%L*c&JsYfhjTUM2i)Rxj*4k)33nUizIrQ5W9#Kc&FIvONpKi0zoSyV;Hl3lcnaG^$s`*yQ= zKP3Z$RWz241wtXKbEHMlB_}_i(~iP?b!(U%vvx9c(W#5f53HGg z@$^@bp5GxeiJF%ayudLO$tP(&lvg{z{}fq*)$gnX@mjpgp)-iSw=;4st;E_%JvYtx zEov|ErYzRd97Yk8!POi5v}rxBLt;*b4ir;R1ee)~6QUbc$CtoUyc>b3f;n(vs@v){ zcz8>;iCyv#m(_Qz9J@Z-S}(a1f7R_L5}f7wnff`-zH|2d%oCg=7xTZ_jvoJsd=)tp zj@ij=wDz(FmkDPk8Mq61xz2wAjhhPB(QhtpLH23^1(XQqyZVc%-FfN!+n1EzD2Y85 z{%&ukp%+G+vzg`5ZD(R3RitW~N-h;uD5~LEtE0#?V@6S!l1>J^b&S_p(g2MGA-BS3 z*qSst5hXnykKqgQ%&W=o6olxVMv3tELMw){c)1w%@ z78RAycs57a)+22?x^vKJYTG!7%-V>ZBWBUm(R&m?B-s8^RuLN>fxyn37cLf%YF!ZdNNQt;9O-*5Ccu$k zPHc0KI%h*$8`o8Eoo)Fisv{aLi;CZh7mg7E4yybFGp2$_sN^?Bc;Q}b57#71B6}1K z&Iex-S_I)S5+%uJd*i2?xuV(NXlzj%fZOVn*6_?e?UaISP*IWTJe~(wy0}T)i--|)Zc)yUO&dCE?9%aXKczT1A zTjjwloMl?%UWz5Y*Biv?nzPdW`H7gm=m%pe1e0>MqnHzf=8cO4JPj|-Bc1g+>pDl- zm>}x`Jf6(p{2of%m?J!JIFR6yM_*M8QWT}_rXxxOyYS?XI2OXKo38QG;$dR+w9i!W zn;ML*SM%kzOogKLsGqazS8RueXvP{hYyn@pU9VC||GVrN^v|e$p!O}ty?)2pDo7(Y z_?eG?Ab(Wi{?@(AByTEzxay%z?_uAG|KCaauJRuSyqz_jwfAsJad@r=-$;TE6wrr> zg$CF6zV+a}WJoAB_hMmk9vHm(0C=N>b55tXrA1w4t;!_eiu8-jLy-e_E z6x`e&!d80dB~3HaGLj85xAyt>Oplrj>l3CUahAK0c{H`4{j)x6tgU zdV1Qp$T3EyW1fJBl{+iFPDbeXyzYGuXB*^=Pe*kRyp)yQNiI=CzYV2qL+v=m zm&ILN>~R$;mmHlc^BSOx9Zu&=<&3YbINxH3((QR?Prdll_-T#r6ICi#GXr+bLvm%w z<|Jp?xW=3(u}O(8nHU>FqiEH#WUf)6j^o;=VHy(+F&BWQM8Fu+9vj}S`JkZq^lsEu zcdDv;iKiua~PS*|$eJKqgU(Zmo=)}DE-Na3~}$CynZ z4M(K5v=|^k(k7zf4`W9%SEPK$M6xYX{Y0s9^~qBt2|ZV*HxZ_;rfu2ai2kg3#o9Lyd%GDebN2ow!d?SRUb#w6~`jWEu*nggTA%!|ojRrWo7 zr%apSj|@f*#;S6(osjeIoiT*~pA*ie!2Oohyve1EiHmkmUrjWQinGCT=X>zlG|WJ( zog`kY$u@&%HlX2ajH#fZhgB5F$qCrgr&-z}pcB<@I`3B#!c_%5*d>`(KV8p&pwa5rcj|TiMOmX2|WmQWn}` z)TvG-Eo6&(e;f4uC9nWnWGoXZMb2rRRIy8}RJ9Y~l(bmG7jB#l7gu(bV(V#V2kN{2 zw>(`|aU?D3Be@;iY_87w2W1ZwJ zfZ_UkW5d32z-0Mf(eCwLs*C{xI_oyGh~UXpDY+|ilx?!fT>Bv_9#0cA$OyJcR3P0| zNimh^%DNCPy(8y2l3}GuG@((nsdR^(YY|xHhNLd+3;B15chiOs;QtW?WUCSa5ll%^b%NFf$WZH2Z3S=~vf2xekq!<_9AoV({R zW@0!#Mzsphx36`j5uxjzpPs(htZMVHC63lKnd8pzYm&5NA>1bkEM!1_7|uHvI25M( zO?G1yS~e@7|3KW0M8QvCL=) zSHb@E1LZ@7OEoqa76k(HGk^_*Ke=ZW@NUpn{)N@mv^DX`J6uVucgtA?cY zdZC+G-IEfnc^s?e5|c)P!!+hyG}kud-#ZG8r@(5@Zo$tho3O`_hD~c4E#kGaoN|Yz zO49ILy}pa^I$^|U!fSjRwVtapLv7#b$hzxOTc~^wqK0Ut8yuVEK7rFfqe@2&wUOo#~8ZI$=Im{%z)^q9TVnRKE z2$jTp$Z9Fu(>qK+mg7KaAWwlqdZOdy88_0jqSQBLm{y-O(0jX9NgJECrXYu$?>X)B5*iBEPe(CBSHmOI5Yl`Z1zbV{z z?@8Wuw@axs=MB{Ijcos3)=QjbfNM6_;ArZZX*6JdAKN45VL;i|Qx2#%PW_;_l^GlK zPQ)t4fxu0}!)nvC!>DH`*Frp;T(0V1aXJ`Fu6vI=1-^a{bE(g6HI?gCkE%guwLj4!mglb+B7Iug?_E-4u80&_UPFUe_p~rnUyF*7C2>(?3XqGIc62dCh+53i$ z9f3Y}IQQsT-abcl2D$5bxIW`c#I@&M6#ID*C>`tu{`oNbQyu=^;}qqRd`X&?UQ2ZT zc9v>O9f&DP!y7mvGJF_}i0^%$>O5adIuo4a>mx>lmie?{6dMxg+xcH6q>SNf0p=SS z{Z{fIkCBm40U(jKpf9gcsile- zz2r{5tfqy_JPwatrYj<7-ee)IUZGuD`zfWdwUPS^;xRq)B!i+5a+^^XnUHlMDq@$~ zR%JpD^Qc_nN{|?F9CL=Rd7%=B!NZ{0aIvIDl5ZIo&BO&6j0wTK zRNvU*L2-;rwuP*1c>hM%#c6rC#X`l7;rZhTF5;Zy? zRQ@dQ14q6FBtd#BUKAU9V)RMc?UZ8POa9BO?I7KH(1hx)NwGggh+-%#69_>G z7Q}+c5DkZ-S+vu8v}tjiG-3i5cf9kf)Udg$f3|YwRg@5gs3ny{cy$lcgc(I@aDBD? zg+V;k@Lw3(kkf0w-x2?*5nvTQOm(`H z2fCGK=*z;oPu{c47AUAGpK}YOKm@Xjv$o5GO*&f025D2G>D& zr3;=$Synt$JG~OM?hz#wlV~*;hD>YGR3RrutVHO^__2I{(^c$9Q>kQ%8q8pGiqyd* z3Zx7aI2tv^&JPz{)1F6=#5FqAw{s5@N1|I0O|9$9Sod3)1#dae!enG{gKvuV@DZ zq~aRr&M^~dMw@WNuYRW(!@ab`M+UD8OkhTDQA8ck7l;$pfvwiG9mVA7t!q@_U)w-! z5fa#CtY)(lO6H!>glSpC$<)onW+FL8w>J+ARu*!d^3z5V@WoCgX8EJzm25@^BG*)^ z7=~p{iIQWBL>drLDb?=eF;SV}D;r-81D4KB_lg+cvTuoG;_^ci2M1j*MZ&xZ))Aag zV>gO8nS$?_i_pQ>3L;vkGa~{mS97IJ%xIFQFbaUE>fmN6X`D&gUZ&?43s$J4(J?Wa z1f3Nqya=QGm{4ZlU+8bF=Kr$Bbcew2ju{mp5R7t9UNu_CSuW_#Djbv%!Hb0xi@~U9 zB#9z0T8zvG7*3($fROHl7ZrGea)ltjoUUxlObo3iT?ULgi$qMxH%QKML@3O~u??vq ziaKdbV@tbYskoS)6=u-x5QG)5=(f%ti6-8dmsLl2Zv`=blql~KU?m3O;v#g*hzQ$z zv8e>3osiQ1sEF-5o04mN8{<308Q@0jh+_9od8j~=){xxt+ZxsHgO-Z4wJ;uK_$fu{ z!CS)&K%5bYyvSizR?iznua!7K#%Ae6$5r6zPK7j--cb|$&2MqEjyKwM(+=Q~|G5{_ zsour`TjAq`*6}++lcRFxeA=CEw5!EW4XMa%B|RlV+L_{Dm%6BcQ%7FiBuLu7@yulC z@l%T=-2nkQfg#USY)1v%zCd%Li{NstF$lgWBGbIYNsy#*N+OLNH<~m;yGe_yn5LA2 zt8fj$ca-iD(IV2Y0H6|ViprV6~U6mynT1pa1CRU~+1!aa@5;ibHFm)mcG~g8z zf+(^L;sZA#Q4B$W2wrZG?oJ}%?Mflze&o*?Kcqv5#ZitLD45|jRhm^>WqT7?T3#LT zOs~k)VUvs3K~slMTEJkX2BHB6NEf7OSi%)bNM`_`NQ8})D5<;z2<{j>qVDZNSv0AP z%JPett}@95r3-j(H|uKjQ{eWPS&gquXrgZsz`KjmSy!c4r6y!3dnl-K34wGLCq-6* zHif0zxOuz-6i{^3nN6m&I$i>&fZ^0uwJ~xsQq!v!s-<|vMJn^6;N+>=`)@HyLK(Qc zgld&RFwNjp{#9H#)-*lyu5RtX;&z)7V@4MS!L3&Kyx4KfM{aR=WKB4Dbp=rrc19eV ziV5(9DrTPVY8QDxgINCJ5;VT1BT`F;#CToqgh@k8jufV`4+LLY6U$DAbAu}+ zJhcG8JYnZYH!{+dgxgF*fe{N1B3~G^xV&K72MC>rX7h**mh{VEZ+zZVzNpESOwGvM zl~W8XtHQx`7Fj{!r!p^Z!0s(|mPzBmPMM<-ppC3@>Cpp2 zbGi{VAiTWPJslGZ_PAs`Io1S|p= zzuiT(F@msBC}BC-jGCm&-s`PI#-;&gBTc3i4KGBpX6uzzv1l>=d%!YQ*~DN-!KW5_ zdr6s)q&hHgwa`?ZA=Vf;l%1Mjn zHKb~?2oS#u4}=!_I3& zF?Bad11K?j-eqQkb8@K#lfB*HU0&+abclDmQxd8(L7Aa9hZRyyPg#rMP>8#XVFD%& zaD=kDEZ**%&F1;bHxZJ92JX~vdxlQaNU=9jS{)!wQ_=~9MF`U+3Z)uhTt(PQ;bFtH z5ddKcHB{|>Z+umxjLp<2Ycm;{jTK35u(d30d}A{P_o#z(s+RCkBJ9M)ITL@p?*T9iZf+cFd!mSG)W{Sq(QLr;pC+i6h;f8oHi&mRM@@5-ejbW+_2K= zC{l(g4V{?=7bJ-eQXrc=-ZEyX6QP4t-5NPl`C6I7l=5lwoug(AYQ@=@ zClwPZ9HoPSwr4RV=xVg2;U37f*%7P=BtnE3)#(ZrP8*Fx!xS`csxhr**XVDvIr zf;UJqBUnY=l8mX0V>3CbcG1A48`LP15;l#Qn@p>6cd@)^x6PpY32%G_wD8Vj6I177 zTDhB*%kz=1aY;BmxDDoB&K&a!c5g??nhS-4-+nLOC&NALA zag!o2Qc^|v#LS^{5YJP_Z+Jm>zt*(Mn{9CxKkv6yC8G}=ainp&1~vteCK2JaJC#5d z)x}Imsd5$Qq(P$w?F+(^^e7NZP?6OHV<4NfgbFY))3}@Fa5xnvUGtd5=!#W1ae*?S zVN4S}^d~Cd=NqiY}no4shk_aPHXk=)@&Rm#UULB5eCEh>um5b9E)hthXu~DJ6STY*EHBo!r z3%WHtFtHyav|bg~U}plfQ0rVyBvqSi5R4G6mZ=+cnh#RUtQ|V_kH~HKYu~FlR@YgJ^{50xvQgh%=*Z ziJA@-MDQ!+wsU0k;q+W>1hVlc!C zm@#^xjRoRv=+}NWrJ5-cE@JbUn68ci(+s&6gwG6A!!Gb1=Jid2Hz9D889P{vUKqtr zE-!I#48%oBB1uUNW^Xt(rPctzs@8EjJG~Q?XLPi?yaYaEwt-c9>cv7|(Lob(j)e_j zJMUa#4zRDH7(1vTQHE#`p$1cYCr46(5JG7xhT#}h^7{v!nwnCIUKMrqN428J#_gBP^1)Q`>l7F!pfu$b2*KRxxS`cyTf-x%&cMvgHr~STJpTiNMzj*o@!R);v#SDglquR!?( zN4byadR-4tsH*{rwQG<8`ul3LublS$G_MTa7Fe}a$i zA;bic{U4dNXX#{D|0;wgERFC#BlQnyxWdqtZIUx}650q2*#YVo`|-;icK%wkOwr7p z-Uo+OCxY_N!(TF}n^vn;85xFce9>^wrA~mE|t%G5w&fXkG zCd*pebCQ)Bx5DQr$ud<}u7by;b=id*&h14@V2X~!Aktfg?^V$T#14s+Y-Ynfwqr!1 z48||4Yc$_y5Je3VEEW!tvufrf9AfcJvsZ@2;u~zMhL1RMlq=9ghh%~SO_*j{Pga7V zii~3X4X$8{GfR!zWdwk@EUIi^ph*}i4^B@r;7qiG;i1jvD|6y9jS@Fy|SVo%BN=$c67WeX+}v1USg1x^E=sgyh@mM}BHXMt(@rF#3>#>O%v==(Foq@J z#u(8UE+D1c6pXkiOQ=&N$u2gM(&LiZ94bj999bJla@s9S*RteBKwMR6^* zqltLI8*c5yz(k0(jmwF7IW>4>OgDjsi7zM_I9M z@)H?k%Y%r>#^g(6x<(ANv82NbVQt*JII<){?p?(TF%h<+s)8~^xpxT^Sl!(g#gl4O zwSt=sx#Cp1m6|cdmy`%%U~|M?hr*wfdq|Zi@}OqD+c5;Vp}fEU~t8& zK~=dDT(;%QyS24hA!~MAxrq!SxR7lvEemckAuN_5E@frl#wE6429o5%ak~ctDTHGp zp&U36fQH(p6u@l|$Vh;QF$t3-BGM%{Wa1%$Oe+a8)tM7831|@1Ky70JTZsb#3QLl) zD-A~2#4VBx#wD1nIBM~W!bUh`GR9dVE+oTgVlZyPBY9Z_Qz;1VIEestHpl5iJuY?ue1A*9x?8 zQV>jCkeM}v#9>Yr?6s06ty2zKq)v;E{y*vBFRIS9pl{GNnxIg(p_6G0JC6ASE-5QY zB!(!(HmN8g18CNeod1XRGu6D|n>H=<>*6eP1&;q@oFH@n>;C=a3W%-wWT27noFTtiaq<!@ks``e%2Anvq!n{ zD(!NqkoZ<%a}mIpy}qty1&MoVsK{#cXU}AgVl%GqS@b?$OwWm0_O$tUAYkzzTx_AV zGe@BGoE^KA4}E_s+?PFMeZQ&v%Kv-cGBtW=aC!N!#WQ!;H)Do+Ss#}m@P0>@|Ki3C zFL8Zor8c=7461q7X;_8}+sxtowWs14w-q7>E`Farl>+H243(gvholX5ba}F&9hHeb z0`8{YL(33=Ych#@yVWwd=i&{@wl`r13tO^@jUv$9a!D%bA%*Wo1lk z%$mW6HdY+Ie*(;h*)&Je0tAss9H8vbW(a~yo4W`mY@PN>OI-!7P9`QHh9Z__`j_ho3DN~qG+EiYHDj+OM8 zFm$ZJcfCGmO*O-G7+oCAcb5yheK!#S|K?Qv*0K%-{XYA-da!0qyIrUF|C`dTbu88U z$0m5&H4i_YW++2FZ~7YFYhGaB;%2QU$)G~P>pS&#UHUjBkQ|o%^cm>OzlZ5C zJNh5yS{gR;d!0m-cFx-4!38VIWh1+1kmcPb4ra(P{tO$l2sIex3G`9U8V;%&?Sf9Z zZQb5Yh&N**k96XREutQj3kwI&VsK6-Uj`{wMi|Wg5I1Z8*@~d7=&dwOQFgZDyGLcL zRf+lfMY_qQU{k}TFX;6|f_=KXSbNGb54jzR!}1zKwmT-hb-i>LL`y45Gi*w`)*^zH zMzuM9LX3;3H?P3dpV4J!#vuAd1TfF4TOv?nv8;2vV%7!mRVGQ}VUVx6>{NYwP1WHR z6vY=IE7;)*LxfBR7~wFEO!D4mJWA62S*W*vg9jBJ2V)$5vpl*FodnlpP?HiYI=kAw&v|gc zPzFGxF_-lH{x}-Nsipq@MM&q$&(6WvOT=N4C=t8U|NG%^^wR#n(P8o?{{Qha zy8f94K{1z7QKt-cyKzj_{d+gsFew}y!yBiJFeTq zN_V7cl|Wk2z?PX-mq^+uaI{KJW2r(8K`3@L4-s;VgJebWF?}UiYn$c)65XQ~GFc&; zDYcqFf(!1ePo>UUz8?V>u&%+T1C$bSY-r>tx^pAsWS@T%u=HG3p15?qN8R1`zO#PX zU}5Y$*DJj4Jr&=@;JAY;3qcg<9&MKx185tWit^{5ls|8rwIxNbLP{qRG(lRoG(8R? zYI!Xn@#;QOncHZtGe@Q7Q*OEBg{owq@$h}9Vr z6CDz#41Z_ti-65Xx?j%=EHEPpSQ$`NQ`7E3`PVBTxwR9dkS)6Dpky`9=So6NpUCRW z=`=k~!-2C9#%I0CmLRmCn4ofh}4OY`$5;>9~E$M2q>C6{R;{ail> z#p`<>2Dhzs#?K??ceVU_Hjbt?Y}^>|Pq^C1&hP&pikj)PMsEHdi-FEV%)w`+Ey>0) zR2|f>kgObtAT!b0Ou@uFL_kDB3878wE@L4ixg3M)VX2J#+Nz(k^Gl=@6h~uX-B!*+ z`RE@R>_I^QL{${4WQ?G10uIbHkRD1dAzMkzt*?!dS#m-EP!JJ+fKk@O^7yxt&3*b; zwc#8&nUKQne4Vq@tBc^}xLyPZ5X1b2kVA*!E_#CckR?oSVBPLW{aEq0s>NiZ>lT;H zs?M#i6UX0IlNEk=`uP!VM!q++`#7pdn*LG_!}`noj?1Wd&Xd69SW$dFyR_?kW%$&? z*m7*NUj&n`f%dM9f9C3Fhy8ErIlLCHj{LjgA%s5}sEGVTnk7wlFY;%L!DLw=k^*0V z=*A5DVB5|iM45D@UuTTx!Jrx9qj z{)!#Lo!$}D-m1>I+f)(L7*^usAh=0^`QOYH0>bRj-B>g5x1Yikw;7hYllo%U30*fx zTMjVh?5q2q5+M%giLs@I-Od^z04Vr#+=F1Fo)ujWY&~l`0|df?fm%5l4w7q*cF<%} zu_faG3-W0f7+L;9IUj#jV>I0`MRZGqmRCj&jUioE(fRf1cgW!Ahg^ zRXbA$|FO>r0NfwVV-RL6_2=o1Kc&Ss%u;V0Xa2peQnOwf#mRVC6ra(>1%Wv@cQo>J zjWHf@ZXFBNQf#=s9u4@ikh|2?bn@D(0-1LA1tFrxb32@9rgmeG&`-`eKGiRpId2C}R;7<}+6~vTWhH~ZI$t5YG{)cJr zx^2C7*D+f)l<)I(jDnWSUvro&iFl{3#X94!ZF_3i|G!sn2g!=3kB-PQJ_?Hs$oc!n zOQ#%t2&-}6Fk9mO+(Vp)H>dgg_2i3uvg0OpIWWMFTXLN)hX>%q8A{n6zYXZ@;X==wG@%k5^LsfOzv56kCPb{&|HS-?` z?1_STt`b~z(TH(jKk>TIHm(`h;Rd-aju`G%$xWc{nk~&*TRP>ibG2NO3_XrrdDXFd zTwNx3ps)u3ybU+XJdpVUzz1Rg$BotWpjjEC1N(xqR9PA_gTCq}6(D9HKsBJdpX!9r zzZS+J+jGsLkZNby;+{Wo1BNh8W6R>40r9KPotrvV!2aVWmubc?;_?3XZ*p*%w_8K> zj26dZ8!xZub@SP7BTef*q^)OH6_w%ErDge5ccyYaUzrQ$Isr7nj0I6u8Wd4!5|)C5 zplXDwMPK9Xo`x~%TQYHORAPWapHaKMAJ);QGb{T%&t7o^At{lVL;^zu-6IKNoU~dH zm%ja~v1~-yRHe-gmWyd{(!tQM)2fP~M54Lqtp-pkx_}#KU!LT0@hlPVkovz#`a9ds z-ud4(H^Wp$jG>kq!lC z*5dNYE1Fr&OU6NEBbvfb>ToQRm;F0Nu2A2P{JLrKUBxnGZ!@98o|AXB()+DW(^TU# z+{WHyCmVuHZ8Kchl;ALwh5;#zVIV?jEiuzKcTQ#NXT|8!rt4}cKkK8Eu&?>~(F2_(y(d^X z+Xu6**GrN#w_F)&*cuxdHx+lWQ$1r8+s-YhZC~#w+;~gxJnt4(LGt4cg~r7wgxU7? z(7285kp!p3$Y4%@!k%~?Yuv(}BRsisTkGyC$H}tKqeJ@BEvorIBb_fy%u%Jub*N}j zk>{x;;%6sb>F4O_zy_N&Z)fa?w&1J17NvC4SDi}vO<8-S26Q;XPe zUrhpvpq$92aUCmpqiqJX?xENOf&d|X%%J?ai=czt!Clm;u16I=2oW4DdV#MF0Q>l} z9W0?i8ikoCgWLuXNVq~08z%!tP;gYDx26A&0N0J*E{DeBAB@^wtcT`V70O(pUWC98 z_aTHv{Osil8WPa8h7T?Pp-US|ts@D0@?Df-VJ#vjwB&(o1C~E?6YFY_bN1%b3qRIILy+zv<$9 zPxSwj2ahW3{Qd2-^CzB*_Fp?3MhHbA*A&JW0TT>#X0#-LLJxRH&;FZ^gNAhphm;FH z*6>94Yn|aV->(5hU?9_-X@$bF{MIYV9aPFnlrga(u^pFX7B4tlIuBU{D60Erl4$-T ze`e-uN~^3Ol8ZRUV4ij);caseJ8#}#T!-3;0E251O^pzX zMIus^in@)i1~=P_G;EvqY{3m%8u=VNc|JaqcSPCNCJDL<3YL;^F7jn62%Z*sM=*0l%*dD1w8AV@j663EIHTzx_!nMC0wVrRc_gm%{Ol{v>w7_>*>dCN& z*DxAHBzVn9oH#eDmkiNq7jcfaA|{5}VzDT2$BUxgr82>|7uF`*r8aWNFhDRH1|lLc zBAhryrOY*<(l?1~ra5B7P}g$xjIv4)V8$^`TJeJu5W2J`^dc=$v>>G^5y2aU#!%8m zu-r0)N?O5|qU@+51fk>>4OtQpu}bVK9(<2IJh<(*N_nBx0{fvr(>#d^H80F3(M?vq z+j`Ay=X&37&U0MXMI!|E%2n2_n?gfDAj^K{yCxfk>-5FiH#N&mvo&x30tfkV`5($D z)!+J#*rzRG@#im%FQB&e{J#Q&-`*k2$bP$&ow8}|d=R4V7 zA@|%yo`0Y5e=& zL+UE>i!kchM}k0PN5c8%>Fih^_+3)Wq%+^+6Z@NIS@ry5@DasvyW;v6>-v#6pL$+% zQD3CIaV&)U(*l|^VcGF-9dZP?Ds|p-Thhl5?{*T@Lu}54`sOI3@IPl)HSzdn|4x-f z;mJv(WcKG9EU8W3Z|$b%W9+dkO}NV6V$)}B;b6ZxgZOU1-hV{CAL7sJ1bOdI-fM+%BRt!zm$!Pz?m$E&1QyP}S}EDcQcVfLscX@T zMphjx9O29pET#}zD3IU-kU0Vzap$Nx43SqH3u~Mye+6x|2GU^$b^&9>$)(%Fd^#pM z_%P44#$tvQga#O^zPHvnzopaaX$!7-{y%y+Y9pgACHu3he$I5i7958L(D`gviN?Yh z6>jYPJZ>W6|7a$%TSj*6ZM%EPxFE#1D03S*lTh^VG4ocM-c`$3ins-g?1gq@IzzL5 z$h8pGH3nooV;2}9mbDb>ve)`W4l(L>u;x4@$Nn%J*ba9PZ5o7W!7bd~NO3>337~f` zL@IfUEdzHzFwLuVM|_}5=NR78e}T|>O;o*^n?zt>ZXY9q{LtQQYwnh7+CzO-V3A>O zX$*fsJ)^WKN80MFbYCodpz)?>BoX;{J{Sl^@Qrj0uup%R_xDCdxUnP6_#$M3K58;SXUmKTmV zHVn}dN&)0Vw6cdt5KI`Cq_-)hn=>O$TY2lteL!dwXlbeeYJ#Z<0sue_0a>wEOwaks ze7Y@UExg54eugW{pU34mztEG#KX-V0s=Dd09E+{z607)=MBnIy%}a^N4#Zj6OP$Qy zfw5q{iw+#=Z~GgO_wfvNA)GRDG~oTnw(y>y66~8mH3Hy2MX~%pDcP(Lrs;b&*NYC5 zs@@rcxgr}^_WRpPAF;8q#Ai;1kv;_MRbg5P1b#jK)^cJ-LfB=>j88SnT7@o%sq7TI zR#u(Q!nBNIe9nC9c)QH{!eHIza7KvFjmnl7!j%UK<0Li!4OPuQF_TK=>1P8S_h1j%W$bsylw0erIAm_H2Y%Gc)tg~HCsn0|ApKyECE=_TU3MRI^OHs2!xrMMrM2yU7oWy#9+Cw-xSOldmP?lIWg>@%+hUD_OfVSDAc}k`Cw1M$3?X z{!*GAPtdi+Z((nf)AnaB&{jXnq9{|ai#hkdIDAt=`1!Z9b1fgtS#E|36DYtyycX@|xOavr3Zf_w=S9 ze+Tx>klqdB_HyTW<~vY7z&C3F-&3w{?oaGf8uB5uW5lXsTxu+Jc%wm8U#O0w_)H^hyVi!gGJ4k5c#Ni`hL^?{;P9)+YRT73%MSApHT^x@mvHAWV;N5vxb2L0hPcLz%E3AE# zZ0Bkow?9N5&?9pW0kOthE$+Z@M{3VTGR=~1T2V5oPZ?rN4q44FyP)_@XcSUU;i+F z@jjQHuDX|8#DQZ8loH6Ch5|tBBRG9iF$(bxo?I3W)*D8mE^#w_P3j<2Git->#RQQk zhy*VkOG*}M*7}%*F<1kE&%NCv8tO4mIo!*;3OBmlav|t9Js#8t=Nj!?kX@tFO-ICh z^$Y$285-GP@p>xZ!95Ex0S@$mAT-H@s&a-|BvX=6^1b|dbdJB9H@Gm$DJ2q9!%JK~ zO?}p}`iVLnfyyNxn(1g)G?P9n9naKD?yr%&8~8s__@rzr39wK>ScPWB4q+0dfY!0D z*Z(Z;eo-2p6KElW@k2HWmhc3Xm<)-K&e-0|Xr{{nUfz1sfQcdPHX zr@-U?C*s3WI&biS%~jaERTrSZ+<3L#G7&H}4rU`DWR(#}kdy9^#(aqy;;8y%%}g{# z>K?OYGNeR6P!@GJ#+b&lH=TKcUsj=(s?$tYk}fgTrQP`QanH#^eDuFTg*T;Vp>MPtEuIL_`?ErmWV_>Nytncl~R~C z)QFWqn3e?vNI{MhSB;j2@hc=MhRn8QV@ec3fNq}0Nka-rbWxCFD`P!ZuYb3*gBxl% zk$2>k8d6*a5VV&fk}@Y@e|jAj!U>cW1Yn#+QyUn4BtA0M~tWS^lyr!di-Eqjo zryN)E<3Wn^Pcl5QP+dpLFxaKFqzu*6-y>6r&EwmftTC-$FZ$e{-&yuG?m}mZ#QHM$r??p8Z4* zJmQX~#upFh^RLHf(w-I0&l!Fi;;OxWZwpnSUmH3$)EM)(aHJOwn$}T0`O{Q!Qp)P+ zx}`%VJEnPasr=E*w82s3i7WxFU}=Jbo01f?xy(!v?*Chaqo>m28ST%oZ??z%o$tsY z(ZXZ%Z`zuC4EOs(-Bb&2?y4;RuKW*43hy54ZHidEX>B#-N1YjAM9}DG_v&cD67D12 zV3Sh|Wjx$52|D|cfsV>z%6@%b?pKg{gTZr5`B$`Sx^gCs9zrJn-arwJi7F{YkxpX;s#H z{b9v$x9dijJd9^Hkk$lCV-O9X-uc&~61!L8HGaR0GOLpng{wBn`EWxSS>;Z5XOl!V$4APc}a9&Uoqx5=#jpOGJ91d>)cWa-qGqUU>zdlqZTPxwIJtJgYONv& ziVE!KpwW33=&>@YvkcWL_6n-lN>!q$YLpNGcBR_AzmvBjI6hGc6cMmr#rc5|FYFMCAGxah|Iu83HkS$8`rG`RoH)T)IE~$M z`Gr+Mjg(GM(`~4TG6K<-%R@|UrZ(8-s2Jam-CtWVfBes3N6qf@`RtHVC>{X1;2;Gt z?oU%$7xdE8eC-oGvMe$uq9F-tn#k!B3`rem< zmJ6bw!pmFxgF8V-#OEd&R12z(w-}$$kpA6$IjQdj;@+(bH+&TgYSuF%XK|G(NJVK9 zFr^s^nYp>D@lTWtxq>p?fw7wo<-5mv#ExPMBi^y!L<0&uTvoS%0*!50d2!cnWWN0f zk6s=282er`_ILLYBc=VPv%hd2S7IJ|8ooxR3XSn)M+-gQh4Rtp>8P*~ImN}}^4D9$ z0P(W_T8lBnKZtdoR{`+QGsV9tzIwH+;I0vnOl_Yl@3%IvizH|3l0S8hcfHbL%T48) z(oO%WH5i2z*p4$mCo;9nrCxphHv3+b0$MFXP|mq&rQmGY9A3TWWF2~Y{VZg+qoVMh zuOoNX;+g)D$DDWjsO%vX8~b)uA0=}+A$)o7oe?=$jP0(20F`=aU2ff?Kp$+6nuCDT zPGG+x+_4^Os$sEmEaZ+Cv|bXC%STF_o*kAUj+H3o+dp3H} zBV~bLH}E!x$lK-;;Fu$WEsPaU{-{+xb2xmnSG2Y)_MQ%2{uHh@dFS>H`WQC~0ShFrrq!d_Nt{pu*=jenlT)go?#H-A-@(7b_tsxw0lMwYi`fz^Q8|mw*?}iVK0ID>~hzl z#OW;8$c3p>$eK%$9yzjio~0=Mp9}I6tl9xaaIqS;$t-{v|L@fboG*O?k^yT%+EoN| z&WDEX=x#X0#hE=HvSLG=?7htWAc;J_p1 zq11TYkJp%44o*!PW31wiS8s8{cRBy#govYU{B<`Gm>sAg2$)bJPL?DBtWdA&D+&du zD9;%Iy;Mg_#^xFe6Q*(PXCCdhT{JqNky33h4MDQBw5(W_4mgVBu36`d1+e$s2VtIT z6yV%PDLB|d)_`>|$cQt7m8im@xCpd3WZ1hEwkRzMr6}x9>Dkd_h`QZ8T^T!3IF*{R zw~a1pF-?0`qC?B+ehZ}klBy!CMMBYO86t8v8I}o9r8EjCdx$Y0h=dgmFAf{r8KF@V zIi(Gag7{?Emzh{4lJ7=tgC}OLsXDMN-86bg!O5y&OA1P7VtAD*z zu;r$kQjz0|qM%V-h6BJN1Pj_^MQ|_6 z9K#wlI`%o+4kGK(;9n2lW`3e)aRubCM(Ae-<%t7p9A|2_;O zt+6n9i|I-fL$g32rEd$#6N#lWR>uYvdLVq0gvOpTiRAsiW{;zJ{ymGlgoZTJ``Dg_ z&LLJfrT*lbyQ;8aqRWRE(+UaRxYRxaHzoY{!8G(BfAgYOrSf}G`dWAQ*nhY!StVms zgZ<*)pq>o7*_%tV^q&*>;^ZA)LBM+#Ke@H>WELOw_kaD3Ul$6p`mgY&wv}rkecsSo zR@kWNshTm6OGNR7Q<2VgycybT>D9XJ+7nYb(WcyfohpE0O(v5}6JkvuXc`-6LmC7F z7}zA*3HBRqukE1L-)Hsz?|N}(7XGJWu>6^O-%sKB&uQhg`uo_=2InRZZv(;|@I4xT zbl!PA8dq?kH-YWw_dxDJ@4>O<7@M%%;ymU;>$}puGuEMbvUl#l4}cP29dNNmwbkz4 z?%Q{4bt}4T<7O#C=Ium_{3%AhA&HW_?zBh4U|uZr5Q&5nRfWC2D$J!C=!slC@TD>c z91rUZ1tC#aFe}Oh9OI3v*^`%L(Cg_tS|N7djxA>`Nv{xq-gPlCtN4Qc2pQo&iXP{G zGC_Bv!Qb8lUm(ieN|pJ{RiIizRpQt6f`N^FcOF-=@_RZw4Ejn%d5k;JTkkWX@3h-oB1zn9Wsuj zj_?$O15;imD)0ya_Jg%I5UCtwB{y+`rA6;N>fCRkek~rcn6;S|jy19vwK!LO$M3Ir z(a_FY-gi8onX$v(aJ`-M4Fz8u_Y1)wk{x*gy1rou|Gpz9$hfut+@<@S;Hn;4V>@+d zhMgLwPX2%|v&ffO(pyzk0jjE@KuH$ZgcPwLn?%Bkt1_<5+^Vx;+=*DJxo3{B6saQz zMip^N>(08|UGQ;0?AgR{#7@HKtev@Orase-vmqU+Ts-eesu$(0^}`aE z9P$VTDk@AO*<^XW;n{jV)lM9+!|ORMgDFX2GQu9kv{wbH~!R&eYp5 zgAS8jJ)imfICt#B@Ris_)7|an{Oz3~tvF9@zKx%s>%?s8BhAXw)p0^u2yNCYq~ zK7~QhfAT37!}d!0X~#o!+xk*0eVM$H?@_^Bt5kXcKsBt$7bI+1hEsBvry3N|8aR^m zwwk}8gVniuX$SzT%~<*+xK5%Mv_%+I*3GC*<_|tM%`s!0>J_jjc}nStiZ}n>_oAp4y>Q<{btqe?*#X~|H|;+>Q9f}%U?`( z`kt2v@;yyGI!UTKQ}!fpg?yR!IjhUfdX*Wg`#3srmGT_FdpE(s8*y>GEV~%4^ighcVjfXc*bkh(qMmDWxtVo@9z9PA4gPGRzzLgb2v6qJUXRDE2GCD7b zq-%XEeNulbu{U)t3l2^`)p)K>&q~`QFjAb9s~$2~$&r)OG+>FWOwo~eDVqy6fi?t5 z3NT}KRkN<)(R*^cNpew zwP9Hf*__(2GcViHAPzU+spiKsMjVojEr0)=BE@wy{>CKpqyH3%HR!#oLj;mzO?Zz} zr^{Ua=bK1slWL~4(m`8qxx7r10#H0v`PV;9|EyMwO!_qCC}PPzn1xs@wzRcpJQir;;vR>J%j z9IhiAY9+4MkD`x!WBj^UY|!w}=Xu2cX?&vyrFfFhifBzFBj)gbdYLRL!3+A7x;RaZ zY|&cE21kgNqf&fHHBgQ>$i}def_^#K31(VMmf??-QYzFS3_3$^lVJ4Ph=1C*BIq$Y}b93Wdb2W++nuFb#m7#gq@;Ef& zrMZ`-Ael+aoeSSDOF^Dn@~nwpsxveFxd^pb=<

  • kmgzw$`2ghbNb#> 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%0AS(>Kg);9SYey9S4s_JvnH&tS}N@W4xqSe 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 cAA%^4FnU=h2=+MDrjVsgB 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≪|PAv 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%0A|g}fI+|2Y=+ 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