ICU-22745 Merge ICU 75 maintenance branch to main (#2972)

This commit is contained in:
Shane F. Carr 2024-04-18 15:04:33 -07:00 committed by GitHub
commit 5e35ffc87e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
1418 changed files with 5453 additions and 5239 deletions

View file

@ -381,7 +381,7 @@ jobs:
#-------------------------------------------------------------------------
- job: ICU4C_MSVC_x64_Debug
displayName: 'C: MSVC x64 Debug (VS 2022)'
timeoutInMinutes: 35
timeoutInMinutes: 60
pool:
vmImage: 'windows-2022'
demands:
@ -487,7 +487,7 @@ jobs:
#-------------------------------------------------------------------------
- job: ICU4C_MSVC_x86_Debug_VS2019
displayName: 'C: MSVC 32-bit Debug (VS 2019)'
timeoutInMinutes: 60
timeoutInMinutes: 90
pool:
vmImage: 'windows-2019'
demands:

File diff suppressed because it is too large Load diff

View file

@ -156,223 +156,223 @@ Added in ICU 75
|---|---|---|---|
| calendar.h | <tt>#define</tt> DECLARE_OVERRIDE_SYSTEM_DEFAULT_CENTURY | (missing) | Internal
| caniter.h | <tt>static</tt> void icu::CanonicalIterator::permute(UnicodeString&amp;, bool, Hashtable*, UErrorCode&amp;, int32_t depth=) | (missing) | Internal
| messageformat2_arguments.h | MessageArguments&amp; icu::message2::MessageArguments::operator=(MessageArguments&amp;&amp;) | (missing) | InternalICU 75.0
| messageformat2_arguments.h | icu::message2::MessageArguments::MessageArguments()=default | (missing) | InternalICU 75.0
| messageformat2_arguments.h | icu::message2::MessageArguments::MessageArguments(const std::map&lt;, Formattable &gt;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_arguments.h | icu::message2::MessageArguments::~MessageArguments() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder &amp; icu::message2::data_model::Markup::Builder::setClose() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder &amp; icu::message2::data_model::Markup::Builder::setOpen() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder &amp; icu::message2::data_model::Markup::Builder::setStandalone() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder&amp; icu::message2::MFDataModel::Builder::addBinding(Binding&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder&amp; icu::message2::MFDataModel::Builder::addSelector(Expression&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder&amp; icu::message2::MFDataModel::Builder::addUnsupportedStatement(UnsupportedStatement&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder&amp; icu::message2::MFDataModel::Builder::addVariant(SelectorKeys&amp;&amp;, Pattern&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder&amp; icu::message2::MFDataModel::Builder::setPattern(Pattern&amp;&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Expression::Builder::addAttribute(const UnicodeString&amp;, Operand&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Expression::Builder::setOperand(Operand&amp;&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Expression::Builder::setOperator(Operator&amp;&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Markup::Builder::addAttribute(const UnicodeString&amp;, Operand&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Markup::Builder::addOption(const UnicodeString&amp;, Operand&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Markup::Builder::setName(const UnicodeString&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Operator::Builder::addOption(const UnicodeString&amp;, Operand&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Operator::Builder::setFunctionName(FunctionName&amp;&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Operator::Builder::setReserved(Reserved&amp;&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Pattern::Builder::add(Expression&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Pattern::Builder::add(Markup&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Pattern::Builder::add(UnicodeString&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Reserved::Builder::add(Literal&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::SelectorKeys::Builder::add(Key&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::UnsupportedStatement::Builder::addExpression(Expression&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::UnsupportedStatement::Builder::setBody(Reserved&amp;&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::UnsupportedStatement::Builder::setKeyword(const UnicodeString&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Expression icu::message2::data_model::Expression::Builder::build(UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Expression&amp; icu::message2::data_model::Expression::operator=(Expression) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Literal&amp; icu::message2::data_model::Literal::operator=(Literal) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | MFDataModel icu::message2::MFDataModel::Builder::build(UErrorCode&amp;) const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Markup icu::message2::data_model::Markup::Builder::build(UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Operator icu::message2::data_model::Operator::Builder::build(UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Option&amp; icu::message2::data_model::Option::operator=(Option) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Pattern icu::message2::data_model::Pattern::Builder::build(UErrorCode&amp;) const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | PatternPart&amp; icu::message2::data_model::PatternPart::operator=(PatternPart) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Reserved icu::message2::data_model::Reserved::Builder::build(UErrorCode&amp;) const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | Reserved&amp; icu::message2::data_model::Reserved::operator=(Reserved) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | SelectorKeys icu::message2::data_model::SelectorKeys::Builder::build(UErrorCode&amp;) const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | UnicodeString icu::message2::data_model::Literal::quoted() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | UnsupportedStatement icu::message2::data_model::UnsupportedStatement::Builder::build(UErrorCode&amp;) const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | UnsupportedStatement&amp; icu::message2::data_model::UnsupportedStatement::operator=(UnsupportedStatement) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | bool icu::message2::data_model::Expression::isFunctionCall() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | bool icu::message2::data_model::Expression::isReserved() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | bool icu::message2::data_model::Expression::isStandaloneAnnotation() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | bool icu::message2::data_model::Literal::isQuoted() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | bool icu::message2::data_model::Literal::operator&lt;(const Literal&amp;) const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | bool icu::message2::data_model::Literal::operator==(const Literal&amp;) const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | bool icu::message2::data_model::Markup::isClose() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | bool icu::message2::data_model::Markup::isOpen() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | bool icu::message2::data_model::Markup::isStandalone() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | bool icu::message2::data_model::PatternPart::isExpression() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | bool icu::message2::data_model::PatternPart::isMarkup() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | bool icu::message2::data_model::PatternPart::isText() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | const Expression &amp; icu::message2::data_model::PatternPart::contents() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | const Literal&amp; icu::message2::data_model::Reserved::getPart(int32_t) const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | const Markup &amp; icu::message2::data_model::PatternPart::asMarkup() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | const Operand &amp; icu::message2::data_model::Expression::getOperand() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | const Operand &amp; icu::message2::data_model::Option::getValue() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | const Operator* icu::message2::data_model::Expression::getOperator(UErrorCode&amp;) const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | const Reserved* icu::message2::data_model::UnsupportedStatement::getBody(UErrorCode&amp;) const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | const UnicodeString &amp; icu::message2::data_model::Literal::unquoted() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | const UnicodeString &amp; icu::message2::data_model::Markup::getName() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | const UnicodeString &amp; icu::message2::data_model::Option::getName() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | const UnicodeString &amp; icu::message2::data_model::PatternPart::asText() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | const UnicodeString &amp; icu::message2::data_model::UnsupportedStatement::getKeyword() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::MFDataModel::Builder::Builder(UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::MFDataModel::Builder::~Builder() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Expression::Builder::Builder(UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Expression::Builder::~Builder() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Expression::Expression() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Expression::Expression(const Expression&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Expression::~Expression() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Literal::Literal()=default | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Literal::Literal(bool, const UnicodeString&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Literal::Literal(const Literal&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Literal::~Literal() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Markup::Builder::Builder(UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Markup::Builder::~Builder() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Markup::Markup() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Markup::~Markup() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Operator::Builder::Builder(UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Operator::Builder::~Builder() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Option::Option() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Option::Option(const Option&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Option::Option(const UnicodeString&amp;, Operand&amp;&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Option::~Option() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Pattern::Builder::Builder(UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Pattern::Builder::~Builder() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::PatternPart::PatternPart()=default | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::PatternPart::PatternPart(Expression&amp;&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::PatternPart::PatternPart(Markup&amp;&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::PatternPart::PatternPart(const PatternPart&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::PatternPart::PatternPart(const UnicodeString&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::PatternPart::~PatternPart() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Reserved::Builder::Builder(UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Reserved::Builder::~Builder() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Reserved::Reserved() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Reserved::Reserved(const Reserved&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::Reserved::~Reserved() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::SelectorKeys::Builder::Builder(UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::SelectorKeys::Builder::~Builder() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::UnsupportedStatement::Builder::Builder(UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::UnsupportedStatement::Builder::~Builder() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::UnsupportedStatement::UnsupportedStatement() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::UnsupportedStatement::UnsupportedStatement(const UnsupportedStatement&amp;) | (missing) | InternalICU 75.0
| messageformat2_data_model.h | icu::message2::data_model::UnsupportedStatement::~UnsupportedStatement() | (missing) | InternalICU 75.0
| messageformat2_data_model.h | int32_t icu::message2::data_model::Reserved::numParts() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | std::vector&lt; Expression &gt; icu::message2::data_model::UnsupportedStatement::getExpressions() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | std::vector&lt; Option &gt; icu::message2::data_model::Expression::getAttributes() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | std::vector&lt; Option &gt; icu::message2::data_model::Markup::getAttributes() const | (missing) | InternalICU 75.0
| messageformat2_data_model.h | std::vector&lt; Option &gt; icu::message2::data_model::Markup::getOptions() const | (missing) | InternalICU 75.0
| messageformat2_arguments.h | MessageArguments&amp; icu::message2::MessageArguments::operator=(MessageArguments&amp;&amp;) | (missing) | InternalICU 75
| messageformat2_arguments.h | icu::message2::MessageArguments::MessageArguments()=default | (missing) | InternalICU 75
| messageformat2_arguments.h | icu::message2::MessageArguments::MessageArguments(const std::map&lt;, Formattable &gt;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_arguments.h | icu::message2::MessageArguments::~MessageArguments() | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder &amp; icu::message2::data_model::Markup::Builder::setClose() | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder &amp; icu::message2::data_model::Markup::Builder::setOpen() | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder &amp; icu::message2::data_model::Markup::Builder::setStandalone() | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder&amp; icu::message2::MFDataModel::Builder::addBinding(Binding&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder&amp; icu::message2::MFDataModel::Builder::addSelector(Expression&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder&amp; icu::message2::MFDataModel::Builder::addUnsupportedStatement(UnsupportedStatement&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder&amp; icu::message2::MFDataModel::Builder::addVariant(SelectorKeys&amp;&amp;, Pattern&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder&amp; icu::message2::MFDataModel::Builder::setPattern(Pattern&amp;&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Expression::Builder::addAttribute(const UnicodeString&amp;, Operand&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Expression::Builder::setOperand(Operand&amp;&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Expression::Builder::setOperator(Operator&amp;&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Markup::Builder::addAttribute(const UnicodeString&amp;, Operand&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Markup::Builder::addOption(const UnicodeString&amp;, Operand&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Markup::Builder::setName(const UnicodeString&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Operator::Builder::addOption(const UnicodeString&amp;, Operand&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Operator::Builder::setFunctionName(FunctionName&amp;&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Operator::Builder::setReserved(Reserved&amp;&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Pattern::Builder::add(Expression&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Pattern::Builder::add(Markup&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Pattern::Builder::add(UnicodeString&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::Reserved::Builder::add(Literal&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::SelectorKeys::Builder::add(Key&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::UnsupportedStatement::Builder::addExpression(Expression&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::UnsupportedStatement::Builder::setBody(Reserved&amp;&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Builder&amp; icu::message2::data_model::UnsupportedStatement::Builder::setKeyword(const UnicodeString&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Expression icu::message2::data_model::Expression::Builder::build(UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Expression&amp; icu::message2::data_model::Expression::operator=(Expression) | (missing) | InternalICU 75
| messageformat2_data_model.h | Literal&amp; icu::message2::data_model::Literal::operator=(Literal) | (missing) | InternalICU 75
| messageformat2_data_model.h | MFDataModel icu::message2::MFDataModel::Builder::build(UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_data_model.h | Markup icu::message2::data_model::Markup::Builder::build(UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Operator icu::message2::data_model::Operator::Builder::build(UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | Option&amp; icu::message2::data_model::Option::operator=(Option) | (missing) | InternalICU 75
| messageformat2_data_model.h | Pattern icu::message2::data_model::Pattern::Builder::build(UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_data_model.h | PatternPart&amp; icu::message2::data_model::PatternPart::operator=(PatternPart) | (missing) | InternalICU 75
| messageformat2_data_model.h | Reserved icu::message2::data_model::Reserved::Builder::build(UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_data_model.h | Reserved&amp; icu::message2::data_model::Reserved::operator=(Reserved) | (missing) | InternalICU 75
| messageformat2_data_model.h | SelectorKeys icu::message2::data_model::SelectorKeys::Builder::build(UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_data_model.h | UnicodeString icu::message2::data_model::Literal::quoted() const | (missing) | InternalICU 75
| messageformat2_data_model.h | UnsupportedStatement icu::message2::data_model::UnsupportedStatement::Builder::build(UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_data_model.h | UnsupportedStatement&amp; icu::message2::data_model::UnsupportedStatement::operator=(UnsupportedStatement) | (missing) | InternalICU 75
| messageformat2_data_model.h | bool icu::message2::data_model::Expression::isFunctionCall() const | (missing) | InternalICU 75
| messageformat2_data_model.h | bool icu::message2::data_model::Expression::isReserved() const | (missing) | InternalICU 75
| messageformat2_data_model.h | bool icu::message2::data_model::Expression::isStandaloneAnnotation() const | (missing) | InternalICU 75
| messageformat2_data_model.h | bool icu::message2::data_model::Literal::isQuoted() const | (missing) | InternalICU 75
| messageformat2_data_model.h | bool icu::message2::data_model::Literal::operator&lt;(const Literal&amp;) const | (missing) | InternalICU 75
| messageformat2_data_model.h | bool icu::message2::data_model::Literal::operator==(const Literal&amp;) const | (missing) | InternalICU 75
| messageformat2_data_model.h | bool icu::message2::data_model::Markup::isClose() const | (missing) | InternalICU 75
| messageformat2_data_model.h | bool icu::message2::data_model::Markup::isOpen() const | (missing) | InternalICU 75
| messageformat2_data_model.h | bool icu::message2::data_model::Markup::isStandalone() const | (missing) | InternalICU 75
| messageformat2_data_model.h | bool icu::message2::data_model::PatternPart::isExpression() const | (missing) | InternalICU 75
| messageformat2_data_model.h | bool icu::message2::data_model::PatternPart::isMarkup() const | (missing) | InternalICU 75
| messageformat2_data_model.h | bool icu::message2::data_model::PatternPart::isText() const | (missing) | InternalICU 75
| messageformat2_data_model.h | const Expression &amp; icu::message2::data_model::PatternPart::contents() const | (missing) | InternalICU 75
| messageformat2_data_model.h | const Literal&amp; icu::message2::data_model::Reserved::getPart(int32_t) const | (missing) | InternalICU 75
| messageformat2_data_model.h | const Markup &amp; icu::message2::data_model::PatternPart::asMarkup() const | (missing) | InternalICU 75
| messageformat2_data_model.h | const Operand &amp; icu::message2::data_model::Expression::getOperand() const | (missing) | InternalICU 75
| messageformat2_data_model.h | const Operand &amp; icu::message2::data_model::Option::getValue() const | (missing) | InternalICU 75
| messageformat2_data_model.h | const Operator* icu::message2::data_model::Expression::getOperator(UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_data_model.h | const Reserved* icu::message2::data_model::UnsupportedStatement::getBody(UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_data_model.h | const UnicodeString &amp; icu::message2::data_model::Literal::unquoted() const | (missing) | InternalICU 75
| messageformat2_data_model.h | const UnicodeString &amp; icu::message2::data_model::Markup::getName() const | (missing) | InternalICU 75
| messageformat2_data_model.h | const UnicodeString &amp; icu::message2::data_model::Option::getName() const | (missing) | InternalICU 75
| messageformat2_data_model.h | const UnicodeString &amp; icu::message2::data_model::PatternPart::asText() const | (missing) | InternalICU 75
| messageformat2_data_model.h | const UnicodeString &amp; icu::message2::data_model::UnsupportedStatement::getKeyword() const | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::MFDataModel::Builder::Builder(UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::MFDataModel::Builder::~Builder() | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Expression::Builder::Builder(UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Expression::Builder::~Builder() | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Expression::Expression() | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Expression::Expression(const Expression&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Expression::~Expression() | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Literal::Literal()=default | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Literal::Literal(bool, const UnicodeString&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Literal::Literal(const Literal&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Literal::~Literal() | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Markup::Builder::Builder(UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Markup::Builder::~Builder() | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Markup::Markup() | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Markup::~Markup() | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Operator::Builder::Builder(UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Operator::Builder::~Builder() | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Option::Option() | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Option::Option(const Option&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Option::Option(const UnicodeString&amp;, Operand&amp;&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Option::~Option() | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Pattern::Builder::Builder(UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Pattern::Builder::~Builder() | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::PatternPart::PatternPart()=default | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::PatternPart::PatternPart(Expression&amp;&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::PatternPart::PatternPart(Markup&amp;&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::PatternPart::PatternPart(const PatternPart&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::PatternPart::PatternPart(const UnicodeString&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::PatternPart::~PatternPart() | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Reserved::Builder::Builder(UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Reserved::Builder::~Builder() | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Reserved::Reserved() | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Reserved::Reserved(const Reserved&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::Reserved::~Reserved() | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::SelectorKeys::Builder::Builder(UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::SelectorKeys::Builder::~Builder() | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::UnsupportedStatement::Builder::Builder(UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::UnsupportedStatement::Builder::~Builder() | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::UnsupportedStatement::UnsupportedStatement() | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::UnsupportedStatement::UnsupportedStatement(const UnsupportedStatement&amp;) | (missing) | InternalICU 75
| messageformat2_data_model.h | icu::message2::data_model::UnsupportedStatement::~UnsupportedStatement() | (missing) | InternalICU 75
| messageformat2_data_model.h | int32_t icu::message2::data_model::Reserved::numParts() const | (missing) | InternalICU 75
| messageformat2_data_model.h | std::vector&lt; Expression &gt; icu::message2::data_model::UnsupportedStatement::getExpressions() const | (missing) | InternalICU 75
| messageformat2_data_model.h | std::vector&lt; Option &gt; icu::message2::data_model::Expression::getAttributes() const | (missing) | InternalICU 75
| messageformat2_data_model.h | std::vector&lt; Option &gt; icu::message2::data_model::Markup::getAttributes() const | (missing) | InternalICU 75
| messageformat2_data_model.h | std::vector&lt; Option &gt; icu::message2::data_model::Markup::getOptions() const | (missing) | InternalICU 75
| messageformat2_formattable.h | Appendable&amp; icu::message2::FormattedMessage::appendTo(Appendable&amp;, UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_formattable.h | CharacterIterator* icu::message2::FormattedMessage::toCharacterIterator(UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_formattable.h | Formattable&amp; icu::message2::Formattable::operator=(Formattable) | (missing) | InternalICU 75.0
| messageformat2_formattable.h | FormattedPlaceholder&amp; icu::message2::FormattedPlaceholder::operator=(FormattedPlaceholder&amp;&amp;) | (missing) | InternalICU 75.0
| messageformat2_formattable.h | FormattedValue&amp; icu::message2::FormattedValue::operator=(FormattedValue&amp;&amp;) | (missing) | InternalICU 75.0
| messageformat2_formattable.h | FunctionOptions&amp; icu::message2::FunctionOptions::operator=(FunctionOptions&amp;&amp;) | (missing) | InternalICU 75.0
| messageformat2_formattable.h | FunctionOptions&amp; icu::message2::FunctionOptions::operator=(const FunctionOptions&amp;)=delete | (missing) | InternalICU 75.0
| messageformat2_formattable.h | FunctionOptionsMap icu::message2::FunctionOptions::getOptions() const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | Formattable&amp; icu::message2::Formattable::operator=(Formattable) | (missing) | InternalICU 75
| messageformat2_formattable.h | FormattedPlaceholder&amp; icu::message2::FormattedPlaceholder::operator=(FormattedPlaceholder&amp;&amp;) | (missing) | InternalICU 75
| messageformat2_formattable.h | FormattedValue&amp; icu::message2::FormattedValue::operator=(FormattedValue&amp;&amp;) | (missing) | InternalICU 75
| messageformat2_formattable.h | FunctionOptions&amp; icu::message2::FunctionOptions::operator=(FunctionOptions&amp;&amp;) | (missing) | InternalICU 75
| messageformat2_formattable.h | FunctionOptions&amp; icu::message2::FunctionOptions::operator=(const FunctionOptions&amp;)=delete | (missing) | InternalICU 75
| messageformat2_formattable.h | FunctionOptionsMap icu::message2::FunctionOptions::getOptions() const | (missing) | InternalICU 75
| messageformat2_formattable.h | StringPiece icu::message2::FormattedMessage::subSequence(int32_t, int32_t, UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_formattable.h | UDate icu::message2::Formattable::getDate(UErrorCode&amp;) const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | UFormattableType icu::message2::Formattable::getType() const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | UDate icu::message2::Formattable::getDate(UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_formattable.h | UFormattableType icu::message2::Formattable::getType() const | (missing) | InternalICU 75
| messageformat2_formattable.h | UnicodeString icu::message2::FormattedMessage::toString(UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_formattable.h | UnicodeString icu::message2::FormattedMessage::toTempString(UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_formattable.h | UnicodeString icu::message2::FormattedPlaceholder::formatToString(const Locale&amp;, UErrorCode&amp;) const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | bool icu::message2::Formattable::isNumeric() const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | UnicodeString icu::message2::FormattedPlaceholder::formatToString(const Locale&amp;, UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_formattable.h | bool icu::message2::Formattable::isNumeric() const | (missing) | InternalICU 75
| messageformat2_formattable.h | bool icu::message2::FormattedMessage::nextPosition(ConstrainedFieldPosition&amp;, UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_formattable.h | bool icu::message2::FormattedPlaceholder::canFormat() const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | bool icu::message2::FormattedPlaceholder::isEvaluated() const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | bool icu::message2::FormattedPlaceholder::isFallback() const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | bool icu::message2::FormattedPlaceholder::isNullOperand() const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | bool icu::message2::FormattedValue::isNumber() const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | bool icu::message2::FormattedValue::isString() const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | bool icu::message2::FormattedPlaceholder::canFormat() const | (missing) | InternalICU 75
| messageformat2_formattable.h | bool icu::message2::FormattedPlaceholder::isEvaluated() const | (missing) | InternalICU 75
| messageformat2_formattable.h | bool icu::message2::FormattedPlaceholder::isFallback() const | (missing) | InternalICU 75
| messageformat2_formattable.h | bool icu::message2::FormattedPlaceholder::isNullOperand() const | (missing) | InternalICU 75
| messageformat2_formattable.h | bool icu::message2::FormattedValue::isNumber() const | (missing) | InternalICU 75
| messageformat2_formattable.h | bool icu::message2::FormattedValue::isString() const | (missing) | InternalICU 75
| messageformat2_formattable.h | char16_t icu::message2::FormattedMessage::charAt(int32_t, UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_formattable.h | const Formattable* icu::message2::Formattable::getArray(int32_t&amp;, UErrorCode&amp;) const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | const FormattableObject* icu::message2::Formattable::getObject(UErrorCode&amp;) const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | const FormattedValue &amp; icu::message2::FormattedPlaceholder::output() const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | const FunctionOptions &amp; icu::message2::FormattedPlaceholder::options() const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | const UnicodeString &amp; icu::message2::FormattableObject::tag() const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | const UnicodeString &amp; icu::message2::FormattedPlaceholder::getFallback() const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | const UnicodeString &amp; icu::message2::FormattedValue::getString() const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | const UnicodeString&amp; icu::message2::Formattable::getString(UErrorCode&amp;) const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | const message2::Formattable &amp; icu::message2::FormattedPlaceholder::asFormattable() const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | const number::FormattedNumber &amp; icu::message2::FormattedValue::getNumber() const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | double icu::message2::Formattable::getDouble(UErrorCode&amp;) const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::Formattable icu::message2::Formattable::asICUFormattable(UErrorCode&amp;) const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::message2::Formattable::Formattable() | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::message2::Formattable::Formattable(const Formattable&amp;) | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::message2::Formattable::Formattable(const Formattable*, int32_t) | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::message2::Formattable::Formattable(const FormattableObject*) | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::message2::Formattable::Formattable(const UnicodeString&amp;) | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::message2::Formattable::Formattable(double) | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::message2::Formattable::Formattable(int64_t) | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::message2::Formattable::~Formattable() | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::message2::FormattableObject::~FormattableObject() | (missing) | InternalICU 75.0
| messageformat2_formattable.h | const Formattable* icu::message2::Formattable::getArray(int32_t&amp;, UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_formattable.h | const FormattableObject* icu::message2::Formattable::getObject(UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_formattable.h | const FormattedValue &amp; icu::message2::FormattedPlaceholder::output() const | (missing) | InternalICU 75
| messageformat2_formattable.h | const FunctionOptions &amp; icu::message2::FormattedPlaceholder::options() const | (missing) | InternalICU 75
| messageformat2_formattable.h | const UnicodeString &amp; icu::message2::FormattableObject::tag() const | (missing) | InternalICU 75
| messageformat2_formattable.h | const UnicodeString &amp; icu::message2::FormattedPlaceholder::getFallback() const | (missing) | InternalICU 75
| messageformat2_formattable.h | const UnicodeString &amp; icu::message2::FormattedValue::getString() const | (missing) | InternalICU 75
| messageformat2_formattable.h | const UnicodeString&amp; icu::message2::Formattable::getString(UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_formattable.h | const message2::Formattable &amp; icu::message2::FormattedPlaceholder::asFormattable() const | (missing) | InternalICU 75
| messageformat2_formattable.h | const number::FormattedNumber &amp; icu::message2::FormattedValue::getNumber() const | (missing) | InternalICU 75
| messageformat2_formattable.h | double icu::message2::Formattable::getDouble(UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::Formattable icu::message2::Formattable::asICUFormattable(UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::Formattable::Formattable() | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::Formattable::Formattable(const Formattable&amp;) | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::Formattable::Formattable(const Formattable*, int32_t) | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::Formattable::Formattable(const FormattableObject*) | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::Formattable::Formattable(const UnicodeString&amp;) | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::Formattable::Formattable(double) | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::Formattable::Formattable(int64_t) | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::Formattable::~Formattable() | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::FormattableObject::~FormattableObject() | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::FormattedMessage::FormattedMessage(UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::FormattedMessage::~FormattedMessage() | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::FormattedPlaceholder::FormattedPlaceholder() | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::message2::FormattedPlaceholder::FormattedPlaceholder(FormattedPlaceholder&amp;&amp;) | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::message2::FormattedPlaceholder::FormattedPlaceholder(const Formattable&amp;, const UnicodeString&amp;) | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::message2::FormattedPlaceholder::FormattedPlaceholder(const FormattedPlaceholder&amp;, FormattedValue&amp;&amp;) | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::message2::FormattedPlaceholder::FormattedPlaceholder(const FormattedPlaceholder&amp;, FunctionOptions&amp;&amp;, FormattedValue&amp;&amp;) | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::message2::FormattedPlaceholder::FormattedPlaceholder(const UnicodeString&amp;) | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::message2::FormattedValue::FormattedValue() | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::message2::FormattedValue::FormattedValue(FormattedValue&amp;&amp;) | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::message2::FormattedValue::FormattedValue(const UnicodeString&amp;) | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::message2::FormattedValue::FormattedValue(number::FormattedNumber&amp;&amp;) | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::message2::FormattedValue::~FormattedValue() | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::message2::FunctionOptions::FunctionOptions() | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::message2::FunctionOptions::FunctionOptions(FunctionOptions&amp;&amp;) | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::message2::FunctionOptions::~FunctionOptions() | (missing) | InternalICU 75.0
| messageformat2_formattable.h | int32_t icu::message2::Formattable::getLong(UErrorCode&amp;) const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | icu::message2::FormattedPlaceholder::FormattedPlaceholder() | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::FormattedPlaceholder::FormattedPlaceholder(FormattedPlaceholder&amp;&amp;) | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::FormattedPlaceholder::FormattedPlaceholder(const Formattable&amp;, const UnicodeString&amp;) | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::FormattedPlaceholder::FormattedPlaceholder(const FormattedPlaceholder&amp;, FormattedValue&amp;&amp;) | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::FormattedPlaceholder::FormattedPlaceholder(const FormattedPlaceholder&amp;, FunctionOptions&amp;&amp;, FormattedValue&amp;&amp;) | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::FormattedPlaceholder::FormattedPlaceholder(const UnicodeString&amp;) | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::FormattedValue::FormattedValue() | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::FormattedValue::FormattedValue(FormattedValue&amp;&amp;) | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::FormattedValue::FormattedValue(const UnicodeString&amp;) | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::FormattedValue::FormattedValue(number::FormattedNumber&amp;&amp;) | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::FormattedValue::~FormattedValue() | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::FunctionOptions::FunctionOptions() | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::FunctionOptions::FunctionOptions(FunctionOptions&amp;&amp;) | (missing) | InternalICU 75
| messageformat2_formattable.h | icu::message2::FunctionOptions::~FunctionOptions() | (missing) | InternalICU 75
| messageformat2_formattable.h | int32_t icu::message2::Formattable::getLong(UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_formattable.h | int32_t icu::message2::FormattedMessage::length(UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_formattable.h | int64_t icu::message2::Formattable::getInt64(UErrorCode&amp;) const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | int64_t icu::message2::Formattable::getInt64Value(UErrorCode&amp;) const | (missing) | InternalICU 75.0
| messageformat2_formattable.h | <tt>static</tt> Formattable icu::message2::Formattable::forDate(UDate) | (missing) | InternalICU 75.0
| messageformat2_formattable.h | <tt>static</tt> Formattable icu::message2::Formattable::forDecimal(std::string_view, UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_function_registry.h | Builder&amp; icu::message2::MFFunctionRegistry::Builder::adoptFormatter(const data_model::FunctionName&amp;, FormatterFactory*, UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_function_registry.h | Builder&amp; icu::message2::MFFunctionRegistry::Builder::adoptSelector(const data_model::FunctionName&amp;, SelectorFactory*, UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_function_registry.h | Builder&amp; icu::message2::MFFunctionRegistry::Builder::setDefaultFormatterNameByType(const UnicodeString&amp;, const data_model::FunctionName&amp;, UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_function_registry.h | FormattedPlaceholder icu::message2::Formatter::format(FormattedPlaceholder&amp;&amp;, FunctionOptions&amp;&amp;, UErrorCode&amp;) const | (missing) | InternalICU 75.0
| messageformat2_function_registry.h | Formatter* icu::message2::FormatterFactory::createFormatter(const Locale&amp;, UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_function_registry.h | FormatterFactory&amp; icu::message2::FormatterFactory::operator=(const FormatterFactory&amp;)=delete | (missing) | InternalICU 75.0
| messageformat2_function_registry.h | FormatterFactory* icu::message2::MFFunctionRegistry::getFormatter(const FunctionName&amp;) const | (missing) | InternalICU 75.0
| messageformat2_function_registry.h | MFFunctionRegistry icu::message2::MFFunctionRegistry::Builder::build() | (missing) | InternalICU 75.0
| messageformat2_function_registry.h | MFFunctionRegistry&amp; icu::message2::MFFunctionRegistry::operator=(MFFunctionRegistry&amp;&amp;) | (missing) | InternalICU 75.0
| messageformat2_function_registry.h | Selector* icu::message2::SelectorFactory::createSelector(const Locale&amp;, UErrorCode&amp;) const | (missing) | InternalICU 75.0
| messageformat2_function_registry.h | SelectorFactory&amp; icu::message2::SelectorFactory::operator=(const SelectorFactory&amp;)=delete | (missing) | InternalICU 75.0
| messageformat2_function_registry.h | bool icu::message2::MFFunctionRegistry::getDefaultFormatterNameByType(const UnicodeString&amp;, FunctionName&amp;) const | (missing) | InternalICU 75.0
| messageformat2_function_registry.h | const SelectorFactory* icu::message2::MFFunctionRegistry::getSelector(const FunctionName&amp;) const | (missing) | InternalICU 75.0
| messageformat2_function_registry.h | icu::message2::Formatter::~Formatter() | (missing) | InternalICU 75.0
| messageformat2_function_registry.h | icu::message2::FormatterFactory::~FormatterFactory() | (missing) | InternalICU 75.0
| messageformat2_function_registry.h | icu::message2::MFFunctionRegistry::Builder::Builder(UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2_function_registry.h | icu::message2::MFFunctionRegistry::Builder::~Builder() | (missing) | InternalICU 75.0
| messageformat2_function_registry.h | icu::message2::MFFunctionRegistry::MFFunctionRegistry(MFFunctionRegistry&amp;&amp;) | (missing) | InternalICU 75.0
| messageformat2_function_registry.h | icu::message2::MFFunctionRegistry::~MFFunctionRegistry() | (missing) | InternalICU 75.0
| messageformat2_function_registry.h | icu::message2::Selector::~Selector() | (missing) | InternalICU 75.0
| messageformat2_function_registry.h | icu::message2::SelectorFactory::~SelectorFactory() | (missing) | InternalICU 75.0
| messageformat2_function_registry.h | void icu::message2::Selector::selectKey(FormattedPlaceholder&amp;&amp;, FunctionOptions&amp;&amp;, const UnicodeString*, int32_t, UnicodeString*, int32_t&amp;, UErrorCode&amp;) const | (missing) | InternalICU 75.0
| messageformat2.h | Builder&amp; icu::message2::MessageFormatter::Builder::setDataModel(MFDataModel&amp;&amp;) | (missing) | InternalICU 75.0
| messageformat2.h | Builder&amp; icu::message2::MessageFormatter::Builder::setFunctionRegistry(const MFFunctionRegistry&amp;) | (missing) | InternalICU 75.0
| messageformat2.h | Builder&amp; icu::message2::MessageFormatter::Builder::setLocale(const Locale&amp;) | (missing) | InternalICU 75.0
| messageformat2.h | Builder&amp; icu::message2::MessageFormatter::Builder::setPattern(const UnicodeString&amp;, UParseError&amp;, UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2.h | FormattedMessage icu::message2::MessageFormatter::format(const MessageArguments&amp;, UErrorCode&amp;) const | (missing) | InternalICU 75.0
| messageformat2.h | MessageFormatter icu::message2::MessageFormatter::Builder::build(UErrorCode&amp;) const | (missing) | InternalICU 75.0
| messageformat2.h | MessageFormatter&amp; icu::message2::MessageFormatter::operator=(MessageFormatter&amp;&amp;) | (missing) | InternalICU 75.0
| messageformat2.h | UnicodeString icu::message2::MessageFormatter::formatToString(const MessageArguments&amp;, UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2.h | UnicodeString icu::message2::MessageFormatter::getPattern() const | (missing) | InternalICU 75.0
| messageformat2.h | const Locale &amp; icu::message2::MessageFormatter::getLocale() const | (missing) | InternalICU 75.0
| messageformat2.h | const MFDataModel &amp; icu::message2::MessageFormatter::getDataModel() const | (missing) | InternalICU 75.0
| messageformat2.h | const UnicodeString &amp; icu::message2::MessageFormatter::getNormalizedPattern() const | (missing) | InternalICU 75.0
| messageformat2.h | icu::message2::MessageFormatter::Builder::Builder(UErrorCode&amp;) | (missing) | InternalICU 75.0
| messageformat2.h | icu::message2::MessageFormatter::Builder::~Builder() | (missing) | InternalICU 75.0
| messageformat2.h | icu::message2::MessageFormatter::~MessageFormatter() | (missing) | InternalICU 75.0
| messageformat2_formattable.h | int64_t icu::message2::Formattable::getInt64(UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_formattable.h | int64_t icu::message2::Formattable::getInt64Value(UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_formattable.h | <tt>static</tt> Formattable icu::message2::Formattable::forDate(UDate) | (missing) | InternalICU 75
| messageformat2_formattable.h | <tt>static</tt> Formattable icu::message2::Formattable::forDecimal(std::string_view, UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_function_registry.h | Builder&amp; icu::message2::MFFunctionRegistry::Builder::adoptFormatter(const data_model::FunctionName&amp;, FormatterFactory*, UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_function_registry.h | Builder&amp; icu::message2::MFFunctionRegistry::Builder::adoptSelector(const data_model::FunctionName&amp;, SelectorFactory*, UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_function_registry.h | Builder&amp; icu::message2::MFFunctionRegistry::Builder::setDefaultFormatterNameByType(const UnicodeString&amp;, const data_model::FunctionName&amp;, UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_function_registry.h | FormattedPlaceholder icu::message2::Formatter::format(FormattedPlaceholder&amp;&amp;, FunctionOptions&amp;&amp;, UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_function_registry.h | Formatter* icu::message2::FormatterFactory::createFormatter(const Locale&amp;, UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_function_registry.h | FormatterFactory&amp; icu::message2::FormatterFactory::operator=(const FormatterFactory&amp;)=delete | (missing) | InternalICU 75
| messageformat2_function_registry.h | FormatterFactory* icu::message2::MFFunctionRegistry::getFormatter(const FunctionName&amp;) const | (missing) | InternalICU 75
| messageformat2_function_registry.h | MFFunctionRegistry icu::message2::MFFunctionRegistry::Builder::build() | (missing) | InternalICU 75
| messageformat2_function_registry.h | MFFunctionRegistry&amp; icu::message2::MFFunctionRegistry::operator=(MFFunctionRegistry&amp;&amp;) | (missing) | InternalICU 75
| messageformat2_function_registry.h | Selector* icu::message2::SelectorFactory::createSelector(const Locale&amp;, UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2_function_registry.h | SelectorFactory&amp; icu::message2::SelectorFactory::operator=(const SelectorFactory&amp;)=delete | (missing) | InternalICU 75
| messageformat2_function_registry.h | bool icu::message2::MFFunctionRegistry::getDefaultFormatterNameByType(const UnicodeString&amp;, FunctionName&amp;) const | (missing) | InternalICU 75
| messageformat2_function_registry.h | const SelectorFactory* icu::message2::MFFunctionRegistry::getSelector(const FunctionName&amp;) const | (missing) | InternalICU 75
| messageformat2_function_registry.h | icu::message2::Formatter::~Formatter() | (missing) | InternalICU 75
| messageformat2_function_registry.h | icu::message2::FormatterFactory::~FormatterFactory() | (missing) | InternalICU 75
| messageformat2_function_registry.h | icu::message2::MFFunctionRegistry::Builder::Builder(UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2_function_registry.h | icu::message2::MFFunctionRegistry::Builder::~Builder() | (missing) | InternalICU 75
| messageformat2_function_registry.h | icu::message2::MFFunctionRegistry::MFFunctionRegistry(MFFunctionRegistry&amp;&amp;) | (missing) | InternalICU 75
| messageformat2_function_registry.h | icu::message2::MFFunctionRegistry::~MFFunctionRegistry() | (missing) | InternalICU 75
| messageformat2_function_registry.h | icu::message2::Selector::~Selector() | (missing) | InternalICU 75
| messageformat2_function_registry.h | icu::message2::SelectorFactory::~SelectorFactory() | (missing) | InternalICU 75
| messageformat2_function_registry.h | void icu::message2::Selector::selectKey(FormattedPlaceholder&amp;&amp;, FunctionOptions&amp;&amp;, const UnicodeString*, int32_t, UnicodeString*, int32_t&amp;, UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2.h | Builder&amp; icu::message2::MessageFormatter::Builder::setDataModel(MFDataModel&amp;&amp;) | (missing) | InternalICU 75
| messageformat2.h | Builder&amp; icu::message2::MessageFormatter::Builder::setFunctionRegistry(const MFFunctionRegistry&amp;) | (missing) | InternalICU 75
| messageformat2.h | Builder&amp; icu::message2::MessageFormatter::Builder::setLocale(const Locale&amp;) | (missing) | InternalICU 75
| messageformat2.h | Builder&amp; icu::message2::MessageFormatter::Builder::setPattern(const UnicodeString&amp;, UParseError&amp;, UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2.h | FormattedMessage icu::message2::MessageFormatter::format(const MessageArguments&amp;, UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2.h | MessageFormatter icu::message2::MessageFormatter::Builder::build(UErrorCode&amp;) const | (missing) | InternalICU 75
| messageformat2.h | MessageFormatter&amp; icu::message2::MessageFormatter::operator=(MessageFormatter&amp;&amp;) | (missing) | InternalICU 75
| messageformat2.h | UnicodeString icu::message2::MessageFormatter::formatToString(const MessageArguments&amp;, UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2.h | UnicodeString icu::message2::MessageFormatter::getPattern() const | (missing) | InternalICU 75
| messageformat2.h | const Locale &amp; icu::message2::MessageFormatter::getLocale() const | (missing) | InternalICU 75
| messageformat2.h | const MFDataModel &amp; icu::message2::MessageFormatter::getDataModel() const | (missing) | InternalICU 75
| messageformat2.h | const UnicodeString &amp; icu::message2::MessageFormatter::getNormalizedPattern() const | (missing) | InternalICU 75
| messageformat2.h | icu::message2::MessageFormatter::Builder::Builder(UErrorCode&amp;) | (missing) | InternalICU 75
| messageformat2.h | icu::message2::MessageFormatter::Builder::~Builder() | (missing) | InternalICU 75
| messageformat2.h | icu::message2::MessageFormatter::~MessageFormatter() | (missing) | InternalICU 75
| numberformatter.h | UnlocalizedNumberFormatter icu::number::LocalizedNumberFormatter::withoutLocale() &amp;&amp; | (missing) | DraftICU 75
| numberformatter.h | UnlocalizedNumberFormatter icu::number::LocalizedNumberFormatter::withoutLocale() const &amp; | (missing) | DraftICU 75
| numberrangeformatter.h | UnlocalizedNumberRangeFormatter icu::number::LocalizedNumberRangeFormatter::withoutLocale() &amp;&amp; | (missing) | DraftICU 75
@ -396,22 +396,22 @@ Added in ICU 75
| uchar.h | <tt>enum</tt> UProperty::UCHAR_IDENTIFIER_STATUS | (missing) | DraftICU 75
| uchar.h | <tt>enum</tt> UProperty::UCHAR_IDENTIFIER_TYPE | (missing) | DraftICU 75
| uchar.h | int32_t u_getIDTypes(UChar32, UIdentifierType*, int32_t, UErrorCode*) | (missing) | DraftICU 75
| uconfig.h | <tt>#define</tt> UCONFIG_NO_MF2 | (missing) | InternalICU 75.0
| uconfig.h | <tt>#define</tt> UCONFIG_NO_MF2 | (missing) | InternalICU 75
| uscript.h | <tt>enum</tt> UScriptCode::USCRIPT_ARABIC_NASTALIQ | (missing) | StableICU 75| *(Born Stable)* |
| usimplenumberformatter.h | void usnum_setMaximumIntegerDigits(USimpleNumber*, int32_t, UErrorCode*) | (missing) | DraftICU 75
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_DUPLICATE_DECLARATION_ERROR | (missing) | InternalICU 75.0
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_DUPLICATE_OPTION_NAME_ERROR | (missing) | InternalICU 75.0
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_FORMATTING_ERROR | (missing) | InternalICU 75.0
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_MISSING_SELECTOR_ANNOTATION_ERROR | (missing) | InternalICU 75.0
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_NONEXHAUSTIVE_PATTERN_ERROR | (missing) | InternalICU 75.0
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_OPERAND_MISMATCH_ERROR | (missing) | InternalICU 75.0
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_SELECTOR_ERROR | (missing) | InternalICU 75.0
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_SYNTAX_ERROR | (missing) | InternalICU 75.0
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_UNKNOWN_FUNCTION_ERROR | (missing) | InternalICU 75.0
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_UNRESOLVED_VARIABLE_ERROR | (missing) | InternalICU 75.0
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_UNSUPPORTED_EXPRESSION_ERROR | (missing) | InternalICU 75.0
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_UNSUPPORTED_STATEMENT_ERROR | (missing) | InternalICU 75.0
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_VARIANT_KEY_MISMATCH_ERROR | (missing) | InternalICU 75.0
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_DUPLICATE_DECLARATION_ERROR | (missing) | InternalICU 75
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_DUPLICATE_OPTION_NAME_ERROR | (missing) | InternalICU 75
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_FORMATTING_ERROR | (missing) | InternalICU 75
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_MISSING_SELECTOR_ANNOTATION_ERROR | (missing) | InternalICU 75
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_NONEXHAUSTIVE_PATTERN_ERROR | (missing) | InternalICU 75
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_OPERAND_MISMATCH_ERROR | (missing) | InternalICU 75
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_SELECTOR_ERROR | (missing) | InternalICU 75
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_SYNTAX_ERROR | (missing) | InternalICU 75
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_UNKNOWN_FUNCTION_ERROR | (missing) | InternalICU 75
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_UNRESOLVED_VARIABLE_ERROR | (missing) | InternalICU 75
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_UNSUPPORTED_EXPRESSION_ERROR | (missing) | InternalICU 75
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_UNSUPPORTED_STATEMENT_ERROR | (missing) | InternalICU 75
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_VARIANT_KEY_MISMATCH_ERROR | (missing) | InternalICU 75
## Other

File diff suppressed because it is too large Load diff

View file

@ -157,14 +157,17 @@ _uloc_addLikelySubtags(const char* localeID,
return;
}
if (lang.length() > 3) {
if (lang.length() == 4 && script.isEmpty()) {
if (lang.length() == 4) {
if (script.isEmpty()) {
script = std::move(lang);
lang.clear();
} else {
err = U_ILLEGAL_ARGUMENT_ERROR;
return;
}
} else if (lang.length() > 8) {
err = U_ILLEGAL_ARGUMENT_ERROR;
return;
}
int32_t trailingLength = (int32_t)uprv_strlen(trailing);

View file

@ -2003,6 +2003,7 @@ static const struct CurrencyList {
{"XBC", UCURR_UNCOMMON|UCURR_NON_DEPRECATED},
{"XBD", UCURR_UNCOMMON|UCURR_NON_DEPRECATED},
{"XCD", UCURR_COMMON|UCURR_NON_DEPRECATED},
{"XCG", UCURR_COMMON|UCURR_NON_DEPRECATED},
{"XDR", UCURR_UNCOMMON|UCURR_NON_DEPRECATED},
{"XEU", UCURR_UNCOMMON|UCURR_DEPRECATED},
{"XFO", UCURR_UNCOMMON|UCURR_NON_DEPRECATED},

View file

@ -2406,7 +2406,7 @@ ultag_close(ULanguageTag* langtag) {
ExtensionListEntry *curExt = langtag->extensions;
while (curExt) {
ExtensionListEntry *nextExt = curExt->next;
uprv_free(curExt);
delete curExt;
curExt = nextExt;
}
}

View file

@ -162,11 +162,11 @@ protected:
T *ptr;
private:
// No comparison operators with other LocalPointerBases.
bool operator==(const LocalPointerBase<T> &other);
bool operator!=(const LocalPointerBase<T> &other);
bool operator==(const LocalPointerBase<T> &other) = delete;
bool operator!=(const LocalPointerBase<T> &other) = delete;
// No ownership sharing: No copy constructor, no assignment operator.
LocalPointerBase(const LocalPointerBase<T> &other);
void operator=(const LocalPointerBase<T> &other);
LocalPointerBase(const LocalPointerBase<T> &other) = delete;
void operator=(const LocalPointerBase<T> &other) = delete;
};
/**

View file

@ -206,6 +206,17 @@
# define U_PLATFORM U_PF_UNKNOWN
#endif
/**
* \def U_REAL_MSVC
* Defined if the compiler is the real MSVC compiler (and not something like
* Clang setting _MSC_VER in order to compile Windows code that requires it).
* Otherwise undefined.
* @internal
*/
#if (defined(_MSC_VER) && !(defined(__clang__) && __clang__)) || defined(U_IN_DOXYGEN)
# define U_REAL_MSVC
#endif
/**
* \def CYGWINMSVC
* Defined if this is Windows with Cygwin, but using MSVC rather than gcc.

View file

@ -417,7 +417,7 @@
* \def UCONFIG_NO_MF2
* This switch turns off the experimental MessageFormat 2.0 API.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
#ifndef UCONFIG_NO_MF2

View file

@ -399,6 +399,9 @@ uloc_setDefault(const char* localeID,
/**
* Gets the language code for the specified locale.
*
* This function may return with a failure error code for certain kinds of inputs
* but does not fully check for well-formed locale IDs / language tags.
*
* @param localeID the locale to get the ISO language code with
* @param language the language code for localeID
* @param languageCapacity the size of the language buffer to store the
@ -417,6 +420,9 @@ uloc_getLanguage(const char* localeID,
/**
* Gets the script code for the specified locale.
*
* This function may return with a failure error code for certain kinds of inputs
* but does not fully check for well-formed locale IDs / language tags.
*
* @param localeID the locale to get the ISO language code with
* @param script the language code for localeID
* @param scriptCapacity the size of the language buffer to store the
@ -435,6 +441,9 @@ uloc_getScript(const char* localeID,
/**
* Gets the country code for the specified locale.
*
* This function may return with a failure error code for certain kinds of inputs
* but does not fully check for well-formed locale IDs / language tags.
*
* @param localeID the locale to get the country code with
* @param country the country code for localeID
* @param countryCapacity the size of the country buffer to store the
@ -453,6 +462,9 @@ uloc_getCountry(const char* localeID,
/**
* Gets the variant code for the specified locale.
*
* This function may return with a failure error code for certain kinds of inputs
* but does not fully check for well-formed locale IDs / language tags.
*
* @param localeID the locale to get the variant code with
* @param variant the variant code for localeID
* @param variantCapacity the size of the variant buffer to store the
@ -471,6 +483,10 @@ uloc_getVariant(const char* localeID,
/**
* Gets the full name for the specified locale.
*
* This function may return with a failure error code for certain kinds of inputs
* but does not fully check for well-formed locale IDs / language tags.
*
* Note: This has the effect of 'canonicalizing' the ICU locale ID to
* a certain extent. Upper and lower case are set as needed.
* It does NOT map aliased names in any way.

View file

@ -571,19 +571,19 @@ typedef enum UErrorCode {
U_NUMBER_SKELETON_SYNTAX_ERROR, /**< The number skeleton passed to C++ NumberFormatter or C UNumberFormatter was invalid or contained a syntax error. @stable ICU 62 */
/* MessageFormat 2.0 errors */
U_MF_UNRESOLVED_VARIABLE_ERROR, /**< A variable is referred to but not bound by any definition @internal ICU 75.0 technology preview @deprecated This API is for technology preview only. */
U_MF_SYNTAX_ERROR, /**< Includes all syntax errors @internal ICU 75.0 technology preview @deprecated This API is for technology preview only. */
U_MF_UNKNOWN_FUNCTION_ERROR, /**< An annotation refers to a function not defined by the standard or custom function registry @internal ICU 75.0 technology preview @deprecated This API is for technology preview only. */
U_MF_VARIANT_KEY_MISMATCH_ERROR, /**< In a match-construct, one or more variants had a different number of keys from the number of selectors @internal ICU 75.0 technology preview @deprecated This API is for technology preview only. */
U_MF_FORMATTING_ERROR, /**< Covers all runtime errors: for example, an internally inconsistent set of options. @internal ICU 75.0 technology preview @deprecated This API is for technology preview only. */
U_MF_NONEXHAUSTIVE_PATTERN_ERROR, /**< In a match-construct, the variants do not cover all possible values @internal ICU 75.0 technology preview @deprecated This API is for technology preview only. */
U_MF_DUPLICATE_OPTION_NAME_ERROR, /**< In an annotation, the same option name appears more than once @internal ICU 75.0 technology preview @deprecated This API is for technology preview only. */
U_MF_SELECTOR_ERROR, /**< A selector function is applied to an operand of the wrong type @internal ICU 75.0 technology preview @deprecated This API is for technology preview only. */
U_MF_MISSING_SELECTOR_ANNOTATION_ERROR, /**< A selector expression evaluates to an unannotated operand. @internal ICU 75.0 technology preview @deprecated This API is for technology preview only. */
U_MF_DUPLICATE_DECLARATION_ERROR, /**< The same variable is declared in more than one .local or .input declaration. @internal ICU 75.0 technology preview @deprecated This API is for technology preview only. */
U_MF_OPERAND_MISMATCH_ERROR, /**< An operand provided to a function does not have the required form for that function @internal ICU 75.0 technology preview @deprecated This API is for technology preview only. */
U_MF_UNSUPPORTED_STATEMENT_ERROR, /**< A message includes a reserved statement. @internal ICU 75.0 technology preview @deprecated This API is for technology preview only. */
U_MF_UNSUPPORTED_EXPRESSION_ERROR, /**< A message includes syntax reserved for future standardization or private implementation use. @internal ICU 75.0 technology preview @deprecated This API is for technology preview only. */
U_MF_UNRESOLVED_VARIABLE_ERROR, /**< A variable is referred to but not bound by any definition @internal ICU 75 technology preview @deprecated This API is for technology preview only. */
U_MF_SYNTAX_ERROR, /**< Includes all syntax errors @internal ICU 75 technology preview @deprecated This API is for technology preview only. */
U_MF_UNKNOWN_FUNCTION_ERROR, /**< An annotation refers to a function not defined by the standard or custom function registry @internal ICU 75 technology preview @deprecated This API is for technology preview only. */
U_MF_VARIANT_KEY_MISMATCH_ERROR, /**< In a match-construct, one or more variants had a different number of keys from the number of selectors @internal ICU 75 technology preview @deprecated This API is for technology preview only. */
U_MF_FORMATTING_ERROR, /**< Covers all runtime errors: for example, an internally inconsistent set of options. @internal ICU 75 technology preview @deprecated This API is for technology preview only. */
U_MF_NONEXHAUSTIVE_PATTERN_ERROR, /**< In a match-construct, the variants do not cover all possible values @internal ICU 75 technology preview @deprecated This API is for technology preview only. */
U_MF_DUPLICATE_OPTION_NAME_ERROR, /**< In an annotation, the same option name appears more than once @internal ICU 75 technology preview @deprecated This API is for technology preview only. */
U_MF_SELECTOR_ERROR, /**< A selector function is applied to an operand of the wrong type @internal ICU 75 technology preview @deprecated This API is for technology preview only. */
U_MF_MISSING_SELECTOR_ANNOTATION_ERROR, /**< A selector expression evaluates to an unannotated operand. @internal ICU 75 technology preview @deprecated This API is for technology preview only. */
U_MF_DUPLICATE_DECLARATION_ERROR, /**< The same variable is declared in more than one .local or .input declaration. @internal ICU 75 technology preview @deprecated This API is for technology preview only. */
U_MF_OPERAND_MISMATCH_ERROR, /**< An operand provided to a function does not have the required form for that function @internal ICU 75 technology preview @deprecated This API is for technology preview only. */
U_MF_UNSUPPORTED_STATEMENT_ERROR, /**< A message includes a reserved statement. @internal ICU 75 technology preview @deprecated This API is for technology preview only. */
U_MF_UNSUPPORTED_EXPRESSION_ERROR, /**< A message includes syntax reserved for future standardization or private implementation use. @internal ICU 75 technology preview @deprecated This API is for technology preview only. */
#ifndef U_HIDE_DEPRECATED_API
/**
* One more than the highest normal formatting API error code.

View file

@ -1199,8 +1199,8 @@ supplementalData:table(nofallback){
CW{
{
from:intvector{
398,
-1834351104,
405,
-363122176,
}
id{"XCG"}
}
@ -1211,8 +1211,8 @@ supplementalData:table(nofallback){
}
id{"ANG"}
to:intvector{
400,
1819481599,
407,
-1004256769,
}
}
}
@ -3960,8 +3960,8 @@ supplementalData:table(nofallback){
SX{
{
from:intvector{
398,
-1834351104,
405,
-363122176,
}
id{"XCG"}
}
@ -3972,8 +3972,8 @@ supplementalData:table(nofallback){
}
id{"ANG"}
to:intvector{
400,
1819481599,
407,
-1004256769,
}
}
}

View file

@ -1,7 +1,7 @@
<!--
Copyright © 1991-2024 Unicode, Inc.
For terms of use, see http://www.unicode.org/copyright.html
SPDX-License-Identifier: Unicode-DFS-2016
SPDX-License-Identifier: Unicode-3.0
CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
-->

View file

@ -1,7 +1,7 @@
<!--
Copyright © 1991-2021 Unicode, Inc.
For terms of use, see http://www.unicode.org/copyright.html
SPDX-License-Identifier: Unicode-DFS-2016
SPDX-License-Identifier: Unicode-3.0
CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
-->

View file

@ -81,16 +81,16 @@ it{
other{"0"}
}
1000000{
one{"0 Mio ¤"}
other{"0 Mio ¤"}
one{"0 Mln ¤"}
other{"0 Mln ¤"}
}
10000000{
one{"00 Mio ¤"}
other{"00 Mio ¤"}
one{"00 Mln ¤"}
other{"00 Mln ¤"}
}
100000000{
one{"000 Mio ¤"}
other{"000 Mio ¤"}
one{"000 Mln ¤"}
other{"000 Mln ¤"}
}
1000000000{
one{"0 Mrd ¤"}
@ -131,16 +131,16 @@ it{
other{"0"}
}
1000000{
one{"0 Mio"}
other{"0 Mio"}
one{"0 Mln"}
other{"0 Mln"}
}
10000000{
one{"00 Mio"}
other{"00 Mio"}
one{"00 Mln"}
other{"00 Mln"}
}
100000000{
one{"000 Mio"}
other{"000 Mio"}
one{"000 Mln"}
other{"000 Mln"}
}
1000000000{
one{"0 Mrd"}

View file

@ -215,10 +215,10 @@ ta{
calendar{
chinese{
DateTimePatterns{
"a h:mm:ss zzzz",
"a h:mm:ss z",
"a h:mm:ss",
"a h:mm",
"h:mm:ss a zzzz",
"h:mm:ss a z",
"h:mm:ss a",
"h:mm a",
"U MMMM d, EEEE",
"U, d MMMM",
"U, d MMM",
@ -363,10 +363,10 @@ ta{
}
generic{
DateTimePatterns{
"a h:mm:ss zzzz",
"a h:mm:ss z",
"a h:mm:ss",
"a h:mm",
"h:mm:ss a zzzz",
"h:mm:ss a z",
"h:mm:ss a",
"h:mm a",
"EEEE, d MMMM, y G",
"d MMMM, y G",
"d MMM, y G",
@ -400,8 +400,8 @@ ta{
EBhm{"E B h:mm"}
EBhms{"E B h:mm:ss"}
Ed{"d E"}
Ehm{"E a h:mm"}
Ehms{"E a h:mm:ss"}
Ehm{"E h:mm a"}
Ehms{"E h:mm:ss a"}
Gy{"y G"}
GyMMM{"MMM y G"}
GyMMMEd{"E, d MMM, y G"}
@ -413,9 +413,9 @@ ta{
MMMd{"d MMM"}
MMdd{"dd-MM"}
Md{"d/M"}
h{"a h"}
hm{"a h:mm"}
hms{"a h:mm:ss"}
h{"h a"}
hm{"h:mm a"}
hms{"h:mm:ss a"}
y{"y G"}
yyyy{"y G"}
yyyyM{"M/y G"}
@ -457,22 +457,22 @@ ta{
}
fallback{"{0} {1}"}
h{
a{"a h a h"}
h{"a hh"}
a{"h a h a"}
h{"hh a"}
}
hm{
a{"a h:mm a h:mm"}
h{"a h:mmh:mm"}
m{"a h:mmh:mm"}
a{"h:mm a h:mm a"}
h{"h:mmh:mm a"}
m{"h:mmh:mm a"}
}
hmv{
a{"a h:mm a h:mm v"}
h{"a h:mmh:mm v"}
m{"a h:mmh:mm v"}
a{"h:mm h:mm a v"}
h{"h:mmh:mm a v"}
m{"h:mmh:mm a v"}
}
hv{
a{"a h a h v"}
h{"a hh v"}
a{"h a h a v"}
h{"hh a v"}
}
y{
y{"y y G"}
@ -512,19 +512,11 @@ ta{
}
}
gregorian{
AmPmMarkersAbbr{
"AM",
"பிற்பகல்",
}
AmPmMarkersNarrow{
"மு.ப",
"பி.ப",
}
DateTimePatterns{
"a h:mm:ss zzzz",
"a h:mm:ss z",
"a h:mm:ss",
"a h:mm",
"h:mm:ss a zzzz",
"h:mm:ss a z",
"h:mm:ss a",
"h:mm a",
"EEEE, d MMMM, y",
"d MMMM, y",
"d MMM, y",
@ -558,8 +550,8 @@ ta{
EBhm{"E B h:mm"}
EBhms{"E B h:mm:ss"}
Ed{"d E"}
Ehm{"E a h:mm"}
Ehms{"E a h:mm:ss"}
Ehm{"E h:mm a"}
Ehms{"E h:mm:ss a"}
GyMd{"d/M/y G"}
MEd{"dd-MM, E"}
MMMMW{
@ -569,11 +561,11 @@ ta{
MMMMd{"d MMMM"}
MMdd{"dd-MM"}
Md{"d/M"}
h{"a h"}
hm{"a h:mm"}
hms{"a h:mm:ss"}
hmsv{"a h:mm:ss v"}
hmv{"a h:mm v"}
h{"h a"}
hm{"h:mm a"}
hms{"h:mm:ss a"}
hmsv{"h:mm:ss a v"}
hmv{"h:mm a v"}
yM{"M/y"}
yMEd{"E, d/M/y"}
yMM{"MM-y"}
@ -657,14 +649,9 @@ ta{
}
}
stand-alone{
abbreviated{
am{"முற்பகல்"}
pm{"பிற்பகல்"}
}
narrow{
afternoon1{"மதி."}
afternoon2{"பிற்."}
am{"மு.ப"}
evening1{"மா."}
evening2{"அந்தி மா."}
midnight{"நள்."}
@ -672,11 +659,6 @@ ta{
morning2{"கா."}
night1{"இ."}
noon{"நண்."}
pm{"பி.ப"}
}
wide{
am{"முற்பகல்"}
pm{"பிற்பகல்"}
}
}
}
@ -733,22 +715,22 @@ ta{
}
fallback{"{0} {1}"}
h{
a{"a h a h"}
h{"a hh"}
a{"h a h a"}
h{"hh a"}
}
hm{
a{"a h:mm a h:mm"}
h{"a h:mmh:mm"}
m{"a h:mmh:mm"}
a{"h:mm a h:mm a"}
h{"h:mmh:mm a"}
m{"h:mmh:mm a"}
}
hmv{
a{"a h:mm a h:mm v"}
h{"a h:mm h:mm v"}
m{"a h:mm h:mm v"}
a{"h:mm a h:mm a v"}
h{"h:mm h:mm a v"}
m{"h:mm h:mm a v"}
}
hv{
a{"a h a h v"}
h{"a h h v"}
a{"h a h a v"}
h{"h h a v"}
}
y{
y{"y y"}

File diff suppressed because it is too large Load diff

View file

@ -36,6 +36,10 @@ metadata:table(nofallback){
reason{"deprecated"}
replacement{"ami"}
}
ajp{
reason{"deprecated"}
replacement{"apc"}
}
ajt{
reason{"deprecated"}
replacement{"aeb"}
@ -824,6 +828,10 @@ metadata:table(nofallback){
reason{"deprecated"}
replacement{"kml"}
}
kgm{
reason{"deprecated"}
replacement{"plu"}
}
khk{
reason{"macrolanguage"}
replacement{"mn"}
@ -1184,6 +1192,10 @@ metadata:table(nofallback){
reason{"overlong"}
replacement{"nb"}
}
nom{
reason{"deprecated"}
replacement{"cbr"}
}
noo{
reason{"deprecated"}
replacement{"dtd"}
@ -1276,6 +1288,10 @@ metadata:table(nofallback){
reason{"deprecated"}
replacement{"huw"}
}
pmk{
reason{"deprecated"}
replacement{"crr"}
}
pmu{
reason{"deprecated"}
replacement{"phr"}
@ -1300,6 +1316,10 @@ metadata:table(nofallback){
reason{"deprecated"}
replacement{"lcq"}
}
prp{
reason{"deprecated"}
replacement{"gu"}
}
prs{
reason{"overlong"}
replacement{"fa_AF"}
@ -1580,6 +1600,10 @@ metadata:table(nofallback){
reason{"macrolanguage"}
replacement{"sw"}
}
szd{
reason{"deprecated"}
replacement{"umi"}
}
tah{
reason{"overlong"}
replacement{"ty"}
@ -1656,6 +1680,10 @@ metadata:table(nofallback){
reason{"deprecated"}
replacement{"weo"}
}
tmk{
reason{"deprecated"}
replacement{"tdg"}
}
tmp{
reason{"deprecated"}
replacement{"tyj"}
@ -1672,6 +1700,10 @@ metadata:table(nofallback){
reason{"overlong"}
replacement{"to"}
}
tpw{
reason{"deprecated"}
replacement{"tpn"}
}
tsf{
reason{"deprecated"}
replacement{"taj"}
@ -1844,6 +1876,10 @@ metadata:table(nofallback){
reason{"macrolanguage"}
replacement{"den"}
}
xss{
reason{"deprecated"}
replacement{"zko"}
}
ybd{
reason{"deprecated"}
replacement{"rki"}
@ -1944,6 +1980,10 @@ metadata:table(nofallback){
reason{"deprecated"}
replacement{"scv"}
}
zkb{
reason{"deprecated"}
replacement{"kjh"}
}
zsm{
reason{"macrolanguage"}
replacement{"ms"}

View file

@ -4434,7 +4434,6 @@ supplementalData:table(nofallback){
"ADP",
"AFA",
"ALK",
"ANG",
"AOK",
"AON",
"AOR",
@ -4580,6 +4579,7 @@ supplementalData:table(nofallback){
"AFN",
"ALL",
"AMD",
"ANG",
"AOA",
"ARS",
"AUD",
@ -4738,6 +4738,7 @@ supplementalData:table(nofallback){
"adp",
"agp",
"ais",
"ajp",
"ajt~u",
"als",
"aoh",
@ -4801,7 +4802,6 @@ supplementalData:table(nofallback){
"dud",
"duj",
"dwl",
"dzd",
"ekc",
"ekk",
"elp",
@ -4846,6 +4846,7 @@ supplementalData:table(nofallback){
"kdv",
"kgc~d",
"kgh",
"kgm",
"khk",
"kjf",
"kmr",
@ -4857,6 +4858,7 @@ supplementalData:table(nofallback){
"kpp",
"kpv",
"krm",
"ksa",
"ktr",
"kvs",
"kwq",
@ -4906,6 +4908,7 @@ supplementalData:table(nofallback){
"nlr",
"nns",
"nnx",
"nom",
"noo",
"npi",
"nts",
@ -4921,15 +4924,18 @@ supplementalData:table(nofallback){
"pes",
"pgy",
"pii",
"plj",
"plp",
"plt",
"pmc",
"pmk",
"pmu",
"pnb",
"pod",
"ppa",
"ppr",
"prb",
"prp",
"prs",
"pry",
"puk",
@ -4947,6 +4953,7 @@ supplementalData:table(nofallback){
"sgo",
"sh",
"skk",
"slq",
"smd",
"snb",
"snh",
@ -4956,6 +4963,7 @@ supplementalData:table(nofallback){
"svr",
"swc",
"swh",
"szd",
"tbb",
"tdu",
"tgg",
@ -4965,9 +4973,11 @@ supplementalData:table(nofallback){
"tkk",
"tl",
"tlw",
"tmk",
"tmp",
"tne~f",
"toe",
"tpw",
"tsf",
"ttq",
"tw",
@ -4992,6 +5002,7 @@ supplementalData:table(nofallback){
"xrq",
"xsj",
"xsl",
"xss",
"xtz",
"ybd",
"ydd",
@ -5006,7 +5017,9 @@ supplementalData:table(nofallback){
"yuu",
"zai",
"zir",
"zkb",
"zsm",
"zua",
"zyb",
}
private_use{
@ -5075,7 +5088,6 @@ supplementalData:table(nofallback){
"ajg",
"aji",
"ajn",
"ajp",
"ajs",
"ajw",
"ajz",
@ -5344,6 +5356,7 @@ supplementalData:table(nofallback){
"cwe",
"cwg",
"cwt",
"cxh",
"cy",
"cya~b",
"cyo",
@ -5441,7 +5454,7 @@ supplementalData:table(nofallback){
"dsb",
"dse",
"dsh~i",
"dsl",
"dsk~l",
"dsn~o",
"dsq",
"dsz",
@ -5469,11 +5482,12 @@ supplementalData:table(nofallback){
"dyg",
"dyi",
"dym~o",
"dyr",
"dyu",
"dyy",
"dz",
"dza",
"dze",
"dzd~e",
"dzg",
"dzl",
"dzn",
@ -5558,6 +5572,7 @@ supplementalData:table(nofallback){
"etx",
"etz",
"eu",
"eud",
"euq",
"eve",
"evh",
@ -5890,7 +5905,7 @@ supplementalData:table(nofallback){
"ijn~o",
"ijs",
"ik",
"iki",
"ikh~i",
"ikk~l",
"iko~p",
"ikr~t",
@ -5962,6 +5977,7 @@ supplementalData:table(nofallback){
"iyo",
"iyx",
"izh",
"izm",
"izr",
"izz",
"ja",
@ -6065,7 +6081,8 @@ supplementalData:table(nofallback){
"kg",
"kga~b",
"kge~g",
"kgi~y",
"kgi~l",
"kgn~y",
"kha~j",
"khl",
"khn~z",
@ -6107,7 +6124,7 @@ supplementalData:table(nofallback){
"krn~p",
"krr~z",
"ks",
"ksa~z",
"ksb~z",
"kta~q",
"kts~z",
"ku",
@ -6158,8 +6175,7 @@ supplementalData:table(nofallback){
"lga~b",
"lgg~i",
"lgk~o",
"lgq~r",
"lgt~u",
"lgq~u",
"lgz",
"lha",
"lhh~i",
@ -6237,7 +6253,7 @@ supplementalData:table(nofallback){
"lv",
"lva",
"lvi",
"lvk",
"lvk~l",
"lvu",
"lwa",
"lwe",
@ -6399,7 +6415,8 @@ supplementalData:table(nofallback){
"nny~z",
"no",
"noa",
"noc~n",
"noc~l",
"non",
"nop~q",
"nos~w",
"noy~z",
@ -6462,7 +6479,7 @@ supplementalData:table(nofallback){
"nzi",
"nzk",
"nzm",
"nzs",
"nzr~s",
"nzu",
"nzy~z",
"oaa",
@ -6623,14 +6640,15 @@ supplementalData:table(nofallback){
"pkr~u",
"pl",
"pla~h",
"plj~l",
"plk~l",
"pln~o",
"plq~s",
"plu~w",
"ply~z",
"pma~b",
"pmd~f",
"pmh~o",
"pmh~j",
"pml~o",
"pmq~t",
"pmw~z",
"pna",
@ -6652,7 +6670,8 @@ supplementalData:table(nofallback){
"pqw",
"pra",
"prc~i",
"prk~r",
"prk~o",
"prq~r",
"prt~u",
"prw~x",
"prz",
@ -6687,6 +6706,7 @@ supplementalData:table(nofallback){
"pys",
"pyu",
"pyx~y",
"pze",
"pzh",
"pzn",
"qu",
@ -6780,6 +6800,7 @@ supplementalData:table(nofallback){
"rrt",
"rsb",
"rsk~n",
"rsw",
"rtc",
"rth",
"rtm",
@ -6856,7 +6877,8 @@ supplementalData:table(nofallback){
"sla",
"slc~j",
"sll~n",
"slp~u",
"slp",
"slr~u",
"slw~z",
"sm",
"sma~c",
@ -6927,7 +6949,8 @@ supplementalData:table(nofallback){
"syk~o",
"syr~s",
"syw~y",
"sza~e",
"sza~c",
"sze",
"szg",
"szl",
"szn",
@ -6989,7 +7012,8 @@ supplementalData:table(nofallback){
"tla~d",
"tlf~v",
"tlx~y",
"tma~o",
"tma~j",
"tml~o",
"tmq~w",
"tmy~z",
"tn",
@ -7005,7 +7029,8 @@ supplementalData:table(nofallback){
"tpc",
"tpe~g",
"tpi~r",
"tpt~z",
"tpt~v",
"tpx~z",
"tqb",
"tql~r",
"tqt~u",
@ -7025,6 +7050,7 @@ supplementalData:table(nofallback){
"tus~z",
"tva",
"tvd~e",
"tvi",
"tvk~o",
"tvs~u",
"tvw~y",
@ -7093,6 +7119,7 @@ supplementalData:table(nofallback){
"ulk~n",
"ulu",
"ulw",
"uly",
"uma~d",
"umg",
"umi",
@ -7160,6 +7187,7 @@ supplementalData:table(nofallback){
"vin",
"vis~t",
"viv",
"vjk",
"vka",
"vkj~p",
"vkt~u",
@ -7271,6 +7299,7 @@ supplementalData:table(nofallback){
"wsk",
"wsr~s",
"wsu~v",
"wtb",
"wtf",
"wth~i",
"wtk",
@ -7388,7 +7417,7 @@ supplementalData:table(nofallback){
"xrw",
"xsa~e",
"xsh~i",
"xsm~s",
"xsm~r",
"xsu~v",
"xsy",
"xta~e",
@ -7435,6 +7464,7 @@ supplementalData:table(nofallback){
"ycl",
"ycn",
"ycp",
"ycr",
"yda",
"yde",
"ydg",
@ -7464,8 +7494,7 @@ supplementalData:table(nofallback){
"yix",
"yiz",
"yka",
"ykg",
"yki",
"ykg~i",
"ykk~o",
"ykr",
"ykt~u",
@ -7559,7 +7588,7 @@ supplementalData:table(nofallback){
"zdj",
"zea",
"zeg~h",
"zen",
"zem~n",
"zga~b",
"zgh",
"zgm~n",
@ -7574,7 +7603,7 @@ supplementalData:table(nofallback){
"zik~n",
"ziw",
"ziz",
"zka~b",
"zka",
"zkd",
"zkg~h",
"zkk",
@ -7588,6 +7617,7 @@ supplementalData:table(nofallback){
"zlm~n",
"zlq",
"zls",
"zlu",
"zlw",
"zma~z",
"zna",
@ -7617,7 +7647,6 @@ supplementalData:table(nofallback){
"zts~u",
"ztx~y",
"zu",
"zua",
"zuh",
"zum~n",
"zuy",
@ -11902,8 +11931,11 @@ supplementalData:table(nofallback){
"barla",
"basiceng",
"bauddha",
"bciav",
"bcizbl",
"biscayan",
"biske",
"blasl",
"bohoric",
"boont",
"bornholm",
@ -18696,12 +18728,6 @@ supplementalData:table(nofallback){
"10",
"1",
}
{
"ajp",
"ar",
"10",
"1",
}
{
"apc",
"ar",

View file

@ -6,7 +6,7 @@
// Build date: Wed Feb 7 16:30:19 2024
// tz database: ftp://ftp.iana.org/tz/
// tz version: 2024a
// ICU version: 75.0.1
// ICU version: 75.1
//---------------------------------------------------------
// >> !!! >> THIS IS A MACHINE-GENERATED FILE << !!! <<
// >> !!! >>> DO NOT EDIT <<< !!! <<

View file

@ -70,7 +70,7 @@ ff_Adlm{
BS{"𞤄𞤢𞤸𞤢𞤥𞤢𞥄𞤧"}
BT{"𞤄𞤵𞥅𞤼𞤢𞥄𞤲"}
BV{"𞤅𞤵𞤪𞤭𞥅𞤪𞤫 𞤄𞤵𞥅𞤾𞤫𞥅"}
BW{"𞤄𞤮𞤼𞤧𞤵𞤱𞤢𞥄𞤲𞤢"}
BW{"𞤄𞤮𞤼𞤧𞤵𞤱𞤢𞥄𞤲𞤢"}
BY{"𞤄𞤫𞤤𞤢𞤪𞤵𞥅𞤧"}
BZ{"𞤄𞤫𞤤𞤭𞥅𞥁"}
CA{"𞤑𞤢𞤲𞤢𞤣𞤢𞥄"}

View file

@ -533,7 +533,7 @@ ff_Adlm{
ec{"𞤅𞤢𞥄𞤱-𞤆𞤮𞤤𞤮𞥅"}
}
"America:Scoresbysund"{
ec{"𞤋𞤼𞥆𞤮𞤳𞤮𞤪𞤼𞤮𞥅𞤪𞤥𞤭𞥅𞤼"}
ec{"𞤋𞤼𞥆𞤮𞤳𞤮𞤪𞤼𞤮𞥅𞤪𞤥𞤭𞥅𞤼"}
}
"America:Sitka"{
ec{"𞤅𞤭𞤼𞤳𞤢"}

View file

@ -189,10 +189,25 @@ FunctionOptions MessageFormatter::resolveOptions(const Environment& env, const O
}
if (isFormatter(functionName)) {
const Formatter& formatterImpl = getFormatter(context, functionName, status);
LocalPointer<Formatter> formatterImpl(getFormatter(functionName, status));
if (U_FAILURE(status)) {
if (status == U_MF_FORMATTING_ERROR) {
errs.setFormattingError(functionName, status);
status = U_ZERO_ERROR;
return {};
}
if (status == U_MF_UNKNOWN_FUNCTION_ERROR) {
errs.setUnknownFunction(functionName, status);
status = U_ZERO_ERROR;
return {};
}
// Other errors are non-recoverable
return {};
}
U_ASSERT(formatterImpl != nullptr);
UErrorCode savedStatus = status;
FormattedPlaceholder result = formatterImpl.format(std::move(argument), std::move(options), status);
FormattedPlaceholder result = formatterImpl->format(std::move(argument), std::move(options), status);
// Update errors
if (savedStatus != status) {
if (U_FAILURE(status)) {

View file

@ -24,16 +24,15 @@ namespace message2 {
// Helpers
template<typename T>
static T* copyArray(const T* source, int32_t& len) { // `len` is an in/out param
if (source == nullptr) {
len = 0;
static T* copyArray(const T* source, int32_t len, UErrorCode& status) {
if (U_FAILURE(status)) {
return nullptr;
}
U_ASSERT(source != nullptr);
U_ASSERT(len >= 0);
T* dest = new T[len];
if (dest == nullptr) {
// Set length to 0 to prevent the
// array from being accessed
len = 0;
status = U_MEMORY_ALLOCATION_ERROR;
} else {
for (int32_t i = 0; i < len; i++) {
dest[i] = source[i];
@ -43,13 +42,14 @@ namespace message2 {
}
template<typename T>
static T* copyVectorToArray(const UVector& source, int32_t& len) {
len = source.size();
static T* copyVectorToArray(const UVector& source, UErrorCode& status) {
if (U_FAILURE(status)) {
return nullptr;
}
int32_t len = source.size();
T* dest = new T[len];
if (dest == nullptr) {
// Set length to 0 to prevent the
// array from being accessed
len = 0;
status = U_MEMORY_ALLOCATION_ERROR;
} else {
for (int32_t i = 0; i < len; i++) {
dest[i] = *(static_cast<T*>(source.elementAt(i)));
@ -59,19 +59,21 @@ namespace message2 {
}
template<typename T>
static T* moveVectorToArray(UVector& source, int32_t& len) {
len = source.size();
static T* moveVectorToArray(UVector& source, UErrorCode& status) {
if (U_FAILURE(status)) {
return nullptr;
}
int32_t len = source.size();
T* dest = new T[len];
if (dest == nullptr) {
// Set length to 0 to prevent the
// array from being accessed
len = 0;
status = U_MEMORY_ALLOCATION_ERROR;
} else {
for (int32_t i = 0; i < len; i++) {
dest[i] = std::move(*static_cast<T*>(source.elementAt(i)));
}
source.removeAllElements();
}
source.removeAllElements();
return dest;
}

View file

@ -1,68 +0,0 @@
// © 2024 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
#include "unicode/utypes.h"
#ifndef U_HIDE_DEPRECATED_API
#ifndef MESSAGEFORMAT2_CACHED_FORMATTERS_H
#define MESSAGEFORMAT2_CACHED_FORMATTERS_H
#if U_SHOW_CPLUSPLUS_API
#if !UCONFIG_NO_FORMATTING
#if !UCONFIG_NO_MF2
#include "unicode/messageformat2_data_model_names.h"
#include "unicode/messageformat2_function_registry.h"
#include "hash.h"
U_NAMESPACE_BEGIN
namespace message2 {
using namespace data_model;
// Formatter cache
// --------------
class MessageFormatter;
// Map from function names to Formatters
class CachedFormatters : public UObject {
private:
friend class MessageFormatter;
// Maps stringified FunctionNames onto Formatter*
// Adopts its values
Hashtable cache;
CachedFormatters() { cache.setValueDeleter(uprv_deleteUObject); }
public:
// Returns a pointer because Formatter is an abstract class
const Formatter* getFormatter(const FunctionName& f) {
return static_cast<const Formatter*>(cache.get(f));
}
// Adopts its argument
void adoptFormatter(const FunctionName& f, Formatter* val, UErrorCode& status) {
cache.put(f, val, status);
}
CachedFormatters& operator=(const CachedFormatters&) = delete;
virtual ~CachedFormatters();
};
} // namespace message2
U_NAMESPACE_END
#endif /* #if !UCONFIG_NO_MF2 */
#endif /* #if !UCONFIG_NO_FORMATTING */
#endif /* U_SHOW_CPLUSPLUS_API */
#endif // MESSAGEFORMAT2_CACHED_FORMATTERS_H
#endif // U_HIDE_DEPRECATED_API
// eof

View file

@ -77,15 +77,10 @@ SelectorKeys::Builder::~Builder() {
}
SelectorKeys::SelectorKeys(const UVector& ks, UErrorCode& status) : len(ks.size()) {
Key* result = copyVectorToArray<Key>(ks, status);
if (U_FAILURE(status)) {
return;
}
Key* result = copyVectorToArray<Key>(ks, len);
if (result == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
len = 0;
return;
}
keys.adoptInstead(result);
}
@ -95,7 +90,13 @@ SelectorKeys& SelectorKeys::operator=(SelectorKeys other) noexcept {
}
SelectorKeys::SelectorKeys(const SelectorKeys& other) : len(other.len) {
keys.adoptInstead(copyArray(other.keys.getAlias(), len));
UErrorCode localErrorCode = U_ZERO_ERROR;
if (len != 0) {
keys.adoptInstead(copyArray(other.keys.getAlias(), len, localErrorCode));
}
if (U_FAILURE(localErrorCode)) {
len = 0;
}
}
SelectorKeys::~SelectorKeys() {
@ -198,9 +199,18 @@ Key::~Key() {}
// ------------ Reserved
// Copy constructor
Reserved::Reserved(const Reserved& other) {
len = other.len;
parts.adoptInstead(copyArray(other.parts.getAlias(), len));
Reserved::Reserved(const Reserved& other) : len(other.len) {
U_ASSERT(!other.bogus);
UErrorCode localErrorCode = U_ZERO_ERROR;
if (len == 0) {
parts.adoptInstead(nullptr);
} else {
parts.adoptInstead(copyArray(other.parts.getAlias(), len, localErrorCode));
}
if (U_FAILURE(localErrorCode)) {
bogus = true;
}
}
Reserved& Reserved::operator=(Reserved other) noexcept {
@ -212,14 +222,16 @@ Reserved::Reserved(const UVector& ps, UErrorCode& status) noexcept : len(ps.size
if (U_FAILURE(status)) {
return;
}
parts = LocalArray<Literal>(copyVectorToArray<Literal>(ps, len));
parts = LocalArray<Literal>(copyVectorToArray<Literal>(ps, status));
}
int32_t Reserved::numParts() const {
U_ASSERT(!bogus);
return len;
}
const Literal& Reserved::getPart(int32_t i) const {
U_ASSERT(!bogus);
U_ASSERT(i < numParts());
return parts[i];
}
@ -257,14 +269,10 @@ Reserved::~Reserved() {
//------------------------ Operator
OptionMap::OptionMap(const UVector& opts, UErrorCode& status) {
CHECK_ERROR(status);
len = opts.size();
Option* result = copyVectorToArray<Option>(opts, len);
if (result == nullptr) {
OptionMap::OptionMap(const UVector& opts, UErrorCode& status) : len(opts.size()) {
Option* result = copyVectorToArray<Option>(opts, status);
if (U_FAILURE(status)) {
bogus = true;
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
options.adoptInstead(result);
@ -273,8 +281,9 @@ OptionMap::OptionMap(const UVector& opts, UErrorCode& status) {
OptionMap::OptionMap(const OptionMap& other) : len(other.len) {
U_ASSERT(!other.bogus);
Option* result = copyArray(other.options.getAlias(), len);
if (result == nullptr && len != 0) {
UErrorCode localErrorCode = U_ZERO_ERROR;
Option* result = copyArray(other.options.getAlias(), len, localErrorCode);
if (U_FAILURE(localErrorCode)) {
bogus = true;
return;
}
@ -304,14 +313,64 @@ int32_t OptionMap::size() const {
return len;
}
Operator::Builder& Operator::Builder::setOptionMap(OptionMap&& m) {
optionMap = std::move(m);
delete options;
options = nullptr;
OptionMap::~OptionMap() {}
OptionMap OptionMap::Builder::build(UErrorCode& status) {
return OptionMap(*options, status);
}
OptionMap::Builder::Builder(UErrorCode& status) {
options = createStringUVector(status);
}
OptionMap::Builder::Builder(OptionMap::Builder&& other) {
checkDuplicates = other.checkDuplicates;
options = other.options;
other.options = nullptr;
}
OptionMap::Builder& OptionMap::Builder::operator=(OptionMap::Builder other) noexcept {
swap(*this, other);
return *this;
}
OptionMap::~OptionMap() {}
/* static */ OptionMap::Builder OptionMap::Builder::attributes(UErrorCode& status) {
Builder b(status);
// The same code is re-used for representing attributes and options.
// Duplicate attributes are allowed, while duplicate options are disallowed.
b.checkDuplicates = false;
return b;
}
static UBool hasOptionNamed(const UVector& v, const UnicodeString& s) {
for (int32_t i = 0; i < v.size(); i++) {
const Option* opt = static_cast<Option*>(v[i]);
U_ASSERT(opt != nullptr);
if (opt->getName() == s) {
return true;
}
}
return false;
}
OptionMap::Builder& OptionMap::Builder::add(Option&& opt, UErrorCode& status) {
THIS_ON_ERROR(status);
// If the option name is already in the map, emit a data model error
if (checkDuplicates && hasOptionNamed(*options, opt.getName())) {
status = U_MF_DUPLICATE_OPTION_NAME_ERROR;
} else {
Option* newOption = create<Option>(std::move(opt), status);
options->adoptElement(newOption, status);
}
return *this;
}
OptionMap::Builder::~Builder() {
if (options != nullptr) {
delete options;
}
}
const Reserved& Operator::asReserved() const {
U_ASSERT(isReserved());
@ -332,13 +391,12 @@ Option& Option::operator=(Option other) noexcept {
Option::~Option() {}
Operator::Builder::Builder(UErrorCode& status) {
options = createStringUVector(status);
}
Operator::Builder::Builder(UErrorCode& status) : options(OptionMap::Builder(status)) {}
Operator::Builder& Operator::Builder::setReserved(Reserved&& reserved) {
isReservedSequence = true;
hasFunctionName = false;
hasOptions = false;
asReserved = std::move(reserved);
return *this;
}
@ -355,31 +413,12 @@ const FunctionName& Operator::getFunctionName() const {
return std::get_if<Callable>(&contents)->getName();
}
static UBool hasOptionNamed(const UVector& v, const UnicodeString& s) {
for (int32_t i = 0; i < v.size(); i++) {
const Option* opt = static_cast<Option*>(v[i]);
U_ASSERT(opt != nullptr);
if (opt->getName() == s) {
return true;
}
}
return false;
}
Operator::Builder& Operator::Builder::addOption(const UnicodeString &key, Operand&& value, UErrorCode& errorCode) noexcept {
THIS_ON_ERROR(errorCode);
isReservedSequence = false;
hasOptions = true;
U_ASSERT(options != nullptr);
// If the option name is already in the map, emit a data model error
if (hasOptionNamed(*options, key)) {
errorCode = U_MF_DUPLICATE_OPTION_NAME_ERROR;
} else {
Option* newOption = create<Option>(Option(key, std::move(value)), errorCode);
THIS_ON_ERROR(errorCode);
options->adoptElement(newOption, errorCode);
}
options.add(Option(key, std::move(value)), errorCode);
return *this;
}
@ -404,11 +443,7 @@ Operator Operator::Builder::build(UErrorCode& errorCode) {
errorCode = U_INVALID_STATE_ERROR;
return result;
}
if (options != nullptr) {
// Initialize options from what was set with setOptions()
optionMap = OptionMap(*options, errorCode);
}
result = Operator(functionName, optionMap);
result = Operator(functionName, options.build(errorCode));
}
return result;
}
@ -425,11 +460,7 @@ Operator::Operator(const FunctionName& f, const UVector& optsVector, UErrorCode&
Operator::Operator(const FunctionName& f, const OptionMap& opts) : contents(Callable(f, opts)) {}
Operator::Builder::~Builder() {
if (options != nullptr) {
delete options;
}
}
Operator::Builder::~Builder() {}
Operator::~Operator() {}
@ -444,28 +475,26 @@ Callable::~Callable() {}
// ------------ Markup
Markup::Builder::Builder(UErrorCode& status) {
options = createUVector(status);
attributes = createUVector(status);
}
Markup::Builder::Builder(UErrorCode& status)
: options(OptionMap::Builder(status)), attributes(OptionMap::Builder::attributes(status)) {}
Markup::Builder& Markup::Builder::setAttributeMap(OptionMap&& m) {
attributeMap = std::move(m);
delete attributes;
attributes = nullptr;
Markup::Markup(UMarkupType ty, UnicodeString n, OptionMap&& o, OptionMap&& a)
: type(ty), name(n), options(std::move(o)), attributes(std::move(a)) {}
Markup::Builder& Markup::Builder::addOption(const UnicodeString &key,
Operand&& value,
UErrorCode& errorCode) {
options.add(Option(key, std::move(value)), errorCode);
return *this;
}
Markup::Builder& Markup::Builder::setOptionMap(OptionMap&& m) {
optionMap = std::move(m);
delete options;
options = nullptr;
Markup::Builder& Markup::Builder::addAttribute(const UnicodeString &key,
Operand&& value,
UErrorCode& errorCode) {
attributes.add(Option(key, std::move(value)), errorCode);
return *this;
}
Markup::Markup(UMarkupType ty, UnicodeString n, OptionMap&& o, OptionMap&& a) : type(ty), name(n), options(std::move(o)), attributes(std::move(a)) {
}
Markup Markup::Builder::build(UErrorCode& errorCode) {
Markup result;
@ -479,34 +508,22 @@ Markup Markup::Builder::build(UErrorCode& errorCode) {
// setName() must be called before calling build()
errorCode = U_INVALID_STATE_ERROR;
} else {
if (options != nullptr) {
// Initialize options from what was done with setOptions
optionMap = OptionMap(*options, errorCode);
}
if (attributes != nullptr) {
attributeMap = OptionMap(*attributes, errorCode);
}
result = Markup(type, name, std::move(optionMap), std::move(attributeMap));
result = Markup(type,
name,
options.build(errorCode),
attributes.build(errorCode));
}
return result;
}
Markup::Builder::~Builder() {
if (options != nullptr) {
delete options;
}
if (attributes != nullptr) {
delete attributes;
}
}
Markup::Builder::~Builder() {}
Markup::~Markup() {}
// ------------ Expression
Expression::Builder::Builder(UErrorCode& status) {
attributes = createUVector(status);
}
Expression::Builder::Builder(UErrorCode& status)
: attributes(OptionMap::Builder::attributes(status)) {}
UBool Expression::isStandaloneAnnotation() const {
return rand.isNull();
@ -549,10 +566,10 @@ Expression::Builder& Expression::Builder::setOperator(Operator&& rAtor) {
return *this;
}
Expression::Builder& Expression::Builder::setAttributeMap(OptionMap&& m) {
attributeMap = std::move(m);
delete attributes;
attributes = nullptr;
Expression::Builder& Expression::Builder::addAttribute(const UnicodeString& k,
Operand&& v,
UErrorCode& status) {
attributes.add(Option(k, std::move(v)), status);
return *this;
}
@ -568,16 +585,14 @@ Expression Expression::Builder::build(UErrorCode& errorCode) {
return result;
}
if (attributes != nullptr) {
attributeMap = OptionMap(*attributes, errorCode);
}
OptionMap attributeMap = attributes.build(errorCode);
if (hasOperand && hasOperator) {
result = Expression(rator, rand, attributeMap);
result = Expression(rator, rand, std::move(attributeMap));
} else if (hasOperand && !hasOperator) {
result = Expression(rand, attributeMap);
result = Expression(rand, std::move(attributeMap));
} else {
// rator is valid, rand is not valid
result = Expression(rator, attributeMap);
result = Expression(rator, std::move(attributeMap));
}
return result;
}
@ -591,11 +606,7 @@ Expression& Expression::operator=(Expression other) noexcept {
return *this;
}
Expression::Builder::~Builder() {
if (attributes != nullptr) {
delete attributes;
}
}
Expression::Builder::~Builder() {}
Expression::~Expression() {}
@ -651,16 +662,13 @@ const Reserved* UnsupportedStatement::getBody(UErrorCode& errorCode) const {
UnsupportedStatement::UnsupportedStatement(const UnicodeString& k,
const std::optional<Reserved>& r,
const UVector& es,
UErrorCode& status) : keyword(k), body(r) {
UErrorCode& status)
: keyword(k), body(r), expressionsLen(es.size()) {
CHECK_ERROR(status);
U_ASSERT(es.size() >= 1);
Expression* result = copyVectorToArray<Expression>(es, expressionsLen);
if (result == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
expressionsLen = 0;
return;
}
U_ASSERT(expressionsLen >= 1);
Expression* result = copyVectorToArray<Expression>(es, status);
CHECK_ERROR(status);
expressions.adoptInstead(result);
}
@ -669,7 +677,11 @@ UnsupportedStatement::UnsupportedStatement(const UnsupportedStatement& other) {
body = other.body;
expressionsLen = other.expressionsLen;
U_ASSERT(expressionsLen > 0);
expressions.adoptInstead(copyArray(other.expressions.getAlias(), expressionsLen));
UErrorCode localErrorCode = U_ZERO_ERROR;
expressions.adoptInstead(copyArray(other.expressions.getAlias(), expressionsLen, localErrorCode));
if (U_FAILURE(localErrorCode)) {
expressionsLen = 0;
}
}
UnsupportedStatement& UnsupportedStatement::operator=(UnsupportedStatement other) noexcept {
@ -720,21 +732,32 @@ Pattern::Pattern(const UVector& ps, UErrorCode& status) : len(ps.size()) {
if (U_FAILURE(status)) {
return;
}
PatternPart* result = copyVectorToArray<PatternPart>(ps, len);
if (result == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
PatternPart* result = copyVectorToArray<PatternPart>(ps, status);
CHECK_ERROR(status);
parts.adoptInstead(result);
}
// Copy constructor
Pattern::Pattern(const Pattern& other) noexcept : len(other.len) {
parts.adoptInstead(copyArray(other.parts.getAlias(), len));
Pattern::Pattern(const Pattern& other) : len(other.len) {
U_ASSERT(!other.bogus);
UErrorCode localErrorCode = U_ZERO_ERROR;
if (len == 0) {
parts.adoptInstead(nullptr);
} else {
parts.adoptInstead(copyArray(other.parts.getAlias(), len, localErrorCode));
}
if (U_FAILURE(localErrorCode)) {
bogus = true;
}
}
int32_t Pattern::numParts() const {
U_ASSERT(!bogus);
return len;
}
const PatternPart& Pattern::getPart(int32_t i) const {
U_ASSERT(i < numParts());
U_ASSERT(!bogus && i < numParts());
return parts[i];
}
@ -873,12 +896,26 @@ Matcher& Matcher::operator=(Matcher other) {
}
Matcher::Matcher(const Matcher& other) {
U_ASSERT(!other.bogus);
numSelectors = other.numSelectors;
numVariants = other.numVariants;
selectors.adoptInstead(copyArray<Expression>(other.selectors.getAlias(), numSelectors));
variants.adoptInstead(copyArray<Variant>(other.variants.getAlias(), numVariants));
UErrorCode localErrorCode = U_ZERO_ERROR;
selectors.adoptInstead(copyArray<Expression>(other.selectors.getAlias(),
numSelectors,
localErrorCode));
variants.adoptInstead(copyArray<Variant>(other.variants.getAlias(),
numVariants,
localErrorCode));
if (U_FAILURE(localErrorCode)) {
bogus = true;
}
}
Matcher::Matcher(Expression* ss, int32_t ns, Variant* vs, int32_t nv)
: selectors(ss), numSelectors(ns), variants(vs), numVariants(nv) {}
Matcher::~Matcher() {}
// --------------- MFDataModel
const Pattern& MFDataModel::getPattern() const {
@ -1012,29 +1049,34 @@ MFDataModel::Builder& MFDataModel::Builder::setPattern(Pattern&& pat) {
MFDataModel::MFDataModel(const MFDataModel& other) : body(Pattern()) {
U_ASSERT(!other.bogus);
UErrorCode localErrorCode = U_ZERO_ERROR;
if (other.hasPattern()) {
body.emplace<Pattern>(Pattern(*std::get_if<Pattern>(&other.body)));
// body.emplace<Pattern>(Pattern(*std::get_if<Pattern>(&other.body)));
body = *std::get_if<Pattern>(&other.body);
} else {
const Expression* otherSelectors = other.getSelectorsInternal();
const Variant* otherVariants = other.getVariantsInternal();
int32_t numSelectors = other.numSelectors();
int32_t numVariants = other.numVariants();
Expression* copiedSelectors = copyArray(otherSelectors, numSelectors);
Variant* copiedVariants = copyArray(otherVariants, numVariants);
if (!(copiedSelectors != nullptr && copiedVariants != nullptr)) {
Expression* copiedSelectors = copyArray(otherSelectors, numSelectors, localErrorCode);
Variant* copiedVariants = copyArray(otherVariants, numVariants, localErrorCode);
if (U_FAILURE(localErrorCode)) {
bogus = true;
return;
}
body.emplace<Matcher>(Matcher(copiedSelectors, numSelectors, copiedVariants, numVariants));
// body.emplace<Matcher>(Matcher(copiedSelectors, numSelectors, copiedVariants, numVariants));
body = Matcher(copiedSelectors, numSelectors, copiedVariants, numVariants);
}
bindingsLen = other.bindingsLen;
bindings.adoptInstead(copyArray(other.bindings.getAlias(), bindingsLen));
if (!bindings.isValid()) {
bindings.adoptInstead(copyArray(other.bindings.getAlias(), bindingsLen, localErrorCode));
if (U_FAILURE(localErrorCode)) {
bogus = true;
}
unsupportedStatementsLen = other.unsupportedStatementsLen;
unsupportedStatements.adoptInstead(copyArray(other.unsupportedStatements.getAlias(), unsupportedStatementsLen));
if (!unsupportedStatements.isValid()) {
unsupportedStatements.adoptInstead(copyArray(other.unsupportedStatements.getAlias(), unsupportedStatementsLen, localErrorCode));
if (U_FAILURE(localErrorCode)) {
bogus = true;
}
}
@ -1045,25 +1087,33 @@ MFDataModel::MFDataModel(const MFDataModel::Builder& builder, UErrorCode& errorC
if (builder.hasPattern) {
body.emplace<Pattern>(builder.pattern);
} else {
int32_t numVariants = builder.variants == nullptr ? 0 : builder.variants->size();
int32_t numSelectors = builder.selectors == nullptr ? 0 : builder.selectors->size();
Variant* variants = copyVectorToArray<Variant>(*builder.variants, numVariants);
Expression* selectors = copyVectorToArray<Expression>(*builder.selectors, numSelectors);
bogus &= (variants != nullptr && selectors != nullptr);
U_ASSERT(builder.variants != nullptr);
U_ASSERT(builder.selectors != nullptr);
int32_t numVariants = builder.variants->size();
int32_t numSelectors = builder.selectors->size();
Variant* variants = copyVectorToArray<Variant>(*builder.variants, errorCode);
Expression* selectors = copyVectorToArray<Expression>(*builder.selectors, errorCode);
if (U_FAILURE(errorCode)) {
bogus = true;
return;
}
body.emplace<Matcher>(Matcher(selectors, numSelectors, variants, numVariants));
}
U_ASSERT(builder.bindings != nullptr);
bindingsLen = builder.bindings->size();
bindings.adoptInstead(copyVectorToArray<Binding>(*builder.bindings, bindingsLen));
bindings.adoptInstead(copyVectorToArray<Binding>(*builder.bindings, errorCode));
unsupportedStatementsLen = builder.unsupportedStatements->size();
unsupportedStatements.adoptInstead(copyVectorToArray<UnsupportedStatement>(*builder.unsupportedStatements, unsupportedStatementsLen));
bogus &= ((bool) (bindings.isValid() && unsupportedStatements.isValid()));
unsupportedStatements.adoptInstead(copyVectorToArray<UnsupportedStatement>(*builder.unsupportedStatements, errorCode));
if (U_FAILURE(errorCode)) {
bogus = true;
}
}
MFDataModel::MFDataModel() : body(Pattern()) {}
MFDataModel& MFDataModel::operator=(MFDataModel other) noexcept {
U_ASSERT(!other.bogus);
swap(*this, other);
return *this;
}

View file

@ -8,7 +8,6 @@
#if !UCONFIG_NO_MF2
#include "messageformat2_allocation.h"
#include "messageformat2_cached_formatters.h"
#include "messageformat2_evaluation.h"
#include "messageformat2_macros.h"
#include "uvector.h" // U_ASSERT
@ -41,10 +40,8 @@ const ResolvedFunctionOption* FunctionOptions::getResolvedFunctionOptions(int32_
FunctionOptions::FunctionOptions(UVector&& optionsVector, UErrorCode& status) {
CHECK_ERROR(status);
options = moveVectorToArray<ResolvedFunctionOption>(optionsVector, functionOptionsLen);
if (options == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
}
functionOptionsLen = optionsVector.size();
options = moveVectorToArray<ResolvedFunctionOption>(optionsVector, status);
}
UBool FunctionOptions::getFunctionOption(const UnicodeString& key, Formattable& option) const {
@ -186,8 +183,6 @@ PrioritizedVariant::~PrioritizedVariant() {}
Closure::~Closure() {}
CachedFormatters::~CachedFormatters() {}
// MessageContext methods
void MessageContext::checkErrors(UErrorCode& status) const {

View file

@ -9,7 +9,6 @@
#include "unicode/messageformat2.h"
#include "messageformat2_allocation.h"
#include "messageformat2_cached_formatters.h"
#include "messageformat2_checker.h"
#include "messageformat2_errors.h"
#include "messageformat2_evaluation.h"
@ -138,13 +137,6 @@ namespace message2 {
errors = errorsNew.orphan();
}
// Initialize formatter cache
cachedFormatters = new CachedFormatters();
if (cachedFormatters == nullptr) {
success = U_MEMORY_ALLOCATION_ERROR;
return;
}
// Note: we currently evaluate variables lazily,
// without memoization. This call is still necessary
// to check out-of-scope uses of local variables in
@ -156,9 +148,6 @@ namespace message2 {
}
void MessageFormatter::cleanup() noexcept {
if (cachedFormatters != nullptr) {
delete cachedFormatters;
}
if (errors != nullptr) {
delete errors;
}
@ -172,8 +161,6 @@ namespace message2 {
customMFFunctionRegistry = other.customMFFunctionRegistry;
dataModel = std::move(other.dataModel);
normalizedInput = std::move(other.normalizedInput);
cachedFormatters = other.cachedFormatters;
other.cachedFormatters = nullptr;
errors = other.errors;
other.errors = nullptr;
return *this;
@ -219,10 +206,26 @@ namespace message2 {
return result;
}
// Precondition: formatter is defined
const Formatter& MessageFormatter::getFormatter(MessageContext& context, const FunctionName& functionName, UErrorCode& status) const {
U_ASSERT(isFormatter(functionName));
return *maybeCachedFormatter(context, functionName, status);
// Returns an owned pointer
Formatter* MessageFormatter::getFormatter(const FunctionName& functionName, UErrorCode& status) const {
NULL_ON_ERROR(status);
// Create the formatter
// First, look up the formatter factory for this function
FormatterFactory* formatterFactory = lookupFormatterFactory(functionName, status);
NULL_ON_ERROR(status);
U_ASSERT(formatterFactory != nullptr);
// Create a specific instance of the formatter
Formatter* formatter = formatterFactory->createFormatter(locale, status);
NULL_ON_ERROR(status);
if (formatter == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
return nullptr;
}
return formatter;
}
bool MessageFormatter::getDefaultFormatterNameByType(const UnicodeString& type, FunctionName& name) const {
@ -275,16 +278,15 @@ namespace message2 {
return nullptr;
}
// Returns non-owned pointer. Returns pointer rather than reference because it can fail.
// Returns non-const because FormatterFactory is mutable.
FormatterFactory* MessageFormatter::lookupFormatterFactory(MessageContext& context, const FunctionName& functionName, UErrorCode& status) const {
DynamicErrors& err = context.getErrors();
FormatterFactory* MessageFormatter::lookupFormatterFactory(const FunctionName& functionName,
UErrorCode& status) const {
NULL_ON_ERROR(status);
if (isBuiltInFormatter(functionName)) {
return standardMFFunctionRegistry.getFormatter(functionName);
}
if (isBuiltInSelector(functionName)) {
err.setFormattingError(functionName, status);
status = U_MF_FORMATTING_ERROR;
return nullptr;
}
if (hasCustomMFFunctionRegistry()) {
@ -294,7 +296,7 @@ namespace message2 {
return formatterFactory;
}
if (customMFFunctionRegistry.getSelector(functionName) != nullptr) {
err.setFormattingError(functionName, status);
status = U_MF_FORMATTING_ERROR;
return nullptr;
}
}
@ -302,7 +304,7 @@ namespace message2 {
// isn't built-in, or the function doesn't exist in either the built-in
// or custom registry.
// Unknown function error
err.setUnknownFunction(functionName, status);
status = U_MF_UNKNOWN_FUNCTION_ERROR;
return nullptr;
}
@ -315,39 +317,6 @@ namespace message2 {
return hasCustomMFFunctionRegistry() && getCustomMFFunctionRegistry().getSelector(fn) != nullptr;
}
const Formatter* MessageFormatter::maybeCachedFormatter(MessageContext& context, const FunctionName& functionName, UErrorCode& errorCode) const {
NULL_ON_ERROR(errorCode);
U_ASSERT(cachedFormatters != nullptr);
const Formatter* result = cachedFormatters->getFormatter(functionName);
if (result == nullptr) {
// Create the formatter
// First, look up the formatter factory for this function
FormatterFactory* formatterFactory = lookupFormatterFactory(context, functionName, errorCode);
NULL_ON_ERROR(errorCode);
// If the formatter factory was null, there must have been
// an earlier error/warning
if (formatterFactory == nullptr) {
U_ASSERT(context.getErrors().hasUnknownFunctionError() || context.getErrors().hasFormattingError());
return nullptr;
}
// Create a specific instance of the formatter
Formatter* formatter = formatterFactory->createFormatter(locale, errorCode);
NULL_ON_ERROR(errorCode);
if (formatter == nullptr) {
errorCode = U_MEMORY_ALLOCATION_ERROR;
return nullptr;
}
cachedFormatters->adoptFormatter(functionName, formatter, errorCode);
return formatter;
} else {
return result;
}
}
} // namespace message2
U_NAMESPACE_END

View file

@ -908,7 +908,8 @@ Literal Parser::parseLiteral(UErrorCode& errorCode) {
Adds the option to `options`
*/
void Parser::parseAttribute(UVector& options, UErrorCode& errorCode) {
template<class T>
void Parser::parseAttribute(AttributeAdder<T>& attrAdder, UErrorCode& errorCode) {
U_ASSERT(inBounds(source, index));
U_ASSERT(source[index] == AT);
@ -950,26 +951,7 @@ void Parser::parseAttribute(UVector& options, UErrorCode& errorCode) {
index = savedIndex;
}
CHECK_ERROR(errorCode);
// No duplicate check -- the spec doesn't require one
Option* opt = new Option(lhs, std::move(rand));
if (opt == nullptr) {
errorCode = U_MEMORY_ALLOCATION_ERROR;
return;
}
options.adoptElement(static_cast<void*>(opt), errorCode);
}
// `options` is a vector of Option*
static bool hasOption(const UVector& options, const UnicodeString& optionName) {
for (int32_t i = 0; i < options.size(); i++) {
const Option* opt = static_cast<Option*>(options.elementAt(i));
if (opt->getName() == optionName) {
return true;
}
}
return false;
attrAdder.addAttribute(lhs, std::move(rand), errorCode);
}
/*
@ -977,50 +959,8 @@ static bool hasOption(const UVector& options, const UnicodeString& optionName) {
Adds the option to `optionList`
*/
void Parser::parseOption(UVector& options, UErrorCode& errorCode) {
U_ASSERT(inBounds(source, index));
// Parse LHS
UnicodeString lhs = parseIdentifier(errorCode);
// Parse '='
parseTokenWithWhitespace(EQUALS, errorCode);
UnicodeString rhsStr;
Operand rand;
// Parse RHS, which is either a literal or variable
switch (source[index]) {
case DOLLAR: {
rand = Operand(parseVariableName(errorCode));
break;
}
default: {
// Must be a literal
rand = Operand(parseLiteral(errorCode));
break;
}
}
U_ASSERT(!rand.isNull());
// Finally, add the key=value mapping
if (hasOption(options, lhs)) {
errors.setDuplicateOptionName(errorCode);
} else {
Option* opt = new Option(lhs, std::move(rand));
if (opt == nullptr) {
errorCode = U_MEMORY_ALLOCATION_ERROR;
return;
}
options.adoptElement(static_cast<void*>(opt), errorCode);
}
}
/*
Consume a name-value pair, matching the `option` nonterminal in the grammar.
Adds the option to `optionList`
*/
void Parser::parseOption(Operator::Builder &builder, UErrorCode& errorCode) {
template<class T>
void Parser::parseOption(OptionAdder<T>& addOption, UErrorCode& errorCode) {
U_ASSERT(inBounds(source, index));
// Parse LHS
@ -1049,7 +989,7 @@ void Parser::parseOption(Operator::Builder &builder, UErrorCode& errorCode) {
// Use a local error code, check for duplicate option error and
// record it as with other errors
UErrorCode status = U_ZERO_ERROR;
builder.addOption(lhs, std::move(rand), status);
addOption.addOption(lhs, std::move(rand), status);
if (U_FAILURE(status)) {
U_ASSERT(status == U_MF_DUPLICATE_OPTION_NAME_ERROR);
errors.setDuplicateOptionName(errorCode);
@ -1066,7 +1006,8 @@ void Parser::parseOption(Operator::Builder &builder, UErrorCode& errorCode) {
Consume optional whitespace followed by a sequence of options
(possibly empty), separated by whitespace
*/
void Parser::parseOptions(Operator::Builder& builder, UErrorCode& errorCode) {
template <class T>
void Parser::parseOptions(OptionAdder<T>& addOption, UErrorCode& errorCode) {
// Early exit if out of bounds -- no more work is possible
CHECK_BOUNDS(source, index, parseError, errorCode);
@ -1144,121 +1085,21 @@ an option or an attribute.
index = firstWhitespace;
break;
}
parseOption(builder, errorCode);
parseOption(addOption, errorCode);
}
}
/*
Consume optional whitespace followed by a sequence of options
(possibly empty), separated by whitespace
*/
OptionMap Parser::parseOptions(UErrorCode& errorCode) {
OptionMap options;
// Early exit if out of bounds -- no more work is possible
if (!inBounds(source, index)) {
ERROR(parseError, errorCode, index);
return options;
}
// Initialize options vector, which supports equality on elements
LocalPointer<UVector> optionVec(createStringUVector(errorCode));
if (U_FAILURE(errorCode)) {
return options;
}
/*
Arbitrary lookahead is required to parse option lists. To see why, consider
these rules from the grammar:
expression = "{" [s] (((literal / variable) [s annotation]) / annotation) [s] "}"
annotation = (function *(s option)) / reserved
And this example:
{:foo }
Derivation:
expression -> "{" [s] (((literal / variable) [s annotation]) / annotation) [s] "}"
-> "{" [s] annotation [s] "}"
-> "{" [s] ((function *(s option)) / reserved) [s] "}"
-> "{" [s] function *(s option) [s] "}"
In this example, knowing whether to expect a '}' or the start of another option
after the whitespace would require arbitrary lookahead -- in other words, which
rule should we apply?
*(s option) -> s option *(s option)
or
*(s option) ->
The same would apply to the example {:foo k=v } (note the trailing space after "v").
This is addressed using a form of backtracking and (to make the backtracking easier
to apply) a slight refactoring to the grammar.
This code is written as if the grammar is:
expression = "{" [s] (((literal / variable) ([s] / [s annotation])) / annotation) "}"
annotation = (function *(s option) [s]) / (reserved [s])
Parsing the `*(s option) [s]` sequence can be done within `parseOptions()`, meaning
that `parseExpression()` can safely require a '}' after `parseOptions()` finishes.
Note that when "backtracking" really just means early exit, since only whitespace
is involved and there's no state to save.
*/
while(true) {
// If the next character is not whitespace, that means we've already
// parsed the entire options list (which may have been empty) and there's
// no trailing whitespace. In that case, exit.
if (!isWhitespace(source[index])) {
break;
}
// In any case other than an empty options list, there must be at least
// one whitespace character.
parseRequiredWhitespace(errorCode);
// Restore precondition
if (!inBounds(source, index)) {
ERROR(parseError, errorCode, index);
break;
}
// If a name character follows, then at least one more option remains
// in the list.
// Otherwise, we've consumed all the options and any trailing whitespace,
// and can exit.
// Note that exiting is sort of like backtracking: "(s option)" doesn't apply,
// so we back out to [s].
if (!isNameStart(source[index])) {
// We've consumed all the options (meaning that either we consumed non-empty
// whitespace, or consumed at least one option.)
// Done.
// Remove the whitespace from normalizedInput
normalizedInput.truncate(normalizedInput.length() - 1);
break;
}
parseOption(*optionVec, errorCode);
}
return OptionMap(*optionVec, errorCode);
}
/*
Consume optional whitespace followed by a sequence of attributes
(possibly empty), separated by whitespace
*/
OptionMap Parser::parseAttributes(UErrorCode& errorCode) {
OptionMap attributes;
template<class T>
void Parser::parseAttributes(AttributeAdder<T>& attrAdder, UErrorCode& errorCode) {
// Early exit if out of bounds -- no more work is possible
if (!inBounds(source, index)) {
ERROR(parseError, errorCode, index);
return attributes;
}
// Initialize options vector, which supports equality on elements
LocalPointer<UVector> options(createStringUVector(errorCode));
if (U_FAILURE(errorCode)) {
return attributes;
return;
}
/*
@ -1297,10 +1138,8 @@ Arbitrary lookahead is required to parse attribute lists, similarly to option li
normalizedInput.truncate(normalizedInput.length() - 1);
break;
}
parseAttribute(*options, errorCode);
parseAttribute(attrAdder, errorCode);
}
return OptionMap(*options, errorCode);
}
void Parser::parseReservedEscape(UnicodeString &str, UErrorCode& errorCode) {
@ -1490,7 +1329,6 @@ Reserved Parser::parseReservedBody(Reserved::Builder& builder, UErrorCode& statu
return builder.build(status);
}
/*
Consume a function call or reserved string, matching the `annotation`
nonterminal in the grammar
@ -1507,8 +1345,10 @@ Operator Parser::parseAnnotation(UErrorCode& status) {
// Consume the function name
FunctionName func = parseFunction(status);
ratorBuilder.setFunctionName(std::move(func));
OptionAdder<Operator::Builder> addOptions(ratorBuilder);
// Consume the options (which may be empty)
parseOptions(ratorBuilder, status);
parseOptions(addOptions, status);
} else {
// Must be reserved
// A reserved sequence is not a parse error, but might be a formatting error
@ -1683,8 +1523,8 @@ Expression Parser::parseExpression(UErrorCode& status) {
}
// Parse attributes
OptionMap attributes = parseAttributes(status);
exprBuilder.setAttributeMap(std::move(attributes));
AttributeAdder attrAdder(exprBuilder);
parseAttributes(attrAdder, status);
// Parse optional space
// (the last [s] in e.g. "{" [s] literal [s annotation] *(s attribute) [s] "}")
@ -2138,13 +1978,15 @@ Markup Parser::parseMarkup(UErrorCode& status) {
// Parse the options, which must begin with a ' '
// if present
if (inBounds(source, index) && isWhitespace(source[index])) {
builder.setOptionMap(parseOptions(status));
OptionAdder<Markup::Builder> optionAdder(builder);
parseOptions(optionAdder, status);
}
// Parse the attributes, which also must begin
// with a ' '
if (inBounds(source, index) && isWhitespace(source[index])) {
builder.setAttributeMap(parseAttributes(status));
AttributeAdder attrAdder(builder);
parseAttributes(attrAdder, status);
}
parseOptionalWhitespace(status);

View file

@ -26,6 +26,34 @@ namespace message2 {
using namespace data_model;
// Used for parameterizing options parsing code
// over the two builders that use it (Operator and Markup)
template <class T>
class OptionAdder {
private:
T& builder;
public:
OptionAdder(T& b) : builder(b) {}
void addOption(const UnicodeString& k, Operand&& r, UErrorCode& s) {
builder.addOption(k, std::move(r), s);
}
};
// Used for parameterizing attributes parsing code
// over the two builders that use it (Expression and Markup)
// Unfortunately the same OptionAdder class can't just be reused,
// becaues duplicate options are forbidden while duplicate attributes are not
template <class T>
class AttributeAdder {
private:
T& builder;
public:
AttributeAdder(T& b) : builder(b) {}
void addAttribute(const UnicodeString& k, Operand&& r, UErrorCode& s) {
builder.addAttribute(k, std::move(r), s);
}
};
// Parser class (private)
class Parser : public UMemory {
public:
@ -98,12 +126,14 @@ namespace message2 {
Literal parseUnquotedLiteral(UErrorCode&);
Literal parseQuotedLiteral(UErrorCode&);
Literal parseLiteral(UErrorCode&);
void parseAttribute(UVector&, UErrorCode&);
OptionMap parseAttributes(UErrorCode&);
void parseOption(Operator::Builder&, UErrorCode&);
void parseOption(UVector&, UErrorCode&);
void parseOptions(Operator::Builder&, UErrorCode&);
OptionMap parseOptions(UErrorCode&);
template<class T>
void parseAttribute(AttributeAdder<T>&, UErrorCode&);
template<class T>
void parseAttributes(AttributeAdder<T>&, UErrorCode&);
template<class T>
void parseOption(OptionAdder<T>&, UErrorCode&);
template<class T>
void parseOptions(OptionAdder<T>&, UErrorCode&);
void parseReservedEscape(UnicodeString&, UErrorCode&);
void parseReservedChunk(Reserved::Builder&, UErrorCode&);
Reserved parseReserved(UErrorCode&);

View file

@ -28,7 +28,6 @@ U_NAMESPACE_BEGIN
namespace message2 {
class CachedFormatters;
class Environment;
class MessageContext;
class ResolvedSelector;
@ -46,7 +45,7 @@ namespace message2 {
* `FormatterFactory` objects implementing custom formatters, which are allowed to contain
* mutable state.)
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
class U_I18N_API MessageFormatter : public UObject {
@ -57,14 +56,14 @@ namespace message2 {
* Move assignment operator:
* The source MessageFormatter will be left in a valid but undefined state.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
MessageFormatter& operator=(MessageFormatter&&) noexcept;
/**
* Destructor.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
virtual ~MessageFormatter();
@ -80,7 +79,7 @@ namespace message2 {
* is still provided in the presence of most error types.
* @return The string result of formatting the message with the given arguments.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
UnicodeString formatToString(const MessageArguments& arguments, UErrorCode &status);
@ -97,7 +96,7 @@ namespace message2 {
* is still provided in the presence of most error types.
* @return The `FormattedMessage` representing the formatted message.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
FormattedMessage format(const MessageArguments& arguments, UErrorCode &status) const {
@ -113,7 +112,7 @@ namespace message2 {
*
* @return A reference to the locale.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
const Locale& getLocale() const { return locale; }
@ -124,7 +123,7 @@ namespace message2 {
* @return result A string representation of the data model.
* The string is a valid MessageFormat 2.0 message.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
UnicodeString getPattern() const;
@ -135,7 +134,7 @@ namespace message2 {
*
* @return A reference to the data model.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
const MFDataModel& getDataModel() const;
@ -175,7 +174,7 @@ namespace message2 {
* @param locale The desired locale.
* @return A reference to the builder.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
Builder& setLocale(const Locale& locale);
@ -191,7 +190,7 @@ namespace message2 {
* pattern cannot be parsed, set to failure code.
* @return A reference to the builder.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
Builder& setPattern(const UnicodeString& pattern, UParseError& parseError, UErrorCode& status);
@ -205,7 +204,7 @@ namespace message2 {
* builder.
* @return A reference to the builder.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
Builder& setFunctionRegistry(const MFFunctionRegistry& functionRegistry);
@ -215,7 +214,7 @@ namespace message2 {
* @param dataModel Data model to format. Passed by move.
* @return A reference to the builder.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
Builder& setDataModel(MFDataModel&& dataModel);
@ -230,7 +229,7 @@ namespace message2 {
* nor the data model is set, set to failure code.
* @return The new MessageFormatter object
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
MessageFormatter build(UErrorCode& status) const;
@ -242,14 +241,14 @@ namespace message2 {
*
* @param status Input/output error code.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
Builder(UErrorCode& status);
/**
* Destructor.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
virtual ~Builder();
@ -261,7 +260,7 @@ namespace message2 {
*
* @return A normalized string representation of the input
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
const UnicodeString& getNormalizedPattern() const { return normalizedInput; }
@ -328,17 +327,17 @@ namespace message2 {
const MFFunctionRegistry& getCustomMFFunctionRegistry() const;
bool isCustomFormatter(const FunctionName&) const;
FormatterFactory* lookupFormatterFactory(MessageContext&, const FunctionName&, UErrorCode& status) const;
FormatterFactory* lookupFormatterFactory(const FunctionName&, UErrorCode& status) const;
bool isBuiltInSelector(const FunctionName&) const;
bool isBuiltInFormatter(const FunctionName&) const;
bool isCustomSelector(const FunctionName&) const;
const SelectorFactory* lookupSelectorFactory(MessageContext&, const FunctionName&, UErrorCode&) const;
bool isSelector(const FunctionName& fn) const { return isBuiltInSelector(fn) || isCustomSelector(fn); }
bool isFormatter(const FunctionName& fn) const { return isBuiltInFormatter(fn) || isCustomFormatter(fn); }
const Formatter* maybeCachedFormatter(MessageContext&, const FunctionName&, UErrorCode&) const;
const Formatter* lookupFormatter(const FunctionName&, UErrorCode&) const;
Selector* getSelector(MessageContext&, const FunctionName&, UErrorCode&) const;
const Formatter& getFormatter(MessageContext&, const FunctionName&, UErrorCode&) const;
Formatter* getFormatter(const FunctionName&, UErrorCode&) const;
bool getDefaultFormatterNameByType(const UnicodeString&, FunctionName&) const;
// Checking for resolution errors
@ -374,16 +373,6 @@ namespace message2 {
// Normalized version of the input string (optional whitespace removed)
UnicodeString normalizedInput;
// Formatter cache
// Must be a raw pointer to avoid including the internal header file
// defining CachedFormatters
// Owned by `this`
// TODO: This is an optimization that the "TemperatureFormatter" test
// (ported from ICU4J) was checking for; however, that test was removed
// in order to make `setFormatter()` safe, so maybe this should be
// removed too
CachedFormatters* cachedFormatters;
// Errors -- only used while parsing and checking for data model errors; then
// the MessageContext keeps track of errors
// Must be a raw pointer to avoid including the internal header file

View file

@ -34,19 +34,10 @@ U_NAMESPACE_BEGIN
// (See measunit_impl.h, datefmt.h, collationiterator.h, erarules.h and others
// for similar examples.)
#if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN
#if defined(_MSC_VER)
// Ignore warning 4661 as LocalPointerBase does not use operator== or operator!=
#pragma warning(push)
#pragma warning(disable: 4661)
#endif
template class U_I18N_API LocalPointerBase<UnicodeString>;
template class U_I18N_API LocalPointerBase<message2::Formattable>;
template class U_I18N_API LocalArray<UnicodeString>;
template class U_I18N_API LocalArray<message2::Formattable>;
#if defined(_MSC_VER)
// Ignore warning 4661 as LocalPointerBase does not use operator== or operator!=
#pragma warning(pop)
#endif
#endif
/// @endcond
@ -62,7 +53,7 @@ namespace message2 {
* The `MessageArguments` class represents the named arguments to a message.
* It is immutable and movable. It is not copyable.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
class U_I18N_API MessageArguments : public UObject {
@ -75,7 +66,7 @@ namespace message2 {
* objects (argument values). The keys and values of the map are copied into the result.
* @param status Input/output error code.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
MessageArguments(const std::map<UnicodeString, Formattable>& args, UErrorCode& status) {
@ -99,7 +90,7 @@ namespace message2 {
* Move operator:
* The source MessageArguments will be left in a valid but undefined state.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
MessageArguments& operator=(MessageArguments&&) noexcept;
@ -107,14 +98,14 @@ namespace message2 {
* Default constructor.
* Returns an empty arguments mapping.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
MessageArguments() = default;
/**
* Destructor.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
virtual ~MessageArguments();

File diff suppressed because it is too large Load diff

View file

@ -40,7 +40,7 @@ namespace message2 {
* an arbitrary class that can be passed to a custom formatter or selector function.
* To be passed in such a way, it must be wrapped in a `Formattable` object.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
class U_I18N_API FormattableObject : public UObject {
@ -51,14 +51,14 @@ namespace message2 {
* of any custom functions that rely on particular values of this tag
* corresponding to particular classes that the object contents can be
* downcast to, to ensure that the type tags are used soundly.
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
virtual const UnicodeString& tag() const = 0;
/**
* Destructor.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
virtual ~FormattableObject();
@ -76,12 +76,7 @@ U_NAMESPACE_END
// (See measunit_impl.h, datefmt.h, collationiterator.h, erarules.h and others
// for similar examples.)
#if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN
#if defined(_MSC_VER)
// Ignore warning 4661 as LocalPointerBase does not use operator== or operator!=
#pragma warning(push)
#pragma warning(disable: 4661)
#endif
#if defined(_MSC_VER)
#if defined(U_REAL_MSVC) && defined(_MSVC_STL_VERSION)
template class U_I18N_API std::_Variant_storage_<false,
double,
int64_t,
@ -97,9 +92,6 @@ template class U_I18N_API std::variant<double,
icu::Formattable,
const icu::message2::FormattableObject*,
P>;
#if defined(_MSC_VER)
#pragma warning(pop)
#endif
#endif
/// @endcond
@ -118,7 +110,7 @@ namespace message2 {
* object. Likewise, while a pointer to a wrapped array or object is `const`,
* the referents of the pointers may be mutated by other code.)
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
class U_I18N_API Formattable : public UObject {
@ -127,7 +119,7 @@ namespace message2 {
/**
* Gets the data type of this Formattable object.
* @return the data type of this Formattable object.
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
UFormattableType getType() const;
@ -138,7 +130,7 @@ namespace message2 {
*
* @param status Input/output error code.
* @return the double value of this object.
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
double getDouble(UErrorCode& status) const {
@ -160,7 +152,7 @@ namespace message2 {
*
* @param status Input/output error code.
* @return the long value of this object.
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
int32_t getLong(UErrorCode& status) const {
@ -183,7 +175,7 @@ namespace message2 {
*
* @param status Input/output error code.
* @return the int64 value of this object.
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
int64_t getInt64Value(UErrorCode& status) const {
@ -210,7 +202,7 @@ namespace message2 {
* the status is set to U_INVALID_FORMAT_ERROR.
* @param status the error code
* @return the int64 value of this object.
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
int64_t getInt64(UErrorCode& status) const;
@ -220,7 +212,7 @@ namespace message2 {
*
* @param status Input/output error code.
* @return A reference to the string value of this object.
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
const UnicodeString& getString(UErrorCode& status) const {
@ -239,7 +231,7 @@ namespace message2 {
*
* @param status Input/output error code.
* @return the Date value of this object.
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
UDate getDate(UErrorCode& status) const {
@ -256,7 +248,7 @@ namespace message2 {
* Returns true if the data type of this Formattable object
* is kDouble
* @return true if this is a pure numeric object
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
UBool isNumeric() const { return (getType() == UFMT_DOUBLE || getType() == UFMT_LONG || getType() == UFMT_INT64); }
@ -268,7 +260,7 @@ namespace message2 {
* @param count fill-in with the count of this object.
* @param status Input/output error code.
* @return the array value of this object.
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
const Formattable* getArray(int32_t& count, UErrorCode& status) const;
@ -280,7 +272,7 @@ namespace message2 {
*
* @param status Input/output error code.
* @return a FormattableObject pointer, or nullptr
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
const FormattableObject* getObject(UErrorCode& status) const {
@ -300,7 +292,7 @@ namespace message2 {
* @param f1 will get f2's contents
* @param f2 will get f1's contents
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
friend inline void swap(Formattable& f1, Formattable& f2) noexcept {
@ -312,14 +304,14 @@ namespace message2 {
/**
* Copy constructor.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
Formattable(const Formattable&);
/**
* Assignment operator
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
Formattable& operator=(Formattable) noexcept;
@ -327,7 +319,7 @@ namespace message2 {
* Default constructor. Leaves the Formattable in a
* valid but undefined state.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
Formattable() : contents(0.0) {}
@ -336,7 +328,7 @@ namespace message2 {
*
* @param s A string to wrap as a Formattable.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
Formattable(const UnicodeString& s) : contents(s) {}
@ -345,7 +337,7 @@ namespace message2 {
*
* @param d A double value to wrap as a Formattable.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
Formattable(double d) : contents(d) {}
@ -354,7 +346,7 @@ namespace message2 {
*
* @param i An int64 value to wrap as a Formattable.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
Formattable(int64_t i) : contents(i) {}
@ -362,7 +354,7 @@ namespace message2 {
* Date factory method.
*
* @param d A UDate value to wrap as a Formattable.
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
static Formattable forDate(UDate d) {
@ -382,7 +374,7 @@ namespace message2 {
* @param status the error code. Possible errors include U_INVALID_FORMAT_ERROR
* if the format of the string does not conform to that of a
* decimal number.
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
static Formattable forDecimal(std::string_view number, UErrorCode& status);
@ -392,7 +384,7 @@ namespace message2 {
* @param arr An array of Formattables, which is adopted.
* @param len The length of the array.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
Formattable(const Formattable* arr, int32_t len) : contents(std::pair(arr, len)) {}
@ -401,14 +393,14 @@ namespace message2 {
*
* @param obj A FormattableObject (not adopted).
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
Formattable(const FormattableObject* obj) : contents(obj) {}
/**
* Destructor.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
virtual ~Formattable();
@ -420,7 +412,7 @@ namespace message2 {
* @param status Input/output error code.
* @return An icu::Formattable value with the same value as this.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
icu::Formattable asICUFormattable(UErrorCode& status) const;
@ -453,7 +445,7 @@ namespace message2 {
*
* `ResolvedFunctionOption` is immutable and is not copyable or movable.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
#ifndef U_IN_DOXYGEN
@ -482,7 +474,7 @@ class U_I18N_API ResolvedFunctionOption : public UObject {
* Mapping from option names to `message2::Formattable` objects, obtained
* by calling `getOptions()` on a `FunctionOptions` object.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
using FunctionOptionsMap = std::map<UnicodeString, message2::Formattable>;
@ -490,7 +482,7 @@ using FunctionOptionsMap = std::map<UnicodeString, message2::Formattable>;
/**
* Structure encapsulating named options passed to a custom selector or formatter.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
class U_I18N_API FunctionOptions : public UObject {
@ -505,7 +497,7 @@ class U_I18N_API FunctionOptions : public UObject {
* @return A map from strings to `message2::Formattable` objects representing
* the results of resolving each option value.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
FunctionOptionsMap getOptions() const {
@ -522,14 +514,14 @@ class U_I18N_API FunctionOptions : public UObject {
* Default constructor.
* Returns an empty mapping.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
FunctionOptions() { options = nullptr; }
/**
* Destructor.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
virtual ~FunctionOptions();
@ -537,7 +529,7 @@ class U_I18N_API FunctionOptions : public UObject {
* Move assignment operator:
* The source FunctionOptions will be left in a valid but undefined state.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
FunctionOptions& operator=(FunctionOptions&&) noexcept;
@ -545,14 +537,14 @@ class U_I18N_API FunctionOptions : public UObject {
* Move constructor:
* The source FunctionOptions will be left in a valid but undefined state.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
FunctionOptions(FunctionOptions&&);
/**
* Copy constructor.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
FunctionOptions& operator=(const FunctionOptions&) = delete;
@ -588,27 +580,27 @@ class U_I18N_API FunctionOptions : public UObject {
*
* `FormattedValue` is immutable and movable. It is not copyable.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
class U_I18N_API FormattedValue : public UObject {
public:
/**
* Formatted string constructor.
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
explicit FormattedValue(const UnicodeString&);
/**
* Formatted number constructor.
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
explicit FormattedValue(number::FormattedNumber&&);
/**
* Default constructor. Leaves the FormattedValue in
* a valid but undefined state.
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
FormattedValue() : type(kString) {}
@ -617,7 +609,7 @@ class U_I18N_API FunctionOptions : public UObject {
*
* @return True if and only if this value is a formatted string.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
bool isString() const { return type == kString; }
@ -626,7 +618,7 @@ class U_I18N_API FunctionOptions : public UObject {
*
* @return True if and only if this value is a formatted number.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
bool isNumber() const { return type == kNumber; }
@ -634,7 +626,7 @@ class U_I18N_API FunctionOptions : public UObject {
* Gets the string contents of this value. If !isString(), then
* the result is undefined.
* @return A reference to a formatted string.
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
const UnicodeString& getString() const { return stringOutput; }
@ -642,7 +634,7 @@ class U_I18N_API FunctionOptions : public UObject {
* Gets the number contents of this value. If !isNumber(), then
* the result is undefined.
* @return A reference to a formatted number.
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
const number::FormattedNumber& getNumber() const { return numberOutput; }
@ -650,7 +642,7 @@ class U_I18N_API FunctionOptions : public UObject {
* Move assignment operator:
* The source FormattedValue will be left in a valid but undefined state.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
FormattedValue& operator=(FormattedValue&&) noexcept;
@ -658,14 +650,14 @@ class U_I18N_API FunctionOptions : public UObject {
* Move constructor:
* The source FormattedValue will be left in a valid but undefined state.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
FormattedValue(FormattedValue&& other) { *this = std::move(other); }
/**
* Destructor.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
virtual ~FormattedValue();
@ -688,7 +680,7 @@ class U_I18N_API FunctionOptions : public UObject {
* `FormattablePlaceholder` is immutable (not deeply immutable) and movable.
* It is not copyable.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
class U_I18N_API FormattedPlaceholder : public UObject {
@ -700,7 +692,7 @@ class U_I18N_API FunctionOptions : public UObject {
* @param s An error string. (See the MessageFormat specification for details
* on fallback strings.)
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
explicit FormattedPlaceholder(const UnicodeString& s) : fallback(s), type(kFallback) {}
@ -712,7 +704,7 @@ class U_I18N_API FunctionOptions : public UObject {
* @param output A `FormattedValue` representing the formatted output of `input`.
* Passed by move.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
FormattedPlaceholder(const FormattedPlaceholder& input, FormattedValue&& output)
@ -727,7 +719,7 @@ class U_I18N_API FunctionOptions : public UObject {
* @param output A `FormattedValue` representing the formatted output of `input`.
* Passed by move.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
FormattedPlaceholder(const FormattedPlaceholder& input, FunctionOptions&& opts, FormattedValue&& output)
@ -739,7 +731,7 @@ class U_I18N_API FunctionOptions : public UObject {
* @param input A `Formattable` object.
* @param fb Fallback string to use if an error occurs while formatting the input.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
FormattedPlaceholder(const Formattable& input, const UnicodeString& fb)
@ -748,7 +740,7 @@ class U_I18N_API FunctionOptions : public UObject {
* Default constructor. Leaves the FormattedPlaceholder in a
* valid but undefined state.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
FormattedPlaceholder() : type(kNull) {}
@ -758,7 +750,7 @@ class U_I18N_API FunctionOptions : public UObject {
*
* @return A message2::Formattable value.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
const message2::Formattable& asFormattable() const;
@ -768,7 +760,7 @@ class U_I18N_API FunctionOptions : public UObject {
* @return True if and only if this placeholder was constructed from a fallback string,
* with no `Formattable` source or formatting output.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
bool isFallback() const { return type == kFallback; }
@ -778,7 +770,7 @@ class U_I18N_API FunctionOptions : public UObject {
* @return True if and only if this placeholder represents the absent argument to a formatter
* that was invoked without an argument.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
bool isNullOperand() const { return type == kNull; }
@ -788,7 +780,7 @@ class U_I18N_API FunctionOptions : public UObject {
* @return True if and only if this was constructed from both an input `Formattable` and
* output `FormattedValue`.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
bool isEvaluated() const { return (type == kEvaluated); }
@ -797,7 +789,7 @@ class U_I18N_API FunctionOptions : public UObject {
*
* @return True if and only if this is neither the null argument nor a fallback placeholder.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
bool canFormat() const { return !(isFallback() || isNullOperand()); }
@ -805,7 +797,7 @@ class U_I18N_API FunctionOptions : public UObject {
* Gets the fallback value of this placeholder, to be used in its place if an error occurs while
* formatting it.
* @return A reference to this placeholder's fallback string.
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
const UnicodeString& getFallback() const { return fallback; }
@ -814,7 +806,7 @@ class U_I18N_API FunctionOptions : public UObject {
* @return A reference to an option map, capturing the options that were used
* in producing the output of this `FormattedPlaceholder`
* (or empty if there is no output)
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
const FunctionOptions& options() const { return previousOptions; }
@ -822,7 +814,7 @@ class U_I18N_API FunctionOptions : public UObject {
/**
* Returns the formatted output of this placeholder. The result is undefined if !isEvaluated().
* @return A fully formatted `FormattedPlaceholder`.
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
const FormattedValue& output() const { return formatted; }
@ -830,7 +822,7 @@ class U_I18N_API FunctionOptions : public UObject {
* Move assignment operator:
* The source FormattedPlaceholder will be left in a valid but undefined state.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
FormattedPlaceholder& operator=(FormattedPlaceholder&&) noexcept;
@ -838,7 +830,7 @@ class U_I18N_API FunctionOptions : public UObject {
* Move constructor:
* The source FormattedPlaceholder will be left in a valid but undefined state.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
FormattedPlaceholder(FormattedPlaceholder&& other) { *this = std::move(other); }
@ -854,7 +846,7 @@ class U_I18N_API FunctionOptions : public UObject {
* @param status Input/output error code
* @return The result of formatting this placeholder.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
UnicodeString formatToString(const Locale& locale,
@ -883,7 +875,7 @@ class U_I18N_API FunctionOptions : public UObject {
* The class will contain information allowing the result to be viewed as a string,
* iterator, etc. (TBD)
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
class U_I18N_API FormattedMessage : public icu::FormattedValue {

View file

@ -31,7 +31,7 @@ namespace message2 {
/**
* Interface that factory classes for creating formatters must implement.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
class U_I18N_API FormatterFactory : public UObject {
@ -49,21 +49,21 @@ namespace message2 {
* @param status Input/output error code.
* @return The new Formatter, which is non-null if U_SUCCESS(status).
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
virtual Formatter* createFormatter(const Locale& locale, UErrorCode& status) = 0;
/**
* Destructor.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
virtual ~FormatterFactory();
/**
* Copy constructor.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
FormatterFactory& operator=(const FormatterFactory&) = delete;
@ -72,7 +72,7 @@ namespace message2 {
/**
* Interface that factory classes for creating selectors must implement.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
class U_I18N_API SelectorFactory : public UObject {
@ -84,21 +84,21 @@ namespace message2 {
* @param status Input/output error code.
* @return The new selector, which is non-null if U_SUCCESS(status).
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
virtual Selector* createSelector(const Locale& locale, UErrorCode& status) const = 0;
/**
* Destructor.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
virtual ~SelectorFactory();
/**
* Copy constructor.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
SelectorFactory& operator=(const SelectorFactory&) = delete;
@ -111,7 +111,7 @@ namespace message2 {
*
* `MFFunctionRegistry` is immutable and movable. It is not copyable.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
class U_I18N_API MFFunctionRegistry : public UObject {
@ -131,7 +131,7 @@ namespace message2 {
* if no formatter was registered under that name. The pointer is not owned
* by the caller.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
FormatterFactory* getFormatter(const FunctionName& formatterName) const;
@ -143,7 +143,7 @@ namespace message2 {
* @return A pointer to the `SelectorFactory` registered under `selectorName`, or null
* if no formatter was registered under that name.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
const SelectorFactory* getSelector(const FunctionName& selectorName) const;
@ -157,7 +157,7 @@ namespace message2 {
* @return True if and only if the function registry contains a default formatter for `formatterType`.
* If the return value is false, then the value of `name` is undefined.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
UBool getDefaultFormatterNameByType(const UnicodeString& formatterType, FunctionName& name) const;
@ -168,7 +168,7 @@ namespace message2 {
*
* Builder is not copyable or movable.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
class U_I18N_API Builder : public UObject {
@ -208,7 +208,7 @@ namespace message2 {
* @param errorCode Input/output error code
* @return A reference to the builder.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
Builder& adoptFormatter(const data_model::FunctionName& formatterName, FormatterFactory* formatterFactory, UErrorCode& errorCode);
@ -222,7 +222,7 @@ namespace message2 {
* @param errorCode Input/output error code
* @return A reference to the builder.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
Builder& setDefaultFormatterNameByType(const UnicodeString& type, const data_model::FunctionName& functionName, UErrorCode& errorCode);
@ -236,7 +236,7 @@ namespace message2 {
* @param errorCode Input/output error code
* @return A reference to the builder.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
Builder& adoptSelector(const data_model::FunctionName& selectorName, SelectorFactory* selectorFactory, UErrorCode& errorCode);
@ -250,7 +250,7 @@ namespace message2 {
*
* @return The new MFFunctionRegistry
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
MFFunctionRegistry build();
@ -260,14 +260,14 @@ namespace message2 {
*
* @param errorCode Input/output error code
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
Builder(UErrorCode& errorCode);
/**
* Destructor.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
virtual ~Builder();
@ -277,7 +277,7 @@ namespace message2 {
* Move assignment operator:
* The source MFFunctionRegistry will be left in a valid but undefined state.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
MFFunctionRegistry& operator=(MFFunctionRegistry&&) noexcept;
@ -285,14 +285,14 @@ namespace message2 {
* Move constructor:
* The source MFFunctionRegistry will be left in a valid but undefined state.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
MFFunctionRegistry(MFFunctionRegistry&& other) { *this = std::move(other); }
/**
* Destructor.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
virtual ~MFFunctionRegistry();
@ -329,7 +329,7 @@ namespace message2 {
/**
* Interface that formatter classes must implement.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
class U_I18N_API Formatter : public UObject {
@ -349,7 +349,7 @@ namespace message2 {
*
* @return The formatted value.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
virtual FormattedPlaceholder format(FormattedPlaceholder&& toFormat,
@ -358,7 +358,7 @@ namespace message2 {
/**
* Destructor.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
virtual ~Formatter();
@ -367,7 +367,7 @@ namespace message2 {
/**
* Interface that selector classes must implement.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
class U_I18N_API Selector : public UObject {
@ -391,7 +391,7 @@ namespace message2 {
* to signal errors. The custom selector may pass `status` to other ICU functions
* that can signal errors using this mechanism.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
virtual void selectKey(FormattedPlaceholder&& toFormat,
@ -406,7 +406,7 @@ namespace message2 {
/**
* Destructor.
*
* @internal ICU 75.0 technology preview
* @internal ICU 75 technology preview
* @deprecated This API is for technology preview only.
*/
virtual ~Selector();

View file

@ -3867,6 +3867,27 @@ const char* const basic_maximize_data[][2] = {
// so "aaaa" is a well-formed unicode_language_id
"aaaa",
"aaaa",
}, {
// ICU-22727
// unicode_language_subtag = alpha{2,3} | alpha{5,8};
// so "bbbbb", "cccccc", "ddddddd", "eeeeeeee" are
// well-formed unicode_language_subtag and therefore
// well-formed unicode_language_id
// but "fffffffff" is not.
"bbbbb",
"bbbbb",
}, {
// ICU-22727
"cccccc",
"cccccc",
}, {
// ICU-22727
"ddddddd",
"ddddddd",
}, {
// ICU-22727
"eeeeeeee",
"eeeeeeee",
}, {
// ICU-22546
"und-Zzzz",
@ -6048,6 +6069,16 @@ const errorData maximizeErrors[] = {
"en_Latn_US_POSIX@currency=EURO",
U_STRING_NOT_TERMINATED_WARNING,
30
},
{
// ICU-22727
// unicode_language_subtag = alpha{2,3} | alpha{5,8};
// so "bbbbb", "cccccc", "ddddddd", "eeeeeeee" are
// well-formed unicode_language_id but "fffffffff" is not.
"fffffffff",
NULL,
U_ILLEGAL_ARGUMENT_ERROR,
0
}
};

View file

@ -113,6 +113,9 @@ static void TestEnumList(void) {
expectInList("VED", UCURR_NON_DEPRECATED, true);
expectInList("EQE", UCURR_ALL, false);
// CLDR 45 and ICU-22726
expectInList("XCG", UCURR_ALL, true);
}
static void TestEnumListReset(void) {

View file

@ -3915,6 +3915,31 @@ LocaleTest::TestAddLikelyAndMinimizeSubtags() {
"aaaa",
"aaaa",
"aaaa",
}, {
// ICU-22727
// unicode_language_subtag = alpha{2,3} | alpha{5,8};
// so "bbbbb", "cccccc", "ddddddd", "eeeeeeee" are
// well-formed unicode_language_subtag and therefore
// well-formed unicode_language_id
// but "fffffffff" is not.
"bbbbb",
"bbbbb",
"bbbbb",
}, {
// ICU-22727
"cccccc",
"cccccc",
"cccccc",
}, {
// ICU-22727
"ddddddd",
"ddddddd",
"ddddddd",
}, {
// ICU-22727
"eeeeeeee",
"eeeeeeee",
"eeeeeeee",
}, {
// ICU-22546
"und-Zzzz",

View file

@ -1,6 +1,6 @@
# Test data for unit conversions
# Test data for personName formats
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-DFS-2016
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
#
#

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,10 +1,9 @@
# Test data for unit conversions
# Test data for personName formats
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-DFS-2016
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
#
af.txt
#af.txt
am.txt
ar.txt
as.txt
@ -19,31 +18,21 @@ cs.txt
cy.txt
da.txt
de.txt
de_CH.txt
dsb.txt
el.txt
en.txt
en_AU.txt
en_CA.txt
en_GB.txt
en_IN.txt
es.txt
es_419.txt
es_MX.txt
es_US.txt
et.txt
eu.txt
fa.txt
fi.txt
fil.txt
fr.txt
fr_CA.txt
ga.txt
gd.txt
gl.txt
gu.txt
ha.txt
ha_NE.txt
he.txt
hi.txt
hi_Latn.txt
@ -82,7 +71,6 @@ pa.txt
pl.txt
ps.txt
pt.txt
pt_PT.txt
qu.txt
ro.txt
ru.txt
@ -94,12 +82,9 @@ sl.txt
so.txt
sq.txt
sr.txt
sr_Cyrl_BA.txt
sr_Latn.txt
sr_Latn_BA.txt
sv.txt
sw.txt
sw_KE.txt
ta.txt
te.txt
tg.txt
@ -113,10 +98,8 @@ uz.txt
vi.txt
wo.txt
yo.txt
yo_BJ.txt
yue.txt
yue_Hans.txt
zh.txt
zh_Hant.txt
zh_Hant_HK.txt
zu.txt

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,7 +1,7 @@
# Test data for unit conversions
# Copyright © 1991-2023 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-DFS-2016
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
#
# CLDR person name formatting test data for: de_CH
@ -24,7 +24,7 @@
# This line follows a sequence of name lines, and indicates the that all the following parameter lines have this expected value.
#
# parameters; <options>; <length>; <usage>; <formality>
# Each of these parameter lines should be tested to see that when formatting the current name with these parameters,
# Each of these parameter lines should be tested to see that when formatting the current name with these parameters,
# the expected value is produced.
#
# endName

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,7 +1,7 @@
# Test data for unit conversions
# Copyright © 1991-2023 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-DFS-2016
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
#
# CLDR person name formatting test data for: en_AU
@ -24,7 +24,7 @@
# This line follows a sequence of name lines, and indicates the that all the following parameter lines have this expected value.
#
# parameters; <options>; <length>; <usage>; <formality>
# Each of these parameter lines should be tested to see that when formatting the current name with these parameters,
# Each of these parameter lines should be tested to see that when formatting the current name with these parameters,
# the expected value is produced.
#
# endName

View file

@ -1,7 +1,7 @@
# Test data for unit conversions
# Copyright © 1991-2023 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-DFS-2016
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
#
# CLDR person name formatting test data for: en_CA
@ -24,7 +24,7 @@
# This line follows a sequence of name lines, and indicates the that all the following parameter lines have this expected value.
#
# parameters; <options>; <length>; <usage>; <formality>
# Each of these parameter lines should be tested to see that when formatting the current name with these parameters,
# Each of these parameter lines should be tested to see that when formatting the current name with these parameters,
# the expected value is produced.
#
# endName

View file

@ -1,7 +1,7 @@
# Test data for unit conversions
# Copyright © 1991-2023 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-DFS-2016
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
#
# CLDR person name formatting test data for: en_GB
@ -24,7 +24,7 @@
# This line follows a sequence of name lines, and indicates the that all the following parameter lines have this expected value.
#
# parameters; <options>; <length>; <usage>; <formality>
# Each of these parameter lines should be tested to see that when formatting the current name with these parameters,
# Each of these parameter lines should be tested to see that when formatting the current name with these parameters,
# the expected value is produced.
#
# endName

View file

@ -1,7 +1,7 @@
# Test data for unit conversions
# Copyright © 1991-2023 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-DFS-2016
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
#
# CLDR person name formatting test data for: en_IN
@ -24,7 +24,7 @@
# This line follows a sequence of name lines, and indicates the that all the following parameter lines have this expected value.
#
# parameters; <options>; <length>; <usage>; <formality>
# Each of these parameter lines should be tested to see that when formatting the current name with these parameters,
# Each of these parameter lines should be tested to see that when formatting the current name with these parameters,
# the expected value is produced.
#
# endName

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,7 +1,7 @@
# Test data for unit conversions
# Copyright © 1991-2023 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-DFS-2016
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
#
# CLDR person name formatting test data for: es_419
@ -24,7 +24,7 @@
# This line follows a sequence of name lines, and indicates the that all the following parameter lines have this expected value.
#
# parameters; <options>; <length>; <usage>; <formality>
# Each of these parameter lines should be tested to see that when formatting the current name with these parameters,
# Each of these parameter lines should be tested to see that when formatting the current name with these parameters,
# the expected value is produced.
#
# endName

View file

@ -1,7 +1,7 @@
# Test data for unit conversions
# Copyright © 1991-2023 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-DFS-2016
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
#
# CLDR person name formatting test data for: es_MX
@ -24,7 +24,7 @@
# This line follows a sequence of name lines, and indicates the that all the following parameter lines have this expected value.
#
# parameters; <options>; <length>; <usage>; <formality>
# Each of these parameter lines should be tested to see that when formatting the current name with these parameters,
# Each of these parameter lines should be tested to see that when formatting the current name with these parameters,
# the expected value is produced.
#
# endName

View file

@ -1,7 +1,7 @@
# Test data for unit conversions
# Copyright © 1991-2023 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-DFS-2016
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
#
# CLDR person name formatting test data for: es_US
@ -24,7 +24,7 @@
# This line follows a sequence of name lines, and indicates the that all the following parameter lines have this expected value.
#
# parameters; <options>; <length>; <usage>; <formality>
# Each of these parameter lines should be tested to see that when formatting the current name with these parameters,
# Each of these parameter lines should be tested to see that when formatting the current name with these parameters,
# the expected value is produced.
#
# endName

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,7 +1,7 @@
# Test data for unit conversions
# Copyright © 1991-2023 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-DFS-2016
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
#
# CLDR person name formatting test data for: fr_CA
@ -24,7 +24,7 @@
# This line follows a sequence of name lines, and indicates the that all the following parameter lines have this expected value.
#
# parameters; <options>; <length>; <usage>; <formality>
# Each of these parameter lines should be tested to see that when formatting the current name with these parameters,
# Each of these parameter lines should be tested to see that when formatting the current name with these parameters,
# the expected value is produced.
#
# endName

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,7 +1,7 @@
# Test data for unit conversions
# Copyright © 1991-2023 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-DFS-2016
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
#
# CLDR person name formatting test data for: ha_NE
@ -24,7 +24,7 @@
# This line follows a sequence of name lines, and indicates the that all the following parameter lines have this expected value.
#
# parameters; <options>; <length>; <usage>; <formality>
# Each of these parameter lines should be tested to see that when formatting the current name with these parameters,
# Each of these parameter lines should be tested to see that when formatting the current name with these parameters,
# the expected value is produced.
#
# endName

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

View file

@ -1,4 +1,5 @@
# Test data for Person Name Data# Copyright © 1991-2024 Unicode, Inc.
# Test data for Person Name Data
# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)

Some files were not shown because too many files have changed in this diff Show more