Compare commits

...

547 commits

Author SHA1 Message Date
Peter Edberg
89fe16ef3b ICU-22142 Deprecate ICU4C createMetricTon/getMetricTon, ICU4J METRIC_TON
Some checks are pending
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm" "13:13" 2, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x64, Debug, x64) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x64, Release, x64) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x86, Debug, Win32) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x86, Release, Win32) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-cygwin-gcc (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (icuserv) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (idna) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-test (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (bidi) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (collator) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (convert) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (csdet) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (format) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (normalize) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbbi) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbnf) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbnfp) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbnfrt) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (regex) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (spoof) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (translit) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (utility) (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
2025-04-05 10:04:01 -07:00
Frank Yung-Fong Tang
e1f13e1518 ICU-23055 Add warning about our plan to remove in locale-service-provider.md
Some checks failed
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, korean, csiso2022kr) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, s-chinese, EUC-CN) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, s-chinese, UTF-8) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm Z" "13:13 -0800" 5, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm Z" "13:13 -0800" 5, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm Z" "13:13 -0800" 5, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm z" "13:13 PST" 4, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm z" "13:13 PST" 4, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm z" "13:13 PST" 4, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm zzzz" "13:13 Pacific Standard Time" 3, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm zzzz" "13:13 Pacific Standard Time" 3, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm zzzz" "13:13 Pacific Standard Time" 3, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm" "13:13" 2, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm" "13:13" 2, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm" "13:13" 2, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x64, Debug, x64) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x64, Release, x64) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x86, Debug, Win32) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x86, Release, Win32) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-cygwin-gcc (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
GHA ICU Docs / Test build of User Guide docs (push) Has been cancelled
Deploy User Guide / build (push) Has been cancelled
Deploy User Guide / deploy (push) Has been cancelled
2025-04-04 17:34:06 -07:00
Frank Tang
572d03f85a ICU-23052 Fix addLikelySubtags
Some checks are pending
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x64, Debug, x64) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x64, Release, x64) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x86, Debug, Win32) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x86, Release, Win32) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-cygwin-gcc (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (bidi) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-test (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (collator) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (convert) (push) Waiting to run
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm" "13:13" 2, TestICUParse) (push) Blocked by required conditions
GHA CI Valgrind / clang-valgrind-intltest (csdet) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (format) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (icuserv) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (idna) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (normalize) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbbi) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbnf) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbnfp) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbnfrt) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (regex) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (spoof) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (translit) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (utility) (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
Remove hack in the conversion tool by fixing the code

ICU-23052 Assert the value will never be 0
2025-04-04 13:36:14 -07:00
Mihai Nita
046392853d ICU-23089 Remove old tests that were never executed 2025-04-04 12:03:44 -07:00
Frank Tang
770c4b8042 ICU-23095 Add fuzzer for DecimalFormatSymbols
Some checks are pending
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm" "13:13" 2, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x64, Debug, x64) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (idna) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (normalize) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbbi) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbnf) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x64, Release, x64) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x86, Debug, Win32) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x86, Release, Win32) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-cygwin-gcc (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (csdet) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (format) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (icuserv) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbnfp) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbnfrt) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (regex) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (spoof) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (translit) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (utility) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-test (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (bidi) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (collator) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (convert) (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
2025-04-03 14:36:55 -07:00
Mihai Nita
e296ac93b5 ICU-23072 Support from JDK 11 and up - fix bad actions
Some checks failed
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, japanese, EUC-JP) (push) Has been cancelled
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, japanese, UTF-8) (push) Has been cancelled
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, japanese, csiso2022jp) (push) Has been cancelled
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, korean, UTF-8) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm" "13:13" 2, TestICUFormat) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm" "13:13" 2, TestICUParse) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUConstruction) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUFormat) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUParse) (push) Has been cancelled
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, greek, UTF-8) (push) Has been cancelled
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, greek, csisolatingreek) (push) Has been cancelled
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, hebrew, UTF-8) (push) Has been cancelled
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, hebrew, csisolatinhebrew) (push) Has been cancelled
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, hindi, UTF-8) (push) Has been cancelled
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, korean, csiso2022kr) (push) Has been cancelled
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, s-chinese, EUC-CN) (push) Has been cancelled
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, s-chinese, UTF-8) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm Z" "13:13 -0800" 5, TestICUConstruction) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm Z" "13:13 -0800" 5, TestICUFormat) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm Z" "13:13 -0800" 5, TestICUParse) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm z" "13:13 PST" 4, TestICUConstruction) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm z" "13:13 PST" 4, TestICUFormat) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm z" "13:13 PST" 4, TestICUParse) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm zzzz" "13:13 Pacific Standard Time" 3, TestICUConstruction) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm zzzz" "13:13 Pacific Standard Time" 3, TestICUFormat) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm zzzz" "13:13 Pacific Standard Time" 3, TestICUParse) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm" "13:13" 2, TestICUConstruction) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUConstruction) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUFormat) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUParse) (push) Has been cancelled
2025-04-01 15:33:11 -07:00
Mihai Nita
1ea549be99 ICU-23094 Workaround for a known performance bug in plexus-io 2025-04-01 14:36:52 -07:00
Mihai Nita
7eb090f910 ICU-23072 Support from JDK 11 up, drop support for JDK 8
Some checks are pending
GHA ICU4C / icu4c-icuexportdata (push) Waiting to run
GHA ICU4J / icu4j-mvn-init-cache (push) Waiting to run
GHA ICU4J / icu4j-mvn-build-and-test (11) (push) Blocked by required conditions
GHA ICU4J / icu4j-mvn-build-and-test (17) (push) Blocked by required conditions
GHA ICU4J / icu4j-mvn-build-and-test (21) (push) Blocked by required conditions
GHA ICU4J / lstm-icu4j-build-and-test (push) Blocked by required conditions
ICU Common / icu4j-mvn-init-cache (push) Waiting to run
GHA ICU4J / adaboost-icu4j-build-and-test (push) Blocked by required conditions
ICU Common / copyright-scan (push) Waiting to run
ICU Common / valid-UTF-8-and-no-BOM-check (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (collator) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (idna) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (normalize) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbbi) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbnf) (push) Waiting to run
ICU Common / icu4c-release-tools (push) Blocked by required conditions
GHA ICU Docs / Test build of User Guide docs (push) Waiting to run
GHA CI Valgrind / clang-valgrind-test (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (bidi) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (convert) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (csdet) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (format) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (icuserv) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbnfp) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbnfrt) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (regex) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (spoof) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (translit) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (utility) (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
2025-03-31 23:48:16 -07:00
Victor Chang
ee90520429 ICU-23081 Use String.replace on non-regex string queries
Some checks failed
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, greek, UTF-8) (push) Has been cancelled
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, greek, csisolatingreek) (push) Has been cancelled
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, hebrew, UTF-8) (push) Has been cancelled
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, hebrew, csisolatinhebrew) (push) Has been cancelled
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, japanese, EUC-JP) (push) Has been cancelled
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, japanese, csiso2022jp) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm Z" "13:13 -0800" 5, TestICUConstruction) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm Z" "13:13 -0800" 5, TestICUParse) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm z" "13:13 PST" 4, TestICUConstruction) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm z" "13:13 PST" 4, TestICUFormat) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm" "13:13" 2, TestICUFormat) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUConstruction) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUFormat) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUConstruction) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUFormat) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUParse) (push) Has been cancelled
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, hindi, UTF-8) (push) Has been cancelled
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, japanese, UTF-8) (push) Has been cancelled
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, korean, UTF-8) (push) Has been cancelled
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, korean, csiso2022kr) (push) Has been cancelled
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, s-chinese, EUC-CN) (push) Has been cancelled
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, s-chinese, UTF-8) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm Z" "13:13 -0800" 5, TestICUFormat) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm z" "13:13 PST" 4, TestICUParse) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm zzzz" "13:13 Pacific Standard Time" 3, TestICUConstruction) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm zzzz" "13:13 Pacific Standard Time" 3, TestICUFormat) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm zzzz" "13:13 Pacific Standard Time" 3, TestICUParse) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm" "13:13" 2, TestICUConstruction) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm" "13:13" 2, TestICUParse) (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUParse) (push) Has been cancelled
https://unicode-org.atlassian.net/browse/ICU-23081
2025-03-28 16:34:38 -07:00
Robin Leroy
1bf6bf774d ICU-23087 Pass null to applyPropertyAlias for a unary property query
Some checks are pending
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, japanese, EUC-JP) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, japanese, UTF-8) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, japanese, csiso2022jp) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm Z" "13:13 -0800" 5, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm Z" "13:13 -0800" 5, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm Z" "13:13 -0800" 5, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm z" "13:13 PST" 4, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm z" "13:13 PST" 4, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm z" "13:13 PST" 4, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm zzzz" "13:13 Pacific Standard Time" 3, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm zzzz" "13:13 Pacific Standard Time" 3, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm zzzz" "13:13 Pacific Standard Time" 3, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm" "13:13" 2, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm" "13:13" 2, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, hebrew, UTF-8) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, hebrew, csisolatinhebrew) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, hindi, UTF-8) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, korean, UTF-8) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, korean, csiso2022kr) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, s-chinese, EUC-CN) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, s-chinese, UTF-8) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm" "13:13" 2, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4c-windows-cygwin-gcc (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
2025-03-28 02:57:27 +01:00
Tim Chevalier
d0e30acc68 ICU-23059 ICU4C MF2: Spec test updates
Some checks failed
GHA CI Valgrind / clang-valgrind-intltest (spoof) (push) Has been cancelled
GHA CI Valgrind / clang-valgrind-intltest (translit) (push) Has been cancelled
GHA ICU4C / uconfig-header-tests (-DUCONFIG_NO_IDNA=1) (push) Has been cancelled
GHA ICU4C / uconfig-header-tests (-DUCONFIG_NO_LEGACY_CONVERSION=1 -DUCONFIG_NO_NORMALIZATION=1 -DUCONFIG_NO_BREAK_ITERATION=1 -DUCONFIG_NO_IDNA=1 -DUCONFIG_NO_COLLATION=1 -DUCONFIG_NO_FORMATTING=1 -DUCONFIG_NO_MF2=1 -DUCONFIG_NO_TRANSLITERATION=1 -DUCONFIG_NO_REG… (push) Has been cancelled
GHA ICU4C / uconfig-header-tests (-DUCONFIG_NO_LEGACY_CONVERSION=1) (push) Has been cancelled
GHA ICU4C / icu4c-without-collation-rule-strings (push) Has been cancelled
GHA ICU4C / icu4c-icuexportdata (push) Has been cancelled
GHA CI Valgrind / clang-valgrind-intltest (rbbi) (push) Has been cancelled
GHA CI Valgrind / clang-valgrind-test (push) Has been cancelled
GHA CI Valgrind / clang-valgrind-intltest (bidi) (push) Has been cancelled
GHA CI Valgrind / clang-valgrind-intltest (collator) (push) Has been cancelled
GHA CI Valgrind / clang-valgrind-intltest (convert) (push) Has been cancelled
GHA CI Valgrind / clang-valgrind-intltest (csdet) (push) Has been cancelled
GHA CI Valgrind / clang-valgrind-intltest (format) (push) Has been cancelled
GHA CI Valgrind / clang-valgrind-intltest (rbnfrt) (push) Has been cancelled
GHA CI Valgrind / clang-valgrind-intltest (regex) (push) Has been cancelled
GHA ICU4C / uconfig-header-tests (-DUCONFIG_NO_MF2=1) (push) Has been cancelled
GHA ICU4C / uconfig-header-tests (-DUCONFIG_NO_NORMALIZATION=1) (push) Has been cancelled
GHA ICU4C / uconfig-header-tests (-DUCONFIG_NO_REGULAR_EXPRESSIONS=1) (push) Has been cancelled
GHA ICU4C / uconfig-header-tests (-DUCONFIG_NO_SERVICE=1) (push) Has been cancelled
GHA ICU4C / uconfig-header-tests (-DUCONFIG_NO_TRANSLITERATION=1) (push) Has been cancelled
GHA ICU4C / unicode-update-tools (push) Has been cancelled
GHA ICU4C / icu4c-test-samples (push) Has been cancelled
GHA ICU4C / icu4c-uconfig-no-conversion (push) Has been cancelled
GHA CI Valgrind / clang-valgrind-intltest (icuserv) (push) Has been cancelled
GHA CI Valgrind / clang-valgrind-intltest (idna) (push) Has been cancelled
GHA CI Valgrind / clang-valgrind-intltest (normalize) (push) Has been cancelled
GHA CI Valgrind / clang-valgrind-intltest (rbnf) (push) Has been cancelled
GHA CI Valgrind / clang-valgrind-intltest (rbnfp) (push) Has been cancelled
GHA CI Valgrind / clang-valgrind-intltest (utility) (push) Has been cancelled
Update spec tests to current version from message-format-wg

  - Update parser for changed name-start grammar rule
  - Validate number literals in :number implementation (since parser no longer does this)
  - Disallow `:number`/`:integer` select option set from variable

    See https://github.com/unicode-org/message-format-wg/pull/1016

    As part of this, un-skip tests where the `bad-option` error is
    expected, and implement validating digit size options
    (pending PR https://github.com/unicode-org/icu/pull/2973 is intended
    to do this more fully)
2025-03-27 15:20:49 -07:00
Mihai Nita
0b98404454 ICU-23086 Fix CI performance tests
Some checks failed
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, korean, UTF-8) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, korean, csiso2022kr) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, s-chinese, EUC-CN) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, s-chinese, UTF-8) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm Z" "13:13 -0800" 5, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm Z" "13:13 -0800" 5, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm Z" "13:13 -0800" 5, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x64, Release, x64) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x86, Debug, Win32) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x86, Release, Win32) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-cygwin-gcc (push) Waiting to run
GHA CI Valgrind / clang-valgrind-test (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (bidi) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (collator) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (convert) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (csdet) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (format) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (icuserv) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (idna) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (normalize) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbbi) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbnf) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbnfp) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbnfrt) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (regex) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (spoof) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (translit) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (utility) (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
GHA ICU Docs / Test build of User Guide docs (push) Has been cancelled
2025-03-26 11:00:46 -07:00
Mihai Nita
d93b8bb344 ICU-23056 ICU 78rc BRS: front-load update version to 78.0.1
Some checks failed
Deploy User Guide / build (push) Has been cancelled
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x64, Debug, x64) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x64, Release, x64) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x86, Debug, Win32) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x86, Release, Win32) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-cygwin-gcc (push) Waiting to run
GHA CI Valgrind / clang-valgrind-test (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (bidi) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (collator) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (convert) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (csdet) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (format) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (icuserv) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (idna) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (normalize) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbbi) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbnf) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbnfp) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbnfrt) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (regex) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (spoof) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (translit) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (utility) (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
Deploy User Guide / deploy (push) Has been cancelled
2025-03-25 16:09:37 -07:00
Mihai Nita
f6abd2cc2e ICU-23086 Fix Eclipse errors on imported projects
- perf-tests: the copy was a convenience (as the doc said)
- icu4j-localespi: the copy was only needed for JDK 8.
  Moving it into a self-activating profile (based on jdk version)
  means that the copy still happens when building with maven under jdk 8,
  but will not get activated in Eclipse (so no error)
- The use of ../testdata (the warning) was an incorrect way to share resources
  they should have their own (resource only) Maven artifact.
  And nothing in the folder is not used by icu4j right now.
  ICU-23050 ("Deduplicate C & Java testdata to a common directory") is still open.
2025-03-25 14:29:57 -07:00
Mihai Nita
7e63370784 ICU-23040 Doclet migration: rename variables that don't match the type
Some checks are pending
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, japanese, UTF-8) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, japanese, csiso2022jp) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, korean, UTF-8) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, korean, csiso2022kr) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, s-chinese, EUC-CN) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, s-chinese, UTF-8) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm Z" "13:13 -0800" 5, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm Z" "13:13 -0800" 5, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm Z" "13:13 -0800" 5, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm z" "13:13 PST" 4, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm z" "13:13 PST" 4, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm z" "13:13 PST" 4, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm zzzz" "13:13 Pacific Standard Time" 3, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm zzzz" "13:13 Pacific Standard Time" 3, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm zzzz" "13:13 Pacific Standard Time" 3, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm" "13:13" 2, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm" "13:13" 2, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm" "13:13" 2, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (sw_KE, "dddd MMM yyyy" "15 Jan 2007" 1, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x64, Debug, x64) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x64, Release, x64) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x86, Debug, Win32) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x86, Release, Win32) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-cygwin-gcc (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
2025-03-24 19:16:33 -07:00
Mihai Nita
cfed9374b7 ICU-23040 Doclet migration: the real move from the JDK 8 APIs 2025-03-24 19:16:33 -07:00
Mihai Nita
2628d4ed32 ICU-23040 Doclet migration: add a way to run CheckTags
This is handy to have.

One can checkout at this CL and generate a report using the old version,
imperfect as it is.

That can be used for reference when trying to fix / improve the tool after
the migration to the new APIs.
2025-03-24 19:16:33 -07:00
Victor Chang
f6894e28d2 ICU-23083 Optimize LSR loaded from langinfo.res
It uses string pools to reduce the memory impact
2025-03-24 17:26:46 -07:00
Frank Tang
ad0df7e4c8 ICU-22817 Use LocalPointer/Memory/Array to clarify ownership transfer
Some checks are pending
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, korean, UTF-8) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, korean, csiso2022kr) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, s-chinese, EUC-CN) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-converterperf (TestCharsetEncoderICU, s-chinese, UTF-8) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm Z" "13:13 -0800" 5, TestICUConstruction) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm Z" "13:13 -0800" 5, TestICUFormat) (push) Blocked by required conditions
GHA ICU Merge CI / icu4j-dateformatperf (en_US, "HH:mm Z" "13:13 -0800" 5, TestICUParse) (push) Blocked by required conditions
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x64, Debug, x64) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x64, Release, x64) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x86, Debug, Win32) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-msvc-postmerge (x86, Release, Win32) (push) Waiting to run
GHA ICU Merge CI / icu4c-windows-cygwin-gcc (push) Waiting to run
GHA CI Valgrind / clang-valgrind-test (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (csdet) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (format) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (bidi) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (collator) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (convert) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (icuserv) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (idna) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (normalize) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbbi) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbnf) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbnfp) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (rbnfrt) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (regex) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (spoof) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (translit) (push) Waiting to run
GHA CI Valgrind / clang-valgrind-intltest (utility) (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
See #3443
2025-03-24 16:24:02 -07:00
Mihai Nita
dcff47f86b ICU-23040 Fix invalid html5 tags and attributes 2025-03-24 10:03:27 -07:00
Mihai Nita
434ef42093 ICU-23040 The real move from the JDK 8 APIs
ICUIgnoreTaglet was split in 3: ICUBugTaglet, ICUCategoryTaglet, ICUSummaryTaglet
because there is no more registration, should be one taglet per class.

Also moved making the Category a proper taglet.
2025-03-24 10:03:27 -07:00
Mihai Nita
57eaf4997a ICU-23040 Extract inner classes as standalone 2025-03-24 10:03:27 -07:00
Mihai Nita
37e7693ab2 ICU-23040 Move taglets to their own artifact 2025-03-24 10:03:27 -07:00
Marc Prud'hommeaux
d78cf74bca ICU-23055 Update buildtool.md to point to hjson.github.io
The pre-existing link to https://hjson.org goes to some sort of gambling/gaming site. It looks like the new authoritative link is https://hjson.github.io/
2025-03-20 12:12:45 -07:00
Frank Tang
b65650bc5f ICU-23077 Correct the internalGet call inside Calendar
See #3439
2025-03-19 16:22:43 -07:00
Steve Lawrence
3edd9c828a ICU-22303 Support parsing infinity/NaN when decimal pattern match is required
If a DecimalFormat pattern contains a decimal point and
setDecimalPatternMatchRequired is true, then DecimalFormat parse() fails
to parse infinity/NaN representations. This is because infinity/NaN
parsing does not set the HAS_DECIMAL_SEPARATOR_FLAG and so the
RequireDecimalSeparatorValidator fails.

This modifies the RequireDecimalSeparatorValidator so that it does not
fail if the INFINITY or NAN flags are set, making it so decimal
separators are not required if the infinity/NaN representations are
parsed.
2025-03-19 16:19:41 -07:00
Frank Tang
255eb4ef3e ICU-23069 Fix Hebrew calendar calculation
See #3438
2025-03-19 13:45:52 -07:00
Frank Tang
cdf52396dc ICU-22817 Fix memory leak in basictz by using LocalPointer
See https://github.com/LuMingYinDetect/icu_defects/blob/main/icu_1.png
2025-03-18 14:03:29 -07:00
Frank Tang
545bf260e1 ICU-22817 Fix potential memory leak by using LocalPointer
See https://github.com/LuMingYinDetect/icu_defects/blob/main/icu_10.png
2025-03-18 14:02:55 -07:00
Frank Tang
ba0f39b592 ICU-22817 Use LocalArray to fix memory leak 2025-03-18 12:21:23 -07:00
Markus Scherer
72406ed78a
ICU-23056 merge maint/maint-77 to main (#3436) 2025-03-13 15:07:01 -07:00
Markus Scherer
f23af97cf4 ICU-22923 ICU 77 release page updates
See #3432
2025-03-13 14:15:58 -07:00
Tim Chevalier
c5b7dce96b ICU-23073 Use string_view constants for option names and formatter names 2025-03-13 10:21:46 -07:00
Mihai Nita
457157a92a ICU-22923 Workaround for addLikelySubtags(und-Latn-RS) bug 2025-03-10 16:06:50 -07:00
Mihai Nita
cc9adb6c32 ICU-22923 BRS_77_GA Update version number to 77.1 (No more -SNAPSHOT) 2025-03-10 14:58:01 -07:00
yumaoka
27cc39a620 ICU-23067 Add test option to ignore runtime time zone data sensitive test. 2025-03-07 17:57:45 -05:00
dependabot[bot]
30e23b0d28 ICU-23054 Bump the github-actions group with 4 updates
See #3424
2025-03-06 10:23:43 -08:00
Rich Gillam
faa80a2972 ICU-23062 Added null check in one spot in genrb where we know we've seen crashes. 2025-03-06 17:50:59 +00:00
Elango Cheran
9cc28a6428 ICU-23056 Add workflow to generate commit checker report
See #3413
2025-02-28 17:19:53 -08:00
Mihai Nita
443c8c5187 ICU-23064 Fix for POSIX_MADV_RANDOM undefined 2025-02-27 14:22:47 -08:00
Frank Tang
53adb4bca8 ICU-23060 Fix TestLargeAppend
Correct the test based on the kMaxCapacity
setToBogus on error
2025-02-27 11:02:54 -08:00
DraganBesevic
d6ca2ba5de ICU-22923 Integrate CLDR 47 release beta2, part 4, remove unused variables in tests 2025-02-26 12:54:55 -08:00
DraganBesevic
19dd858b6a ICU-22923 Integrate CLDR 47 release beta2, part 3, source and test files 2025-02-26 12:54:55 -08:00
DraganBesevic
7931e6f7ce ICU-22923 Integrate CLDR 47 release beta2, part 2, data files 2025-02-26 12:54:55 -08:00
DraganBesevic
c210730f76 ICU-22923 Integrate CLDR 47 release beta2, part 1, binary files 2025-02-26 12:54:55 -08:00
Frank Tang
0b88b1c754 ICU-23060 Fix heap-buffer-overflow when UnicodeString size too large
See #3416
2025-02-25 15:36:06 -08:00
Tim Chevalier
0748442ed6 ICU-23059 ICU4C MF2: Update spec tests
This updates the MF2 spec tests to 943479b602 with the following exceptions:

- functions/currency.json and functions/math.json are omitted because these are not yet implemented

- bidi.json will be handled in a future PR

- u-options.json will be handled in a future PR

Changes include:
* `:integer` now returns a value encapsulating the rounded numeric value of the argument, rather than
  the value itself.
* Fallbacks are handled according to the current spec.
* Fallback values are not passed into functions.
* Characters inside literal fallbacks are properly escaped.
* The test runner skips null values properly.
* The test runner handles boolean `expErrors` in defaultTestProperties.
* `:string` normalizes its input and normalizeNFC() has been refactored so it can be called there.
2025-02-25 12:24:07 -08:00
Elango Cheran
60a0d9fcd8 ICU-23055 Update PR template to reflect v78 tickets after ICU 77rc cut 2025-02-24 22:01:46 +01:00
Mihai Nita
7aae07acc9 ICU-22922 BRS77 Fix version in release-icu4c-ubuntu.yml
Will need a proper fix, but let's just release this for now.
2025-02-21 15:15:46 -08:00
Markus Scherer
950ddc299b ICU-22922 ICU 77rc download page
See #3407
2025-02-21 13:30:33 -08:00
Mihai Nita
9f51147189 ICU-22922 BRS77 Update ICU4J serialization test data 2025-02-21 12:08:05 -08:00
Mihai Nita
1f1c09027c ICU-22922 BRS77 Add ICU4J API signature file 2025-02-21 12:05:51 -08:00
sven-oly
1b48d262c2 ICU-22922 Scrubbing closed issues
See #3399
2025-02-21 11:24:10 -08:00
Mihai Nita
6cc1618136 ICU-22922 ICU4C produce search doxygen doc by default 2025-02-21 10:09:51 -08:00
Mihai Nita
2339ae4c0d ICU-22922 Organize import statements 2025-02-20 12:56:18 -08:00
sven-oly
cfc208f546 ICU-22922 ICU4C RC APIChangeReport updates 2025-02-19 16:50:14 -08:00
sven-oly
b42e7250f0 ICU-22922 ICU4J RC APIChangeReport.html 2025-02-19 16:47:37 -08:00
Mihai Nita
d69d452382 ICU-22922 BRS_77_RC: Update version number to 77.1-SNAPSHOT 2025-02-19 15:59:57 -08:00
Robin Leroy
215131c1a4 ICU-22984 Remove some obnoxious tests from 2003 2025-02-19 23:30:34 +01:00
Elango Cheran
579840539f ICU-22920 Bump the github-actions group across 1 directory with 2 updates
See #3289
2025-02-19 19:54:43 +01:00
sven-oly
66c6771a03 ICU-22922 Update ICU4J status
See #3398
2025-02-18 16:23:49 -08:00
Mihai Nita
3b2bd4b19d ICU-22921 Fix some javadoc issues 2025-02-18 13:58:16 -08:00
Fredrik Roubert
61b2dbc980 ICU-22901 Replace fixed size buffer with CharString. 2025-02-14 21:42:22 +01:00
Fredrik Roubert
7da5e90a3d ICU-22901 Update Locale::init() to use StringPiece. 2025-02-14 20:52:40 +01:00
Younies Mahmoud
3c85be19ec ICU-22781 Uncomment and enable constant denominator tests
See #3385
2025-02-14 10:34:51 +01:00
Mihai Nita
acc69ceb55 ICU-23044 MF2, ICU4J, bring the implementation close to the spec at LDML 47 2025-02-13 10:47:57 -08:00
Elango Cheran
ecd22c10d0 ICU-22185 Add docs for using VS Code to develop in ICU4J 2025-02-13 09:38:10 -08:00
Fredrik Roubert
3f5fd0df73 ICU-22901 Update ulocimp_canonicalize() &co. to use std::string_view. 2025-02-13 15:50:54 +01:00
Fredrik Roubert
afa06d2bcd ICU-22901 Update _canonicalize() to use std::string_view. 2025-02-13 15:50:54 +01:00
Fredrik Roubert
5463eac8b4 ICU-22901 Update ulocimp_getKeywords() to use std::string_view. 2025-02-13 15:50:54 +01:00
Fredrik Roubert
aa724e1e3f ICU-22901 Move calls to uloc_getDefault() out of _canonicalize(). 2025-02-13 15:50:54 +01:00
Fredrik Roubert
83726260ef ICU-23031 Reinstate special case for "-u-va-posix" lost by ICU-22520.
Inside of locimp_forLanguageTag() in _appendKeywords() in uloc_tag.cpp
there's a hardcoded special case for "-u-va-posix" which appends the
"_POSIX" variant but this was missed during the refactoring made for
ICU-22520 (there isn't any test case that covers this).

So the call to locimp_forLanguageTag() did more than previously
understood, but we still don't want to have to call that for every
language tag that has BCP-47 extensions just in order to get to this
special case. Instead, add a special case also to ulocimp_getSubtags().

For this to work nicely, the loop in _getVariant() that copies variants
needs to be refactored so that it easily can break when encountering the
start of any BCP-47 extension (which also has the welcome side-effect of
making it more efficient, being able to append an entire variant at once
to the output sink).

This was broken by commit 678d5c1273.
2025-02-13 08:50:17 +01:00
Frank Tang
59719f09d9 ICU-22934 Fix typo in PR#3230
ICU-22934 Fix error handling while new return nullptr

ICU-22934 Simplfied

ICU-22934 more

ICU-22934 fix leak
2025-02-12 16:56:20 -08:00
David Barts
b81956ebcc ICU-22808 Correct a factually incorrect doc comment. 2025-02-12 16:37:33 -08:00
Younies Mahmoud
e20b71af50 ICU-22781 Add CLDR-18274 failing comments to portion unit formatting tests
See #3393
2025-02-12 23:12:13 +01:00
Younies Mahmoud
35c9778781 ICU-22781 Support Arbitrary Constant Unit Formatting
See #3381
2025-02-12 01:45:16 +01:00
Frank Tang
59af52bb6f ICU-23043 Propogate error in Calendar. 2025-02-11 15:14:27 -08:00
Younies Mahmoud
030c79fe88 ICU-22781 Enhance portion unit formatting tests in NumberFormatTest
- Expanded test cases for portion unit formatting
- Added support for different locales (en-US, de-DE)
- Improved test coverage for portion unit formatting
- Added handling for known CLDR data limitations
2025-02-11 23:38:54 +01:00
Younies Mahmoud
42e3b43c78 ICU-22781 Add test for portion format with parts per billion (C++)
See #3389
2025-02-11 23:37:53 +01:00
Fredrik Roubert
c9ca3cd554 ICU-22920 Migrate from setup-bazelisk to setup-bazel. 2025-02-11 19:27:07 +01:00
yumaoka
03021a98a0 ICU-22922 BRS77 update license file 2025-02-11 11:59:20 -05:00
Younies Mahmoud
b7b2a14e85 ICU-22781 Add tests for portion unit formatting (Java)
See #3386
2025-02-11 10:56:33 +01:00
Mihai Nita
84599e1117 ICU-22781 Comment out the failing tests 2025-02-10 10:46:19 -08:00
Mihai Nita
339ebb368f ICU-22781 Data generated with the concentr/perbillion on, code update
Following the steps in docs/processes/release/tasks/updating-measure-unit.md
2025-02-10 10:46:19 -08:00
Mihai Nita
fe4549dc62 ICU-22781 Data generated with the concentr/perbillion on, tests 2025-02-10 10:46:19 -08:00
Mihai Nita
53e40b1fe8 ICU-22781 Data generated with the concentr/perbillion on, ICU4J 2025-02-10 10:46:19 -08:00
Mihai Nita
19458b75f4 ICU-22781 Data generated with the concentr/perbillion on, ICU4C 2025-02-10 10:46:19 -08:00
Mihai Nita
b2026ecc5b ICU-22781 Bring back the data generation of concentr/perbillion 2025-02-10 10:46:19 -08:00
Mihai Nita
5ae7f068b1 ICU-23042 CLDR-to-ICU, generate rbnf data for Gujarati 2025-02-08 21:55:43 -08:00
Tim Chevalier
7b8110f003 ICU-22907 MF2: Finish updating spec tests and implement required test functions
Implement :test:format, :test:select, and :test:function, which are
required by the new `pattern-selection.json` tests.

Change the internal value representation in the formatter in order to
support some of the test cases (binding the results of selectors to a
variable).
2025-02-08 21:42:03 -06:00
Vladyslav Yeremeichuk
624a26030b ICU-22950 Do not initialize currency redundantly
resolveCurrency() slows down simple number formatting requests like:
for (int i = 0; i < 9999; i++) u_snprintf_u(buff, 100, u"%d", i);
Since we don't use currency here, we can skip its initialization.
2025-02-07 14:45:43 -08:00
Yoshito Umaoka
bbaa68419b ICU-22411 Fixed a ISO currency data file download problem in the currency update checking tool 2025-02-07 14:33:27 -08:00
Burkov Egor
40c325322e ICU-23035 Fix bound check at u_strToPunycode 2025-02-07 13:03:27 -08:00
Fredrik Roubert
db42c87936 ICU-22954 A build test for C++ header-only APIs with C++ APIs disabled. 2025-02-07 20:14:20 +01:00
Fredrik Roubert
ee8806e87c ICU-22954 Make UCollator predicates usable without U_SHOW_CPLUSPLUS_API.
Until now, the implementation of the UCollator predicates has been using
UnicodeString and StringPiece as convenient wrappers for converting from
standard C++ data types to ICU4C data types.

But as that doesn't work when the client uses ICU4C built without
U_SHOW_CPLUSPLUS_API this is now changed to instead perform these
conversions directly.

(It's a bit more code, but does just the same thing in the end.)
2025-02-07 20:14:20 +01:00
Mihai Nita
e8c179dedd ICU-22967 Remove explicit manipultaion of old-xmls.tar.bz2 in workflows 2025-02-07 10:26:01 -08:00
Markus Scherer
c4acc449ff ICU-22922 initial ICU 77 download page; incomplete
Also add known issues to the ICU 76 download page

See #3370
2025-02-06 16:09:06 -08:00
Younies Mahmoud
f495d10a15 ICU-22781 Support Arbitrary Constant Unit Formatting (Java)
- Added support for constant denominators in MeasureUnit and LongNameHandler
- Implemented test cases for formatting units with arbitrary constant denominators
- Updated MeasureUnit serialization and product methods to handle constant denominators
- Added comprehensive test coverage for complex unit formatting scenarios
2025-02-06 23:18:48 +01:00
Mihai Nita
ddabf0faeb ICU-22967 Remove the git lfs support: remove tools/multi 2025-02-06 13:31:45 -08:00
Mihai Nita
d9505ae577 ICU-22967 Remove the git lfs support: recover old-xmls.tar.bz2 2025-02-06 13:31:45 -08:00
Mihai Nita
5d7f0b8100 ICU-23041 Hard-code the code citations and remove jcite 2025-02-06 13:27:28 -08:00
Younies Mahmoud
362a4aa94b ICU-23032 Update MeasureUnit documentation for forIdentifier method
See #3360
2025-02-06 16:37:58 +01:00
Younies Mahmoud
697f7c0e00 ICU-22781 Fix &Improve MeasureUnit identifier generation for constant denominators (C++)
See #3364
2025-02-06 12:06:58 +01:00
Markus Scherer
4a7a4c7521 ICU-22954 USet C++ iter samples no UnicodeString
See #3316
2025-02-05 14:47:48 -08:00
Rich Gillam
f9ee689d7a ICU-22922 Promoted all @draft ICU 75 APIs to @stable ICU 75. 2025-02-05 13:02:56 -08:00
Frank Tang
0112e4292e ICU-22962 Fix int32_t overflow issue when month is large 2025-02-04 15:39:32 -08:00
Younies Mahmoud
bc7ccb0589 ICU-22781 Fix &Improve MeasureUnit identifier generation for constant denominators (Java)
See #3363
2025-02-04 00:59:13 +01:00
Younies Mahmoud
a262e87aa6 ICU-23032 Change appendNumber method to accept long instead of int
See #3365
2025-02-04 00:58:25 +01:00
DraganBesevic
0ceea4bee9 ICU-22922 Integrate CLDR 47 release alpha2, part 3, data files 2025-02-03 09:31:43 -08:00
DraganBesevic
c6e1c09dbd ICU-22922 Integrate CLDR 47 release alpha2, part 2, locale fallback binary files 2025-02-03 09:31:43 -08:00
DraganBesevic
9cbc8d7fe4 ICU-22922 Integrate CLDR 47 release alpha2, part 1, binary files 2025-02-03 09:31:43 -08:00
Manish Goregaokar
bf675e3ba1 ICU-23033 Regenerate scx value array 2025-01-31 15:48:20 -08:00
Almaz Mingaleev
9ad9c03062 ICU-23022 Update ICU data to TZDB 2025a. 2025-01-31 09:43:48 -08:00
Frank Tang
ede201c305 ICU-22994 Use C++ typeid() instead of Calendar::getType() for calendar type comparison
See #3310
2025-01-31 15:19:55 +01:00
Felix Xing
cb4344073b ICU-23026 skip test for QNX 2025-01-30 15:20:26 -08:00
DraganBesevic
95afc45afa ICU-22922 Integrate CLDR 47 release alpha1, part 5, updated unit test, again 2025-01-30 13:45:15 -08:00
DraganBesevic
4e1d9b30a5 ICU-22922 Integrate CLDR 47 release alpha1, part 4, updated unit test 2025-01-30 13:45:15 -08:00
DraganBesevic
d49c1242f9 ICU-22922 Integrate CLDR 47 release alpha1, part 3, source files 2025-01-30 13:45:15 -08:00
DraganBesevic
06c2096fea ICU-22922 Integrate CLDR 47 release alpha1, part 2, data files 2025-01-30 13:45:15 -08:00
DraganBesevic
90e3e1e882 ICU-22922 Integrate CLDR 47 release alpha1, part 1, binary files 2025-01-30 13:45:15 -08:00
Arthur O'Dwyer
fb64693c28 ICU-22920 Avoid "return by const value" antipattern
Returning a const-qualified prvalue doesn't do anything useful, but it does
turn an assignment such as `v = rb.getLocale();` from a move-assignment
into a copy-assignment (because it's forbidden to move-from a const value,
even if it's a const prvalue). Each affected site was diagnosed mechanically
by my fork of Clang. E.g.:

    warning: 'const' type qualifier on return type is a bad idea [-Wqual-class-return-type]
      391 | const Locale ResourceBundle::getLocale(ULocDataLocaleType type, UErrorCode &status) const
          | ^~~~~
2025-01-30 10:58:25 -08:00
Burkov Egor
d61ec78c93 ICU-23011 Add else branch for remove possible CWE-476 2025-01-30 10:54:19 -08:00
Mihai Nita
92b52ae6e3 ICU-23025 Fix cldr-to-icu deletes code files 2025-01-29 10:54:57 -08:00
Robin Leroy
8dfcbb5d09 ICU-22984 Generate the Java UAX29 monkeys 2025-01-29 10:03:26 +01:00
Robin Leroy
8a11097b2e ICU-22984 Generate the C++ UAX29 monkeys 2025-01-29 10:02:44 +01:00
Robin Leroy
a154b5839c ICU-22984 code motion: move SegmentationRule before RBBIMonkeyKind 2025-01-29 10:02:44 +01:00
Frank Tang
7153a3db52 ICU-23006 Fix Chinese Calendar getActualMaximize
See #3348
2025-01-28 16:34:26 -08:00
Robin Leroy
6d8b63ce84 ICU-22984 Generate old Java monkeys 2025-01-27 23:57:27 +01:00
Frank Tang
4fc1b7e7f6 ICU-22991 Simplified Grego code
Use timeToFields instead of dayToFields

ICU-22991 Revert back gregoimp interface change
2025-01-24 17:13:51 -08:00
Younies Mahmoud
d70b252cdc ICU-22781 Add support for converting units with constant denominators (C++)
See #3347
2025-01-25 01:45:49 +01:00
Younies Mahmoud
4df4eb419b ICU-22781 Add support for constant denominators in unit conversion
Implement handling of constant denominators in unit conversion:
- Add divide method to Factor class in UnitsConverter
- Update ConversionRates to apply constant denominator during conversion
- Add comprehensive test cases for units with constant denominators
2025-01-25 00:54:37 +01:00
Taichi Haradaguchi
16e50b260f ICU-22921 Fix broken link in userguide
* Fix link from gitdev to ci/exhaustive-tests.
* Fix link from ci to gitdev.
2025-01-24 15:11:34 -08:00
Younies Mahmoud
ba4d4d3ac2 ICU-22781 Adding support for constant denominators (C++)
See #3337
2025-01-24 02:06:43 +01:00
Younies Mahmoud
242bf9655f ICU-22781 Add a test case for unit constant behaviour 2025-01-24 01:34:43 +01:00
Younies Mahmoud
036919214c ICU-22781 Fix and Add unit tests for withConstantDenominator in MeasureUnit
See #3342
2025-01-24 01:30:21 +01:00
Frank Tang
2c667e31cf ICU-22973 Fix buffer overflow by using CharString 2025-01-23 09:53:56 -08:00
Younies Mahmoud
373cbaf3b2 ICU-22781 Adding support for constant denominators
See #3336
2025-01-23 00:52:04 +01:00
Taichi Haradaguchi
384c54ce66 ICU-22966 Fix -Wshadow warnings in unicode/uset.h
Fix -Wshadow warnings displayed
when compiling ICU4C 76.1 or later.

Co-authored-by: Xisco Fauli <xiscofauli@libreoffice.org>
2025-01-21 16:53:06 +09:00
Elango Cheran
2c5e021f6d ICU-22921 Add howto guide to try MF 2.0 final candidate draft impls
See #3334
2025-01-15 14:22:57 -08:00
George Rhoten
2d6a4185c3 ICU-22979 Support inverse rule for [] span in RBNF 2025-01-15 08:56:08 -08:00
Frank Tang
13a5e29644 ICU-22929 Improve fuzzer to find leak from udat_open
Try to find out what cause ICU-23008. Use ICU-22929 as bug number
to improve fuzzer to find the problem.
According to ICU-23008 bug report, the leak of DecimalFormatSymbols
can be reach by udat_open when the style is UDAT_PATTERN
2025-01-14 15:41:06 -08:00
Tim Chevalier
f8aa68b0c1 ICU-22940 MF2 ICU4C: Error checking improvements in parser
Improve checking for OOM errors when allocating UnicodeSets,
per post-merge comments on https://github.com/unicode-org/icu/pull/3236
2025-01-09 18:00:43 -08:00
Frank Tang
bd50f8be32 ICU-22991 Reduce unnecessary Grego calculation
See #3329
2025-01-08 17:04:00 -08:00
Mihai Nita
ba5cf31f77 ICU-22921 Add windows script doing jar extraction 2025-01-08 13:54:42 -08:00
Frank Tang
9eafd8ca3e ICU-22991 Reduce Calendar object size
See #3327
2025-01-08 12:26:35 -08:00
Fredrik Roubert
6f93c07a45 ICU-22954 Revert to using std::u16string instead of UnicodeString.
It seems as if icu4c-windows-cygwin-gcc only crashes if the constructor
is defined inline, so with the exception of the constructor this commit
reverts the code to commit 320220ef69.
2025-01-08 10:13:20 +09:00
Fredrik Roubert
a8d9f471ea ICU-22713 Delete layout/DataDrivenTest. 2025-01-07 15:53:53 +09:00
Fredrik Roubert
b1acce62de ICU-22713 Delete unused files.
It's unclear when (if ever) these files were used for anything, but they
aren't used now and aren't expected to be used in the future.
2025-01-07 15:53:53 +09:00
Fredrik Roubert
c49a9c2a33 ICU-22713 Delete long since dead code.
None of the code in this directory is ever compiled unless USING_ICULEHB
is set, so all such conditionally compiled code has been dead ever since
commit 4136a2f257 deleted the layout engine.
2025-01-07 15:53:53 +09:00
Fredrik Roubert
df0422ed3f ICU-22954 Workaround: Replace std::u16string member with UnicodeString&. 2025-01-07 12:23:51 +09:00
Fredrik Roubert
b2a47f9aa4 ICU-22954 Delete copy & assign from IcuTestErrorCode.
There's no reason to ever make a copy of these objects, existing code
that does this is doing it by mistake.
2025-01-07 12:23:51 +09:00
Frank Tang
6091406a3a ICU-22991 Reduce fStamp to 8 bits
See #3323
2025-01-06 18:38:17 -08:00
Frank Yung-Fong Tang
4c3622f218 ICU-23000 Replace CharString for LocaleBased
See #3321
2025-01-06 14:09:30 -08:00
Frank Tang
93ce388619 ICU-23002 Fix int64_t overflow in NFRule::parseRuleDescriptor
See #3324
2025-01-03 15:48:24 -08:00
Almaz Mingaleev
ed69e5336d ICU-22992 madvise memory mapped files on Android. 2025-01-03 15:00:51 -08:00
Markus Scherer
d9d09db2a7 ICU-22921 remove redundant PR checklist item 2024-12-26 11:07:30 -08:00
Frank Tang
841e88bc8c ICU-22991 Remove unused private fIsSet
This field is removed in Java 24 years ago. Save 24 bytes per Calendar
object.
2024-12-23 14:58:56 -08:00
Frank Tang
e515c84645 ICU-22991 Remove unnecessary overload in Calendar 2024-12-23 12:52:11 -08:00
Frank Tang
ff31805f56 ICU-22991 Change fIsTimeSet fAreFieldsSet fAreAllFieldsSet fAreFieldsVirtuallySet fIsSet fStamp to private
https://docs.google.com/document/d/1RqP3s7Y1YLahqopNcuadl3DT-DMIZ7ASXZbSy7M2mFE/edit?tab=t.0#heading=h.lok0fhe381qa
2024-12-23 12:51:13 -08:00
Markus Scherer
b0ae845e47 ICU-22954 USetHeaderOnlyTest use unique_ptr 2024-12-23 11:17:14 -08:00
Markus Scherer
c0a3fe15d4 ICU-22954 Partially revert PR #3295 U_ICU_NAMESPACE_OR_INTERNAL, header-only localpointer
This partially reverts commit 3527b3d320.

Making LocalPointer header-only, with a different namespace when compiling internally,
turned out to be problematic.
2024-12-23 11:17:14 -08:00
Markus Scherer
38b6d7fe5a ICU-22954 Revert PR #3295 make all LocalXyzPointer header-only
This reverts commit 5bdb4c44af.

Making LocalPointer header-only, with a different namespace when compiling internally,
turned out to be problematic.
2024-12-23 11:17:14 -08:00
Frank Tang
7546622f87 ICU-22991 Remove unnecessary computeGregorianAndDOWFields private
Move the DOW calculation into computeWeekFields
2024-12-20 16:33:53 -08:00
Frank Tang
4c9ef1a31b ICU-22962 Fix int overflow in Calendar::handleComputeJulianDay 2024-12-20 16:12:58 -08:00
Robin Leroy
7d60bb844e ICU-22986 GL takes CM 2024-12-20 03:54:59 +01:00
Markus Scherer
e3bc073737 ICU-22954 header-only-test USet C++ iterators 2024-12-19 17:40:33 -08:00
Markus Scherer
320220ef69 ICU-22954 intltest.h & IcuTestErrorCode usable without U_SHOW_CPLUSPLUS_API 2024-12-19 17:40:33 -08:00
Markus Scherer
70409090de ICU-22954 make all LocalXyzPointer header-only 2024-12-19 17:40:33 -08:00
Markus Scherer
8655718531 ICU-22954 U_ICU_NAMESPACE_OR_INTERNAL, header-only localpointer
header-only parts of char16ptr.h
2024-12-19 17:40:33 -08:00
Markus Scherer
d03826cdee ICU-22954 USet C++ iterator return std::u16string 2024-12-19 17:40:33 -08:00
Mihai Nita
ba012a74a1 ICU-22920 Fix raw type warnings in icu4j tests: charset, common_tests, translit 2024-12-17 16:14:38 -08:00
Frank Tang
a7291c4e51 ICU-22962 Fix int32 overflow in Chinese Calendar 2024-12-16 18:02:05 -08:00
Frank Tang
81d047524c ICU-22991 Remove protected direct access to fStamp 2024-12-16 13:17:40 -08:00
Mihai Nita
4ff5d6a070 ICU-22920 Fix raw type warnings in icu4j core tests 2024-12-15 01:18:47 -08:00
Mihai Nita
02951053b4 ICU-22921 Document a way to remove unused includes from command line 2024-12-12 12:22:31 -08:00
Henri Sivonen
494e8cdc93 ICU-22968 Rearrange bits in trie values in normalization data export for ICU4X 2024-12-12 08:47:07 -08:00
Tim Chevalier
1b8118049f ICU-22940 MF2 ICU4C: Update for bidi support
Per https://github.com/unicode-org/message-format-wg/pull/884
2024-12-11 12:32:25 -08:00
Mihai Nita
fae4512d33 ICU-22922 ICU BRS 77: front-load update version to 77.0.1 2024-12-10 19:15:05 -08:00
Mihai Nita
515d0a7393 ICU-22773 Faster generation (4x) with multithreading 2024-12-09 15:08:18 -08:00
Mihai Nita
2fa8a0908c ICU-22773 Migrate the CLDR conversion tool to Maven 2024-12-09 13:15:13 -08:00
Peter Edberg
3b9c0fc4a5 ICU-22922 Integrate CLDR 46.1 beta1 to ICU main, part 3: ICU code/test mods 2024-12-09 13:08:14 -08:00
Peter Edberg
e2581fd1ac ICU-22922 Integrate CLDR 46.1 beta1 to ICU main, part 2: source data/test generated or copied from CLDR 2024-12-09 13:08:14 -08:00
Peter Edberg
c3929d1595 ICU-22922 Integrate CLDR 46.1 beta1 to ICU main, part 1: binary data 2024-12-09 13:08:14 -08:00
Markus Scherer
791a052f8e ICU-22921 fix link from gitdev to ci exhaustive tests 2024-12-09 09:55:54 -08:00
Tim Chevalier
62b95bb5f9 ICU-22908 MF2: Update spec tests and update implementation for recent spec changes
Updating the spec tests requires two implementation changes:
* Match on variables rather than expressions --
  see https://github.com/unicode-org/message-format-wg/pull/877
* Require attribute values to be literals (if present) --
  see https://github.com/unicode-org/message-format-wg/pull/894

This updates the spec tests to commit 6c3704f41a9c24427126429fb43992b03609dfc8
in https://github.com/unicode-org/message-format-wg/ . Any changes
following that commit will be addressed in a future PR.
2024-12-09 09:38:28 -08:00
Frank Tang
2e57f07cdf ICU-22736 Address Markus' feedback 2024-12-06 16:24:57 -08:00
Frank Tang
73956e9cf3 ICU-22736 Fix Persian calendar
ICU-22736 Add tests for java and make correction

Update icu4c/source/i18n/persncal.cpp

Co-authored-by: Markus Scherer <markus.icu@gmail.com>
2024-12-06 16:24:57 -08:00
Fredrik Roubert
36b552737f ICU-22751 Update configure files from configure.ac using autoreconf. 2024-12-05 20:50:03 +01:00
Fredrik Roubert
5314d9d737 ICU-22751 Delete icu4c/source/test/perf/leperf. 2024-12-05 20:50:03 +01:00
Robin Leroy
e59065cc74 ICU-22984 Clean up old monkeys 2024-12-04 18:38:23 +01:00
Robin Leroy
757f27cd35 ICU-22984 Move old monkeys 2024-12-04 18:38:23 +01:00
Robin Leroy
3f959352b5 ICU-22984 Optimize old monkeys 2024-12-04 18:38:23 +01:00
Robin Leroy
5519b85730 ICU-22984 Generate old monkeys 2024-12-04 18:38:23 +01:00
Frank Tang
e025466e3a ICU-22983 Fix DecimalQuantity::shiftLeft ubsan issue
ICU-22983 Add java tests and comments
2024-11-27 17:33:34 -08:00
Elango Cheran
2ba362fa3b ICU-22921 Update PR template
See #3285
2024-11-22 14:06:21 -08:00
Fredrik Roubert
424d6a3e8b ICU-22901 Update ulocimp_getSubtags() &co. to use std::string_view. 2024-11-22 19:05:03 +01:00
Fredrik Roubert
1dccc10085 ICU-22901 Move calls to uloc_getDefault() out of ulocimp_getSubtags(). 2024-11-22 19:05:03 +01:00
Markus Scherer
cd9fada30c ICU-22921 PR template: move standing issues up to TODO section 2024-11-22 10:00:06 -08:00
Robin Leroy
e000c5c3cc ICU-22127 Remove obsolete WordBreakTest.txt known issues 2024-11-22 18:40:54 +01:00
Craig Cornelius
e38ac306bc ICU-22920 fix exhaustive tests for likely subtags failure ICU-22976 2024-11-21 14:47:56 -08:00
Mihai Nita
b54f3f5d91 ICU-22870 Remove ja_JP_TRADITIONAL pattern generator tests 2024-11-21 14:12:05 -08:00
Mihai Nita
743998dfaf ICU-22977 Temp fix for MSVC builds: SkipUWP 2024-11-21 12:59:41 -08:00
Mihai Nita
f55c499927 ICU-21396 Fix incorrect result shown in the userguide example 2024-11-20 08:10:06 -08:00
Elango Cheran
5ceee1660f ICU-22960 Use ICUBinary.getRequiredData() to load BreakIterator data 2024-11-19 13:28:37 -08:00
Shane F. Carr
d6f8a14f8c
ICU-22922 Merge maint/maint-76 to main (#3270) 2024-11-19 10:35:26 -08:00
Vignesh Subramani
38c046b60c ICU-22888 Enhance XML Processor Configuration for Tools Directory in ICU4J Package
See #3243
2024-11-19 09:54:51 -08:00
Mihai Nita
06a23f8d37 ICU-22965 Fix the problems we had with the maven deploy for ICU 76.1
The blocker was the missing `<name>` element, which is mandatory
See https://central.sonatype.org/publish/requirements/#project-name-description-and-url

The second problem was that all modules were staged, not just the three we normally publish.
2024-11-13 15:38:08 -08:00
Mihai Nita
8b28c3843f ICU-22927 Duplicate (back) the MF2 test data between icu4c and icu4j
The C++ and Java implementations are done by two different people different companies.
With different time constraints and availability.
The spec is still not final (although it is close), and the implementations are
still quite a bit behind.
Sharing these test files slows down development, by forcing any C++ and Java changes
to happen in the same time.

There are other components that share test files that are not shared yet,
even if they are more stable. So I don't know why we would force this on MF2 only.

This is temporary, and the data files will be de-duplicated again at a later time,
when the two implementations are more stable.
That de-duplication will include other shared files, and in a slightly different structure
(we have a doc and a discution on this topic).
2024-11-13 14:09:42 -08:00
DraganBesevic
1a52a130b7 ICU-22724 Integrate CLDR 46 release beta4 2024-11-13 13:27:33 -08:00
Robin Leroy
0b9eb9ca71 ICU-22956 Use InCB for grapheme cluster segmentation 2024-11-12 10:45:16 +01:00
Shane F. Carr
700c5e36a1
ICU-22922 Merge maint/maint-76 to main (#3258) 2024-11-11 17:33:19 -08:00
Frank Tang
44ea9278b9 ICU-22962 fix int32_t overflow inside handleComputeJulianDay
test
2024-11-08 16:56:16 -08:00
Mihai Nita
fbfbe6c7aa ICU-22917 Output to files, cleanup, update docs 2024-11-07 16:52:29 -08:00
Mihai Nita
8dc2ec0bb0 ICU-22917 Separate methods in three classes 2024-11-07 16:52:29 -08:00
Tim Chevalier
0357501948 ICU-22942 MF2 ICU4C: NFC-normalize names and keys according to spec
Includes adding !UCONFIG_NO_NORMALIZATION guards to all MF2 files
2024-11-06 12:48:35 -08:00
Tim Chevalier
376da67f8d ICU-22953 MF2: Allow unpaired surrogates in text and quoted literals
See https://github.com/unicode-org/message-format-wg/pull/906/
2024-11-05 16:03:11 -08:00
Elango Cheran
842899d81a ICU-22920 Only run Maven cache workflow on the upstream repo
See #3263
2024-11-05 15:16:00 -08:00
Robin Leroy
8d86ca142e ICU-22941 Revert "ICU-22112 word break updates for @,colon; colon tailorings for fi,sv"
This reverts commit 49d192fefe.
2024-11-05 22:59:24 +01:00
Tim Chevalier
d868f13bd8 ICU-22947 Update user guide for MF2
Co-authored-by: Steven R. Loomis <srl295@gmail.com>
2024-10-30 10:27:48 -07:00
Fredrik Roubert
e29e86d62a ICU-22951 Add documentation for --with-data-packaging=auto to the userguide. 2024-10-24 16:44:04 -07:00
Markus Scherer
698217ef63 ICU-22922 ICU 76 final release
See #3252
2024-10-24 16:18:07 -07:00
Fredrik Roubert
23673a19ae ICU-22952 Update configure files from configure.ac using autoreconf. 2024-10-24 13:12:29 -07:00
Fredrik Roubert
3fe88eb8b3 ICU-22952 Make configure --help show --enable-* / --disable-* consistently. 2024-10-24 13:12:29 -07:00
Rahul Pandey
8eca245c74 ICU-22724 BRS_76_GA Update version number to 76.1 (No more -SNAPSHOT) 2024-10-21 14:49:09 -07:00
Mihai Nita
fd68c315d5 ICU-22724 Clean up import statements 2024-10-21 14:20:55 -07:00
Robin Leroy
99ca2ad931 ICU-22946 Pin all -latest runners per ICU-TC 2024-10-17 🗡️ 2024-10-19 00:18:10 +02:00
Rich Gillam
e19ca5f4bb ICU-22724 Update urename.h for ICU 76.1 final. 2024-10-18 13:55:40 -05:00
Mihai Nita
8772cc49f5 ICU-22724 Clean up import statements 2024-10-17 15:46:38 -07:00
Mihai Nita
ee8a94e0f1 ICU-22921 Rename README.md in .github
On the GitHub site the `.github/README.md` file is rendered instead of the
`README.md` file in the root.
2024-10-17 12:44:32 -07:00
Elango Cheran
6153f2ef85 ICU-22774 Fix URL typo in error message 2024-10-17 09:38:26 -07:00
Frank Tang
1dcb4bcb2d ICU-22765 fix uloc_addLikelySubtags on "und@x=private" 2024-10-16 15:05:03 -07:00
Robin Leroy
ca9fcca3c7 ICU-21097 Remove LineBreakTest.txt workarounds 2024-10-09 00:03:34 +02:00
Fredrik Roubert
6ca288559f ICU-22936 Replace all ICU4C code that uses UBool as an integer. 2024-10-07 14:40:16 +02:00
DraganBesevic
42c2b39c14 ICU-22935 Add ZWG to static currency lists 2024-10-04 12:11:02 -07:00
Craig
ebbadebdfd ICU-22938 FiIx unit tests for 'und_Hant_CN' in C & J 2024-10-03 17:01:13 -07:00
Frank Tang
5b45e5c64b ICU-22934 Limit the number of resursive call
To avoid stack overflow while building RBBI
2024-10-02 14:01:59 -07:00
Frank Yung-Fong Tang
8437d1d86b ICU-22767 Fix GCC warning and turn warning to errors
See #3129
2024-10-02 13:35:03 -07:00
Fredrik Roubert
9e68dceba9 ICU-22933 Update PGP key information for release signing 2024-10-02 09:14:52 -07:00
Markus Scherer
3cd97add1e ICU-22922 migrate download index
See #3227
2024-09-30 17:05:04 -07:00
Markus Scherer
61bbeb8898 ICU-22723 download 76rc 2024-09-30 14:22:43 -07:00
Mihai Nita
73626da0ca ICU-22606 Create full release from CI - review feedback 2024-09-30 13:44:26 -07:00
Mihai Nita
3c0d242cf7 ICU-22606 Create full release from CI - update docs 2024-09-30 13:44:26 -07:00
Mihai Nita
ae7159dbb9 ICU-22606 Create full release from CI - update icu4c 2024-09-30 13:44:26 -07:00
Mihai Nita
0bb0b8e364 ICU-22606 Create full release from CI - workflow files
The Ubuntu and Fedora files are very similar.
But I am not sure (yet) what is the best way to share.

The files uploaded to the GitHub Release use the exact same names as before.
The .jar files are binary identical to the ones that go to Maven (checked).

The Fedora Docker image should be built and uploaded from a dev machine.
There is a workflow (from GitHub) doing that, but has a warning that:
> This workflow uses actions that are not certified by GitHub.
> They are provided by a third-party and are governed by
> separate terms of service, privacy policy, and support documentation.
2024-09-30 13:44:26 -07:00
Mihai Nita
5bc0b4506e ICU-22606 Create full release from CI - rename 2024-09-30 13:44:26 -07:00
Craig
245c56f849 ICU-22723 Update 76 Change reports for C&J
See #3224
2024-09-30 12:59:59 -07:00
yumaoka
8bdb3066b1 ICU-22723 BRS76 Add ICU4J API signature file 2024-09-30 11:51:47 -04:00
yumaoka
dbb71b7c31 ICU-22723 BRS76 Update ICU4J serialization test data 2024-09-30 09:27:21 -04:00
DraganBesevic
de86b3269e ICU-22723 Integrate CLDR 46 release beta3, part 3, source files 2024-09-27 22:38:13 -07:00
DraganBesevic
17687bf58e ICU-22723 Integrate CLDR 46 release beta3, part 2, data files 2024-09-27 22:38:13 -07:00
DraganBesevic
3776dac38e ICU-22723 Integrate CLDR 46 release beta3, part 1, binary files 2024-09-27 22:38:13 -07:00
Mihai Nita
bd9ffc38f0 ICU-22930 The -sources.jar files in icu4j version 76.1 are AGAIN a lot bigger than before 2024-09-27 13:07:13 -07:00
Mihai Nita
808b9762fe ICU-22928 Don't generate data for concentr/perbillion structure - binary data 2024-09-26 22:55:42 -07:00
Mihai Nita
0e21ca21a8 ICU-22928 Don't generate data for concentr/perbillion structure - text data 2024-09-26 22:55:42 -07:00
Mihai Nita
894a8a4b1d ICU-22928 Don't generate data for concentr/perbillion structure - code 2024-09-26 22:55:42 -07:00
Craig
109008da3b ICU-22723 ICU76: Update known issue references to cloned reports. BRS #27
See #3215
2024-09-25 15:46:23 -07:00
Markus Scherer
0924c725b0 ICU-22722 update PR template for ICU 77
See #3213
2024-09-25 14:31:10 -07:00
Mike FABIAN
67b5763557 ICU-22912 fix coverity warning in gencnval.c
See: https://unicode-org.atlassian.net/browse/ICU-22912
2024-09-25 12:49:36 -07:00
Mihai Nita
8ce61b1139 ICU-22919 Enable CI with JDK 21 and fix the json parsing 2024-09-25 09:25:04 -07:00
Fredrik Roubert
3606d759b0 ICU-22392 Update configure files from configure.ac using autoreconf. 2024-09-24 16:01:27 -07:00
Begasus
ce11068030 ICU-22392 Add, primary support for Haiku 2024-09-24 14:34:11 -07:00
Craig
5889a536b9 ICU-22723 RC API change reports for C/J
See #3211
2024-09-24 14:30:38 -07:00
Mihai Nita
9fb6dca1f9 ICU-22721 Have the testdata folder trigger CI actions for both icu4c & icu4j 2024-09-24 12:44:29 -07:00
Markus Scherer
0334d92394 ICU-22721 simpler check for platforms that dont have char16_t 2024-09-24 10:56:14 -07:00
Mihai Nita
36061ccee2 ICU-22721 Comment (back) some code generation method
Documented in docs/processes/release/tasks/updating-measure-unit.md,
updating the data for measurement units requires one to uncomment some code
in a unit test, run it, copy from stdout an paste in some other files.

That code is left enabled, spamming the stdandard output every time tests run.
2024-09-23 21:43:22 -07:00
Sergey Bronnikov
da60e7a70d ICU-22904 Svace: Fix potential out-of-bound access 2024-09-23 20:51:41 -07:00
Mike FABIAN
1754ff2a10 ICU-22909 Fix coverity warning in makeconv.cpp
See: https://unicode-org.atlassian.net/browse/ICU-22909
2024-09-23 20:49:24 -07:00
Mike FABIAN
687ed05e55 ICU-22913 Fix coverity warning in wrtxml.cpp
See: https://unicode-org.atlassian.net/browse/ICU-22913
2024-09-23 19:57:57 -07:00
jeremyd2019
ed68cff34e ICU-22721 extend char16_t workaround to cygwin less than 3.5
uchar.h was added in Cygwin version 3.5.0.  Unfortunately, the last version of Cygwin that supported i686 was 3.3.6, so it is still somewhat relevant to a subset of users.
2024-09-23 19:52:51 -07:00
Ross Burton
0f022dca90 ICU-21172 fix install race
The generic recursive target calls target-local so also adding it to the
dependency list results in races due to install-local being executed twice in
parallel.  For example, install-manx can fail if the two install processes race
and one process tries to chown a file that the other process has just deleted.

Also install-manx should be a phony target, and for clarity use $^ instead of $?
in the install command.

Signed-off-by: Ross Burton <ross.burton@arm.com>
2024-09-23 18:45:09 -07:00
Yaakov Selkowitz
60d6bd71ef ICU-22721 Update filtration_test for Python 3.13
See #3046
2024-09-23 18:41:34 -07:00
Mihai Nita
22fe3a14ab ICU-22606 Point the Maven Central link to license to a versioned one 2024-09-23 09:54:41 -07:00
Oleksandr Hubanov
9d9bdfd64f ICU-22916 Remove use of makedep from MVS build, update doc
alexgubanow alex@0x0h.com
2024-09-23 09:24:03 -07:00
imurluck
1c33fcf81d ICU-22761 Optimize get value of LocaleObjectCache
See #2984
2024-09-23 09:14:34 -07:00
Markus Scherer
22ff260c76 ICU-22707 better doc HST=V != GCB=V 2024-09-23 09:13:24 -07:00
Earl Chew
199bc82702 ICU-22610 Use Requires.private and Libs.private
To prevent overlinking when publishing shared libraries,
specify internal dependencies using Requires.private and
Libs.private.

Use Libs.private in icu-uc.pc for libicudata.so, and
Requires.private in icu-i18n.pc, icu-io.pc, and icu-lx.pc,
so that ICU internal dependencies will not be bound
into clients.

The resulting *.pc files will produce the following
output for icu-i18n and icu-lx, provided pkgconf has
commit 78d53ea0 (2.2.0 or later) which de-duplicates
multiple -L options:

    commit 78d53ea012dfbaf397bf8e6907efac5b51abac56
    Author: Kai Pastor <dg0yt@darc.de>
    Date:   Fri Feb 23 15:18:08 2024 +0100

        Revise serials, traversal, flattening

  ./configure --enable-shared ...

    #
    # icu-i18n
    #

    % pkgconf --libs  icu-i18n
    -L/opt/local/lib -licui18n

    % pkgconf --libs --static icu-i18n
    -L/opt/local/lib -licui18n -licuuc -licudata -lpthread -lm

    #
    # icu-lx
    #

    % pkgconf  --libs icu-lx
    -L/opt/local/lib -liculx

    % pkgconf  --libs --static icu-lx
    -L/opt/local/lib -liculx -L/usr/lib/x86_64-linux-gnu -licu-le-hb -lharfbuzz -lm -licuuc -licudata -lpthread -lm

  ./configure --disable-shared --enable-static ...

    #
    # icu-i18n
    #

    % pkgconf --libs  icu-i18n
    -L/opt/local/lib -licui18n -licuuc -licudata -lpthread -lm

    % pkgconf  --libs --static icu-i18n
    -L/opt/local/lib -licui18n -licuuc -licudata -lpthread -lm

    #
    # icu-lx
    #

    % pkgconf  --libs icu-lx
    -L/opt/local/lib -liculx -L/usr/lib/x86_64-linux-gnu -licu-le-hb

    % pkgconf  --libs --static icu-lx
    -L/opt/local/lib -liculx -L/usr/lib/x86_64-linux-gnu -licu-le-hb -lharfbuzz -licuuc -licudata -lpthread -lm
2024-09-22 14:19:51 -07:00
Tim Chevalier
2f348f4c7a ICU-22902 Remove support for Unsupported, Private & Reserved constructs
Matching PR #883 in the message-format-wg repo.

Also move spec tests for unsupported statements and expressions into new files
to serve as syntax error tests.
2024-09-20 17:29:07 -07:00
Oleksandr Hubanov
5f9f8b2053 ICU-22714 fix zos build, use OpenXL
See #3008
2024-09-20 17:12:28 -07:00
Tim Chevalier
8f82facca8 ICU-22898 MF2 parser bug fixes
ICU4C: Escape curly braces when serializing and normalizing
ICU4C: Escape '|' in patterns
ICU4C: When normalizing input, escape optionally-escaped characters in patterns
ICU4C/ICU4J: Allow trailing whitespace after a match
ICU4C: Fix parser to iterate over code points, not code units
Add tests with old reserved syntax as syntax-error tests
2024-09-20 16:22:34 -07:00
Rich Gillam
9adcf8bd09 ICU-22668 Added unit tests to verify that CLDR-17892 addresses the original problem reported here and took out an
earlier hack in the Java code to work around the original problem.
2024-09-20 16:00:33 -07:00
Chris Chapman
1c2a1c50b7 ICU-22896 updating tzdata to 2024b 2024-09-20 15:20:39 -07:00
Shane F. Carr
94057e9550 ICU-22900 Remove deprecated SimpleNumber truncateStart
See #3192
2024-09-20 12:10:41 -07:00
Frank Tang
48cc8785f2 ICU-22730 Fix int32_t overflow in Persian calendar 2024-09-20 10:24:22 -07:00
Mihai Nita
b3bf9f8c27 ICU-22894 MF2, ICU4J: implements configuring the error handling behavior 2024-09-19 15:43:36 -07:00
Tim Chevalier
5991c9392c ICU-22890 MF2: Add ICU4C test for lone surrogates
Add a test to ICU4C for handling of lone surrogates.

Incidentally fix uninitialized-memory bug in MessageFormatter
(initialize `errors` to nullptr)

Co-authored-by: Frank Tang <ftang@chromium.org>
2024-09-19 14:28:02 -07:00
Tim Chevalier
23edf9cca6 ICU-22762 MF2: Add builder method to control error handling behavior
Add MessageFormatter::Builder::setErrorHandlingBehavior() method
and a new enum type MessageFormatter::UMFErrorHandlingBehavior
to denote strict or best-effort behavior.

The reason for adding a single method that takes an enum is to allow
for the possibility of more error handling modes in the future.

Co-authored-by: Markus Scherer <markus.icu@gmail.com>
2024-09-19 13:21:56 -07:00
Peter Edberg
ac737dabcf ICU-12865 Update API docs to reflect new features in ICU 54 and later :-) 2024-09-19 11:19:15 -07:00
rqu
e3e74bdd72 ICU-22721 Fix trivial slip-up in ICU4J TimeZone.java 2024-09-19 10:17:49 -07:00
Fredrik Roubert
55c5895923 ICU-22793 Clang-Tidy: google-readability-casting
https://releases.llvm.org/19.1.0/tools/clang/tools/extra/docs/clang-tidy/checks/google/readability-casting.html
2024-09-19 18:59:13 +02:00
Mihai Nita
531f595043 ICU-22853 Do not try to format java.time.Instant and Clock 2024-09-19 09:40:21 -07:00
Rahul Pandey
30efee0d3a ICU-22723 BRS_76_RC: Update version number to 76.1-SNAPSHOT 2024-09-19 21:49:13 +05:30
Peter Edberg
23c641f8c9 ICU-22397 Better UserGuide explanation of date pattern char Y 2024-09-19 08:27:24 -07:00
Fredrik Roubert
0bf8a95309 ICU-22793 Remove superfluous return value typecasts to UBool. 2024-09-19 17:11:38 +02:00
Peter Edberg
07e0f7ee2f ICU-22318 Fix bad spacing in utxttest.cpp 2024-09-19 14:51:01 +02:00
Rahul Pandey
eec5082ddb ICU-22723 Improve documentation for running exhaustive tests 2024-09-19 12:16:19 +05:30
Rahul Pandey
59d39a2aa5 ICU-22873 Update to clang18 and enable -Werror
See #3134
2024-09-19 12:14:38 +05:30
Craig
f19e598155 ICU-22723 Frontload ICU4J change report 75-76 2024-09-18 16:36:12 -07:00
Mihai Nita
09c5aa1b74 ICU-22893 Remove support for Unsupported, Private & Reserved constructs
- Matching PR #883 in the message-format-wg repo.
- Also removes some unused imports
2024-09-18 16:12:54 -07:00
Rich Gillam
1b33f5e30b ICU-22889 Implemented a recursion limit in the RBNF parsing code to match the one already present in the RBNF
formatting code.
2024-09-18 16:05:13 -07:00
Markus Scherer
17608b6b72 ICU-22874 sync config.guess license 2024-09-18 15:45:19 -07:00
Craig
c92bf3dfec ICU-22723 Frontload ICU4J API promotions (BRS #18) 2024-09-18 15:09:03 -07:00
Craig
feca6eea68 ICU-22723 Frontload ICU4C change report 75 -> 76 2024-09-18 14:56:40 -07:00
Frank Tang
303b7e81d7 ICU-22897 Fix memory leak and int overflow
1. Rewrite to use LocalPointer to prevent memory leak
2. Rewrite the if/else to switch to make the logic clear
3. Delete the rule if not remember inside the rule set to fix memory
leak.
4. Check base value calculation to avoid int64_t overflow.
5. Add memory leak test
2024-09-18 14:40:13 -07:00
DraganBesevic
ce4b90e484 ICU-22723 Integrate CLDR 46 release beta1, part 3, source files 2024-09-18 10:41:49 -07:00
DraganBesevic
c7fe2558be ICU-22723 Integrate CLDR 46 release beta1, part 2, data and test files 2024-09-18 10:41:49 -07:00
DraganBesevic
6c6186efba ICU-22723 Integrate CLDR 46 release beta1, part 1, binary files 2024-09-18 10:41:49 -07:00
Fredrik Roubert
32056302fc ICU-22722 Add example code for UnicodeString and the standard library. 2024-09-18 18:08:24 +02:00
Tim Chevalier
747d5eef3b ICU-22834 Update tests to reflect MF2 schema in conformance repo
This also updates the spec tests from the current version of the MFWG
repository and removes some duplicate tests.
Spec tests now reflect the message-format-wg repo as of
5612f3b050

It also updates both the ICU4C and ICU4J parsers to follow the
current test schema in the conformance repository.

This includes adding code to both parsers to allow `src` to be
either a single string or an array of strings (per
https://github.com/unicode-org/conformance/pull/255 ),
and eliminating `srcs` in tests.

It also includes other changes to make updated spec tests pass:

ICU4C: Allow trailing whitespace for complex messages, due to spec change
ICU4C: Parse number literals correctly in Number::format
ICU4J: Allow trailing whitespace after complex body, per spec change
ICU4C: Fix bug that was assuming an .input variable can't have a reserved annotation
ICU4C: Fix bug where unsupported '.i' was parsed as an '.input'
ICU4C/ICU4J: Handle markup with space after the initial left curly brace
ICU4C: Check for duplicate variant errors
ICU4C/ICU4J: Handle leading whitespace in complex messages
ICU4J: Treat whitespace after .input keyword as optional
ICU4J: Don't format unannotated number literals as numbers
2024-09-18 07:46:29 -07:00
Robin Leroy
bfc53547d1 ICU-22879 Test the collator predicates in maps 2024-09-17 20:44:21 +02:00
Fredrik Roubert
b160feaac2 ICU-22879 Provide collator based predicates for use with STL algorithms. 2024-09-17 20:44:21 +02:00
Fredrik Roubert
6020a98fbb ICU-22873 Update configure files from configure.ac using autoreconf. 2024-09-17 15:06:39 +05:30
Fredrik Roubert
e53f1df472 ICU-22873 Make configure log versions of the compilers used. 2024-09-17 15:06:39 +05:30
Rich Gillam
ee7cc23cd3 ICU-22856 Fix ICUCurrencyDisplayInfoProvider.fetchUnitPatterns() so that it doesn't skip inheriting patterns
from root.
2024-09-16 13:29:45 -07:00
Fredrik Roubert
688957e94e ICU-22874 Remove now obsolete -Wstrict-prototypes workarounds. 2024-09-16 16:12:35 +02:00
Fredrik Roubert
5c026623f1 ICU-22874 Update configure files from configure.ac using autoreconf. 2024-09-16 16:12:35 +02:00
Fredrik Roubert
b542ae9d91 ICU-22874 Update to use autoconf 2.72 for generating configure files. 2024-09-16 16:12:35 +02:00
Fredrik Roubert
e8cc2ec282 ICU-22874 Update the config.* files to current upstream versions.
https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
2024-09-16 16:12:35 +02:00
Fredrik Roubert
87a9284500 ICU-22310 Update configure files from configure.ac using autoreconf. 2024-09-13 13:44:17 +02:00
Fredrik Roubert
30fdd06cba ICU-22310 Delete long since obsolete configure.ac sections.
Having commented-out checks for things that don't even need to be
checked serves no purpose.

MSVC floating point optimizations don't need to be set, /fp:precise is
the default and has been so for a very long time now:

https://learn.microsoft.com/en-us/cpp/build/reference/fp-specify-floating-point-behavior?view=msvc-140

ICU4C requires C++17 and there aren't any compilers capable of that
without namespace support so there's no need to check that.
2024-09-13 13:44:17 +02:00
Markus Scherer
4433a94a57 ICU-22722 toTitle does not use UTR 21 2024-09-12 16:05:33 -07:00
Markus Scherer
5447a23070 ICU-22876 add U_SHOW_CPLUSPLUS_HEADER_API for C++ header-only APIs 2024-09-12 15:36:40 -07:00
Elango Cheran
33a788b353 ICU-22721 Set delay for CI enforce checks job to allow other jobs to init
See #3160
2024-09-12 15:18:28 -07:00
Frank Tang
70caba0027 ICU-22716 Turn on message_formatter_fuzzer 2024-09-12 14:53:01 -07:00
Frank Tang
fd8a552527 ICU-22884 Fix assertion and Heap-use-after-free
Issue in icu_76::message2::MessageFormatter::~MessageFormatter
2024-09-12 11:57:38 -07:00
dependabot[bot]
923d02f8d1 ICU-22721 Bump the github-actions group across 1 directory with 3 updates
See #3132
2024-09-12 10:55:16 -07:00
Peter Edberg
e14347b77a ICU-22883 Update CLDR-ICU instructions with CLDR prereqs for BRS integrations 2024-09-12 08:11:17 -07:00
Frank Tang
752da7303f ICU-22730 Fix int overflow inside CE Calendar 2024-09-11 22:07:01 -07:00
Fredrik Roubert
0cb5bc6707 ICU-22843 Disambiguate UnicodeString::readOnlyAlias() for MSVC.
Both std::u16string_view and std::wstring_view are possible matches for
UnicodeString as a template parameter, but adding an explicit overload
avoids both having to make that choice and taking the detour through
creating any string view at all.
2024-09-12 00:36:49 +02:00
Fredrik Roubert
376f10db47 ICU-22843 Add a test case that's ambiguous to MSVC and fails to compile. 2024-09-12 00:36:49 +02:00
Rich Gillam
fda2223952 ICU-22723 Regenerated urename.h. 2024-09-11 14:42:46 -07:00
Rich Gillam
d0fb2d54b3 ICU-22723 Promoted all @draft ICU 74 APIs to @stable ICU 74 2024-09-11 14:06:45 -07:00
Elango Cheran
c7caebd823 ICU-22722 Prevent running PR check enforcement after merging PRs 2024-09-11 13:33:58 -07:00
Frank Tang
36555b7800 ICU-22716 Temp turn off message_formatter_fuzzer
The running of message_formatter_fuzzer cause out of memory problem.
We will address that in later PR.
2024-09-11 12:12:36 -07:00
Frank Tang
6b00ed56d8 ICU-22814 Run CIFuzz on PR
CIFuzz ran on post merged since 7/20
https://github.com/unicode-org/icu/actions/workflows/cifuzz.yml

Turn to run on every PR
2024-09-11 11:24:51 -07:00
Frank Tang
9270216cb7 ICU-22863 Remove extra line in Islamic calendar
Fix a regression caused by d43d216feb
2024-09-10 22:53:06 -07:00
Frank Tang
4f246ab17f ICU-22716 Test VTimeZone in fuzzer 2024-09-10 22:51:12 -07:00
Frank Tang
1c3bf0bf82 ICU-22716 Extend Collator fuzzing 2024-09-10 22:51:00 -07:00
Frank Tang
3a74fcf052 ICU-22716 Test more number format 2024-09-10 22:50:47 -07:00
Frank Tang
266a2b8de2 ICU-22716 Add MessageFormat fuzzer
ICU-22716 improve
2024-09-10 22:50:33 -07:00
Markus Scherer
37b41495d7 ICU-22876 C++ UnicodeSet/USet easy item iteration
See #3120
2024-09-10 17:38:03 -07:00
Elango Cheran
263c735400 ICU-22722 Remove old announcement of default git branch name 2024-09-10 14:36:29 -07:00
LamTrinh.Dev
f6b274a197 ICU-22721 Enhance #if for locdispnames.cpp
Enhance #if for locdispnames.cpp

ICU-22721 Enhance #if for locdispnames.cpp, remove auto-generate file in local git.

ICU-22721 Enhance #if for locdispnames.cpp.

ICU-22721 Enhance #if for locdispnames.cpp, revert old-xmls.tar.bz2 file from main branch.

ICU-22721 Enhance #if for locdispnames.cpp

Enhance #if for locdispnames.cpp

ICU-22721 Enhance #if for locdispnames.cpp, remove auto-generate file in local git.

ICU-22721 Enhance #if for locdispnames.cpp.

ICU-22721 Enhance #if for locdispnames.cpp, revert old-xmls.tar.bz2 file from main branch.
2024-09-10 14:32:14 -07:00
Markus Scherer
8e40ed3e78 ICU-22875 escape less-than sign in regex.md 2024-09-10 14:28:30 -07:00
Fredrik Roubert
7cad791fb6 ICU-22843 Simplify UTF-16 string literals. 2024-09-10 18:58:01 +02:00
yumaoka
937f4adba5 ICU-22723 Update BRS task doc for JDK TZ check 2024-09-10 12:31:48 -04:00
Fredrik Roubert
3abf474f26 ICU-22843 Check libc++ version for std::basic_string_view<uint16_t>.
As was pointed out in PR #3106, the standard doesn't mandate the
existence of std::char_traits<uint16_t> and libc++ did actually
deprecate it in release 18 and delete it in release 19.

As ICU4C uses this for backward compatibility for old code that still
depends on setting -DUCHAR_TYPE=uint16_t it'd be nice to keep using it
as long as possible but once it's gone from the standard library there
isn't really much useful that ICU4C could do about that so conditionally
compiling the code when the standard library version is old enough
should suffice for keeping backward compatibility for yet some time.

https://github.com/llvm/llvm-project/commit/cce062d
2024-09-10 18:18:15 +02:00
Rahul Pandey
94c309d9a6 ICU-22847 Remove instances of ADO pipelines 2024-09-10 11:36:26 +05:30
yumaoka
74d5e6d258 ICU-22723 Update currency numeric code mapping data. 2024-09-09 09:25:02 -04:00
yumaoka
394bebdb46 ICU-22596 IBM-1388 converter data update 2024-09-09 09:23:41 -04:00
yumaoka
7e05196abb ICU-22723 Organize import statements. 2024-09-09 09:22:42 -04:00
Fredrik Roubert
6c9d39a08c ICU-22843 Enable constructing UnicodeString from literal in fixed time.
When passing a string literal to any of the legacy constructors that
take just a plain pointer to a UTF-16 string it becomes necessary to
iterate through the string to find its length, even though this length
was known to the compiler (which just has no way of passing it on to the
constructor).

But when calling the new templated string view constructor instead it
becomes possible for the compiler to use the known length of a string
literal to directly create a string view of the correct size and pass
this on to the constructor.

By replacing the legacy constructors with the new constructor this is
made the default behaviour.
2024-09-09 13:50:58 +02:00
Markus Scherer
f062f52c12 ICU-22294 UTS46 transitional=deprecated, change DEFAULT 2024-09-06 14:38:11 -07:00
Markus Scherer
415a7accc5 ICU-22707 adjust UTS46 for Unicode 16
See #3130
2024-09-06 10:00:11 -07:00
Rahul Pandey
6d67afcf01 ICU-22874 Fix building with -Werror on macOS clang 2024-09-06 15:26:36 +05:30
Rahul Pandey
91ed39fb9d ICU-22847 Migrate ADO pipelines to GHA
See #3112
    - Update Docs
    - Make exhaustive tests run manually, based on cron for main and post merge for maint
2024-09-06 11:52:01 +05:30
Chris Chapman
46712bff3d ICU-22877 revised "Region code" (formerly "Country code") section 2024-09-05 15:23:33 -07:00
Frank Tang
4ef58328d0 ICU-22716 Reduce the data size to test calendar fuzzer
Calendar fuzzer test too many operations and cause timeout
which does not suerface the real issue. Limit the test data size to 100
instead of 1000 instead.
2024-09-05 11:17:07 -07:00
Fredrik Roubert
964bdc54f7 ICU-22881 Switch to using macOS instead of MacOSX in runConfigureICU.
The old names are kept as aliases, but not listed in the help messsage.
2024-09-05 19:37:32 +02:00
Shane F. Carr
5faea996b0 ICU-22723 Update double-conversion 2024-09-03 14:00:55 -07:00
Mihai Nita
edbf02094f ICU-22606 Correct urls in the scm entry; fix JCite styles in javadoc
1. The flatten plugin appended the relative module paths to the URLs in <scm>.
The same kind of problem solved earlier with ${proj.url}, and fixed the same way.
I was unable to find any way to tell the plugin to not do that append, even after
reading some of the plugin code.

2. The stylesheet containing the JCite styles was not copied in the generated javadoc.
The first part of our custom stylesheet is 100% the same as the oficial one.
So the only part that was visually affected was the code produced by JCite.
The code still used <pre> and <code>, so it was monospaced and well indented / wrapped,
but no syntax colors.
2024-08-31 15:37:10 -07:00
Frank Tang
63f29c621c ICU-22854 Add consistency test against Region API 2024-08-30 22:37:29 -07:00
Mihai Nita
eda184e6af ICU-22606 Make the ICU4J release easier & more predictable 2024-08-29 12:55:59 -07:00
Markus Scherer
6645cc4935 ICU-22843 UnicodeString::operator!=(string view) 2024-08-29 08:45:03 -07:00
Craig Cornelius
1414e80f6c ICU-22722 Add RelativeDateTimeFormatter to main API page via docmain.h
See #3119
2024-08-27 14:53:04 -07:00
Sergey Fedorov
a4ace3ace7 ICU-22807 Fix for missing __STDC_FORMAT_MACROS before inttypes.h
Co-authored-by: Markus Scherer <markus.icu@gmail.com>
2024-08-27 10:52:14 -07:00
Rich Gillam
967babdc5f ICU-22669 Fix circular dependency in DateTimePatternGenerator::addICUPatterns(). 2024-08-27 10:37:19 -07:00
Markus Scherer
7c66c5cc4a ICU-22723 start ICU 76 download page 2024-08-25 16:00:31 -07:00
Steven R. Loomis
9bb4536ad7 ICU-22374 guard gCollationBinKey behind if !UCONFIG_NO_COLLATION
See #2442
2024-08-24 17:39:30 -05:00
Frank Tang
5e22f0076e ICU-22854 Implement subdivision validation 2024-08-22 11:02:36 -07:00
DraganBesevic
aabadf7289 ICU-22723 Integrate CLDR 46 release alpha2, part 5, exclude failing unit tests for exhaust tests; spaces <-> tabs 2024-08-22 08:22:56 -07:00
DraganBesevic
18ff73e239 ICU-22723 Integrate CLDR 46 cleaning 2024-08-22 08:22:56 -07:00
DraganBesevic
ebceedde21 ICU-22723 Integrate CLDR 46 release alpha0, part 3, source files 2024-08-22 08:22:56 -07:00
DraganBesevic
c2312370c2 ICU-22723 Integrate CLDR 46 release alpha2, part 2, data and test files 2024-08-22 08:22:56 -07:00
DraganBesevic
c4daf676f3 ICU-22723 Integrate CLDR 46 release alpha2, part 1, binary files 2024-08-22 08:22:56 -07:00
Mihai Nita
01d755749c ICU-22853 Support formatting types in java.time 2024-08-21 10:38:58 -07:00
Markus Scherer
51e21af692 ICU-22707 Unicode 16 aug16 2024-08-19 17:15:00 -07:00
Anton Voloshin
e4cba341b6 ICU-22850 ucol_openRules: fix ucol_open reference in the description
It should obviously be ucol_open here. This typo was introduced in the
0335b3b9c3
2024-08-19 13:03:21 -07:00
Steven R. Loomis
305098bdf8 ICU-22722 Update README.md
See #3111 and ICU-22722
2024-08-19 13:41:03 -05:00
taiyang-li
0253c828d9 ICU-22832 Fix msan complain about use-of-uninitialized-value 2024-08-19 08:43:38 -07:00
Mihai Nita
40189ffe57 ICU-21205 Fix Eclipse failing to import the icu4j maven project 2024-08-16 13:38:56 -07:00
Fredrik Roubert
ed117b9957 ICU-22864 Move main() out of the ICU namespace. 2024-08-16 20:14:50 +02:00
Esther Wang
1c312f7caa ICU-22861 std::max deduced conflicting types in unifiedcache.cpp 2024-08-16 10:33:38 +02:00
dependabot[bot]
f4a04631cd ICU-22722 Bump the github-actions group across 1 directory with 4 updates
See #3075
2024-08-15 17:52:40 -04:00
DraganBesevic
045350e7c1 ICU-22723 Integrate CLDR 46 release alpha0, part 4, fixes for exausting tests 2024-08-14 17:09:35 -07:00
DraganBesevic
d04154833c ICU-22723 Integrate CLDR 46 release alpha0, part 3, source files 2024-08-14 17:09:35 -07:00
DraganBesevic
b865f26876 ICU-22723 Integrate CLDR 46 release alpha0, part 2, data files 2024-08-14 17:09:35 -07:00
DraganBesevic
24966d7a21 ICU-22723 Integrate CLDR 46 release alpha0, part 1, binary files 2024-08-14 17:09:35 -07:00
Fredrik Roubert
37b2bc6999 ICU-22721 Use correct initializer list syntax.
This will make the code ever so slightly simpler but more importantly
make it possible to compile also when using -D_GLIBCXX_DEBUG.
2024-08-13 21:33:53 -07:00
Fredrik Roubert
bae2aa65d8 ICU-22696 Avoid unnecessary copies of already NUL terminated strings. 2024-08-13 21:15:26 +02:00
Markus Scherer
72206495de ICU-22843 UnicodeString <-> std::u16string_view / wstring_view via templates 2024-08-13 09:10:01 -07:00
Fredrik Roubert
7ffbe77e12 ICU-22696 Update ulocimp_setKeywordValue() to use std::string_view. 2024-08-13 14:03:18 +02:00
Frank Tang
0bd2b4d10c ICU-22849 Fix memLeak in RBBIRuleBuilder by using LocalMemory 2024-08-09 16:19:06 -07:00
Mihai Nita
b5b3e16afa ICU-22845 Better iterations for the ICU4J UnicodeSet 2024-08-09 08:56:25 -07:00
StefanStojanovic
66ba09973a ICU-22787 Fix ClangCL compilation on Windows 2024-08-09 10:54:21 +05:30
Tim Chevalier
57ed0a2a53 ICU-22794 MF2: Move .json files for tests into top-level testdata/ directory
Modify ICU4C and ICU4J test readers to handle all tests

Add `ignoreJava` and `ignoreCpp` properties to tests where needed

Includes parser bug fixes:

ICU4J: require a complex-body after declarations

ICU4J: Correctly parse the complex body after an unsupported statement

ICU4J: Handle date params in tests and remove default params for tests

ICU4J: Handle decimal params in tests

ICU4J: Require whitespace before variable/literal in reserved annotation

ICU4J: Require whitespace between options

ICU4J: Require a variable-expression in an .input declaration

ICU4J: don't require space between last key and pattern in variant

ICU4J: don't require space between selectors

ICU4J: allow whitespace after '=' in option

ICU4J: parse escape sequences in quoted literals according to grammar

ICU4J: allow whitespace within markup after attributes list
2024-08-08 09:14:44 -07:00
Mihai Nita
366bb463b1 ICU-22722 Update the ICU Vice-Chair for Maven publishing 2024-08-07 07:36:23 -07:00
Fredrik Roubert
8a6d59ec80 ICU-22696 Update ulocimp_to*{Key,Type}() to use std::string_view. 2024-08-07 14:14:23 +02:00
Frank Tang
1eb0ed2fad ICU-22818 Fix memory leak during error in messageformat2_data_model.cpp
See #3077
2024-08-06 15:39:20 -07:00
Frank Tang
a22dc93e3a ICU-22825 Fix memLeak during error in tznames_impl.cpp
Rewrite the TextTrieMap::put() which should delete the value
during error instead of deleting key.
Rewrite to simplified the error handling.
2024-08-06 09:58:15 -07:00
Frank Tang
6de4472db0 ICU-22820 Fix memLeak during error in genrb
Fix also ICU-22821 ICU-22822
2024-08-06 18:00:27 +02:00
Frank Tang
09ae31427e ICU-22830 Fix memLeak in numrange_fluent.cpp
Maybe related to the leak in ICU-22800
2024-08-05 19:30:54 -07:00
Frank Tang
575bb781cf ICU-22831 Fix memLeak in number_longnames.cpp by using LocalPointer
Maybe fix issues in ICU-22800
2024-08-05 19:28:34 -07:00
Frank Tang
6c8c6aa430 ICU-22827 Fix memLeak by using LocalUResourceBundlePointer 2024-08-05 16:34:16 -07:00
Frank Tang
2f5a46ffd5 ICU-22819 Fix memory leak during error 2024-08-05 11:41:06 -07:00
Frank Tang
49867907f9 ICU-22824 Fix mem Leak during error in uidna.cpp 2024-08-05 11:31:14 -07:00
Frank Tang
bca5fa5004 ICU-22826 Fix memory leak 2024-08-01 13:46:58 -07:00
Fredrik Roubert
dd65ee3f0b ICU-22696 Update ulocimp_getKeywordValue() to use std::string_view. 2024-07-31 15:39:15 +02:00
Elango Cheran
3663cc1e0f ICU-22707 Add support for property Modifier_Combining_Mark 2024-07-30 15:44:32 -07:00
Fredrik Roubert
10fe2a6110 ICU-22696 Add uhash support for std::string_view. 2024-07-30 06:45:43 +02:00
Fredrik Roubert
8891c070bd ICU-22696 Add implicit conversion from StringPiece to std::string_view.
This will allow ICU4C to seamlessly use std::string_view internally
while continuing to use StringPiece in the public API.
2024-07-30 06:45:33 +02:00
Fredrik Roubert
5d7cbdbc02 ICU-22696 Delete unused code.
These optional output parameters weren't used when these function were
originally added so they were most likely included just in case someone
would want to use them in the future, but that was 10 years ago now and
they still haven't been used yet, so it's unlikely that they'll be used
in the foreseeable future and call sites as well as the implementation
can instead be simplified by removing them.
2024-07-29 22:03:10 +02:00
Elango Cheran
06c077bd35 ICU-22503 add property Indic_Conjunct_Break 2024-07-26 14:47:39 -07:00
Peter Edberg
2cbfd134ef ICU-22741 Update CLDR-ICU instructions to mention some hardcoded lists that may need updating
Co-authored-by: Steven R. Loomis <srl295@gmail.com>
2024-07-26 12:17:00 -07:00
Frank Yung-Fong Tang
23d9628f88 ICU-22801 Try to add LEAKSANITIZER
See #3041
2024-07-23 09:34:04 -07:00
Frank Yung-Fong Tang
40b2ec3c37 ICU-22814 Add CIFuzz to ICU
See #3059
2024-07-19 15:53:12 -07:00
Carlos Alberto Lopez Perez
8ca6bc7545 ICU-22813 Rise the size of the buffers used for the command strings at pkgdata
The tool pkgdata uses snprintf() to build the strings of the commands that
will execute later during the install process. But the maximum size of this
buffers is not enough when there is a long path.

This has caused issues on some CI systems that use very long paths, causing
the install process to produce a wrong result.

The maximum path on Linux is 4096 (defined as PATH_MAX at <linux/limits.h>)
So the size of SMALL_BUFFER_MAX_SIZE should be 4096 to avoid errors related
to truncated paths.
2024-07-19 18:02:53 +00:00
Robin Leroy
4acb4724cf ICU-22707 Copy new monkey rules to ICU4J 2024-07-18 23:56:34 +00:00
Robin Leroy
d1490896ed ICU-22707 Fix an ancient bug in moveIndex32 2024-07-18 23:56:34 +00:00
Robin Leroy
b3ec8d1abd ICU-22707 Port the old monkey rule changes to ICU4J 2024-07-18 23:56:34 +00:00
Robin Leroy
7a52b0602a ICU-22707 Port the line monkey partition to ICU4J 2024-07-18 23:56:34 +00:00
Robin Leroy
80c3389bcd ICU-22707 Copy data-driven test file to ICU4J 2024-07-18 23:56:34 +00:00
Markus Scherer
558b3c02a6 ICU-22707 generate ICU4J .brk files 2024-07-18 23:56:34 +00:00
Robin Leroy
a53a8bdc73 ICU-22707 UTC-179-C28 Improved expectation 2024-07-18 23:56:34 +00:00
Robin Leroy
7d14e8db45 ICU-22707 Patch tailored new monkeys, manually for the last hunk on line_(loose|normal)_cj 2024-07-18 23:56:34 +00:00
Robin Leroy
3a004d400f ICU-22707 Patch tailored rules (manually for hunks 1 and 6 on loose(_phrase)?_cj) 2024-07-18 23:56:34 +00:00
Robin Leroy
782d5cc339 ICU-22707 UTC-179-A102 Consider using a macro throughout the rules for [\p{ea=F}\p{ea=W}\p{ea=H}]. 2024-07-18 23:56:34 +00:00
Robin Leroy
20fdebcb35 ICU-22707 UTC-180? Give up on 16.0β rules, amend LB10 and LB21a instead. 2024-07-18 23:56:34 +00:00
Robin Leroy
cc64ec7c94 ICU-22707 feed more bits to the starving monkeys: ranlux48 rather than a 32-bit LCG 2024-07-18 23:56:34 +00:00
Robin Leroy
47a8ea4065 ICU-22707 smarter old monkeys: refine the partition on interesting sets 2024-07-18 23:56:34 +00:00
Robin Leroy
600011eb7d ICU-22707 LB19 rules that seem to actually work with ea=W BA and CM. Update default new monkeys. 2024-07-18 23:56:34 +00:00
Robin Leroy
6d3b988fd0 ICU-22707 UTC-179-C30 [\p{lb=IS} & [\p{ea=F}\p{ea=W}\p{ea=H}]] has been emptied 2024-07-18 23:56:34 +00:00
Robin Leroy
5d7df44d2f ICU-22707 UTC-179-C28 examples from https://github.com/unicode-org/properties/issues/197 = L2/24-064 §5.5 (also in LineBreakTest.txt but less legible). 2024-07-18 23:56:34 +00:00
Robin Leroy
79f4745494 ICU-22707 UTC-179-C25 Limit LB21a to the Hebrew-hyphen-non-Hebrew case 2024-07-18 23:56:34 +00:00
Robin Leroy
83f3334b96 ICU-22707 UTC-179-C32 Upstream and improve the old Finnish tailoring LB20a from CLDR-3029 and ICU-8151 2024-07-18 23:56:34 +00:00
Robin Leroy
36fe0f0660 ICU-22707 UTC-179-C28 Simplify the UAX14 formulation 2024-07-18 23:56:34 +00:00
Robin Leroy
84ff5dacf8 ICU-22707 UTC-179-C28 LB19 change for simplified chinese 2024-07-18 23:56:34 +00:00
Robin Leroy
1513b66c32 ICU-22707 UTC-179-C35 Remove redundant rule, caught after UTC-179. Called out in review note in https://www.unicode.org/reports/tr14/tr14-52.html#LB25. 2024-07-18 23:56:34 +00:00
Robin Leroy
d3b361f23a ICU-22707 UTC-179-C35 LB25 alignment with the UAX14 formulation from 15.1 and earlier. 2024-07-18 23:56:34 +00:00
Robin Leroy
509f552e38 ICU-22707 UTC-179-C35 No regexes for old monkeys: Express LB25 using UAX14-style rules rather than a regex 2024-07-18 23:56:34 +00:00
Robin Leroy
9391cbb0b3 ICU-22707 Print random 🙈🙉🙊🐵🐒 rather than ... so that progress is visible when the screen is full and report monkey counts 2024-07-18 23:56:34 +00:00
Markus Scherer
f9d2d561a1 ICU-22707 disable UTS46 test for now 2024-07-18 23:56:34 +00:00
Markus Scherer
4312a4e5cb ICU-22707 Unicode 16 beta jun04 2024-07-18 23:56:34 +00:00
Markus Scherer
876816b0a1 ICU-22707 new short aliases ID_Status, ID_Type 2024-07-18 23:56:34 +00:00
Elango Cheran
ee93218eab ICU-22721 Simplify wait-for-checks match logic 2024-07-11 05:19:59 -07:00
Fredrik Roubert
0178a07a26 ICU-22793 Clang-Tidy: google-readability-casting
https://releases.llvm.org/17.0.1/tools/clang/tools/extra/docs/clang-tidy/checks/google/readability-casting.html
2024-07-04 22:32:12 +02:00
Elango Cheran
f668bc5218 ICU-22721 Add workflow that enforces required checks 2024-06-30 21:21:16 -07:00
Elango Cheran
2e00f38660 ICU-22721 Prevent redundant concurrent CI runs on the same PR branch 2024-06-30 14:13:33 -07:00
Frank Tang
cf7ff1b0a5 ICU-22716 Set smaller timeout limit for uregex_match_fuzzer
3000 is still too large and cause https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=69869
set to 300 per andy's earlier suggestion
2024-06-24 14:06:08 -07:00
Frank Tang
86add69c92 ICU-22716 Set timeout limit for uregex_match_fuzzer
To avoid unnecessary timeout.
2024-06-21 11:49:55 -07:00
Frank Tang
42d0bab7c3 ICU-22800 Avoid inconsistent state inside Locale
There are some memory leak in Locale which is hard to figure out why.
Use different variable to track memory allocation to avoid inconsistent
state while malloc fail
2024-06-21 11:49:11 -07:00
Gary L. Wade
b29eb331e1 ICU-22720 Update ICU4J to be comparable for relative date formatting as ICU4C for days of the week and quarters
Added enums for the days of week to RelativeUnit of RelativeDateTimeFormatter and changed QUARTERS to be included in this change rather than deprecated.  Removed short-circuiting of unit tests for the comparable formatting in ICU4C.  Added changes in formatNumericImpl and RelDateTimeDataSink to use the enums.  Added unit tests to RelativeDateTimeFormatter.java to test the enums proposed and removed the short-circuiting of days-of-week tests.
2024-06-18 13:56:07 -07:00
Makoto Kato
f48944e062 ICU-21809 Possible memory leak of tempTable.resFlags 2024-06-18 13:49:23 -07:00
Fredrik Roubert
8f6ba2a7a5 ICU-22721 Correct format specifier for type int32_t (-Wformat). 2024-06-18 09:57:56 -07:00
Fredrik Roubert
e6674c7360 ICU-22721 Set all fields in initializer (-Wmissing-field-initializers). 2024-06-18 09:57:56 -07:00
Fredrik Roubert
471c2ce03b ICU-22721 Delete unused variable (-Wunused-variable). 2024-06-18 09:57:56 -07:00
Frank Tang
e5b8660a46 ICU-22716 Add uregex_match_fuzzer
Based on https://chromium-review.googlesource.com/c/chromium/deps/icu/+/5465572
2024-06-17 20:06:41 -07:00
Frank Tang
0ea487a58b ICU-21810 Fix memory allocation error check in ucurr.cpp
See #3039
2024-06-17 15:33:20 -07:00
David Yeung
6e9e120520 ICU-22796 Bugfix: Memory access after uprv_free(). 2024-06-17 13:09:27 -07:00
Frank Yung-Fong Tang
697cb14f08 ICU-22798 Avoid stack overflow by return error.
See #3035
2024-06-14 13:09:30 +05:30
Frank Tang
b82291fd77 ICU-21810 Fix error checking of ucurr.cpp part 1
See #3027
2024-06-13 14:31:27 -07:00
Frank Tang
09dce103f2 ICU-22797 Move the loop limit before ignore continue
Fix an infinity loop issue inside collation builder
2024-06-13 09:58:15 -07:00
Fredrik Roubert
64f529e113 ICU-22310 Update configure files from configure.ac using autoreconf. 2024-06-13 15:09:29 +02:00
Fredrik Roubert
d1cfbb22f1 ICU-22310 Revert now obsolete autoconf "pld hack". 2024-06-13 15:09:29 +02:00
Fredrik Roubert
6a24e8d1df ICU-22310 Update configure files from configure.ac using autoreconf. 2024-06-13 15:09:00 +02:00
Fredrik Roubert
58df035f1d ICU-22310 Revert now obsolete autoconf bug workaround for echo. 2024-06-13 15:09:00 +02:00
Elango Cheran
aefbea6162 ICU-22722 Make cldr-to-icu verbiage on alt="ascii" sound more authoritative 2024-06-07 11:45:29 -07:00
dependabot[bot]
4f7b73dfdb ICU-22721 Bump the github-actions group with 2 updates
See #3021
2024-06-06 13:16:39 -07:00
Frank Tang
87fce24233 ICU-22642 Avoid spending too much time inside CanonicalIterator
See #3017
2024-06-06 12:48:59 +02:00
Markus Scherer
6543634649 ICU-22707 fix hst=V: hst=NA for Kirat Rai 2024-06-05 08:10:21 -07:00
Markus Scherer
47e9389b8e ICU-22785 move cptrie bit setter to toolutil; add getCPTrieSize() 2024-06-04 18:51:53 -07:00
Markus Scherer
c439dcdf27 ICU-22785 uprops.icu: coalesce scx+sc bits 2024-06-04 18:51:53 -07:00
Markus Scherer
0d8a3ccd11 ICU-22785 move Block bits from propsvec0 to new trie 2024-06-04 10:49:53 -07:00
Elango Cheran
81492ae9a2 ICU-22722 Make example config for cldr-to-icu work over all locales 2024-06-02 21:41:48 -07:00
Elango Cheran
b9b324ccc5 ICU-22722 Update docs for cldr-to-icu converter 2024-05-31 14:21:24 -07:00
Frank Tang
3235c38f24 ICU-22777 Fix incorrect pointer comparision 2024-05-30 23:46:56 -07:00
Fredrik Roubert
edfe255de3 ICU-22001 Put translation unit local definitions in unnamed namespaces.
Any symbol that isn't intended to have external linkage should either be
declared static (legacy code) or put in an unnamed namespace.
2024-05-30 14:06:12 +02:00
Frank Yung-Fong Tang
faac745421 ICU-22768 Fix bidi buffer overflow
See #3016
2024-05-29 15:16:32 -07:00
DraganBesevic
699fb1dbc4 ICU-22723 Integrate CLDR 46 release m0, part 3, source files 2024-05-24 11:32:57 -07:00
DraganBesevic
d6657adc4a ICU-22723 Integrate CLDR 46 release m0, part 2, data and files 2024-05-24 11:32:57 -07:00
DraganBesevic
aa5fc99b33 ICU-22723 Integrate CLDR 46 release m0, part 1, binary files 2024-05-24 11:32:57 -07:00
Mihai Nita
788b893214 ICU-22769 Fix the jar generation to not use versioned folder 2024-05-22 10:01:41 -07:00
aszasz
0ef4da943c ICU-22722 Fix broken link to faq in docs/userguide/icu/index.md
See #3006
2024-05-17 14:43:28 -07:00
Frank Tang
6ac6fdda74 ICU-22730 propagate error avoid overflow 2024-05-16 00:27:14 -07:00
Mihai Nita
f017c3722b ICU-22722 Better name for workflow 2024-05-15 14:18:34 -07:00
Henri Sivonen
398890853d ICU-22718 Export disallowed/ignored UTS 46 data for ICU4X 2024-05-15 11:20:09 -07:00
Tim Chevalier
e6ac2a292f ICU-22753 Fix read-after-move in MF2
In StaticErrors::addError() and DynamicErrors::addError(),
don't read from `e` after moving out of it.
2024-05-14 12:40:06 -07:00
Tim Chevalier
084af5c2b6 ICU-22740 Add -Wctad-maybe-unsupported to CI jobs that use -Wall -Wextra.
This modifies the following jobs:

C: Linux Clang-16 WarningsAsErrors (Ubuntu 20.04)
C: macOS(Latest) Clang WarningsAsErrors
2024-05-14 12:39:44 -07:00
Tim Chevalier
db0694e8ab ICU-22740 Add missing template arguments in MF2 parser
This fixes a clang-17 `-Wctad-maybe-unsupported` warning.
2024-05-14 12:39:44 -07:00
Fredrik Roubert
ed52e0a25b ICU-22721 Rename scoped variable to not shadow variable in outer scope. 2024-05-14 19:03:14 +02:00
Tim Chevalier
6d5555a739 ICU-22746 Import ICU4J tests
Includes code fixes for `numberingSystem`, `percent`,
and `precision` options in `:number`

Also includes a code fix for number selection:
  Refactor code to conform more closely to the steps in the spec,
  and call the number formatter before the selector so that a FormattedNumber
  with the right options is selected on

Some modifications were needed to add missing params
and to mark some tests as ignored (see ICU-22754).
Also added decimal arguments in JSON test reader

Finally, some redundant tests are removed:
all tests in messageformat2test_features and
messageformat2test_icu, and
messageformat2test_builtin are now covered by JSON tests
2024-05-13 14:51:14 -07:00
Mihai Nita
75ef0d97e1 ICU-22723 Add line number info to icuexportdata handleError
See #3004
2024-05-13 11:58:09 -07:00
Henri Sivonen
f5056cb46a ICU-22757 Remove allow list of known contractions with precomposed form from ICU4X mode of genuca
This assumes that future cases will work OK, since the addition that was seen in Unicode 16 alpha
was OK.
2024-05-13 11:25:01 -07:00
Fredrik Roubert
564c92d666 ICU-22721 Delete obsolete __STRICT_ANSI__ workaround for MinGW.
This was originally added in the year 2004 for ICU-3854 but is no longer
needed with contemporary versions of MinGW where it instead as of GCC 14
causes this problem:

__STRICT_ANSI__ seems to have been undefined; this is not supported.
2024-05-10 16:11:21 -07:00
Mihai Nita
63afc76425 ICU-22769 Rename of the ICU4J data folder to not contain a version (script) 2024-05-08 15:33:21 -07:00
Mihai Nita
29620612ef ICU-22769 Rename of the ICU4J data folder to not contain a version (code) 2024-05-08 15:33:21 -07:00
Mihai Nita
9720a210ac ICU-22769 Rename of the ICU4J data folder to not contain a version 2024-05-08 15:33:21 -07:00
Mihai Nita
f133a0bd9b ICU-22723 Cleanup: remove the icu4j/maven-migration/ folder 2024-05-08 14:17:44 -07:00
Mihai Nita
cb0d0d4e56 ICU-21757 Small GitHub workflow cleanup 2024-05-08 12:51:27 -07:00
Tim Chevalier
85a9b2ee84 ICU-22746 Refactor MF2 tests to be data-driven and add JSON lib
This change moves all test strings out of test/intltest/messageformat2test.cpp
and into JSON files, which are parsed/run by code in
a new file, test/intltest/messageformat2test_read_json.cpp .
It also removes the file test/intltest/messageformat2test_fromjson.cpp ,
which contained tests that are now stored in JSON files.

To enable this, a new vendored library is added:
nlohmann/json .
This library is introduced as a dependency for the MF2 tests.
The required part of the library is a single header file,
which is added under icu4c/source/tools/toolutil/.
Also adds a wrapper file for the vendored JSON header file
that defines macros that disable exceptions.

Co-authored-by: Steven R. Loomis <srl295@gmail.com>
2024-05-07 14:09:24 -07:00
Mihai Nita
9369b7a209 ICU-21757 Stop sharing utilities-for-cldr
Moves UnicodeMap and related classes to core.
Also removes `CollectionUtilities`, `UOption`, and `ElapsedTimer`.
They will end up in UnicodeTools, CLDR, and CLDR respectively.
2024-05-06 15:49:03 -07:00
Mihai Nita
c92c188cac ICU-21757 Replace UOption with commons-cli in XLIFF2ICUConverter 2024-05-06 11:22:13 -07:00
Henri Sivonen
7eaefe076e ICU-22758 Make icuexportdata compatible with Unicode 16 normalization 2024-05-06 08:27:06 -07:00
Mihai Nita
69cb085e12 ICU-21757 Replace UOption with commons-cli in perf-tests 2024-05-03 16:28:26 -07:00
dependabot[bot]
1c7d7f9a95 ICU-22721 Bump the github-actions group with 4 updates
See #2992
2024-05-03 15:36:34 -07:00
Shane F. Carr
23bf38f10f ICU-22764 Fix gendict memory safety in toml uchars mode 2024-05-03 11:02:29 -07:00
Frank Tang
464531eb8e ICU-22079 Fix bidi fuzzer
Check data length to avoid memcpy out of bound.
2024-05-02 11:59:22 -07:00
Frank Tang
1ff249b73f ICU-21589 Remove format-overflow warning
1. double size one stack buffer
2. add pragma to ignore some theorical case because the array are in
   same length but some fields are shorter than the other.

ICU-21589 wrap with defined(__GNUC__)

ICU-21589 avoid clang
2024-05-02 18:23:08 +02:00
Mihai Nita
6041c249f4 ICU-21757 Remove ICU dependencies on CollectionUtilities 2024-04-30 19:10:06 -07:00
Markus Scherer
6e6b576729 ICU-22707 Azure ICU4J timeout 20->25min 2024-04-29 17:00:55 -07:00
Markus Scherer
fe23620f12 ICU-22707 appease rbbitst UBSan for RBBIStateTableRow 2024-04-29 17:00:55 -07:00
Markus Scherer
b32d4a718e ICU-22707 disable icuexportdata --mode norm 2024-04-29 17:00:55 -07:00
Markus Scherer
012c326755 ICU-22707 UCA 16 data first cut 2024-04-29 17:00:55 -07:00
Markus Scherer
5416451ae2 ICU-22707 more vo=U: Egyp. hieroglyphs 2024-04-29 17:00:55 -07:00
Markus Scherer
ba1ecef7de ICU-22707 Unicode 16 security data first cut 2024-04-29 17:00:55 -07:00
Markus Scherer
423b4c7c31 ICU-22707 Unicode 16 script metadata 2024-04-29 17:00:55 -07:00
Markus Scherer
1053be18e5 ICU-22707 Java norm2impl support MaybeNo 2024-04-29 17:00:55 -07:00
Markus Scherer
b1a50f2a38 ICU-22707 Java props data files 2024-04-29 17:00:55 -07:00
Markus Scherer
e57aeba98c ICU-22707 test normalization quick check properties against ppucd 2024-04-29 17:00:55 -07:00
Markus Scherer
94ef2757a3 ICU-22707 gennorm2 & C++ norm2impl support MaybeNo
- .nrm formatVersion 5
- updated data format doc & design doc
2024-04-29 17:00:55 -07:00
Markus Scherer
d0e43d6943 ICU-22707 fix normalization bug: chars that combine back & fwd 2024-04-29 17:00:55 -07:00
Markus Scherer
4d9612bfa2 ICU-22707 Age 6:2, run generate.sh 2024-04-29 17:00:55 -07:00
Markus Scherer
d79c7bf5a0 ICU-22707 expectedLong script names 2024-04-29 17:00:55 -07:00
Markus Scherer
560e4bbf41 ICU-22707 preparseucd.py 2024-04-29 17:00:55 -07:00
Markus Scherer
ed8fe2c336 ICU-22707 ICU Unicode 16 version numbers 2024-04-29 17:00:55 -07:00
Markus Scherer
ce846a2367 ICU-22707 update change log for 16 2024-04-29 17:00:55 -07:00
Markus Scherer
2688bca066 ICU-22707 change log for Unicode 16 minus hardcoded props 2024-04-29 17:00:55 -07:00
Frank Tang
a57c68364e ICU-22079 Rename 2024-04-29 14:51:13 -07:00
Frank Tang
a3d3e8abc5 ICU-22079 Add ubidi_fuzzer
Port the code from https://unicode-org.atlassian.net/browse/ICU-22079
to add fuzzer for ubidi
2024-04-29 14:51:13 -07:00
Fredrik Roubert
755b0981ec ICU-22721 Reorder initializer to match declaration (-Wreorder-ctor). 2024-04-29 11:44:35 -07:00
Fredrik Roubert
d7c1f6b55d ICU-22721 Add missing const (-Wwritable-strings). 2024-04-29 11:44:35 -07:00
Fredrik Roubert
d7a1815c3d ICU-22721 Remove superfluous semicolons (-Wextra-semi). 2024-04-29 11:44:35 -07:00
Fredrik Roubert
8b84ae1dda ICU-22721 Comment out variables only used in commented out code. 2024-04-29 11:43:21 -07:00
Fredrik Roubert
ec57da8651 ICU-22721 Delete unused variables. 2024-04-29 11:43:21 -07:00
Fredrik Roubert
a7e23a531c ICU-22721 Clang-Tidy: modernize-use-override
https://releases.llvm.org/17.0.1/tools/clang/tools/extra/docs/clang-tidy/checks/modernize/use-override.html
2024-04-29 19:28:40 +02:00
Frank Tang
3aa8b8c5ee ICU-22742 Fix handling of XA,XB,XC for addLikelySubtags
Add more tests.

ICU-22742 Add PS... variants

ICU-22742 Add java tests

ICU-22742 extend tests

ICU-22742 wrap java
2024-04-24 15:24:35 -07:00
Frank Tang
a91cbd6578 ICU-22750 Fix Floating-point-exception in icu::Calendar::roll
See #2979
2024-04-23 09:46:29 -07:00
Elango Cheran
0312308566 ICU-22721 Prevent inconsistent ICU4J Maven deploys via CI 2024-04-22 15:28:56 -07:00
Fredrik Roubert
4c9770f73d ICU-22721 Remove now obsolete disabled warnings for LocalPointerBase.
The missing operators that used to be warned about were all deleted by
commit 75eab42060.
2024-04-22 21:58:17 +02:00
Mihai Nita
0e4c2d8bc6 ICU-22724 ICU BRS 76: front-load update version to 76.0.1 2024-04-18 16:57:47 -07:00
Frank Tang
0c02f8c007 ICU-22743 Change internal functions to propagate errors up. 2024-04-18 15:32:59 -07:00
Shane F. Carr
5e35ffc87e
ICU-22745 Merge ICU 75 maintenance branch to main (#2972) 2024-04-18 15:04:33 -07:00
Craig Cornelius
3f960044b8 ICU-22722 Revised ICU4J API doc process to modern tools
See #2969
2024-04-17 13:20:26 -07:00
Elango Cheran
617b094df3 ICU-22723 Update PR template help text for next version's ticket numbers
See #2962
2024-04-15 22:22:46 -04:00
Elango Cheran
dbb3fe957a ICU-22722 Fix missing starter character for MF2 keyword in User Guide 2024-04-11 12:49:15 -07:00
Frank Tang
29b1141f79 ICU-22730 Fix Japanese extended year int32 overflow 2024-04-10 22:17:01 -07:00
Elango Cheran
943b0ca31b ICU-22722 Fix Readme CI badge link 2024-04-05 08:31:47 -07:00
dependabot[bot]
a86455825a ICU-22721 Bump the github-actions group with 2 updates
See #2942
2024-04-04 21:26:56 -04:00
14020 changed files with 490314 additions and 285761 deletions

View file

@ -6,4 +6,4 @@
# for running Bazel commands while ensuring, through configuration, that only a
# specific version of Bazel is executed.
USE_BAZEL_VERSION=6.0.0
USE_BAZEL_VERSION=7.2.1

View file

@ -1,77 +0,0 @@
# Azure Pipelines configuration for Exhaustive Tests for ICU.
#
# Note: The exhaustive test configuration is in a separate file
# so that it can be run independently from the regular builds.
#
# Only run the exhaustive tests on the main and maint branches, and
# also batch up any pending changes so that we will only have at most
# one build running at a given time (since they take a long time).
trigger:
batch: true
branches:
include:
- main
- maint/maint-*
paths:
include:
- '*'
exclude:
- .github/*
- .ci-builds/.azure-pipelines-icu4c.yml
- .ci-builds/.azure-pipelines-icu4j.yml
- .ci-builds/.azure-valgrind.yml
- docs/*
- tools/*
- vendor/*
- .cpyskip.txt
- .travis.yml
- KEYS
- README.md
variables:
MAVEN_ARGS: '--show-version --no-transfer-progress'
jobs:
#-------------------------------------------------------------------------
# Note: The exhaustive tests can take more than 1 hour to complete.
- job: ICU4J_OpenJDK_Ubuntu_2204
displayName: 'J: Linux OpenJDK (Ubuntu 22.04)'
timeoutInMinutes: 180
pool:
vmImage: 'ubuntu-22.04'
demands: ant
steps:
- checkout: self
lfs: true
fetchDepth: 10
- script: |
echo "Building ICU4J" && cd icu4j && mvn install -DICU.exhaustive=10
displayName: 'Build and Exhaustive Tests'
env:
BUILD: ICU4J
- script: |
cd icu4j && cat `find . -name surefire-reports -type d -exec grep -l -r --include="*.txt" FAILED {} \;`
condition: failed() # only run if the build fails.
displayName: 'List failures (if any)'
timeoutInMinutes: 2
#-------------------------------------------------------------------------
# Note: The exhaustive tests can take more than 1 hour to complete.
- job: ICU4C_Clang_Exhaustive_Ubuntu_2204
displayName: 'C: Linux Clang Exhaustive Tests (Ubuntu 22.04)'
timeoutInMinutes: 120
pool:
vmImage: 'ubuntu-22.04'
steps:
- checkout: self
lfs: true
fetchDepth: 10
- script: |
cd icu4c/source && ./runConfigureICU Linux && make -j -l2.5
displayName: 'Build'
- script: |
cd icu4c/source && make check-exhaustive
displayName: 'Exhaustive Tests'
env:
CC: clang
CXX: clang++
#-------------------------------------------------------------------------

View file

@ -1,665 +0,0 @@
# Azure Pipelines (VSTS) configuration for CI builds for ICU.
trigger:
branches:
include:
- main
- maint/maint-*
paths:
include:
- icu4c
- .ci-builds/.azure-pipelines-icu4c.yml
pr:
branches:
include:
- main
- maint/maint-*
paths:
include:
- icu4c
- .ci-builds/.azure-pipelines-icu4c.yml
variables:
MAVEN_ARGS: '--show-version --no-transfer-progress'
jobs:
#-------------------------------------------------------------------------
- job: ICU4C_Clang_Ubuntu_2204
displayName: 'C: Linux Clang (Ubuntu 22.04)'
timeoutInMinutes: 30
pool:
vmImage: 'ubuntu-22.04'
steps:
- checkout: self
lfs: true
fetchDepth: 10
- script: |
cd icu4c/source && ./runConfigureICU Linux && make -j -l2.5 check
displayName: 'Build and Test'
env:
CC: clang
CXX: clang++
- script: |
cd icu4c/source/test/cintltst && LANG=C LD_LIBRARY_PATH=../../lib:../../tools/ctestfw ./cintltst /tsutil/cloctst/TestCDefaultLocale
displayName: 'Test C Default locale'
- script: |
cd icu4c/source/test/cintltst && LANG=C.UTF-8 LD_LIBRARY_PATH=../../lib:../../tools/ctestfw ./cintltst /tsutil/cloctst/TestCDefaultLocale
displayName: 'Test C.UTF-8 Default locale'
#-------------------------------------------------------------------------
- job: ICU4C_Clang_Ubuntu_DataFilter_2204
displayName: 'C: Linux Clang DataFilter (Ubuntu 22.04)'
timeoutInMinutes: 30
pool:
vmImage: 'ubuntu-22.04'
steps:
- checkout: self
lfs: true
fetchDepth: 10
# Note: This job uses `make -j2` instead of `make -j -l2.5` because with more parallelism (PR #2456)
# this check became flaky. The build apparently was not done copying one or another .ucm file before
# calling makeconv for it, although the Makefile has appropriate dependencies.
- script: |
cd icu4c/source && \
ICU_DATA_FILTER_FILE=../../.ci-builds/data-filter.json ./runConfigureICU Linux && \
make -j2 tests && \
\[ ! -d data/out/build/icudt66l/translit \] && \
(cd test/intltest && LD_LIBRARY_PATH=../../lib:../../tools/ctestfw ./intltest translit/TransliteratorTest/TestBasicTransliteratorEvenWithoutData) && \
(cd test/cintltst && LANG=C LD_LIBRARY_PATH=../../lib:../../tools/ctestfw ./cintltst /tsutil/cloctst/TestEnglishExemplarCharacters /tsutil/cldrtest/TestCoverage)
displayName: 'Build with Data Filter'
env:
CC: clang
CXX: clang++
#-------------------------------------------------------------------------
- job: ICU4C_Clang_Cpp17_Debug_Ubuntu_2204
displayName: 'C: Linux Clang C++17 Debug (Ubuntu 22.04)'
timeoutInMinutes: 30
pool:
vmImage: 'ubuntu-22.04'
steps:
- checkout: self
lfs: true
fetchDepth: 10
- script: |
export CXXFLAGS="-std=c++17 -Winvalid-constexpr" && cd icu4c/source && ./runConfigureICU --enable-debug --disable-release Linux && make -j -l2.5 check
displayName: 'Build and Test C++17'
env:
CC: clang
CXX: clang++
#-------------------------------------------------------------------------
- job: ICU4C_GCC_Ubuntu_2004
displayName: 'C: Linux GCC (Ubuntu 20.04)'
timeoutInMinutes: 30
pool:
vmImage: 'ubuntu-20.04'
steps:
- checkout: self
lfs: true
fetchDepth: 10
- script: |
cd icu4c/source && ./runConfigureICU Linux && make -j -l2.5 check
displayName: 'Build and Test'
env:
CC: gcc
CXX: g++
#-------------------------------------------------------------------------
- job: ICU4C_GCC11_Cpp20_Ubuntu_2004
displayName: 'C: Linux GCC-11 C++20 (Ubuntu 20.04)'
timeoutInMinutes: 30
pool:
vmImage: 'ubuntu-20.04'
steps:
- checkout: self
lfs: true
fetchDepth: 10
- script: |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install gcc-11 g++-11
displayName: 'Install GCC-11'
- script: |
cd icu4c/source && ./runConfigureICU Linux && make -j -l2.5 check
displayName: 'Build and Test'
env:
CC: gcc-11
CXX: g++-11
CXXFLAGS: '-std=c++20 -fext-numeric-literals'
#-------------------------------------------------------------------------
- job: ICU4C_Clang_Ubuntu_2004_LANG
displayName: 'C: Linux Clang (Ubuntu 20.04) - LANG has extension tags'
timeoutInMinutes: 30
pool:
vmImage: 'ubuntu-20.04'
steps:
- checkout: self
lfs: true
fetchDepth: 10
- script: |
cd icu4c/source && ./runConfigureICU Linux && make -j -l2.5 check
displayName: 'Build and Test'
env:
CC: clang
CXX: clang++
LANG: "en_US@calendar=gregorian;hours=h12"
#-------------------------------------------------------------------------
- job: ICU4C_Clang16_Ubuntu_2004_WarningsAsErrors
displayName: 'C: Linux Clang-16 WarningsAsErrors (Ubuntu 20.04)'
timeoutInMinutes: 30
pool:
vmImage: 'ubuntu-20.04'
steps:
- checkout: self
lfs: true
fetchDepth: 10
# Install Clang-16 from https://apt.llvm.org/
- script: |
curl -Ls https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo apt-add-repository 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-16 main'
sudo apt update
sudo apt install -qy clang-16 lld-16 libc++-16-dev libc++abi-16-dev
displayName: 'Install Clang-16'
- script: |
cd icu4c/source && ./runConfigureICU Linux && make -j -l2.5 tests
displayName: 'Build only (WarningsAsErrors)'
env:
CC: clang-16
CPPFLAGS: '-Werror -Wno-strict-prototypes -Wall -Wextra -Wextra-semi -Wundef -Wnon-virtual-dtor -Wsuggest-override'
CXX: clang++-16
#-------------------------------------------------------------------------
- job: ICU4C_Clang16_Cpp20_Ubuntu_2004
displayName: 'C: Linux Clang-16 C++20 (Ubuntu 20.04)'
timeoutInMinutes: 30
pool:
vmImage: 'ubuntu-20.04'
steps:
- checkout: self
lfs: true
fetchDepth: 10
# Install Clang-16 from https://apt.llvm.org/
- script: |
curl -Ls https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo apt-add-repository 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-16 main'
sudo apt update
sudo apt install -qy clang-16 lld-16 libc++-16-dev libc++abi-16-dev
displayName: 'Install Clang-16'
- script: |
cd icu4c/source && ./runConfigureICU Linux && make -j -l2.5 check
displayName: 'Build and Test'
env:
CC: clang-16
CPPFLAGS: '-Werror -Wno-strict-prototypes'
CXX: clang++-16
CXXFLAGS: '-std=c++20'
#-------------------------------------------------------------------------
- job: ICU4C_Clang16_Cpp20_libcpp_Ubuntu_2004
displayName: 'C: Linux Clang-16 C++20 libc++ (Ubuntu 20.04)'
timeoutInMinutes: 30
pool:
vmImage: 'ubuntu-20.04'
steps:
- checkout: self
lfs: true
fetchDepth: 10
# Install Clang-16 from https://apt.llvm.org/
- script: |
curl -Ls https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo apt-add-repository 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-16 main'
sudo apt update
sudo apt install -qy clang-16 lld-16 libc++-16-dev libc++abi-16-dev
displayName: 'Install Clang-16'
- script: |
cd icu4c/source && ./runConfigureICU Linux && make -j -l2.5 check
displayName: 'Build and Test'
env:
CC: clang-16
CPPFLAGS: '-Werror -Wno-strict-prototypes'
CXX: clang++-16
CXXFLAGS: '-std=c++20 -stdlib=libc++'
#-------------------------------------------------------------------------
# VS 2022 Builds
#-------------------------------------------------------------------------
- job: ICU4C_MSVC_x64_Release_Distrelease
displayName: 'C: MSVC 64-bit Release (VS 2022) + Distrelease'
timeoutInMinutes: 30
pool:
vmImage: 'windows-2022'
demands:
- msbuild
- visualstudio
- Cmd
steps:
- checkout: self
lfs: true
fetchDepth: 10
- task: VSBuild@1
displayName: 'Build Solution'
inputs:
solution: icu4c/source/allinone/allinone.sln
platform: x64
configuration: Release
- task: BatchScript@1
displayName: 'Run Tests (icucheck.bat)'
inputs:
filename: icu4c/source/allinone/icucheck.bat
arguments: 'x64 Release'
- task: PowerShell@2
displayName: 'PowerShell: Distrelease script (x64)'
inputs:
targetType: filePath
filePath: 'icu4c/packaging/distrelease.ps1'
arguments: '-arch x64'
workingDirectory: icu4c
- task: PublishBuildArtifacts@1
displayName: 'Publish x64 Artifacts: icu-windows.zip'
inputs:
PathtoPublish: 'icu4c/source/dist/icu-windows.zip'
ArtifactName: '$(Build.BuildNumber)_ICU4C_MSVC_x64_Release'
#-------------------------------------------------------------------------
- job: ICU4C_MSVC_x64_Release_DataFilter
displayName: 'C: MSVC 64-bit Release DataFilter (VS 2022)'
timeoutInMinutes: 30
pool:
vmImage: 'windows-2022'
demands:
- msbuild
- visualstudio
- Cmd
steps:
- powershell: |
$filterPath = $Env:BUILD_SOURCESDIRECTORY + "\.ci-builds\data-filter.json"
$vstsCommandString = "vso[task.setvariable variable=ICU_DATA_FILTER_FILE]" + $filterPath
Write-Host "##$vstsCommandString"
- task: VSBuild@1
displayName: 'Build Solution with Data Filter'
inputs:
solution: icu4c/source/allinone/allinone.sln
platform: x64
configuration: Release
msbuildArgs: '/p:SkipUWP=true'
#-------------------------------------------------------------------------
- job: ICU4C_MSVC_x86_Release_Distrelease
displayName: 'C: MSVC 32-bit Release (VS 2022) + Distrelease'
timeoutInMinutes: 30
pool:
vmImage: 'windows-2022'
demands:
- msbuild
- visualstudio
- Cmd
steps:
- checkout: self
lfs: true
fetchDepth: 10
- task: VSBuild@1
displayName: 'Build Solution'
inputs:
solution: icu4c/source/allinone/allinone.sln
platform: Win32
configuration: Release
- task: BatchScript@1
displayName: 'Run Tests (icucheck.bat)'
inputs:
filename: icu4c/source/allinone/icucheck.bat
arguments: 'x86 Release'
- task: PowerShell@2
displayName: 'PowerShell: Distrelease script (x86)'
inputs:
targetType: filePath
filePath: 'icu4c/packaging/distrelease.ps1'
arguments: '-arch x86'
workingDirectory: icu4c
- task: PublishBuildArtifacts@1
displayName: 'Publish x86 Artifacts: icu-windows.zip'
inputs:
PathtoPublish: 'icu4c/source/dist/icu-windows.zip'
ArtifactName: '$(Build.BuildNumber)_ICU4C_MSVC_x86_Release'
#-------------------------------------------------------------------------
- job: ICU4C_MSVC_x64_ARM32_Release
displayName: 'C: MSVC x64 ARM32 Release (VS 2022)'
timeoutInMinutes: 35
pool:
vmImage: 'windows-2022'
demands:
- msbuild
- visualstudio
- Cmd
steps:
- checkout: self
lfs: true
fetchDepth: 10
- task: VSBuild@1
displayName: 'Build Solution'
inputs:
solution: icu4c/source/allinone/allinone.sln
platform: x64
configuration: Release
- task: VSBuild@1
displayName: 'Build ARM32'
inputs:
solution: icu4c/source/allinone/allinone.sln
platform: ARM
configuration: Release
#-------------------------------------------------------------------------
- job: ICU4C_MSVC_x64_ARM64_Release_Distrelease
displayName: 'C: MSVC x64 ARM64 Release (VS 2022) + Distrelease'
timeoutInMinutes: 35
pool:
vmImage: 'windows-2022'
demands:
- msbuild
- visualstudio
- Cmd
steps:
- checkout: self
lfs: true
fetchDepth: 10
- task: VSBuild@1
displayName: 'Build Solution'
inputs:
solution: icu4c/source/allinone/allinone.sln
platform: x64
configuration: Release
- task: VSBuild@1
displayName: 'Build ARM64'
inputs:
solution: icu4c/source/allinone/allinone.sln
platform: ARM64
configuration: Release
- task: PowerShell@2
displayName: 'PowerShell: Distrelease script (ARM64)'
inputs:
targetType: filePath
filePath: 'icu4c/packaging/distrelease.ps1'
arguments: '-arch ARM64'
workingDirectory: icu4c
- task: PublishBuildArtifacts@1
displayName: 'Publish ARM64 Artifacts: icu-windows.zip'
inputs:
PathtoPublish: 'icu4c/source/dist/icu-windows.zip'
ArtifactName: '$(Build.BuildNumber)_ICU4C_MSVC_ARM64_Release'
#-------------------------------------------------------------------------
- job: ICU4C_MSVC_x64_Debug
displayName: 'C: MSVC x64 Debug (VS 2022)'
timeoutInMinutes: 60
pool:
vmImage: 'windows-2022'
demands:
- msbuild
- visualstudio
- Cmd
steps:
- checkout: self
lfs: true
fetchDepth: 10
- task: VSBuild@1
displayName: 'Build Solution'
inputs:
solution: icu4c/source/allinone/allinone.sln
platform: x64
configuration: Debug
- task: BatchScript@1
displayName: 'Run x64 Debug Tests (icucheck.bat)'
inputs:
filename: icu4c/source/allinone/icucheck.bat
arguments: 'x64 Debug'
#-------------------------------------------------------------------------
- job: ICU4C_MSVC_ARM64_Debug
displayName: 'C: MSVC ARM64 Debug (VS 2022)'
timeoutInMinutes: 35
pool:
vmImage: 'windows-2022'
demands:
- msbuild
- visualstudio
- Cmd
steps:
- checkout: self
lfs: true
fetchDepth: 10
- task: VSBuild@1
displayName: 'Build Solution'
inputs:
solution: icu4c/source/allinone/allinone.sln
platform: x64
configuration: Debug
- task: VSBuild@1
displayName: 'Build ARM64 Debug'
inputs:
solution: icu4c/source/allinone/allinone.sln
platform: ARM64
configuration: Debug
#-------------------------------------------------------------------------
# There is no /std:c++20 yet, so use c++latest as that includes many of
# the C++20 compiler and library changes.
- job: ICU4C_MSVC_x64_Release_CppLatest
displayName: 'C: MSVC 64-bit Release (VS 2022) /std:c++latest'
timeoutInMinutes: 30
pool:
vmImage: 'windows-2022'
demands:
- msbuild
- visualstudio
- Cmd
steps:
- checkout: self
lfs: true
fetchDepth: 10
- task: VSBuild@1
displayName: 'Build Solution'
inputs:
solution: icu4c/source/allinone/allinone.sln
platform: x64
configuration: Release
msbuildArgs: '/p:LanguageStandard="stdcpplatest"'
- task: BatchScript@1
displayName: 'Run Tests (icucheck.bat)'
inputs:
filename: icu4c/source/allinone/icucheck.bat
arguments: 'x64 Release'
#-------------------------------------------------------------------------
# VS 2019 Builds
#-------------------------------------------------------------------------
- job: ICU4C_MSVC_x64_Release_VS2019
displayName: 'C: MSVC 64-bit Release (VS 2019)'
timeoutInMinutes: 30
pool:
vmImage: 'windows-2019'
demands:
- msbuild
- visualstudio
- Cmd
steps:
- checkout: self
lfs: true
fetchDepth: 10
- task: VSBuild@1
displayName: 'Build Solution'
inputs:
solution: icu4c/source/allinone/allinone.sln
platform: x64
configuration: Release
- task: BatchScript@1
displayName: 'Run Tests (icucheck.bat)'
inputs:
filename: icu4c/source/allinone/icucheck.bat
arguments: 'x64 Release'
#-------------------------------------------------------------------------
- job: ICU4C_MSVC_x86_Debug_VS2019
displayName: 'C: MSVC 32-bit Debug (VS 2019)'
timeoutInMinutes: 90
pool:
vmImage: 'windows-2019'
demands:
- msbuild
- visualstudio
- Cmd
steps:
- checkout: self
lfs: true
fetchDepth: 10
- task: VSBuild@1
displayName: 'Build Solution'
inputs:
solution: icu4c/source/allinone/allinone.sln
platform: Win32
configuration: Debug
- task: BatchScript@1
displayName: 'Run Tests (icucheck.bat)'
inputs:
filename: icu4c/source/allinone/icucheck.bat
arguments: 'x86 Debug'
#-------------------------------------------------------------------------
- job: ICU4C_MSYS2_GCC_x86_64_Release
displayName: 'C: MSYS2 GCC x86_64 Release'
timeoutInMinutes: 45
pool:
vmImage: 'windows-2019'
demands:
- Cmd
steps:
- checkout: self
lfs: true
fetchDepth: 10
- script: |
choco install -y msys2
rem refreshenv
displayName: 'Install MSYS2'
- script: |
c:\tools\msys64\usr\bin\bash.exe -lc "echo 'Hello World' && uname -a"
c:\tools\msys64\usr\bin\bash.exe -lc "pacman --noconfirm -S mingw-w64-x86_64-toolchain"
c:\tools\msys64\usr\bin\bash.exe -lc "pacman --noconfirm -S make"
exit
displayName: 'Install mingw-w64-x86_64-toolchain'
- script: |
set MSYSTEM=MINGW64
c:\tools\msys64\usr\bin\bash.exe -lc "cd $BUILD_SOURCESDIRECTORY && cd icu4c/source && ./runConfigureICU MinGW --prefix='/tmp/build-icu' && make -j -l2.5 check"
displayName: 'Build and Test'
- script: |
set MSYSTEM=MINGW64
c:\tools\msys64\usr\bin\bash.exe -lc "cd $BUILD_SOURCESDIRECTORY && cd icu4c/source && make install && cd /tmp/build-icu && echo 'Recursive ls' && ls -lR"
displayName: 'make install'
- script: |
set MSYSTEM=MINGW64
c:\tools\msys64\usr\bin\bash.exe -lc "echo 'Run icuinfo from MSYS shell' && cd /tmp/build-icu/bin && ./icuinfo.exe"
echo 'Run icuinfo from CMD shell' && cd /d C:\tools\msys64\tmp\build-icu\bin && set PATH=C:\tools\msys64\mingw64\bin;%PATH% && icuinfo.exe"
displayName: 'run icuinfo'
#-------------------------------------------------------------------------
- job: ICU4C_Clang_MacOS_WarningsAsErrors
displayName: 'C: macOS(Latest) Clang WarningsAsErrors'
timeoutInMinutes: 30
pool:
vmImage: 'macOS-latest'
steps:
- checkout: self
lfs: true
fetchDepth: 10
- script: |
export CPPFLAGS="-Werror -Wall -Wextra -Wextra-semi -Wundef -Wnon-virtual-dtor" && cd icu4c/source && ./runConfigureICU MacOSX && make -j -l2.5 check
displayName: 'Build and Test (WarningsAsErrors)'
env:
CC: clang
CXX: clang++
#-------------------------------------------------------------------------
- job: ICU4C_icuexportdata_Ubuntu_2204
displayName: 'C: Create Artifacts from icuexportdata'
timeoutInMinutes: 30
pool:
vmImage: 'ubuntu-22.04'
steps:
- checkout: self
lfs: true
fetchDepth: 10
- script: |
cd icu4c/source && ./runConfigureICU Linux && make -j -l2.5
displayName: 'Build'
env:
CC: clang
CXX: clang++
- script: |
cd icu4c/source
mkdir -p icuexportdata/uprops/fast
./bin/icuexportdata --mode uprops --index --copyright --verbose --destdir icuexportdata/uprops/fast --trie-type fast --all
mkdir -p icuexportdata/uprops/small
./bin/icuexportdata --mode uprops --index --copyright --verbose --destdir icuexportdata/uprops/small --trie-type small --all
displayName: 'Build property data files'
env:
LD_LIBRARY_PATH: lib
- script: |
cd icu4c/source
mkdir -p icuexportdata/norm/fast
./bin/icuexportdata --mode norm --index --copyright --verbose --destdir icuexportdata/norm/fast --trie-type fast --all
mkdir -p icuexportdata/norm/small
./bin/icuexportdata --mode norm --index --copyright --verbose --destdir icuexportdata/norm/small --trie-type small --all
displayName: 'Build normalization data files'
env:
LD_LIBRARY_PATH: lib
- script: |
cd icu4c/source
mkdir -p icuexportdata/ucase/fast
./bin/icuexportdata --mode ucase --index --copyright --verbose --destdir icuexportdata/ucase/fast --trie-type fast --all
mkdir -p icuexportdata/ucase/small
./bin/icuexportdata --mode ucase --index --copyright --verbose --destdir icuexportdata/ucase/small --trie-type small --all
displayName: 'Build case data files'
env:
LD_LIBRARY_PATH: lib
- script: |
cd icu4c/source
FILES=`ls data/coll "*.txt"`
mkdir -p icuexportdata/collation/unihan
./bin/genrb -X -s data/coll/ --ucadata data/in/coll/ucadata-unihan-icu4x.icu -d icuexportdata/collation/unihan $FILES
rm icuexportdata/collation/unihan/*.res
mkdir -p icuexportdata/collation/implicithan
./bin/genrb -X -s data/coll/ --ucadata data/in/coll/ucadata-implicithan-icu4x.icu -d icuexportdata/collation/implicithan $FILES
rm icuexportdata/collation/implicithan/*.res
displayName: 'Build collation data files'
env:
LD_LIBRARY_PATH: lib
- script: |
cd icu4c/source
mkdir -p icuexportdata/segmenter/dictionary
for FILE in `ls data/brkitr/dictionaries`
do
./bin/gendict --uchars --toml data/brkitr/dictionaries/$FILE icuexportdata/segmenter/dictionary/`basename $FILE .txt`.toml
done
displayName: 'Build segmenter dictionary files'
env:
LD_LIBRARY_PATH: lib
- task: ArchiveFiles@2
displayName: 'Zip'
inputs:
rootFolderOrFile: 'icu4c/source/icuexportdata'
includeRootFolder: false
archiveFile: 'icuexportdata_tag-goes-here.zip'
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact'
inputs:
PathtoPublish: 'icuexportdata_tag-goes-here.zip'
ArtifactName: 'icuexportdata_output'
#-------------------------------------------------------------------------
# Builds MSVC with cpp exceptions turned off
- job: ICU4C_MSVC_x64_Release_NoExceptions
displayName: 'C: MSVC 64-bit Release No Exceptions'
timeoutInMinutes: 30
pool:
vmImage: 'windows-2022'
demands:
- msbuild
- visualstudio
- Cmd
steps:
- checkout: self
lfs: true
fetchDepth: 10
- task: VSBuild@1
displayName: 'Build Solution'
inputs:
solution: icu4c/source/allinone/allinone.sln
platform: x64
configuration: Release
msbuildArgs: '/p:_HAS_EXCEPTIONS=0'
- task: BatchScript@1
displayName: 'Run Tests (icucheck.bat)'
inputs:
filename: icu4c/source/allinone/icucheck.bat
arguments: 'x64 Release'

View file

@ -1,47 +0,0 @@
# Azure Pipelines (VSTS) configuration for CI builds for ICU.
trigger:
branches:
include:
- main
- maint/maint-*
paths:
include:
- icu4j
- .ci-builds/.azure-pipelines-icu4j.yml
pr:
branches:
include:
- main
- maint/maint-*
paths:
include:
- icu4j
- .ci-builds/.azure-pipelines-icu4j.yml
variables:
MAVEN_ARGS: '--show-version --no-transfer-progress'
jobs:
#-------------------------------------------------------------------------
- job: ICU4J_OpenJDK_Ubuntu_2204
displayName: 'J: Linux OpenJDK (Ubuntu 22.04)'
timeoutInMinutes: 20
pool:
vmImage: 'ubuntu-22.04'
demands: ant
steps:
- checkout: self
lfs: true
fetchDepth: 10
- script: |
echo "Building ICU4J" && cd icu4j && mvn install
displayName: 'Build and Test'
env:
BUILD: ICU4J
# exit with a non-zero status in order to make this step show as a red X in the UI.
- script: |
cd icu4j && cat `find . -name surefire-reports -type d -exec grep -l -r --include="*.txt" FAILED {} \;` && exit 1
condition: failed() # only run if the build fails.
displayName: 'List failures (if any)'

View file

@ -1,139 +0,0 @@
# Azure Pipelines (VSTS) configuration for testing things post merging
trigger:
branches:
include:
- main
- maint/*
jobs:
#-------------------------------------------------------------------------
# VS 2022 Builds for testing C Samples on Windows
#-------------------------------------------------------------------------
- job: ICU4C_Samples_MSVC
displayName: 'C: Test Samples MSVC (VS 2022)'
timeoutInMinutes: 30
pool:
vmImage: 'windows-2022'
demands:
- msbuild
- visualstudio
- Cmd
strategy:
maxParallel: 0
matrix:
x64_Debug:
arch: x64
config: Debug
platform: x64
x64_Release:
arch: x64
config: Release
platform: x64
x86_Debug:
arch: x86
config: Debug
platform: Win32
x86_Release:
arch: x86
config: Release
platform: Win32
steps:
- checkout: self
lfs: true
fetchDepth: 10
- task: VSBuild@1
displayName: 'Build Solution'
inputs:
solution: icu4c/source/allinone/allinone.sln
platform: $(platform)
configuration: $(config)
- task: BatchScript@1
displayName: 'Run Tests (icucheck.bat)'
inputs:
filename: icu4c/source/allinone/icucheck.bat
arguments: '$(arch) $(config)'
- task: VSBuild@1
displayName: 'Build Sample Solution'
inputs:
solution: icu4c/source/samples/all/all.sln
platform: $(arch)
configuration: $(config)
- task: BatchScript@1
displayName: 'Test Samples (samplecheck.bat)'
inputs:
filename: icu4c/source/samples/all/samplecheck.bat
arguments: '$(arch) $(config)'
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
# Other C tests
#-------------------------------------------------------------------------
- job: ICU4C_Cygwin_GCC_x86_64_Release
displayName: 'C: Cygwin GCC x86_64 Release'
timeoutInMinutes: 50
pool:
vmImage: 'windows-2019'
variables:
ICU_CI_CACHE: c:\icu-ci-cache
CYG_URL: https://cygwin.com/setup-x86_64.exe
CYG_MIRROR: http://mirrors.kernel.org/sourceware/cygwin/
CYG_PACKAGES: automake,gcc-core,gcc-g++,make,pkg-config,perl,python3
CYG_ROOT: c:\cygwin-root
CYG_CACHE: '$(ICU_CI_CACHE)\cygwin64-v3'
CYG_CACHED_SETUP: '$(CYG_CACHE)\setup.exe'
CYG_VERSION_KEY: cygwin-3.2
steps:
# Use 'autocrlf input' since checked-in files may already be using CRLF.
- script: |
git config --global core.autocrlf input
displayName: 'Configure Git to checkout with Unix line endings (LF)'
- checkout: self
lfs: true
fetchDepth: 10
# Cache expires after 7 days of no activity.
- task: Cache@2
displayName: 'Restore Cygwin cache'
inputs:
# Use the contents of the file ".azure-pipelines-icu4c.yml" as part of the key, as that contains the list of CYG_PACKAGES.
# Also include the Cygwin version as part of the key. If we want to use a newer version of Cygwin, we can update CYG_VERSION_KEY.
# Note: CYG_VERSION_KEY may become out of sync with (older than) the version we actually use if we update this file
# without updating CYG_VERSION_KEY. Any updates to this file guarantees that we're using the latest version.
key: '"$(CYG_VERSION_KEY)" | .ci-builds/.azure-pipelines-icu4c.yml'
path: "$(CYG_CACHE)"
- task: PowerShell@2
displayName: 'Download Cygwin setup'
inputs:
targetType: inline
script: |
if ( !(Test-Path "${env:CYG_CACHED_SETUP}" -NewerThan (Get-Date).AddDays(-7)) )
{
Write-Host "Cached Cygwin setup does not exist or is older than 7 days, downloading from external site."
New-Item -Force -Type Directory $env:CYG_CACHE
Write-Host "Downloading Cygwin setup..."
$start_time = Get-Date
(New-Object System.Net.WebClient).DownloadFile($env:CYG_URL, $env:CYG_CACHED_SETUP)
Write-Output "Download took: $((Get-Date).Subtract($start_time).Seconds) second(s)."
}
- script: |
%CYG_CACHED_SETUP% --no-verify --quiet-mode --no-shortcuts --no-startmenu --no-desktop --upgrade-also --only-site --site "%CYG_MIRROR%" --root "%CYG_ROOT%" --local-package-dir "%CYG_CACHE%" --packages "%CYG_PACKAGES%"
displayName: 'Install Cygwin'
- script: |
%CYG_ROOT%\\bin\\sh -lc 'echo Hello' && %CYG_ROOT%\\bin\\sh -lc 'uname -a'
displayName: 'Check Cygwin environment'
- script: |
%CYG_ROOT%\\bin\\bash -lc "cd $(cygpath \"$(Build.SourcesDirectory)\") && cd icu4c/source && ./runConfigureICU Cygwin && make tests -j -l2.5"
displayName: 'Build ICU (source and test)'
env:
CC: gcc
CXX: g++
- script: |
%CYG_ROOT%\\bin\\bash -lc "cd $(cygpath \"$(Build.SourcesDirectory)\") && cd icu4c/source && make -j -l2.5 check"
displayName: 'Run Tests'
env:
CC: gcc
CXX: g++

View file

@ -34,6 +34,7 @@ KEYS
*.intaglio
*.jar
*.jpg
*.json
*.launch
*.nrm
*.odp
@ -117,3 +118,4 @@ tools/unicodetools/*
# vendor
#
vendor/double-conversion/upstream/*
vendor/json/upstream/*

163
.gitattributes vendored
View file

@ -9,74 +9,76 @@
# The only difference between the two is that git will do EOL conversion for text files.
# "!eol" is the equivalent of "svneol=native".
*.bat text !eol
*.c text !eol diff=cpp
*.cc text !eol diff=cpp
*.classpath text !eol
*.bat text !eol zos-working-tree-encoding=IBM-1047
*.c text !eol zos-working-tree-encoding=UTF-8 diff=cpp
*.cc text !eol zos-working-tree-encoding=UTF-8 diff=cpp
*.classpath text !eol zos-working-tree-encoding=IBM-1047
*.cmd text eol=crlf
*.cpp text !eol diff=cpp
*.css text !eol diff=css
*.dsp text !eol
*.dsw text !eol
*.dtd text !eol
*.el text !eol
*.filters text !eol
*.h text !eol diff=cpp
*.htm text !eol diff=html
*.html text !eol diff=html
*.in text !eol
*.java text !eol diff=java
*.launch text !eol
*.m4 text !eol
*.mak text !eol
*.md text !eol
*.MF text !eol
*.mk text !eol
*.pl text !eol diff=perl
*.pm text !eol diff=perl
*.project text !eol
*.properties text !eol
*.props text !eol
*.py text !eol diff=python
*.rc text !eol
*.cpp text !eol zos-working-tree-encoding=UTF-8 diff=cpp
*.css text !eol zos-working-tree-encoding=IBM-1047 diff=css
*.dsp text !eol zos-working-tree-encoding=IBM-1047
*.dsw text !eol zos-working-tree-encoding=IBM-1047
*.dtd text !eol zos-working-tree-encoding=IBM-1047
*.el text !eol zos-working-tree-encoding=IBM-1047
*.filters text !eol zos-working-tree-encoding=IBM-1047
*.h text !eol zos-working-tree-encoding=UTF-8 diff=cpp
*.htm text !eol zos-working-tree-encoding=UTF-8 diff=html
*.html text !eol zos-working-tree-encoding=UTF-8 diff=html
*.in text !eol zos-working-tree-encoding=IBM-1047
*.java text !eol zos-working-tree-encoding=UTF-8 diff=java
*.launch text !eol zos-working-tree-encoding=IBM-1047
*.m4 text !eol zos-working-tree-encoding=IBM-1047
*.mak text !eol zos-working-tree-encoding=IBM-1047
*.md text !eol zos-working-tree-encoding=UTF-8
*.MF text !eol zos-working-tree-encoding=IBM-1047
*.mk text !eol zos-working-tree-encoding=IBM-1047
*.pl text !eol zos-working-tree-encoding=UTF-8 diff=perl
*.pm text !eol zos-working-tree-encoding=IBM-1047 diff=perl
*.project text !eol zos-working-tree-encoding=IBM-1047
*.properties text !eol zos-working-tree-encoding=UTF-8
*.props text !eol zos-working-tree-encoding=IBM-1047
*.py text !eol zos-working-tree-encoding=UTF-8 diff=python
*.rc text !eol zos-working-tree-encoding=IBM-1047
*.sh text eol=lf
*.sed text eol=lf
*.sln text !eol
*.stub text !eol
*.targets text !eol
*.txt text !eol
*.ucm text !eol
*.vcproj text !eol
*.vcxproj text !eol
*.xml text !eol
*.xsl text !eol
*.xslt text !eol
AUTHORS text !eol
BUILD text !eol
COPYING text !eol
Changelog text !eol
LICENSE text !eol
Makefile text !eol
README text !eol
SConscript text !eol
SConstruct text !eol
configure text !eol
*.sln text !eol zos-working-tree-encoding=UTF-8
*.stub text !eol zos-working-tree-encoding=IBM-1047
*.targets text !eol zos-working-tree-encoding=UTF-8
*.txt text !eol zos-working-tree-encoding=UTF-8
*.ucm text !eol zos-working-tree-encoding=IBM-1047
*.vcproj text !eol zos-working-tree-encoding=UTF-8
*.vcproj.filters text !eol zos-working-tree-encoding=UTF-8
*.vcxproj text !eol zos-working-tree-encoding=UTF-8
*.vcxproj.filters text !eol zos-working-tree-encoding=UTF-8
*.xml text !eol zos-working-tree-encoding=UTF-8
*.xsl text !eol zos-working-tree-encoding=IBM-1047
*.xslt text !eol zos-working-tree-encoding=IBM-1047
AUTHORS text !eol zos-working-tree-encoding=IBM-1047
BUILD text !eol zos-working-tree-encoding=IBM-1047
COPYING text !eol zos-working-tree-encoding=IBM-1047
Changelog text !eol zos-working-tree-encoding=IBM-1047
LICENSE text !eol zos-working-tree-encoding=IBM-1047
Makefile text !eol zos-working-tree-encoding=IBM-1047
README text !eol zos-working-tree-encoding=UTF-8
SConscript text !eol zos-working-tree-encoding=IBM-1047
SConstruct text !eol zos-working-tree-encoding=IBM-1047
config* text !eol zos-working-tree-encoding=IBM-1047
# Explicitly set the following file types as binary files.
*.bin -text
*.brk -text
*.cnv -text
*.icu -text
*.res -text
*.nrm -text
*.spp -text
*.tri2 -text
*.otf -text
*.utf16be -text
*.bin -text zos-working-tree-encoding=UTF-8
*.brk -text zos-working-tree-encoding=UTF-8
*.cnv -text zos-working-tree-encoding=UTF-8
*.icu -text zos-working-tree-encoding=UTF-8
*.res -text zos-working-tree-encoding=UTF-8
*.nrm -text zos-working-tree-encoding=UTF-8
*.spp -text zos-working-tree-encoding=UTF-8
*.tri2 -text zos-working-tree-encoding=UTF-8
*.otf -text zos-working-tree-encoding=UTF-8
*.utf16be -text zos-working-tree-encoding=UTF-8
# The following file types are stored in Git-LFS.
# Only .jars
*.jar filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text zos-working-tree-encoding=UTF-8
# Enable syntax highlighting on GitHub.com
.cpyskip.txt linguist-language=Ignore-List
@ -84,3 +86,44 @@ configure text !eol
# Use JSONC for syntax highlighting on GitHub.com
*.json linguist-language=jsonc
#Files below should be IBM-1047 on mainframe, while other txt shall stay UTF-8
icu4c/source/runConfigureICU zos-working-tree-encoding=IBM-1047
icu4c/source/install-sh zos-working-tree-encoding=IBM-1047
icu4c/source/mkinstalldirs zos-working-tree-encoding=IBM-1047
sources.txt zos-working-tree-encoding=IBM-1047
*.sub zos-working-tree-encoding=IBM-1047
icu4c/source/data/mappings/convrtrs.txt zos-working-tree-encoding=IBM-1047
icu4c/source/data/sprep/*.txt text !eol zos-working-tree-encoding=IBM-1047
icu4c/source/data/unidata/NormalizationCorrections.txt text !eol zos-working-tree-encoding=IBM-1047
icu4c/source/data/zone/tzdbNames.txt text !eol zos-working-tree-encoding=IBM-1047
icu4c/source/test/testdata/*.txt text !eol zos-working-tree-encoding=IBM-1047
icu4c/source/test/testdata/filters/*.txt text !eol zos-working-tree-encoding=IBM-1047
icu4c/source/test/testdata/*.ucm text !eol zos-working-tree-encoding=IBM-1047
#simpler to say who should stay UTF-8 from test data
icu4c/source/data/misc/*.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/cintltst/usrchdat.inc text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/Burmese_graphclust_model5_heavy.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/Burmese_graphclust_model5_heavy_Test.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/ConverterSelectorTestUTF8.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/IdnaTestV2.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/NumberFormatTestCases.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/Thai_codepoints_exclusive_model5_heavy.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/Thai_codepoints_exclusive_model5_heavy_Test.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/Thai_graphclust_model4_heavy.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/Thai_graphclust_model4_heavy_Test.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/casing.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/collationtest.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/dcfmtest.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/emoji-test.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/format.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/idna_conf.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/metaZones.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/numberformattestspecification.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/numberpermutationtest.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/rbbitst.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/regextst.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/riwords.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/te_IN.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/timezoneTypes.txt text !eol zos-working-tree-encoding=UTF-8
icu4c/source/test/testdata/windowsZones.txt text !eol zos-working-tree-encoding=UTF-8

9
.github/Dockerfile_fedora vendored Normal file
View file

@ -0,0 +1,9 @@
FROM fedora:latest
RUN dnf install -y gcc-c++ zip unzip git-core git-lfs doxygen
RUN git lfs install --skip-repo \
&& ln -s /usr/bin/python3 /usr/bin/python
WORKDIR /root
ENTRYPOINT [ "/bin/bash" ]

38
.github/HOWTO.md vendored Normal file
View file

@ -0,0 +1,38 @@
## How to create a Fedora docker image
For the general process and concepts see:
https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry
For our case I replaced the generic names with our own owner / repo / names / etc.
Run
```
docker login ghcr.io
```
When prompted use these:
* **User:** the github user
* **Password:** the github token
Update the timestamp (`20240929`) with the current date, ISO style:
```
docker build --tag ghcr.io/unicode-org/fedora-docker-gcr:20240929 -f Dockerfile_fedora .
docker push ghcr.io/unicode-org/fedora-docker-gcr:20240929
```
For more info see:
https://docs.github.com/en/actions/use-cases-and-examples/publishing-packages/publishing-docker-images
and:
https://stackoverflow.com/questions/64033686/how-can-i-use-private-docker-image-in-github-actions
To consider: generate and publish the docker image from a GitHub action.
---
The `DOCKER_CONTAINER_USER_NAME` and `DOCKER_CONTAINER_REGISTRY_TOKEN` used
in the action file for user and password are secrets already created.
They can be any GitHub user + token with the proper access rights.
Right now this is a token of the icu-robot account.

View file

@ -1,6 +1,6 @@
// © 2022 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
// Generated using tools/cldr/cldr-to-icu/build-icu-data.xml
// Generated using tools/cldr/cldr-to-icu/
//
// Include Japanese adaboost model.
{

View file

@ -1,6 +1,6 @@
// © 2021 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
// Generated using tools/cldr/cldr-to-icu/build-icu-data.xml
// Generated using tools/cldr/cldr-to-icu/
//
// Include Burmese and Thai lstm models.
{

View file

@ -1,20 +1,26 @@
<!--
Thank you for your pull request!
TODO: Please describe your changes here.
Please see http://site.icu-project.org/processes/contribute for general
information on contributing to ICU.
TODO: Please read the following on ICU Contributing, and then delete these instructions.
You will be automatically asked to sign the contributors license agreement (CLA) before the PR is accepted.
- sign: https://cla-assistant.io/unicode-org/icu
- license: http://www.unicode.org/copyright.html
-->
Thank you for your pull request!
##### Checklist
* For general info on contributing: https://github.com/unicode-org/icu/blob/main/CONTRIBUTING.md
* Associating PRs with Jira issues
- We require each pull request to be associated with a [Jira issue](https://icu.unicode.org/bugs).
- Reuse existing issues for minor changes:
* ICU 78 docs minor fixes: ICU-23055 — User Guide & API docs typos etc., and version updates (e.g., dependabot for User Guide)
* ICU 78 code warnings/version updates: ICU-23054 — Fix compiler warnings. Update versions of code-related dependencies (e.g., dependabot).
* Contributors license agreement (CLA):
- You will be automatically asked to sign the CLA before the PR is accepted.
- To sign the CLA: https://cla-assistant.io/unicode-org/icu
- For terms of use and license, see https://www.unicode.org/terms_of_use.html
- [ ] Required: Issue filed: https://unicode-org.atlassian.net/browse/ICU-_____
- [ ] Required: The PR title must be prefixed with a JIRA Issue number. <!-- For example: "ICU-1234 Fix xyz" -->
- [ ] Required: The PR description must include the link to the Jira Issue, for example by completing the URL in the first checklist item
- [ ] Required: Each commit message must be prefixed with a JIRA Issue number. <!-- For example: "ICU-1234 Fix xyz" -->
TODO: Fill out the checklist below.
#### Checklist
- [ ] Required: Issue filed: ICU-NNNNN
- [ ] Required: The PR title must be prefixed with a JIRA Issue number. Example: "ICU-1234 Fix xyz"
- [ ] Required: Each commit message must be prefixed with a JIRA Issue number. Example: "ICU-1234 Fix xyz"
- [ ] Issue accepted (done by Technical Committee after discussion)
- [ ] Tests included, if applicable
- [ ] API docs and/or User Guide docs changed or added, if applicable

View file

@ -0,0 +1,64 @@
name: BRS Commit Checker Report
on:
workflow_dispatch:
inputs:
fix_version:
type: string
required: true
description: The ICU Jira "Fix Version" semver
from_git_ref:
type: string
required: true
description: The git ref start of comparison range. Prefix branches with `origin/`.
end_git_ref:
type: string
required: true
description: The git ref end of comparison range. Must be descendant of `from_git_ref`. Prefix branches with `origin/`.
# Jira user name & API token is used for processing sensitive tickets comes from Github Secrets
# stored in the repository
jobs:
commit-report:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-tags: true
fetch-depth: 0
# workaround for bug in checkout action. this step should be redundant.
# https://github.com/actions/checkout/issues/1471
# https://github.com/actions/checkout/issues/1781
# https://github.com/actions/checkout/issues/701#issuecomment-1133937950
- name: Fetch all tags
run: |
git fetch --tags origin
- name: Fetch all branches
run: |
git fetch origin
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.12.8'
cache: 'pipenv'
cache-dependency-path: |
tools/commit-checker/Pipfile
tools/commit-checker/Pipfile.lock
- name: Install pipenv
run: |
sudo pip3 install pipenv
- name: Generate report
env:
JIRA_USERNAME: ${{ secrets.COMMIT_CHECKER_JIRA_EMAIL }}
JIRA_PASSWORD: ${{ secrets.COMMIT_CHECKER_JIRA_TOKEN }}
run: |
pushd ./tools/commit-checker
pipenv install
pipenv run python3 check.py \
--jira-query "project=ICU AND fixVersion=${{ inputs.fix_version }}" \
--rev-range "${{ inputs.from_git_ref }}..${{ inputs.end_git_ref }}" > REPORT.md
popd
# https://github.blog/news-insights/product-news/supercharging-github-actions-with-job-summaries/
- name: Reproduce report as workflow job summary
run: |
cat ./tools/commit-checker/REPORT.md >> $GITHUB_STEP_SUMMARY
echo "View the Summary page of this GHA Workflow instance to view the rendered Markdown of this report."

View file

@ -35,7 +35,11 @@ permissions:
jobs:
retain-maven-cache:
name: Run all tests with Maven
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
# Only run this on the upstream repo. Otherwise, running in a personal fork will cause
# Github to disable the personal fork copy of the workflow
# (Github complains about running a scheduled workflow on a repo with > 60 days of inactivity)
if: github.ref == 'refs/heads/main' && github.repository == 'unicode-org/unicodetools'
steps:
- name: Checkout and setup
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -48,7 +52,7 @@ jobs:
distribution: 'temurin'
java-version: '11'
- name: Restore read-only cache of local Maven repository
uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
uses: actions/cache/restore@v4.2.0
id: cache
with:
path: ~/.m2/repository

62
.github/workflows/cifuzz.yml vendored Normal file
View file

@ -0,0 +1,62 @@
name: CIFuzz
on:
pull_request:
branches: '**'
paths:
- '**.c'
- '**.cc'
- '**.cpp'
- '**.cxx'
- '**.h'
- 'testdata/**'
- '.github/workflows/**'
push:
branches:
- main
- 'maint/maint*'
paths:
- '**.c'
- '**.cc'
- '**.cpp'
- '**.cxx'
- '**.h'
- 'testdata/**'
- '.github/workflows/**'
workflow_dispatch:
permissions: {}
jobs:
Fuzzing:
runs-on: ubuntu-22.04 # Updated in BRS
permissions:
security-events: write
strategy:
fail-fast: false
matrix:
sanitizer: [address, undefined]
steps:
- name: Build Fuzzers
id: build
uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
with:
oss-fuzz-project-name: 'icu'
sanitizer: ${{ matrix.sanitizer }}
- name: Run Fuzzers
uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
with:
oss-fuzz-project-name: 'icu'
fuzz-seconds: 600
output-sarif: true
sanitizer: ${{ matrix.sanitizer }}
- name: Upload Crash
uses: actions/upload-artifact@v4
if: failure() && steps.build.outcome == 'success'
with:
name: ${{ matrix.sanitizer }}-artifacts
path: ./out/artifacts
- name: Upload Sarif
if: always() && steps.build.outcome == 'success'
uses: github/codeql-action/upload-sarif@v3.28.10
with:
# Path to SARIF file relative to the root of the repository
sarif_file: cifuzz-sarif/results.sarif
checkout_path: cifuzz-sarif

View file

@ -12,15 +12,28 @@ on:
- 'maint/maint*'
paths:
- 'icu4c/**'
- 'testdata/**'
- '.github/workflows/**'
pull_request:
branches: '**'
paths:
- 'icu4c/**'
- 'testdata/**'
- '.github/workflows/**'
workflow_dispatch:
# To trigger the Env Test workflow manually, follow the instructions in
# https://docs.github.com/en/actions/managing-workflow-runs/manually-running-a-workflow
inputs:
gitReleaseTag:
description: 'Release tag to upload to. Must start with "release-"'
type: string
# For non-release branches (namely: PRs), only run CI on the most recent commit. Cancel
# runs on previous commits mid-flight when new commits are pushed.
# https://docs.github.com/en/actions/using-jobs/using-concurrency#example-only-cancel-in-progress-jobs-on-specific-branches
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'maint/') && github.ref != 'main' }}
permissions:
contents: read
@ -29,7 +42,7 @@ jobs:
# ICU4C docs build using doxygen..
icu4c-docs-build:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -39,8 +52,8 @@ jobs:
cd icu4c/source;
./runConfigureICU Linux --disable-renaming;
# Fail if 'warning:' appears in doxygen's output, but ignore warnings from file Doxyfile.
# Regex note: (?! ... ) is a negative lookahead. Succeed if the pattern is not present.
set +o pipefail && make doc 2>&1 | tee doxygen.log && ( ! grep -P 'warning:(?! .* file .?Doxyfile)' doxygen.log )
# Regex note: (?! ... ) is a negative lookahead. Succeed if the pattern is not present.
set +o pipefail && make doc-searchengine 2>&1 | tee doxygen.log && ( ! grep -P 'warning:(?! .* file .?Doxyfile)' doxygen.log )
# gcc debug build.
# Includes dependency checker.
@ -52,12 +65,14 @@ jobs:
#
# Invokes test/hdrtst to check public headers compliance.
gcc-debug-build-and-test:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: ICU4C with gcc
env:
CXXFLAGS: -Wextra -Werror -Wno-error=return-local-addr
CFLAGS: -Werror
PREFIX: /tmp/icu-prefix
run: |
mkdir build;
@ -68,6 +83,26 @@ jobs:
make install;
PATH=$PREFIX/bin:$PATH make -C test/hdrtst check
#gcc 11 with c++ 20
gcc11-cpp20:
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Install GCC-11
run: |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install gcc-11 g++-11
- name: Build and Test
env:
CC: gcc-11
CXX: g++-11
CXXFLAGS: -std=c++20 -fext-numeric-literals
run: |
cd icu4c/source;
./runConfigureICU Linux
make -j -l4.5 check;
# clang release build with some options to enforce useful constraints.
# Includes dependency checker on an in-source, optimized build.
# Includes checking @draft etc. API tags vs. ifndef guards like
@ -75,7 +110,7 @@ jobs:
# (FORCE guards make this tool pass but won't compile to working code.
# See the testtagsguards.sh script for details.)
clang-release-build-and-test:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -99,6 +134,12 @@ jobs:
run: |
cd icu4c;
source/test/hdrtst/testtagsguards.sh;
- name: Test C Default locale
run: |
cd icu4c/source/test/cintltst && LANG=C LD_LIBRARY_PATH=../../lib:../../tools/ctestfw ./cintltst /tsutil/cloctst/TestCDefaultLocale
- name: Test C.UTF-8 Default locale
run: |
cd icu4c/source/test/cintltst && LANG=C.UTF-8 LD_LIBRARY_PATH=../../lib:../../tools/ctestfw ./cintltst /tsutil/cloctst/TestCDefaultLocale
- name: Make Dist
env:
CPPFLAGS: -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1
@ -117,7 +158,7 @@ jobs:
build_option:
[ --enable-static, --enable-static --disable-shared ]
# --disable-shared has a build problem.
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -133,7 +174,7 @@ jobs:
# Out of source build with gcc 10, c++14, and extra warnings; executes icuinfo.
gcc-10-stdlib17:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -154,7 +195,7 @@ jobs:
# Clang Linux with address sanitizer.
clang-asan:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -166,9 +207,24 @@ jobs:
env:
CPPFLAGS: -fsanitize=address
LDFLAGS: -fsanitize=address
# Clang Linux with leak sanitizer.
clang-lsan:
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: ICU4C with clang and lsan
run: |
cd icu4c/source;
./runConfigureICU --enable-debug --disable-release Linux/clang --disable-renaming --enable-tracing;
make -j -l4.5 check;
env:
CPPFLAGS: -fsanitize=leak
LDFLAGS: -fsanitize=leak
ASAN_OPTIONS: detect_leaks=1
# Clang Linux with undefined-behavior sanitizer.
clang-ubsan:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -183,7 +239,7 @@ jobs:
LDFLAGS: -fsanitize=undefined -fsanitize=alignment -fno-sanitize-recover=undefined,alignment
# Control Flow Integrity.
clang-cfi:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -202,7 +258,7 @@ jobs:
# Clang Linux with thread sanitizer.
clang-tsan:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -218,21 +274,252 @@ jobs:
CPPFLAGS: -fsanitize=thread
LDFLAGS: -fsanitize=thread
# MacOS with clang
macos-clang:
runs-on: macos-latest
#------------------------------------------------------
# Clang Linux with data filter
# Note: This job uses `make -j2` instead of `make -j -l4.5` because with more parallelism (PR #2456)
# this check became flaky. The build apparently was not done copying one or another .ucm file before
# calling makeconv for it, although the Makefile has appropriate dependencies.
clang-datafilter:
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Extract ICU version
run: |
# Extract ICU version from icuver.txt
icuverContent=$(cat icu4c/source/data/misc/icuver.txt)
icuVersion=$(echo "$icuverContent" | grep -oP 'ICUVersion\{"\K\d+\.\d+\.\d+\.\d+')
majorVersion=$(echo "$icuVersion" | cut -d. -f1)
echo "majorVersion=$majorVersion"
echo "majorVersion=$majorVersion" >> $GITHUB_ENV
- name: Build ICU4C with clang
run: |
cd icu4c/source && \
ICU_DATA_FILTER_FILE=../../.github/data-filter.json ./runConfigureICU Linux/clang && \
make -j2 tests && \
\[ ! -d data/out/build/icudt${majorVersion}l/translit \] && \
(cd test/intltest && LD_LIBRARY_PATH=../../lib:../../tools/ctestfw ./intltest translit/TransliteratorTest/TestBasicTransliteratorEvenWithoutData) && \
(cd test/cintltst && LANG=C LD_LIBRARY_PATH=../../lib:../../tools/ctestfw ./cintltst /tsutil/cloctst/TestEnglishExemplarCharacters /tsutil/cldrtest/TestCoverage)
# Clang Linux with CPP 17
clang-cpp17:
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Build ICU4C with CPP 17
env:
CXXFLAGS: -std=c++17 -Winvalid-constexpr
run: |
cd icu4c/source && ./runConfigureICU --enable-debug --disable-release Linux/clang && make -j -l4.5 check
# Clang Linux with LANG: en_US@calendar=gregorian;hours=h12
clang-lang-with-extn-tags:
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Linux Clang - LANG has extension tags
env:
LANG: "en_US@calendar=gregorian;hours=h12"
run: |
cd icu4c/source && ./runConfigureICU --enable-debug --disable-release Linux/clang && make -j -l4.5 check
# Clang Linux 18 with CPP20 and treat warnings as errors
clang18-cpp20-warning-as-errors:
runs-on: ubuntu-22.04 # Updated in BRS
strategy:
fail-fast: false
matrix:
flags:
- '-std=c++20'
- '-std=c++20 -stdlib=libc++'
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Install Clang-18
run: |
wget https://apt.llvm.org/llvm.sh
chmod u+x llvm.sh
sudo ./llvm.sh 18 all
- name: Clang-18 build and Test
env:
CC: clang-18
CXX: clang++-18
CPPFLAGS: '-Wall -Wextra -Wctad-maybe-unsupported -Werror'
CXXFLAGS: ${{ matrix.flags }}
run: |
cd icu4c/source && ./runConfigureICU --enable-debug --disable-release Linux && make -j -l4.5 check
# MacOS with clang
macos-clang:
runs-on: macos-14 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: ICU4C with clang on MacOS
env:
CPPFLAGS: '-Wall -Wextra -Wextra-semi -Wundef -Wnon-virtual-dtor -Wctad-maybe-unsupported -Werror'
run: |
cd icu4c/source;
PYTHON=python3 ./runConfigureICU MacOSX;
PYTHON=python3 ./runConfigureICU macOS;
make -j -l4.5 check
# Windows MSVC builds
windows-msvc:
runs-on: windows-2022 # Updated in BRS
strategy:
fail-fast: false
matrix:
include:
- test_flags: 'x64 Debug'
build_flags: '/p:Configuration=Debug /p:Platform=x64'
- test_flags: 'x86 Debug'
build_flags: '/p:Configuration=Debug /p:Platform=Win32'
- test_flags: 'arm Release'
build_flags: '/p:Configuration=Release /p:Platform=ARM'
- test_flags: 'x64 Release'
build_flags: '/p:LanguageStandard=stdcpplatest /p:Configuration=Release /p:Platform=x64'
- test_flags: 'x64 Release'
build_flags: '/p:_HAS_EXCEPTIONS=0 /p:Configuration=Release /p:Platform=x64'
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Set up MSBuild
uses: microsoft/setup-msbuild@v2
- name: Build Solution x64
if: contains(matrix.test_flags, 'arm Release')
run: msbuild icu4c/source/allinone/allinone.sln /p:Configuration=Release /p:Platform=x64 /p:SkipUWP=true
- name: Build Solution
run: |
msbuild icu4c/source/allinone/allinone.sln ${{ matrix.build_flags }} /p:SkipUWP=true
- name: Run ${{ matrix.test_flags }} Tests (icucheck.bat)
if: contains(matrix.test_flags, 'arm Release') == false
run: |
icu4c\source\allinone\icucheck.bat ${{ matrix.test_flags }}
# Windows data filter build
windows-msvc-datafilter:
runs-on: windows-2022 # Updated in BRS
timeout-minutes: 30
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Set ICU_DATA_FILTER_FILE variable
run: |
$filterPath = "${{ github.workspace }}\.github\data-filter.json"
echo "ICU_DATA_FILTER_FILE=$filterPath" >> $GITHUB_ENV
shell: pwsh
- name: Set up MSBuild
uses: microsoft/setup-msbuild@v2
- name: Build Solution with Data Filter
run: msbuild icu4c/source/allinone/allinone.sln /p:Configuration=Release /p:Platform=x64 /p:SkipUWP=true
# Windows MSVC distribution release
windows-msvc-dist-release:
runs-on: windows-2022 # Updated in BRS
permissions:
contents: write # So that we can upload to release
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
include:
- arch: 'x64'
plat: 'x64'
win_ver: 'Win64'
- arch: 'x86'
plat: 'Win32'
win_ver: 'Win32'
- arch: 'arm64'
plat: 'ARM64'
win_ver: 'WinARM64'
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Set up MSBuild
uses: microsoft/setup-msbuild@v2
- name: Build Solution x64
if: contains(matrix.win_ver, 'ARM64')
run: msbuild icu4c/source/allinone/allinone.sln /p:Configuration=Release /p:Platform=x64 /p:SkipUWP=true
- name: Build Solution
run: msbuild icu4c/source/allinone/allinone.sln /p:Configuration=Release /p:Platform=${{ matrix.plat }} /p:SkipUWP=true
- name: Run Tests (icucheck.bat)
if: contains(matrix.win_ver, 'ARM64') == false
run: icu4c/source/allinone/icucheck.bat ${{ matrix.arch }} Release
- name: "Run PowerShell: Distrelease script (${{ matrix.arch }})"
run: |
cd ./icu4c/
./packaging/distrelease.ps1 -arch ${{ matrix.arch }}
shell: pwsh
- name: Extract ICU version and rename zip file
id: set-zip-name
run: |
# Extract ICU version from icuver.txt
$icuverContent = Get-Content icu4c\source\data\misc\icuver.txt
$icuVersion = ($icuverContent -match 'ICUVersion{"(\d+\.\d+\.\d+\.\d+)"}')[0]
$icuVersion -match '\{"(.*?)"\}' | Out-Null
$icuVersion = $matches[1]
$majorVersion = $icuVersion.Split('.')[0]
$minorVersion = $icuVersion.Split('.')[1]
# Determine the new file name based on the version
if ($minorVersion -eq "0") {
$newZipName = "icu4c-${majorVersion}rc-${{ matrix.win_ver }}-MSVC2022"
} else {
$newZipName = "icu4c-${majorVersion}_${minorVersion}-${{ matrix.win_ver }}-MSVC2022"
}
# Debugging: Print the new zip name
Write-Host "New Zip Name: $newZipName"
# Rename the existing zip file
cd icu4c\source\dist\ && ls -l .
Rename-Item -Path icu-windows.zip -NewName "${newZipName}.zip"
echo $newZipName
ls -l .
echo "newZipName=$newZipName" | Out-File -FilePath $env:GITHUB_ENV -Append
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: icu4c.${{ matrix.win_ver }}.run_#${{ github.run_number }}
path: icu4c/source/dist/${{ env.newZipName }}.zip
- name: Upload to release
if: ${{ inputs.gitReleaseTag && startsWith(inputs.gitReleaseTag, 'release-') }}
run: |
gh release upload ${{ inputs.gitReleaseTag }} icu4c/source/dist/${{ env.newZipName }}.zip --clobber
env:
GH_TOKEN: ${{ github.token }}
# Window MSYS2 tests
windows-msys2-gcc-x86_64:
runs-on: windows-2022 # Updated in BRS
timeout-minutes: 45
defaults:
run:
shell: msys2 {0}
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Set up MSYS2
uses: msys2/setup-msys2@v2
id: msys2
with:
update: true
msystem: mingw64
install: >
base-devel
mingw-w64-x86_64-toolchain
make
- name: 'Verify MinGW Installation'
run: gcc --version
- name: Build and Test
run: |
cd '${{ github.workspace }}' && cd icu4c/source && ./runConfigureICU MinGW --prefix='/tmp/build-icu' && make -j -l4.5 check
- name: Make install
run: |
cd '${{ github.workspace }}' && cd icu4c/source && make install && cd /tmp/build-icu && echo 'Recursive ls' && ls -lR
- name: Run icuinfo
run: |
echo 'Run icuinfo from MSYS shell' && cd /tmp/build-icu/bin && ./icuinfo.exe
- name: Run icuinfo from CMD
shell: cmd
run: |
cd /d ${{ steps.msys2.outputs.msys2-location }}\tmp\build-icu\bin
set PATH=C:\tools\msys64\mingw64\bin;%PATH%
.\icuinfo.exe
# Run ICU4C tests with stubdata.
run-with-stubdata:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -275,7 +562,7 @@ jobs:
# Test U_CHARSET_IS_UTF8
u-charset-is-utf8-test:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- run: |
@ -285,7 +572,7 @@ jobs:
# Test U_OVERRIDE_CXX_ALLOCATION-is-0-test
u-override-cxx-allocation-is-0-test:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- run: |
@ -296,7 +583,7 @@ jobs:
# Test LSTM
lstm-test:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- run: |
@ -307,7 +594,7 @@ jobs:
# Test adaboost
adaboost-test:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- run: |
@ -318,7 +605,7 @@ jobs:
# Build and run testmap
testmap:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- run: |
@ -331,28 +618,28 @@ jobs:
# Copyright scan
copyright-scan:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- run: perl tools/scripts/cpysearch/cpyscan.pl
# Check compilation of internal headers.
internal-header-compilation:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- run: cd icu4c/source; test/hdrtst/testinternalheaders.sh
# Check source files for valid UTF-8 and for absence of BOM.
valid-UTF-8-and-no-BOM-check:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- run: tools/scripts/icu-file-utf8-check.py
# Run unit tests with UCONFIG_NO_XXX variations.
uconfig-unit-tests:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
strategy:
# "fail-fast: false" lets other jobs keep running even if the test breaks in some other uconfig.
fail-fast: false
@ -399,7 +686,7 @@ jobs:
# Run header tests with UCONFIG_NO_XXX variations.
uconfig-header-tests:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
strategy:
# "fail-fast: false" lets other jobs keep running even if the test breaks in some other uconfig.
fail-fast: false
@ -450,16 +737,16 @@ jobs:
# Build Unicode update tools
unicode-update-tools:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- uses: bazelbuild/setup-bazelisk@b39c379c82683a5f25d34f0d062761f62693e0b2 # v3.0.0
- uses: bazel-contrib/setup-bazel@0.14.0
- name: Get CI Linux runner VM version
id: linux-version
run: |
echo "LINUX_VERSION=$(grep -F VERSION_ID /etc/os-release | cut -d'"' -f2)" >> $GITHUB_OUTPUT
- name: Mount bazel cache
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
uses: actions/cache@v4.2.0
with:
path: "~/.cache/bazel"
key: bazel-${{ runner.os }}-${{ steps.linux-version.outputs.LINUX_VERSION }}
@ -489,7 +776,7 @@ jobs:
# Build and run ICU4C samples
icu4c-test-samples:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -514,7 +801,7 @@ jobs:
# https://unicode-org.github.io/icu/processes/release/tasks/integration.html#verify-that-icu4c-tests-pass-without-collation-rule-strings
icu4c-without-collation-rule-strings:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Install hjson dependency
@ -551,10 +838,10 @@ jobs:
run: |
cd icu4c/source
make -j -l4.5 check
# https://unicode-org.github.io/icu/processes/release/tasks/healthy-code.html#test-uconfig_no_conversion
icu4c-uconfig-no-conversion:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Set UCONFIG_NO_CONVERSION and configure ICU4C
@ -571,3 +858,83 @@ jobs:
mkdir -p lib
pushd common && make -j -l4.5 && popd
pushd i18n && make -j -l4.5 && popd
# Workflow for ICU Export Data for ICU4X
icu4c-icuexportdata:
runs-on: ubuntu-22.04 # Updated in BRS
permissions:
contents: write # So that we can upload to release
timeout-minutes: 30
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Build
run: |
cd icu4c/source && ./runConfigureICU Linux && make -j -l4.5
env:
CC: clang
CXX: clang++
- name: Build property data files
run: |
cd icu4c/source
mkdir -p icuexportdata/uprops/fast
./bin/icuexportdata --mode uprops --index --copyright --verbose --destdir icuexportdata/uprops/fast --trie-type fast --all
mkdir -p icuexportdata/uprops/small
./bin/icuexportdata --mode uprops --index --copyright --verbose --destdir icuexportdata/uprops/small --trie-type small --all
env:
LD_LIBRARY_PATH: lib
- name: Build normalization data files
run: |
cd icu4c/source
mkdir -p icuexportdata/norm/fast
./bin/icuexportdata --mode norm --index --copyright --verbose --destdir icuexportdata/norm/fast --trie-type fast --all
mkdir -p icuexportdata/norm/small
./bin/icuexportdata --mode norm --index --copyright --verbose --destdir icuexportdata/norm/small --trie-type small --all
env:
LD_LIBRARY_PATH: lib
- name: Build case data files
run: |
cd icu4c/source
mkdir -p icuexportdata/ucase/fast
./bin/icuexportdata --mode ucase --index --copyright --verbose --destdir icuexportdata/ucase/fast --trie-type fast --all
mkdir -p icuexportdata/ucase/small
./bin/icuexportdata --mode ucase --index --copyright --verbose --destdir icuexportdata/ucase/small --trie-type small --all
env:
LD_LIBRARY_PATH: lib
- name: Build collation data files
run: |
cd icu4c/source
cd data/coll
FILES=$(ls *.txt)
cd ../../
mkdir -p icuexportdata/collation/unihan
./bin/genrb -X -s data/coll --ucadata data/in/coll/ucadata-unihan-icu4x.icu -d icuexportdata/collation/unihan $FILES
rm icuexportdata/collation/unihan/*.res
mkdir -p icuexportdata/collation/implicithan
./bin/genrb -X -s data/coll --ucadata data/in/coll/ucadata-implicithan-icu4x.icu -d icuexportdata/collation/implicithan $FILES
rm icuexportdata/collation/implicithan/*.res
env:
LD_LIBRARY_PATH: lib
- name: Build segmenter dictionary files
run: |
cd icu4c/source
mkdir -p icuexportdata/segmenter/dictionary
for FILE in $(ls data/brkitr/dictionaries | xargs -n 1 basename); do
./bin/gendict --uchars --toml data/brkitr/dictionaries/$FILE icuexportdata/segmenter/dictionary/$(basename $FILE .txt).toml
done
env:
LD_LIBRARY_PATH: lib
- name: Zip
run: |
cd icu4c/source/icuexportdata
zip -r ../../../icuexportdata_${{ inputs.gitReleaseTag }}.zip .
- name: Publish Artifact
uses: actions/upload-artifact@v4
with:
name: icuexportdata_output
path: icuexportdata_*.zip
- name: Upload to release
if: ${{ inputs.gitReleaseTag && startsWith(inputs.gitReleaseTag, 'release-') }}
run: |
gh release upload ${{ inputs.gitReleaseTag }} icuexportdata_*.zip --clobber
env:
GH_TOKEN: ${{ github.token }}

View file

@ -12,16 +12,25 @@ on:
- 'maint/maint*'
paths:
- 'icu4j/**'
- 'testdata/**'
- '.github/workflows/**'
pull_request:
branches: '**'
paths:
- 'icu4j/**'
- 'testdata/**'
- '.github/workflows/**'
workflow_dispatch:
# To trigger the Env Test workflow manually, follow the instructions in
# https://docs.github.com/en/actions/managing-workflow-runs/manually-running-a-workflow
# For non-release branches (namely: PRs), only run CI on the most recent commit. Cancel
# runs on previous commits mid-flight when new commits are pushed.
# https://docs.github.com/en/actions/using-jobs/using-concurrency#example-only-cancel-in-progress-jobs-on-specific-branches
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'maint/') && github.ref != 'main' }}
env:
SHARED_MVN_ARGS: '--show-version --no-transfer-progress'
@ -35,7 +44,7 @@ jobs:
# This job is created according to the cache strategy of reuse from a single job:
# https://github.com/actions/cache/blob/main/caching-strategies.md#make-cache-read-only--reuse-cache-from-centralized-job
icu4j-mvn-init-cache:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- name: Checkout and setup
uses: actions/checkout@v4
@ -51,14 +60,14 @@ jobs:
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '8'
java-version: '11'
# Download all of the artifacts needed for the code and build plugins, but
# exclude any needed by profiles depending on system artifacts
- name: Download all artifacts
run: |
cd icu4j;
mvn ${SHARED_MVN_ARGS} dependency:go-offline -P '!old_jdk_taglet'
# ICU4J build and unit test using Maven
# https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven
icu4j-mvn-build-and-test:
@ -66,8 +75,8 @@ jobs:
strategy:
fail-fast: false
matrix:
java-version: [ '8', '11', '17' ]
runs-on: ubuntu-latest
java-version: [ '11', '17', '21' ]
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- name: Checkout and setup
uses: actions/checkout@v4
@ -100,7 +109,7 @@ jobs:
lstm-icu4j-build-and-test:
if: false # TODO(ICU-22505)
needs: icu4j-mvn-init-cache
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- name: Checkout and setup
uses: actions/checkout@v4
@ -141,7 +150,7 @@ jobs:
adaboost-icu4j-build-and-test:
if: false # Temporary disable, until we disable the .jar creation from C and distribute the individual files
needs: icu4j-mvn-init-cache
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- name: Checkout and setup
uses: actions/checkout@v4

View file

@ -16,6 +16,13 @@ on:
# To trigger the Env Test workflow manually, follow the instructions in
# https://docs.github.com/en/actions/managing-workflow-runs/manually-running-a-workflow
# For non-release branches (namely: PRs), only run CI on the most recent commit. Cancel
# runs on previous commits mid-flight when new commits are pushed.
# https://docs.github.com/en/actions/using-jobs/using-concurrency#example-only-cancel-in-progress-jobs-on-specific-branches
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'maint/') && github.ref != 'main' }}
env:
SHARED_MVN_ARGS: '--show-version --no-transfer-progress'
@ -26,14 +33,14 @@ jobs:
# Copyright scan
copyright-scan:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@v4
- run: perl tools/scripts/cpysearch/cpyscan.pl
# Check source files for valid UTF-8 and for absence of BOM.
valid-UTF-8-and-no-BOM-check:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@v4
- run: tools/scripts/icu-file-utf8-check.py
@ -43,7 +50,7 @@ jobs:
# This job is created according to the cache strategy of reuse from a single job:
# https://github.com/actions/cache/blob/main/caching-strategies.md#make-cache-read-only--reuse-cache-from-centralized-job
icu4j-mvn-init-cache:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- name: Checkout and setup
uses: actions/checkout@v4
@ -59,7 +66,7 @@ jobs:
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '8'
java-version: '11'
# Download all of the artifacts needed for the code and build plugins, but
# exclude any needed by profiles depending on system artifacts
- name: Download all artifacts
@ -70,7 +77,7 @@ jobs:
# Verify icu4c release tools buildability.
icu4c-release-tools:
needs: icu4j-mvn-init-cache
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@v4
- name: Restore read-only cache of local Maven repository

View file

@ -22,6 +22,13 @@ on:
# To trigger the Env Test workflow manually, follow the instructions in
# https://docs.github.com/en/actions/managing-workflow-runs/manually-running-a-workflow
# For non-release branches (namely: PRs), only run CI on the most recent commit. Cancel
# runs on previous commits mid-flight when new commits are pushed.
# https://docs.github.com/en/actions/using-jobs/using-concurrency#example-only-cancel-in-progress-jobs-on-specific-branches
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'maint/') && github.ref != 'main' }}
permissions:
contents: read
@ -30,7 +37,7 @@ jobs:
# Keep in sync with deploy workflow in `jekyll-gh-pages.yml`
test-docs-build:
name: Test build of User Guide docs
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- name: Checkout
uses: actions/checkout@v4
@ -42,7 +49,7 @@ jobs:
cache-version: 0 # Increment this number if you need to re-download cached gems
- name: Setup Pages
id: pages
uses: actions/configure-pages@v3
uses: actions/configure-pages@v5
with:
generator_config_file: docs/_config.yml
- name: Build with Jekyll

View file

@ -25,7 +25,7 @@ jobs:
#=================================================================
# locale env tests.
env-test-locale:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
strategy:
# "fail-fast: false" let other jobs keep running even if the test break in some locales.
fail-fast: false
@ -82,7 +82,7 @@ jobs:
#=================================================================
# tz env tests.
env-test-tz:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
strategy:
# "fail-fast: false" let other jobs keep running even if the test break in some timezones.
fail-fast: false

View file

@ -0,0 +1,70 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
#
# GitHub Actions configuration for Exhaustive Tests for ICU.
#
# Note: The exhaustive test configuration is in a separate file
# so that it can be run independently from the regular builds.
#
# To run these tests, go to the Actions Tab of your repo on the github page,
# select "Exhaustive Tests for ICU" and manually trigger the workflow for your branch.
name: Exhaustive Tests for ICU
on:
push:
# Runs post merge on maintenance branches
branches:
- 'maint/maint*'
paths:
- 'icu4c/**'
- 'icu4j/**'
- 'testdata/**'
- '.github/workflows/**'
schedule:
# Runs daily on default branch (main) only.
# https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#schedule
- cron: '0 4 * * 6' # Run every Saturday at 4:00 UTC
workflow_dispatch:
# Run manually on any branch
# For non-release branches (namely: PRs), only run CI on the most recent commit. Cancel
# runs on previous commits mid-flight when new commits are pushed.
# https://docs.github.com/en/actions/using-jobs/using-concurrency#example-only-cancel-in-progress-jobs-on-specific-branches
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'maint/') && github.ref != 'main' }}
jobs:
# Runs exhaustive tests for ICU4J on Linux
icu4j-linux:
runs-on: ubuntu-22.04 # Updated in BRS
timeout-minutes: 180
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Build and Exhaustive Tests
run: |
echo "Building ICU4J" && cd icu4j && mvn install -DICU.exhaustive=10
env:
BUILD: ICU4J
- name: List failures (if any)
if: failure()
run: |
cd icu4j && cat `find . -name surefire-reports -type d -exec grep -l -r --include="*.txt" FAILED {} \;`
timeout-minutes: 2
icu4c-linux-clang:
runs-on: ubuntu-22.04 # Updated in BRS
timeout-minutes: 120
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Build
run: |
cd icu4c/source && ./runConfigureICU Linux/clang && make -j -l4.5
- name: Exhaustive Tests
run: |
cd icu4c/source && make check-exhaustive
env:
CC: clang
CXX: clang++

View file

@ -14,6 +14,13 @@ on:
# To trigger the Env Test workflow manually, follow the instructions in
# https://docs.github.com/en/actions/managing-workflow-runs/manually-running-a-workflow
# For non-release branches (namely: PRs), only run CI on the most recent commit. Cancel
# runs on previous commits mid-flight when new commits are pushed.
# https://docs.github.com/en/actions/using-jobs/using-concurrency#example-only-cancel-in-progress-jobs-on-specific-branches
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'maint/') && github.ref != 'main' }}
env:
SHARED_MVN_ARGS: '--show-version --no-transfer-progress'
@ -23,13 +30,13 @@ permissions:
jobs:
# Initialize the Maven artifact cache
# Uses Java 8 because Java version not deemed significant for downloading
# artifacts
# Using Java 11 because Java version is not deemed significant for downloading artifacts,
# and is the lowest version we support, so the cached artifacts can be used by any other version.
#
# This job is created according to the cache strategy of reuse from a single job:
# https://github.com/actions/cache/blob/main/caching-strategies.md#make-cache-read-only--reuse-cache-from-centralized-job
icu4j-mvn-init-cache:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- name: Checkout and setup
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -38,14 +45,14 @@ jobs:
- name: Checkout lfs objects
run: git lfs pull
- name: Cache local Maven repository
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
uses: actions/cache@v4.2.0
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
- uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1
with:
distribution: 'temurin'
java-version: '8'
java-version: '11'
# Download all of the artifacts needed for the code and build plugins
- name: Download all artifacts
run: |
@ -55,7 +62,7 @@ jobs:
# Test ICU4J with little-endian ICU4C data only
icu4j-little-endian-data-test:
needs: icu4j-mvn-init-cache
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- name: Checkout and setup
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -64,7 +71,7 @@ jobs:
- name: Checkout lfs objects
run: git lfs pull
- name: Lookup read-only cache of local Maven repository
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
uses: actions/cache@v4.2.0
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
@ -90,7 +97,7 @@ jobs:
icu4c-store-perf-libs:
# Run performance tests only on the main branch of the ICU repository.
if: github.repository == 'unicode-org/icu' && github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -102,7 +109,7 @@ jobs:
cd lib;
cp -Ps ../tools/ctestfw/libicutest* .
- name: Upload ICU libraries
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
with:
name: icu-perf-libs
path: icu4c/source/lib
@ -131,13 +138,13 @@ jobs:
contents: write
deployments: write
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Create directory for lib files
run: mkdir icu4c/source/perflib
- name: Get ICU libs
uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4
uses: actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806 # v4.1.9
with:
name: icu-perf-libs
path: icu4c/source/lib
@ -205,13 +212,13 @@ jobs:
contents: write
deployments: write
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Create directory for lib files
run: mkdir icu4c/source/perflib
- name: Get ICU libs
uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4
uses: actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806 # v4.1.9
with:
name: icu-perf-libs
path: icu4c/source/lib
@ -270,13 +277,13 @@ jobs:
contents: write
deployments: write
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Create directory for lib files
run: mkdir icu4c/source/perflib
- name: Get ICU libs
uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4
uses: actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806 # v4.1.9
with:
name: icu-perf-libs
path: icu4c/source/lib
@ -319,7 +326,7 @@ jobs:
contents: write
deployments: write
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- name: Checkout and setup
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -328,7 +335,7 @@ jobs:
- name: Checkout lfs objects
run: git lfs pull
- name: Lookup read-only cache of local Maven repository
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
uses: actions/cache@v4.2.0
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
@ -338,21 +345,17 @@ jobs:
- uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1
with:
distribution: 'temurin'
java-version: '8'
java-version: '11'
- name: Build and run unicodesetperf test
run: |
# This file needs to be restored otherwise GHA cannot
# check-out the perfdata branch. Setting up this task with GH lfs
# modifies the file but the details of why and how are unknown.
git restore --staged tools/multi/proj/icu4cscan/old-xmls.tar.bz2;
git restore tools/multi/proj/icu4cscan/old-xmls.tar.bz2;
cd icu4j;
mvn ${SHARED_MVN_ARGS} verify -DskipITs -DskipTests;
mvn ${SHARED_MVN_ARGS} install -DskipITs -DskipTests;
git status
cd perf-tests;
mkdir -p perf/results/j_unicodesetperf/${{ matrix.perf }};
java -cp ./target/*:../tools/misc/target/*:../main/core/target/* com.ibm.icu.dev.test.perf.UnicodeSetPerf ${{ matrix.perf }} -a -t 2 -p 4 [:Lt:] | tee perf/results/j_unicodesetperf/${{ matrix.perf }}/output.txt
mvn dependency:copy-dependencies
java -cp ./target/*:./target/dependency/* com.ibm.icu.dev.test.perf.UnicodeSetPerf ${{ matrix.perf }} -a -t 2 -p 4 [:Lt:] | tee perf/results/j_unicodesetperf/${{ matrix.perf }}/output.txt
- name: Store performance test results
uses: gregtatum/github-action-benchmark@d3f06f738e9612988d575db23fae5ca0008d3d12
@ -381,7 +384,7 @@ jobs:
contents: write
deployments: write
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- name: Checkout and setup
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -390,7 +393,7 @@ jobs:
- name: Checkout lfs objects
run: git lfs pull
- name: Lookup read-only cache of local Maven repository
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
uses: actions/cache@v4.2.0
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
@ -400,20 +403,16 @@ jobs:
- uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1
with:
distribution: 'temurin'
java-version: '8'
java-version: '11'
- name: Build and run ucharacterperf test
run: |
# This file needs to be restored otherwise GHA cannot
# check-out the perfdata branch. Setting up this task with GH lfs
# modifies the file but the details of why and how are unknown.
git restore --staged tools/multi/proj/icu4cscan/old-xmls.tar.bz2;
git restore tools/multi/proj/icu4cscan/old-xmls.tar.bz2;
cd icu4j;
mvn ${SHARED_MVN_ARGS} verify -DskipITs -DskipTests;
mvn ${SHARED_MVN_ARGS} install -DskipITs -DskipTests;
cd perf-tests;
mkdir -p perf/results/j_ucharacterperf;
java -cp ./target/*:../tools/misc/target/*:../main/core/target/* com.ibm.icu.dev.test.perf.UCharacterPerf -a -t 2 -p 4 0 ffff | tee perf/results/j_ucharacterperf/output.txt
mvn dependency:copy-dependencies
java -cp ./target/*:./target/dependency/* com.ibm.icu.dev.test.perf.UCharacterPerf -a -t 2 -p 4 0 ffff | tee perf/results/j_ucharacterperf/output.txt
- name: Store performance test results
uses: gregtatum/github-action-benchmark@d3f06f738e9612988d575db23fae5ca0008d3d12
@ -445,7 +444,7 @@ jobs:
contents: write
deployments: write
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- name: Checkout and setup
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -454,7 +453,7 @@ jobs:
- name: Checkout lfs objects
run: git lfs pull
- name: Lookup read-only cache of local Maven repository
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
uses: actions/cache@v4.2.0
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
@ -464,24 +463,20 @@ jobs:
- uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1
with:
distribution: 'temurin'
java-version: '8'
java-version: '11'
- name: Build and run decimalformatperf
run: |
# This file needs to be restored otherwise GHA cannot
# check-out the perfdata branch. Setting up this task with GH lfs
# modifies the file but the details of why and how are unknown.
git restore --staged tools/multi/proj/icu4cscan/old-xmls.tar.bz2;
git restore tools/multi/proj/icu4cscan/old-xmls.tar.bz2;
cd icu4j;
mvn ${SHARED_MVN_ARGS} verify -DskipITs -DskipTests;
mvn ${SHARED_MVN_ARGS} install -DskipITs -DskipTests;
cd perf-tests;
mkdir -p perf/results/j_decimalformatperf/${{ matrix.locale }}/${{ matrix.perf }};
# Delay execution by random number of seconds. Spreading execution of multiple
# tests over 180 secs. minimizes the possibility of push conflicts when storing
# tests results in the data branch.
sleep $(($RANDOM % 180));
java -cp ./target/*:../tools/misc/target/*:../main/core/target/* com.ibm.icu.dev.test.perf.DecimalFormatPerformanceTest ${{ matrix.perf }} -a -t 2 -p 4 -L ${{ matrix.locale }} "#,###.##" "1.234,56" -r 1 | tee perf/results/j_decimalformatperf/${{ matrix.locale }}/${{ matrix.perf }}/output.txt
mvn dependency:copy-dependencies
java -cp ./target/*:./target/dependency/* com.ibm.icu.dev.test.perf.DecimalFormatPerformanceTest ${{ matrix.perf }} -a -t 2 -p 4 -L ${{ matrix.locale }} "#,###.##" "1.234,56" -r 1 | tee perf/results/j_decimalformatperf/${{ matrix.locale }}/${{ matrix.perf }}/output.txt
- name: Store performance test results
uses: gregtatum/github-action-benchmark@d3f06f738e9612988d575db23fae5ca0008d3d12
@ -514,7 +509,7 @@ jobs:
contents: write
deployments: write
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- name: Checkout and setup
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -523,7 +518,7 @@ jobs:
- name: Checkout lfs objects
run: git lfs pull
- name: Lookup read-only cache of local Maven repository
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
uses: actions/cache@v4.2.0
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
@ -533,26 +528,22 @@ jobs:
- uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1
with:
distribution: 'temurin'
java-version: '8'
java-version: '11'
- name: Build and run normperf
env:
DATA_FILE_PATH: data/collation
run: |
# This file needs to be restored otherwise GHA cannot
# check-out the perfdata branch. Setting up this task with GH lfs
# modifies the file but the details of why and how are unknown.
git restore --staged tools/multi/proj/icu4cscan/old-xmls.tar.bz2;
git restore tools/multi/proj/icu4cscan/old-xmls.tar.bz2;
cd icu4j;
mvn ${SHARED_MVN_ARGS} verify -DskipITs -DskipTests;
mvn ${SHARED_MVN_ARGS} install -DskipITs -DskipTests;
cd perf-tests;
mkdir -p perf/results/j_normperf/${{ matrix.source_text }}/${{ matrix.perf }};
# Delay execution by random number of seconds. Spreading execution of multiple
# tests over 180 secs. minimizes the possibility of push conflicts when storing
# tests results in the data branch.
sleep $(($RANDOM % 180));
java -cp ./target/*:../tools/misc/target/*:../main/core/target/* com.ibm.icu.dev.test.perf.NormalizerPerformanceTest ${{ matrix.perf }} -a -t 2 -p 4 -f $DATA_FILE_PATH/${{ matrix.source_text }}.txt -e UTF-8 ${{ matrix.mode }} | tee perf/results/j_normperf/${{ matrix.source_text }}/${{ matrix.perf }}/output.txt
mvn dependency:copy-dependencies
java -cp ./target/*:./target/dependency/* com.ibm.icu.dev.test.perf.NormalizerPerformanceTest ${{ matrix.perf }} -a -t 2 -p 4 -f $DATA_FILE_PATH/${{ matrix.source_text }}.txt -e UTF-8 ${{ matrix.mode }} | tee perf/results/j_normperf/${{ matrix.source_text }}/${{ matrix.perf }}/output.txt
cat perf/results/j_normperf/${{ matrix.source_text }}/${{ matrix.perf }}/output.txt
- name: Store performance test results
@ -653,7 +644,7 @@ jobs:
contents: write
deployments: write
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- name: Checkout and setup
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -662,7 +653,7 @@ jobs:
- name: Checkout lfs objects
run: git lfs pull
- name: Lookup read-only cache of local Maven repository
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
uses: actions/cache@v4.2.0
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
@ -672,26 +663,22 @@ jobs:
- uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1
with:
distribution: 'temurin'
java-version: '8'
java-version: '11'
- name: Build and run converterperf
env:
DATA_FILE_PATH: data/conversion
run: |
# This file needs to be restored otherwise GHA cannot
# check-out the perfdata branch. Setting up this task with GH lfs
# modifies the file but the details of why and how are unknown.
git restore --staged tools/multi/proj/icu4cscan/old-xmls.tar.bz2;
git restore tools/multi/proj/icu4cscan/old-xmls.tar.bz2;
cd icu4j;
mvn ${SHARED_MVN_ARGS} verify -DskipITs -DskipTests;
mvn ${SHARED_MVN_ARGS} install -DskipITs -DskipTests;
cd perf-tests;
mkdir -p perf/results/j_converterperf/${{ matrix.source_text }}/${{ matrix.test_enc }}/${{ matrix.perf }};
# Delay execution by random number of seconds. Spreading execution of multiple
# tests over 180 secs. minimizes the possibility of push conflicts when storing
# tests results in the data branch.
sleep $(($RANDOM % 180));
java -cp ./target/*:../tools/misc/target/*:../main/core/target/*:../main/charset/target/* com.ibm.icu.dev.test.perf.ConverterPerformanceTest ${{ matrix.perf }} -a -t 2 -p 4 -f $DATA_FILE_PATH/${{ matrix.source_text }}.txt -e UTF-8 -T ${{ matrix.test_enc }} | tee perf/results/j_converterperf/${{ matrix.source_text }}/${{ matrix.test_enc }}/${{ matrix.perf }}/output.txt
mvn dependency:copy-dependencies
java -cp ./target/*:./target/dependency/* com.ibm.icu.dev.test.perf.ConverterPerformanceTest ${{ matrix.perf }} -a -t 2 -p 4 -f $DATA_FILE_PATH/${{ matrix.source_text }}.txt -e UTF-8 -T ${{ matrix.test_enc }} | tee perf/results/j_converterperf/${{ matrix.source_text }}/${{ matrix.test_enc }}/${{ matrix.perf }}/output.txt
- name: Store performance test results
uses: gregtatum/github-action-benchmark@d3f06f738e9612988d575db23fae5ca0008d3d12
@ -736,7 +723,7 @@ jobs:
contents: write
deployments: write
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- name: Checkout and setup
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -745,7 +732,7 @@ jobs:
- name: Checkout lfs objects
run: git lfs pull
- name: Lookup read-only cache of local Maven repository
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
uses: actions/cache@v4.2.0
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
@ -755,7 +742,7 @@ jobs:
- uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1
with:
distribution: 'temurin'
java-version: '8'
java-version: '11'
- name: Extract identifying digit and parameter.
run: |
@ -764,20 +751,16 @@ jobs:
echo "DDIR=${ddir: -1}" >> $GITHUB_ENV
- name: Build and run dateformatperf
run: |
# This file needs to be restored otherwise GHA cannot
# check-out the perfdata branch. Setting up this task with GH lfs
# modifies the file but the details of why and how are unknown.
git restore --staged tools/multi/proj/icu4cscan/old-xmls.tar.bz2
git restore tools/multi/proj/icu4cscan/old-xmls.tar.bz2
cd icu4j;
mvn ${SHARED_MVN_ARGS} verify -DskipITs -DskipTests;
mvn ${SHARED_MVN_ARGS} install -DskipITs -DskipTests;
cd perf-tests;
mkdir -p perf/results/j_dateformatperf/${{ matrix.locale }}/${{ matrix.perf }}/${{ env.DDIR }};
# Delay execution by random number of seconds. Spreading execution of multiple
# tests over 180 secs. minimizes the possibility of push conflicts when storing
# tests results in the data branch.
sleep $(($RANDOM % 180));
java -cp ./target/*:../tools/misc/target/*:../main/core/target/* com.ibm.icu.dev.test.perf.DateFormatPerformanceTest ${{ matrix.perf }} -a -t 2 -p 4 -L ${{ matrix.locale }} ${{ env.PARM }} -r 1 | tee perf/results/j_dateformatperf/${{ matrix.locale }}/${{ matrix.perf }}/${{ env.DDIR }}/output.txt
mvn dependency:copy-dependencies
java -cp ./target/*:./target/dependency/* com.ibm.icu.dev.test.perf.DateFormatPerformanceTest ${{ matrix.perf }} -a -t 2 -p 4 -L ${{ matrix.locale }} ${{ env.PARM }} -r 1 | tee perf/results/j_dateformatperf/${{ matrix.locale }}/${{ matrix.perf }}/${{ env.DDIR }}/output.txt
- name: Store performance test results
uses: gregtatum/github-action-benchmark@d3f06f738e9612988d575db23fae5ca0008d3d12
@ -800,7 +783,7 @@ jobs:
if: github.repository == 'unicode-org/icu' && github.ref == 'refs/heads/main'
name: Copy perf data to remote repo for visualization
needs: [icu4c-performance-tests, icu4c-performance-tests-with-files, icu4c-strsrchperf, icu4j-unicodesetperf, icu4j-ucharacterperf, icu4j-decimalformatperf, icu4j-normperf, icu4j-converterperf, icu4j-dateformatperf]
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -810,10 +793,92 @@ jobs:
git checkout perfdata
- name: Publish data
uses: peaceiris/actions-gh-pages@373f7f263a76c20808c831209c920827a82a2847 # v3.9.3
uses: peaceiris/actions-gh-pages@4f9cc6602d3f66b9c108549d475ec49e8ef4d45e # v4.0.0
with:
deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
external_repository: unicode-org/icu-perf
publish_branch: main
publish_dir: ./perf
keep_files: true
# Build ICU and tests sample on some windows configurations
icu4c-windows-msvc-postmerge:
runs-on: windows-2022 # Updated in BRS
timeout-minutes: 30
strategy:
matrix:
arch: [x64, x86]
config: [Debug, Release]
include:
- arch: x86
platform: Win32
- arch: x64
platform: x64
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Set up MSBuild
uses: microsoft/setup-msbuild@v2
- name: Build Solution
run: msbuild icu4c/source/allinone/allinone.sln /p:Configuration=${{ matrix.config }} /p:Platform=${{ matrix.platform }} /p:SkipUWP=true
- name: Run Tests (icucheck.bat)
run: icu4c/source/allinone/icucheck.bat ${{ matrix.arch }} ${{ matrix.config }}
- name: Build Sample Solution
run: msbuild icu4c/source/samples/all/all.sln /p:Configuration=${{ matrix.config }} /p:Platform=${{ matrix.arch }} /p:SkipUWP=true
- name: Test Samples (samplecheck.bat)
run: icu4c/source/samples/all/samplecheck.bat ${{ matrix.arch }} ${{ matrix.config }}
icu4c-windows-cygwin-gcc:
runs-on: windows-2022 # Updated in BRS
timeout-minutes: 50
env:
ICU_CI_CACHE: c:\icu-ci-cache
CYG_URL: https://cygwin.com/setup-x86_64.exe
CYG_MIRROR: http://mirrors.kernel.org/sourceware/cygwin/
CYG_PACKAGES: automake,gcc-core,gcc-g++,make,pkg-config,perl,python3
CYG_ROOT: c:\cygwin-root
CYG_CACHE: 'c:\icu-ci-cache\cygwin64-v3'
CYG_CACHED_SETUP: 'c:\icu-ci-cache\cygwin64-v3\setup.exe'
CYG_VERSION_KEY: cygwin-3.2
defaults:
run:
shell: cmd
steps:
- name: Configure Git to checkout with Unix line endings (LF)
run: |
git config --global core.autocrlf input
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Restore Cygwin cache
uses: actions/cache@v4
with:
path: ${{ env.CYG_CACHE }}
key: ${{ hashFiles('.github/workflows/icu_merge_ci.yml') }}
- name: Download Cygwin setup
shell: pwsh
run: |
if ( !(Test-Path "${{ env.CYG_CACHED_SETUP }}" -NewerThan (Get-Date).AddDays(-7)) )
{
Write-Host "Cached Cygwin setup does not exist or is older than 7 days, downloading from external site."
New-Item -Force -Type Directory ${{ env.CYG_CACHE }}
Write-Host "Downloading Cygwin setup..."
$start_time = Get-Date
(New-Object System.Net.WebClient).DownloadFile("${{ env.CYG_URL }}", "${{ env.CYG_CACHED_SETUP }}")
Write-Output "Download took: $((Get-Date).Subtract($start_time).Seconds) second(s)."
}
- name: Install Cygwin
run: |
${{ env.CYG_CACHED_SETUP }} --no-verify --quiet-mode --no-shortcuts --no-startmenu --no-desktop --upgrade-also --only-site --site "${{ env.CYG_MIRROR }}" --root "${{ env.CYG_ROOT }}" --local-package-dir "${{ env.CYG_CACHE }}" --packages "${{ env.CYG_PACKAGES }}"
- name: Check Cygwin environment
run: |
${{ env.CYG_ROOT }}/bin/sh -lc 'echo Hello' && ${{ env.CYG_ROOT }}/bin/sh -lc 'uname -a'
- name: Build ICU (source and test)
run: |
${{ env.CYG_ROOT }}/bin/bash -lc "cd $(cygpath \"${{ github.workspace }}\") && cd icu4c/source && ./runConfigureICU Cygwin && make tests -j -l4.5"
env:
CC: gcc
CXX: g++
- name: Run Tests
run: |
${{ env.CYG_ROOT }}/bin/bash -lc "cd $(cygpath \"${{ github.workspace }}\") && cd icu4c/source && make -j -l4.5 check"
env:
CC: gcc
CXX: g++

View file

@ -13,19 +13,28 @@ on:
- 'maint/maint*'
paths:
- 'icu4c/**'
- 'testdata/**'
- '.github/workflows/**'
pull_request:
branches: '**'
paths:
- 'icu4c/**'
- 'testdata/**'
- '.github/workflows/**'
# For non-release branches (namely: PRs), only run CI on the most recent commit. Cancel
# runs on previous commits mid-flight when new commits are pushed.
# https://docs.github.com/en/actions/using-jobs/using-concurrency#example-only-cancel-in-progress-jobs-on-specific-branches
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'maint/') && github.ref != 'main' }}
permissions:
contents: read
jobs:
clang-valgrind-test:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- name: Install valgrind
run: |
@ -63,7 +72,7 @@ jobs:
--show-reachable=yes ./icuinfo;
clang-valgrind-intltest:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
strategy:
# "fail-fast: false" lets other jobs keep running even if the test breaks in some other test.
fail-fast: false

View file

@ -34,7 +34,7 @@ jobs:
# Build job
# Keep in sync with docs test workflow in `icu_docs.yml`
build:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
steps:
- name: Checkout
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -46,7 +46,7 @@ jobs:
cache-version: 0 # Increment this number if you need to re-download cached gems
- name: Setup Pages
id: pages
uses: actions/configure-pages@f156874f8191504dae5b037505266ed5dda6c382 # v3.0.6
uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5.0.0
with:
generator_config_file: docs/_config.yml
- name: Build with Jekyll
@ -71,7 +71,7 @@ jobs:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
needs: build
steps:
- name: Deploy to GitHub Pages

View file

@ -1,4 +1,4 @@
name: Publish icu4j.jar/utilities.jar to GH Maven
name: Publish snapshot icu4j.jar to GH Maven
on:
release:
types: [created]
@ -14,9 +14,12 @@ permissions:
jobs:
publish:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
permissions:
packages: write
outputs:
version: ${{ steps.mvn-proj-version.outputs.version }}
version-type: ${{ steps.mvn-proj-version-type.outputs.version-type }}
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
@ -25,18 +28,41 @@ jobs:
with:
distribution: 'temurin'
java-version: '11'
- name: icu4j and releaseCLDR
- name: Store Maven project version
id: mvn-proj-version
run: |
cd icu4j
version="`mvn help:evaluate -Dexpression=project.version -q -DforceStdout`"
echo "version=$version" # debug/info logging for our own purposes, before sending to Github
echo "version=$version" >> "$GITHUB_OUTPUT"
# Set version-type=snapshot for tags that contain SNAPSHOT,
# as well as for unicode-org-internal artifacts with a dash like `icu4j-for-cldr`.
- name: Assess Maven version release/snapshot
id: mvn-proj-version-type
run: |
if echo "${{ steps.mvn-proj-version.outputs.version }}" | grep -E "\-|SNAPSHOT"
then echo "version-type=snapshot" >> "$GITHUB_OUTPUT"
else echo "version-type=release" >> "$GITHUB_OUTPUT"
fi
- name: Prevent manual deployment attempts of full release
if: github.event_name == 'workflow_dispatch' && steps.mvn-proj-version-type.outputs.version-type == 'release'
run: |
echo "Manual deployments of publishing artifacts should only be attempted for snapshot versions"
exit 1;
- name: Build artifacts (icu4j)
run: |
cd icu4j
mvn ${SHARED_MVN_ARGS} clean install -DskipTests -DskipIT -P with_sources
- name: deploy it
# For snapshot versions, publish icu4j
- name: Deploy to Github (snapshot version)
if: steps.mvn-proj-version-type.outputs.version-type == 'snapshot'
run: |
echo Github Ref ${GITHUB_REF} @ ${GITHUB_SHA};
cd icu4j
mvn deploy ${SHARED_MVN_ARGS} \
-pl :icu4j,:utilities-for-cldr,:icu4j-root \
-pl :icu4j,:icu4j-root \
-DaltDeploymentRepository=github::https://maven.pkg.github.com/${GITHUB_REPOSITORY} \
-P cldr_utilities,with_sources
-P with_sources
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Note: can use 0.0.0-${GITHUB_SHA} as the version for hash-based.

View file

@ -0,0 +1,69 @@
name: Release - Create checksums and GPG sign
on:
workflow_dispatch:
inputs:
gitReleaseTag:
description: 'Release tag to upload to. Must start with "release-"'
type: string
env:
RELEASE_FOLDER: '${{ github.workspace }}/releaseDist'
jobs:
sign_and_checksums:
if: ${{ inputs.gitReleaseTag && startsWith(inputs.gitReleaseTag, 'release-') }}
runs-on: ubuntu-22.04 # Updated in BRS
environment: release-env
permissions:
contents: write # So that we can upload to release
steps:
- name: Checkout and setup
uses: actions/checkout@v4
with:
lfs: true
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }}
gpg-passphrase: MAVEN_GPG_PASSPHRASE
- name: Get all release files
run: |
mkdir -p ${RELEASE_FOLDER}
pushd ${RELEASE_FOLDER}
gh release download ${{ inputs.gitReleaseTag }} -p "*.zip" -p "*.tgz" -p "*.jar" --repo=${{ github.repository }}
popd
env:
GH_TOKEN: ${{ github.token }}
- name: Checksums and sign
run: |
source icu4j/releases_tools/shared.sh
# Convert 76.1 to 76_1
underscore_version=$(echo $artifact_version | sed 's/\./_/g')
pushd ${RELEASE_FOLDER}
sha512sum -b icu4c* > SHASUM512.txt
md5sum -b *.jar > icu4j-${artifact_version}.md5
md5sum -b icu4c-*-data-bin-*.zip > icu4c-${underscore_version}-binary.md5
md5sum -b icu4c-*-src.* > icu4c-${underscore_version}-sources.md5
find . -type f -name 'icu4c*' -exec gpg --no-tty --batch --pinentry-mode loopback --passphrase=$MAVEN_GPG_PASSPHRASE -a --output {}.asc --detach-sig {} \;
gpg --no-tty --batch --pinentry-mode loopback --passphrase=$MAVEN_GPG_PASSPHRASE -a --output SHASUM512.txt.asc --detach-sig SHASUM512.txt
popd
env:
MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
- name: Upload to release
run: |
gh release upload ${{ inputs.gitReleaseTag }} LICENSE --clobber --repo=${{ github.repository }}
gh release upload ${{ inputs.gitReleaseTag }} ${RELEASE_FOLDER}/*.md5 --clobber --repo=${{ github.repository }}
gh release upload ${{ inputs.gitReleaseTag }} ${RELEASE_FOLDER}/*.asc --clobber --repo=${{ github.repository }}
gh release upload ${{ inputs.gitReleaseTag }} ${RELEASE_FOLDER}/SHASUM512.txt --clobber --repo=${{ github.repository }}
env:
GH_TOKEN: ${{ github.token }}

View file

@ -0,0 +1,89 @@
name: Release - ICU4C artifacts on Fedora
on:
workflow_dispatch:
inputs:
runTests:
description: 'Run the tests.'
type: boolean
default: true
gitReleaseTag:
description: 'Release tag to upload to. Must start with "release-"'
type: string
env:
RELEASE_FOLDER: '${{ github.workspace }}/releaseDist'
jobs:
build:
runs-on: ubuntu-22.04 # Updated in BRS
environment: release-env
container:
image: ghcr.io/${{ github.repository_owner }}/fedora-docker-gcr:latest
credentials:
username: ${{ secrets.DOCKER_CONTAINER_USER_NAME }}
password: ${{ secrets.DOCKER_CONTAINER_REGISTRY_TOKEN }}
permissions:
contents: write # So that we can upload to release
steps:
- name: Install gh (GitHub CLI)
run: |
# Don't install it in the docker image, get the latest (pros and cons)
dnf install -y gh
- name: Checkout and setup
uses: actions/checkout@v4
with:
lfs: true
- name: Config and build ICU4C proper
run: |
pushd icu4c/source
./runConfigureICU Linux/gcc
make -j8
popd
- name: Run tests
if: ${{ inputs.runTests }}
run: |
pushd icu4c/source
make check
popd
- name: Build release ICU4C
run: |
pushd icu4c/source
make DESTDIR=${RELEASE_FOLDER}/icu releaseDist
popd
- name: Collect artifacts in one folder
run: |
# Get the OS version in VERSION_ID
source /etc/os-release
# Get the ICU version in artifact_version
source icu4j/releases_tools/shared.sh
# Convert 76.1 to 76_1
underscore_version=$(echo $artifact_version | sed 's/\./_/g')
pushd ${RELEASE_FOLDER}
tar -czf icu4c-${underscore_version}-Fedora_Linux${VERSION_ID}-x64.tgz icu
rm -fr icu
popd
- name: Upload build results
uses: actions/upload-artifact@v4.3.6
with:
name: icu4c-fedora-binaries
path: ${{ env.RELEASE_FOLDER }}
retention-days: 3 # TBD if we want to keep them longer
overwrite: true
- name: Upload to release
if: ${{ inputs.gitReleaseTag && startsWith(inputs.gitReleaseTag, 'release-') }}
run: |
gh release upload ${{ inputs.gitReleaseTag }} ${RELEASE_FOLDER}/* --clobber --repo=${{ github.repository }}
env:
GH_TOKEN: ${{ github.token }}

View file

@ -0,0 +1,85 @@
name: Release - ICU4C artifacts on Ubuntu
on:
workflow_dispatch:
inputs:
runTests:
description: 'Run the tests.'
type: boolean
default: true
gitReleaseTag:
description: 'Release tag to upload to. Must start with "release-"'
type: string
env:
RELEASE_FOLDER: '${{ github.workspace }}/releaseDist'
jobs:
build:
runs-on: ubuntu-22.04 # Updated in BRS
environment: release-env
permissions:
contents: write # So that we can upload to release
steps:
- name: Install doxygen
run: |
sudo apt-get -y install doxygen
- name: Checkout and setup
uses: actions/checkout@v4
with:
lfs: true
- name: Config and build ICU4C proper
run: |
pushd icu4c/source
./runConfigureICU Linux/gcc
make -j8
popd
- name: Run tests
if: ${{ inputs.runTests }}
run: |
pushd icu4c/source
make check
popd
- name: Build release ICU4C
run: |
pushd icu4c/source
make dist
make DESTDIR=${RELEASE_FOLDER}/icu releaseDist
popd
- name: Collect artifacts in one folder
run: |
# Get the OS version in VERSION_ID
source /etc/os-release
# Get the ICU version in artifact_version
source icu4j/releases_tools/shared.sh
# Convert 77.1 to 77_1
underscore_version=$(echo $artifact_version | sed 's/\./_/g')
pushd ${RELEASE_FOLDER}
tar -czf icu4c-${underscore_version}-Ubuntu${VERSION_ID}-x64.tgz icu
rm -fr icu
popd
mv icu4c/source/dist/icu4c-77_1-d* ${RELEASE_FOLDER}
mv icu4c/source/dist/icu4c-77_1-src.* ${RELEASE_FOLDER}
- name: Upload build results
uses: actions/upload-artifact@v4.3.6
with:
name: icu4c-ubuntu-binaries
path: ${{ env.RELEASE_FOLDER }}
retention-days: 3 # TBD if we want to keep them longer
overwrite: true
- name: Upload to release
if: ${{ inputs.gitReleaseTag && startsWith(inputs.gitReleaseTag, 'release-') }}
run: |
gh release upload ${{ inputs.gitReleaseTag }} ${RELEASE_FOLDER}/* --clobber --repo=${{ github.repository }}
env:
GH_TOKEN: ${{ github.token }}

View file

@ -0,0 +1,133 @@
# This workflow will build a package using Maven and then publish it to GitHub packages when a release is created
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#apache-maven-with-a-settings-path
name: Release - ICU4J publish to Maven Central
# For this to run you should define the follwing GitHub Secrets in the proper Environment.
# In Settings -- Environments -- release_env -- Environment secrets:
# * MAVEN_CENTRAL_USERNAME & MAVEN_CENTRAL_TOKEN:
# * Go to https://oss.sonatype.org and login with the `icu-robot` user
# * Top-right select "Profile"
# * Open the drop-down list showing "Summary" and select "User Token"
# * Click the "Access User Token" button
# * The `username` (first, shorter part of the token) goes in the `MAVEN_CENTRAL_USERNAME` secret
# * The `password` (second, longer part of the token) goes in the `MAVEN_CENTRAL_TOKEN` secret
# * MAVEN_GPG_PRIVATE_KEY: an ASCII dump of the GPG private signing key:
# `gpg --output icu_release_signing.asc --armor --export-secret-key <key_id>`
# * MAVEN_GPG_PASSPHRASE: the GPG password used to protect that key
on:
# To trigger the Env Test workflow manually, follow the instructions in
# https://docs.github.com/en/actions/managing-workflow-runs/manually-running-a-workflow
workflow_dispatch:
inputs:
runTests:
description: 'Run the tests.'
type: boolean
default: true
deployToMaven:
description: 'Deploy to Maven Central (using Sonatype OSSRH)'
type: boolean
default: false
gitReleaseTag:
description: 'Release tag to upload to. Must start with "release-"'
type: string
env:
SHARED_MVN_ARGS: '--no-transfer-progress --show-version --batch-mode'
RELEASE_FOLDER: '${{ github.workspace }}/releaseDist'
jobs:
publish:
runs-on: ubuntu-22.04 # Updated in BRS
environment: release-env
permissions:
contents: write # So that we can upload to release
steps:
- name: Checkout repo files
uses: actions/checkout@v4.1.7
with:
lfs: true
- name: Set up JDK
uses: actions/setup-java@v4.2.2
with:
java-version: '11'
distribution: 'temurin'
server-id: icu4j-maven-repo # Value of the distributionManagement/repository/id field of the pom.xml
server-username: MAVEN_USERNAME # env variable for username in deploy
server-password: MAVEN_CENTRAL_TOKEN # env variable for token in deploy
gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} # Value of the GPG private key to import
gpg-passphrase: MAVEN_GPG_PASSPHRASE # env variable for GPG private key passphrase
settings-path: ${{ github.workspace }} # location for the settings.xml file
- name: Run tests
if: ${{ inputs.runTests }}
run: mvn install --file icu4j ${SHARED_MVN_ARGS} --errors --fail-at-end
- name: Build javadoc taglets
run: |
# Really important to do this first because we need `tools/build` for the javadoc applets
mvn install --file icu4j/tools/build \
${SHARED_MVN_ARGS} \
-DskipTests -DskipITs
- name: Build and deploy to Maven Central
run: |
if [ "${{ inputs.deployToMaven }}" != "true" ]; then
echo Deploy to local folder
# Run the deploy, but do it to a local folder, not to Sonatype / Maven Central
export MAVEN_LOCAL='-DaltDeploymentRepository=tempid::file:./local-deploy-folder'
else
echo Deploy to Maven Central using Sonatype OSSRH
fi
mvn deploy --file icu4j \
${SHARED_MVN_ARGS} ${MAVEN_LOCAL} \
--settings $GITHUB_WORKSPACE/settings.xml \
--errors --fail-at-end -DdeployAtEnd=true \
-DskipTests -DskipITs \
-P with_sources,with_javadoc,with_signature
env:
MAVEN_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
MAVEN_CENTRAL_TOKEN: ${{ secrets.MAVEN_CENTRAL_TOKEN }}
MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
# These are files that will end in the "Release" section of the GitHub repo.
# So the jar files published in GitHub are binary identical to the ones in Maven Central.
- name: Prepare release folder
run: |
pushd icu4j
ICU_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)
# Copy the artifacts (with sources and javdoc .jar files) to the release folder
mvn dependency:copy \
${SHARED_MVN_ARGS} \
-DskipTests -DskipITs \
-Drelease.directory=${RELEASE_FOLDER} \
-P release_files
# Build the full javadoc to be posted on the public site
mvn site \
${SHARED_MVN_ARGS} \
-DskipITs -DskipTests \
-P with_full_javadoc
# Archive the full doc in a jar. Should also be posted to the web as official doc.
jar -Mcf ${RELEASE_FOLDER}/icu4j-${ICU_VERSION}-fulljavadoc.jar \
-C target/site/apidocs/ .
popd # out of icu4j
- name: Upload build results
uses: actions/upload-artifact@v4.3.6
with:
name: icu4j-binaries
path: ${{ env.RELEASE_FOLDER }}
retention-days: 3 # TBD if we want to keep them longer
overwrite: true
- name: Upload to release
if: ${{ inputs.gitReleaseTag && startsWith(inputs.gitReleaseTag, 'release-') }}
run: |
gh release upload ${{ inputs.gitReleaseTag }} ${RELEASE_FOLDER}/* --clobber --repo=${{ github.repository }}
env:
GH_TOKEN: ${{ github.token }}

View file

@ -20,7 +20,7 @@ permissions: read-all
jobs:
analysis:
name: Scorecard analysis
runs-on: ubuntu-latest
runs-on: ubuntu-22.04 # Updated in BRS
permissions:
# Needed to upload the results to code-scanning dashboard.
security-events: write
@ -34,7 +34,7 @@ jobs:
persist-credentials: false
- name: "Run analysis"
uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1
uses: ossf/scorecard-action@f49aabe0b5af0936a0987cfb85d86b75731b0186 # v2.4.1
with:
results_file: results.sarif
results_format: sarif
@ -51,7 +51,7 @@ jobs:
# Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
# format to the repository Actions tab.
- name: "Upload artifact"
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
with:
name: SARIF file
path: results.sarif
@ -59,6 +59,6 @@ jobs:
# Upload the results to GitHub's code scanning dashboard.
- name: "Upload to code-scanning"
uses: github/codeql-action/upload-sarif@05963f47d870e2cb19a537396c1f668a348c7d8f # v3.24.8
uses: github/codeql-action/upload-sarif@83923549f688e42b34d0b90ee94725f7c30532fc # v2.25.15
with:
sarif_file: results.sarif

37
.github/workflows/wait-for-checks.yml vendored Normal file
View file

@ -0,0 +1,37 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
#
# GitHub Actions workflow to ensure all required checks pass when they are attempted.
# In other words, many checks are conditionally run, so use this workflow as a workaround
# to a limitation in Github Actions in how required checks are enforced. Instead of
# Github's naive behavior currently, this workflow only asserts that status=passing on
# checks when they are run.
name: Wait for Required Checks
on:
pull_request:
branches: '**'
jobs:
enforce-all-checks:
runs-on: ubuntu-22.04 # Updated in BRS
permissions:
checks: read
steps:
- name: Wait for Triggered Required GH Checks
uses: poseidon/wait-for-status-checks@899c768d191b56eef585c18f8558da19e1f3e707 # v0.6.0
with:
token: ${{ secrets.GITHUB_TOKEN }}
# This regex matches everything since almost all (if not all) CI checks are required.
match_pattern: ".*"
# For Azure Pipelines, each pipeline displays a check that represents the complete success of the pipeline.
# It won't pass until all of the pipeline's checks pass.
# For the ICU4J and ICU4C pipelines, this is called `CI-ICU4J` and `CI-ICU4C`.
# These checks will return a "neutral" status, which this GH Action interprets as a failure.
# ClusterFuzzLite/CIFuzz appears to be spawned after a CIFuzz job finishes, but its status of
# "neutral" is interpreted by this action as a failure.
# Since the jobs are superfluous, they can be ignored.
ignore: "CI-ICU4C,CI-ICU4J,ClusterFuzzLite/CIFuzz"
# Wait for 2 minutes before this action begins its work by polling Github for job/check status
delay: 120s

1
.gitignore vendored
View file

@ -80,6 +80,7 @@ pkgdata.inc
pkgdataMakefile
rules.mk
.DS_Store
.flattened-pom.xml
!icu4c/source/samples/csdet/Makefile

View file

@ -80,10 +80,10 @@ We meet once a week by phone. See the [agenda & meeting minutes][meetings].
## Setup & Workflow
- [Source Code Access][repository]
- [git for ICU Developers][git4icu]
- [Tips for developers][tips]
- [Eclipse and other setup][setup]
- [Setup for Contributors][setup]
- [Source Code Access][repository]
- [Tips for C++ Contributors][tips]
- [Submitting ICU Bugs and Feature Requests][bugs]
- [ICU Ticket Life cycle][ticket-lifecycle]
@ -111,7 +111,7 @@ The project is released under [LICENSE](./LICENSE).
[contacts]: https://icu.unicode.org/contacts
[copyright]: http://www.unicode.org/copyright.html
[design]: docs/userguide/icu/design.md
[git4icu]: https://icu.unicode.org/repository/gitdev
[git4icu]: https://unicode-org.github.io/icu/userguide/dev/gitdev
[howtouse]: docs/userguide/icu/howtouseicu.md
[icu4c-api]: https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/
[icu4j-api]: https://unicode-org.github.io/icu-docs/apidoc/released/icu4j/
@ -121,12 +121,12 @@ The project is released under [LICENSE](./LICENSE).
[osi-Unicode-License-3.0]: https://opensource.org/license/unicode-license-v3/
[policies]: https://www.unicode.org/policies/licensing_policy.html
[proposal-template]: https://icu.unicode.org/processes/proposal-template
[repository]: https://icu.unicode.org/repository
[setup]: https://icu.unicode.org/setup
[repository]: https://unicode-org.github.io/icu/devsetup/source/
[setup]: https://unicode-org.github.io/icu/devsetup/
[sign-cla]: https://cla-assistant.io/unicode-org/.github
[signing]: https://www.unicode.org/policies/licensing_policy.html#signing
[ticket-lifecycle]: https://icu.unicode.org/processes/ticket-lifecycle
[tips]: https://icu.unicode.org/repository/tips
[tips]: https://unicode-org.github.io/icu/devsetup/cpp/
[unicode-announcement]: http://blog.unicode.org/2016/05/icu-joins-unicode-consortium.html
[unicode-corporate-clas]: https://www.unicode.org/policies/corporate-cla-list/
[unicode-license]: https://www.unicode.org/license.txt

33
KEYS
View file

@ -1312,3 +1312,36 @@ buAuLkKKI35T4Lz2U41GMVIMZ7drlhbfDGugk1qT1cXJPZbPnHt+uFNUY0pTJaf3
WapxBp2/lKhgsIE=
=ZWln
-----END PGP PUBLIC KEY BLOCK-----
pub ed25519 2024-08-19 [SC] [expires: 2027-08-19]
E52F07877A5805F9AF4AB0ACD46C5610D06E7001
uid [ultimate] ICU Release Robot <icu-robot@unicode.org>
sig 3 D46C5610D06E7001 2024-08-19 ICU Release Robot <icu-robot@unicode.org>
sig 3 9B432B27D1BA20D7 2024-10-01 Fredrik Roubert <fredrik@roubert.name>
sub cv25519 2024-08-19 [E] [expires: 2027-08-19]
sig D46C5610D06E7001 2024-08-19 ICU Release Robot <icu-robot@unicode.org>
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZsO4fRYJKwYBBAHaRw8BAQdAcxaiyqFbaECpSz7mhsXzopzN9Cxwv80WlWGN
gM3qpOi0KUlDVSBSZWxlYXNlIFJvYm90IDxpY3Utcm9ib3RAdW5pY29kZS5vcmc+
iJkEExYKAEEWIQTlLweHelgF+a9KsKzUbFYQ0G5wAQUCZsO4fQIbAwUJBaOagAUL
CQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRDUbFYQ0G5wAQOWAQDs628TYI+F
oTaJ1jzqC3ObL6we4tmrW7yHL1KFR5xrhwD/ZioLjdrIUQZhcjV9rNt7mYZm/Ttl
hn06bx06eyjf0QyJAjMEEwEIAB0WIQT/qRKaGA12W3pb6hybQysn0bog1wUCZvwt
VgAKCRCbQysn0bog11wED/0dUw/riFIixjNRAoi+beQ1f42dG/60xm7qquZ4kE3n
KysN773YgE1Gl8wPsFBbAAznO++fJ2ONjTks4QNOV0MB5Rgv+LwK+5oOKDRA9LxE
QRCRYtFpErbCirIn/EGVJJCCbF+SoUY8rJL+PTfzHGDkJGK0lQIA49rdWjV9PW06
4FRufzNrg4jNMCsJ5i67mjSb267C7I2mcfM3xX2nqZdOFW+wdctm9fvAWpIMQEQ5
6J0wIQxwtF3GulKqr/7EV0LSB0Is0E4BBjwROMFiSa53Va/lcfZaQ7nJ8flsAfkO
gGmvGjM5VH1kO2hnhm5ps5x/fIqSbw7X2nYsUXjbL6YKHbUsbV1ybpS5XCnMcTyx
t5zmWkfZNLZk4+Qh/td6MyW7OmycY2GazRpMA28pX6gQYFBcSoXHNFqIyXU7wFJp
BmDqe8gbi7FIlewwS+XP5dWfNvP5EqfztO7p8hxB2O1ZIYxMKerr0Q6rvY9/fEL5
fd7OMdK5OkQWASF7NjDFG9I50N4W/1+1jUHytp6bBtjjdnebp4a8gidP88HeGidk
2ONV9Yf0hOZUpRfMEFxpLxd9Ker928iZpopXOZ7AipFcXghWrReyTMljqXYvzNtd
qRdH3WmnNx4zw2K/JgAtOw9Domc09UzEFFHgAscUVXvsoVX4g8soZnBWomtlCfU0
/bg4BGbDuH0SCisGAQQBl1UBBQEBB0Djm2qMxtO+jO+uhT5nScClgbSvdmWAjbt9
RIQh60+4QgMBCAeIfgQYFgoAJhYhBOUvB4d6WAX5r0qwrNRsVhDQbnABBQJmw7h9
AhsMBQkFo5qAAAoJENRsVhDQbnABkbUA/ib52SlXmDcBPsvCz+VQOsqt1OvmeioS
NSbBQ0KK5M66AQCs7zuWUQQhptmeB2l7sP528nsFv4FJfZ/McqauwTq7Bg==
=BHrV
-----END PGP PUBLIC KEY BLOCK-----

32
LICENSE
View file

@ -2,7 +2,7 @@ UNICODE LICENSE V3
COPYRIGHT AND PERMISSION NOTICE
Copyright © 2016-2024 Unicode, Inc.
Copyright © 2016-2025 Unicode, Inc.
NOTICE TO USER: Carefully read the following legal agreement. BY
DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR
@ -433,6 +433,34 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
----------------------------------------------------------------------
JSON parsing library (nlohmann/json)
File: vendor/json/upstream/single_include/nlohmann/json.hpp (only for ICU4C)
MIT License
Copyright (c) 2013-2022 Niels Lohmann
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
----------------------------------------------------------------------
File: aclocal.m4 (only for ICU4C)
Section: pkg.m4 - Macros to locate and utilise pkg-config.
@ -473,7 +501,7 @@ File: config.guess (only for ICU4C)
This file is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful, but

View file

@ -10,19 +10,14 @@ The ICU project is under the stewardship of [The Unicode Consortium](https://www
![ICU Logo](./tools/images/iculogo_64.png)
### 🔴🔴🔴 Special Notice About Branch Renaming 🔴🔴🔴
Around March 24-25, 2021 we renamed the `master` branch to `main`. You may need to rename your branch in your local git repo and change your normal git command to reflect this change. See also https://github.com/github/renaming
### Build Status (`main` branch)
Build | Status
------|-------
GitHub Actions (ICU4C) | [![GHA ICU4C](https://github.com/unicode-org/icu/workflows/GHA%20ICU4C/badge.svg)](https://github.com/unicode-org/icu/actions?query=workflow%3A%22GHA+ICU4C%22+branch%3Amain)
GitHub Actions (ICU4J) | [![GHA ICU4J](https://github.com/unicode-org/icu/workflows/GHA%20ICU4J/badge.svg)](https://github.com/unicode-org/icu/actions?query=workflow%3A%22GHA+ICU4J%22+branch%3Amain)
Azure Pipelines (ICU4C) | [![Build Status](https://dev.azure.com/ms/icu/_apis/build/status/unicode-org/CI?branchName=main)](https://dev.azure.com/ms/icu/_build/latest?definitionId=360&branchName=main)
Azure Pipelines (ICU4J) | [![Build Status](https://dev.azure.com/ms/icu/_apis/build/status%2Funicode-org%2FCI-ICU4J?branchName=main)](https://dev.azure.com/ms/icu/_build/latest?definitionId=631&branchName=main)
Azure Pipelines (Exhaustive Tests) | [![Build Status](https://dev.azure.com/ms/icu/_apis/build/status/unicode-org/CI-Exhaustive-Main?branchName=main)](https://dev.azure.com/ms/icu/_build/latest?definitionId=361&branchName=main)
Github Actions (Valgrind) | [![GHA CI Valgrind]](https://github.com/unicode-org/icu/workflows/GHA%20CI%20Valgrind/badge.svg)](https://github.com/unicode-org/icu/actions/workflows/icu_valgrind.yml?query=workflow%3A%22GHA+CI%22+branch%3Amain)
GitHub Actions (Valgrind) | [![GHA CI Valgrind](https://github.com/unicode-org/icu/workflows/GHA%20CI%20Valgrind/badge.svg)](https://github.com/unicode-org/icu/actions/workflows/icu_valgrind.yml?query=workflow%3A%22GHA+CI%22+branch%3Amain)
Exhaustive Tests | [![Exhaustive Tests for ICU](https://github.com/unicode-org/icu/actions/workflows/icu_exhaustive_tests.yml/badge.svg?branch=main)](https://github.com/unicode-org/icu/actions/workflows/icu_exhaustive_tests.yml?query=branch%3Amain)
Fuzzing | [![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/icu.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:icu)
OpenSSF Scorecard | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/unicode-org/icu/badge)](https://securityscorecards.dev/viewer/?uri=github.com/unicode-org/icu)
@ -39,7 +34,6 @@ OpenSSF Scorecard | [![OpenSSF Scorecard](https://api.securityscorecards.dev/pro
Copyright © 2016-2024 Unicode, Inc. Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the United States and other countries.
The project is released under [LICENSE](./LICENSE).
A CLA is required to contribute to this project - please refer to the [CONTRIBUTING.md](./CONTRIBUTING.md) file (or start a Pull Request) for more information.
The contents of this repository are governed by the Unicode [Terms of Use](https://www.unicode.org/copyright.html) and are released under [LICENSE](./LICENSE).

View file

@ -109,16 +109,23 @@ Per starter that combines forward, old and new data stores a linear, sorted list
* Canonical ordering requires ccc data.
* Composition only combines the most recent starter with one other character, if such a mapping is defined. It only ever combines one pair into one composite per step.
* Every composition is the reverse of a corresponding decomposition. That is, a decomposition can either be a one-way mapping (from one code point to a sequence of one or more others but not back from that sequence to the original), or it can be a two-way mapping (from one code point to a pair of others, and back).
* Note: Custom mappings may also map some characters away, that is, to an empty string. The ICU 4.2 implementation is not prepared to handle such a case because it does not occur in standard Unicode normalization. This will need to be supported for custom tables.
* Note: Unicode NFKC\_Casefold and UTS #46 map each Default\_Ignorable\_Code\_Point to an empty string.
* Note: Mappings may also map some characters away, that is, to an empty string. The ICU 4.2 implementation was not prepared to handle such a case.
This needs to be supported for custom tables.
For example, Unicode NFKC\_Casefold and UTS #46 map each Default\_Ignorable\_Code\_Point to an empty string.
* A starter is defined as a character with ccc=0.
* Only a starter can combine-forward, but most starters don't. (The set of compositions/2-way mappings in standard Unicode normalization increases only slowly.)
* A composite (result of combining a pair of characters) must have ccc=0, or else the result of composition may not be in canonical order because there is not another reordering step.
* A composite can combine-forward. The composition algorithm tries to combine the new composite with following characters. (For example, base characters with two diacritics, and Hangul LVT.)
* The ICU implementation recomposes starting from a fully decomposed sequence. Therefore, the lookup value needs to indicate combines-forward only for characters that do not have a mapping. The composition table result then indicates whether a composite combines-forward, and the index to the combined mapping+composition data is then found via the index from the composite's lookup result.
* ICU 49 composePair() needs to know whether the first character combines forward even if it is a composite. formatVersion 2 separates the YesNo range into two parts accordingly, adding the yesNoMappingsOnly threshold.
* A composite cannot combine-back because the composition algorithm does not try to combine an earlier starter with the new composite.
* The algorithm allows for a character to both combine-back and combine-forward, although this seems like a strange situation and it does not occur in Unicode 5.2..10.
* A composite itself cannot combine-back because the composition algorithm does not try to combine
an earlier starter with the new composite.
However, when a character has a two-way mapping which starts with a combine-back character,
then the composite needs to be marked as combine-back (NF*C_QC=Maybe)
so that normalization and the quick check work properly.
Such characters occur in Unicode 16 for the first time.
* The algorithm allows for a character to both combine-back and combine-forward.
Such characters occur in Unicode 16 for the first time.
* Hangul syllables are algorithmically decomposed into Jamos, and algorithmically recomposed from them. The actual mappings are not stored in the table.
* In the ICU implementation, recomposition is done only on a fully decomposed sequence. Composition then sees only YesYes and MaybeYes characters which do not have mappings.
* A character that maps to an empty string (that is, one that is deleted during normalization) does not have normalization boundaries before or after it. Its FCD value would be the worst-case 0x1ff (lccc=1, tccc=0xff). (The standard Unicode normalization forms do not delete characters, but NFKC\_Casefold and UTS #46 do.)
@ -143,16 +150,22 @@ A simple mapping to one code point can be stored directly in the lookup value, w
ICU does not allow tailoring of Hangul/Jamo mappings and compositions, except to make the relevant characters completely inert.
MaybeNo is both forbidden and irrelevant:
MaybeNo is possible, and Unicode 16 adds the first such characters.
* If a character has a one-way mapping, it has NoNo quick check values.
* If it has a two-way mapping, then it is a composite, but the Unicode composition would not try to combine it with a preceding character.
* Composition sees NFD, so it sees no characters with mappings.
* However, if a two-way mapping starts with a "Maybe" character (combines-back),
then the composite must also be marked as combines-back, that is, MaybeNo rather than YesNo.
* The character and some surrounding ones need to be decomposed,
and composition may combine the first character in the mapping with a previous starter,
in which case the original composite would not occur in the result.
* Forbidden: If it has a one-way mapping, it has NoNo quick check values. If it has a two-way mapping, then it is a composite, but the Unicode composition would not try to combine it with a preceding character.
* Irrelevant: Composition sees NFD, so it sees no characters with mappings. A combines-backward character would never combine with anything.
NoYes is impossible: If it has no mapping, it will occur in NFC.
A YesNo only ever decomposes into a YesYes+MaybeYes sequence or a YesNo+MaybeYes sequence. That is, a YesNo's decomposition (A=B+C) decomposes further if and only if the first (B) of its two components has a decomposition.
A YesNo always has ccc=lccc=0.
A YesNo or MaybeNo always has ccc=lccc=0.
Only a starter can combine-forward, therefore no character can have ccc≠0 and combine forward.
@ -160,11 +173,9 @@ A NoNo can have any of its components decompose further, but this is only visibl
NoNo with combine-forward is impossible: A one-way mapping prevents composition (which starts from NFD where there are no decomposable characters).
### Per-character lookup values, .nrm formatVersion 3
### Per-character lookup values, .nrm formatVersion 3+
Since ICU 60
Changes from version 2:
Changes from version 2 to 3 (ICU 60):
* 16-bit value bit 0 used for has-composition-boundary-after, ccc & indexes shifted left by 1.
* 16-bit values for delta mappings carry tccc data in bits 2..1.
@ -177,7 +188,16 @@ Changes from version 2:
* The extraData firstUnit bit 5 is no longer necessary (norm16 bit 0 used instead of firstUnit `MAPPING_NO_COMP_BOUNDARY_AFTER`), is reserved again, and always set to 0.
* A mapping to an empty string has explicit lccc=1 and tccc=255 values.
Possible combinations and their encoding:
Changes from version 3 to 4 (ICU 63):
Switch to UCPTrie=CodePointTrie. No more explicit mappings for surrogate code points.
Changes from version 4 to 5 (ICU 76):
Support for MaybeNo characters. Addition of two new ranges between "algorithmic NoNo" and MaybeYes,
with thresholds minMaybeNo and minMaybeNoCombinesFwd.
#### Possible combinations and their encoding
_The rows of the table, from bottom to top, are encoded with increasing 16-bit "norm16" values as noted in the last column. Per-row and per-row-group properties are determined via norm16 range checks._
@ -347,15 +367,45 @@ _The rows of the table, from bottom to top, are encoded with increasing 16-bit "
<br />
</td>
<td style="width:476px;height:31px">
Both combine-back &amp; combine-fwd: strange but allowed
<br />
Both combine-back &amp; combine-fwd
</td>
<td style="width:60px">none</td>
<td style="width:60px">U+1611E GURUNG KHEMA VOWEL SIGN AA</td>
<td style="width:456px;height:31px">
≥minMaybeYes which is 8-aligned
≥minMaybeYes
<br />
index into composition table
index into maybeData composition table
</td>
</tr>
<tr>
<td style="background-color:rgb(255,242,204);width:71px;height:31px">Maybe</td>
<td style="background-color:rgb(244,204,204);width:71px;height:47px">No</td>
<td style="width:52px;height:31px">0</td>
<td style="width:75px;height:31px">no</td>
<td style="width:74px;height:31px">yes</td>
<td style="width:476px;height:31px">
Has 2-way mapping, both combine-back &amp; combine-fwd
</td>
<td style="width:60px">U+16121 GURUNG KHEMA VOWEL SIGN U</td>
<td style="width:456px;height:31px">
≥minMaybeNoCombinesFwd
<br />
index into maybeData decomp+comp table
</td>
</tr>
<tr>
<td style="background-color:rgb(255,242,204);width:71px;height:31px">Maybe</td>
<td style="background-color:rgb(244,204,204);width:71px;height:47px">No</td>
<td style="width:52px;height:31px">0</td>
<td style="width:75px;height:31px">no</td>
<td style="width:74px;height:31px">no</td>
<td style="width:476px;height:31px">
Has 2-way mapping &amp; combine-back
</td>
<td style="width:60px">U+16126 GURUNG KHEMA VOWEL SIGN O</td>
<td style="width:456px;height:31px">
≥minMaybeNo which is 8-aligned
<br />
index into maybeData decomposition table
</td>
</tr>
<tr>
@ -384,9 +434,9 @@ _The rows of the table, from bottom to top, are encoded with increasing 16-bit "
</td>
<td style="width:60px">A</td>
<td style="width:456px;height:47px">
≥minNoNoDelta=minMaybeYes-((2*maxDelta+1)&lt;&lt;3)
≥minNoNoDelta=minMaybeNo-((2*maxDelta+1)&lt;&lt;3)
<br />
delta=0 is at minMaybeYes-((maxDelta-1)&lt;&lt;3); it must not be used
delta=0 is at minMaybeNo-((maxDelta-1)&lt;&lt;3); it must not be used
<br />
bits 2..1: tccc=0 or 1 or &gt;1
</td>
@ -1157,15 +1207,28 @@ The minYesNoMappingsOnly distinction was added in ICU 49, .nrm formatVersion 2.0
### Additional data indexed by the trie value
(**Implemented in ICU 4.4, .nrm formatVersion 1.0. Modified in ICU 49, .nrm formatVersion 2.0 and in ICU 60, .nrm formatVersion 3.0.**)
ICU | formatVersion
--- | -------------
4.4 | 1
49 | 2
60 | 3
63 | 4
76 | 5
"Extra data" per code point, if it has a mapping or if it combines-forward, is stored in 16-bit-unit arrays. The character's lookup value is an index into one of these arrays. It is probably handy to have two arrays, so that indexes can be allocated independently for the two ranges of 16-bit lookup values that are indexes into extra data.
"Extra data" per code point, if it has a mapping or if it combines-forward, is stored in a 16-bit-unit array with many per-character data sections. The character's lookup value, or part of its bits, is an index to one of these sections.
* One array with composition lists for MaybeYes characters which don't also have a mapping.
* Usually, MaybeYes characters don't have composition lists, so this array will usually be empty.
* One array with
* Composition lists for YesYes characters which don't also have a mapping
* Mappings and optional composition lists for YesNo characters which do have a mapping
* Composition lists for YesYes and MaybeYes characters which combine-forward but
don't also have a mapping
* Mappings and composition lists for YesNo and MaybeNo characters which have a two-way mapping
* Only mappings for characters which have a one-way mapping
In formatVersions 4 and below, the composition lists for MaybeYes characters were stored before
the data for other characters.
In formatVersion 5, the data for MaybeNo and MaybeYes characters is stored after
the data for other characters.
There is no data in these arrays corresponding to the gap between limitNoNo and minMaybeNo.
Threshold values like minYesNo depend on the mapping data.
@ -1176,7 +1239,8 @@ Mapping to an empty string is encoded as a regular mapping with length 0.
* formatVersion 3 stores explicit worst-case values lccc=1 and tccc=255.
* formatVersion 1 & 2 store ccc=lccc=tccc=0, and the worst-case values are computed at runtime.
If both a mapping and a composition list are stored for a character (only possible for YesNo), the mapping comes first.
If both a mapping and a composition list are stored for a character (for YesNo & MaybeNo),
the mapping comes first.
* In formatVersion 2+, the trie value thresholds indicate whether there is a composition list.
* In formatVersion 1, a bit in the first word indicates that there is a composition list.
@ -1225,9 +1289,9 @@ Optional composition list
* Second unit bits 15..6 contain the combining-back code point's bits 9..0
* The remaining second/third unit bits are the same as for the previous case
In the ICU implementation, it is ok to not store the ccc value directly in the lookup value for NoNo characters. When the quick check fails with YesNo, NoNo or MaybeYes, the surrounding sequence is decomposed, which does not use the original characters' ccc values. Composition then sees only YesYes and MaybeYes characters which do have their ccc values in the lookup value.
In the ICU implementation, it is ok to not store the ccc value directly in the lookup value for NoNo characters. When the quick check fails with YesNo, MaybeNo, NoNo or MaybeYes, the surrounding sequence is decomposed, which does not use the original characters' ccc values. Composition then sees only YesYes and MaybeYes characters which do have their ccc values in the lookup value.
A composite that combines-forward has quick check flags YesNo, has a mapping, has ccc=0 (it's a starter) and lccc=0 (it composes from a starter plus another character) and has a composition list (it combines-forward).
A composite that combines-forward has quick check flags YesNo or MaybeNo, has a mapping, has ccc=0 (it's a starter) and lccc=0 (it composes from a starter plus another character) and has a composition list (it combines-forward).
Old vs. new: The old composition data uses combine-forward and combine-back indexes stored in the extra data next to the mapping. In the new data structure, the combine-forward index is replaced by appending the composition list after the mapping, and the combine-back index is replaced by searching in the list for the back-combining code point itself.
@ -1337,4 +1401,4 @@ It should be easy to include the standard Unicode normalization ccc and composit
Another, simpler way is for gennorm2 to take a list of mapping table files, and to provide standard files like ccc.txt, compose.txt, nfd.txt, nfkd.txt and casefold.txt that could be combined (with or without additional custom tables) in various combinations into one binary data file. This would also allow for a character to have different mappings in different files, and the later mapping would override the earlier one. gennorm2 should be able to also output a .txt file with all of the combined data, except without recursively resolved mappings, to keep two-way mappings in the file valid for input. (**Done in ICU 4.4.** _Modification:_ The NFKC mappings cannot simply add to the NFC mappings because some characters with two-way NFC mappings have one-way NFKC mappings. Therefore, there are separate files that specify each normalization form's mappings.)
We should make it easy to move StringPrep mappings from the .spp files into normalization .txt/.nrm files. (**Not done** (yet).)
We should make it easy to move StringPrep mappings from the .spp files into normalization .txt/.nrm files. (**Not done** (yet).)

View file

@ -42,8 +42,8 @@ For example:
* `~/icu/mine/**src**`
* source tree including icu (ICU4C) & icu4j folders
* setup: mkdir + git clone your fork (see the [Linux Tips
subpage](linux.md)) + cd to here.
* setup: mkdir + git clone your fork (see the [Linux Tips subpage](linux.md)) + cd
to here.
* Use `git checkout <branch>` to switch between branches.
* Use `git checkout -b <newbranchname>` to create a new branch and switch
to it.

View file

@ -1,267 +0,0 @@
---
layout: default
title: Maven Setup for Java
grand_parent: Setup for Contributors
parent: Java Setup
---
<!--
© 2016 and later: Unicode, Inc. and others.
License & terms of use: http://www.unicode.org/copyright.html
-->
# Maven Setup for Java
{: .no_toc }
## Contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Maven is a standard build tool in the Java ecosystem with a very well-defined
preferred way to organize the directory structure and execute builds.
Thus, many IDEs for Java will have some level of support for Maven.
The command line invocation is still, of course, the standard of truth for the build.
## Installation
Install Maven from your OS package manager.
The minimum version is 3.2.5 as of ICU 74,
although this may change.
See the `<ICU>/icu4j/pom.xml` root POM file's maven-enforcer-plugin
for the current minimum version.
The Maven page lists [system requirements](https://maven.apache.org/download.cgi),
which includes a minimum of JDK 8 as of ICU 74.
## Maven multi-module projects
ICU4J's codebase is structured as a "multi-module" Maven project.
In other words, the Maven project is divided into submodules that have dependencies on each other.
Multi-module projects are not uncommon in Maven over the several years,
yet the support for them by Maven is not complete.
Commonly-found instructions to use Maven at the command line
are usually designed for simple "single-module" Maven projects.
In such cases, the command names correspond intuitively to their function:
`mvn test` for running unit tests, `mvn package` for creating jar files, etc.
However, multi-module projects have the tradeoff between time and complexity:
running `mvn test` at the root recompiles all the sources
even if a module's sources are all unchanged,
which takes longer than it otherwise could.
The alternative is to always instruct Maven to compile and locally cache the artifact
for each submodule,
which speeds up tasks by avoiding duplicate compilation and testing effort,
but also changes the distinct Maven commands
`mvn {test, integration-test, ...}`
all into
`mvn install`
that are instead differentiated by appropriate options.
The instructions in this page for command line usage will choose,
from the 2 alternatives above,
the option that consistently uses `mvn install` for all Maven tasks.
Note that this choice should not affect IDEs with well working native Maven support like IntelliJ and Eclipse.
See the "IDE Setup" section for more details on how IDEs handle Maven projects differently than
the standard command line style usage of Maven.
## IDE Setup
Users of IDEs should familiarize themselves with the information about how to use Maven at
the command line,
which also includes information about Maven builds.
> :point_right: **Note**: In most IDEs, whenever the Maven configurations change (`pom.xml` files),
you will need to refresh your IDE project using the IDE's Maven plugin/functionality.
Most IDEs represent user settings for different codebases via an IDE-specific notion
usually called "project" or "workspace".
The IDE's project/workspace is a separate construct from the Maven configurations for the codebase.
Therefore, creating a new project for an existing codebase is done by "importing" the codebase,
in which the IDE creates the project/workspace settings files.
If you pull updates to the upstream ICU codebase codebase that result in changes to Maven settings,
then the IDE behavior may be behind until you update your IDE project accordingly.
### IntelliJ
IntelliJ does a good job of understanding multi-module Maven projects,
including the non-standard configuration here.
It also recognizes the customized locations of source code files and test code files in the configuration here.
To import into IntelliJ:
1. In IntelliJ, open a new project.
a. Recent versions of IntelliJ provide a dialog box on startup to select a project. Click the "Open" button.)
2. Select the root `pom.xml` in ICU4J (ex: `<ICU>/icu4j/pom.xml`)
3. That's it. Note: IntelliJ will take a few minutes to do a one-time indexing of the new source code.
Navigating the source code files between main code and test code, and running tests individually or for an entire module,
work as they do normally in IntelliJ.
> :point_right: **Note**: Currently, Maven cannot build the entire project due to settings for `tools/utilities-for-cldr`. To work around this so that `Build > Build Project` works: in the "Project" toolbar, navigate to the `tools/utilities-for-cldr` folder, right click for the contextual menu, then `Maven > Ignore Projects`.
>
> When this workaround is no longer needed, the project can be reenabled by: `View > Tool Windows > Maven`, then expand "International Components for Unicode (ICU)", right click on `utilities-for-cldr`, then select `Unignore Projects`.
### Eclipse
[Eclipse's Maven plugin](https://eclipse.dev/m2e/)
works reasonably well and can support the import of a multi-module Maven project.
These instructions have not yet verified Eclipse's handling of the import of the ICU4J using a Maven build.
### VS Code
VS Code's support of Maven projects is not as robust as IntelliJ's when it comes to the non-standard file layout for sources and tests.
The Maven support comes from the standard Java extension (which depends on the standard Maven extension) from the extension marketplace.
Source and test code files are not recognized properly, and it is not clear how to execute the tests.
However, a workaround exists for those who want to use VS Code as their preferred editor and still execute commands to recompile or run tests.
The workaround relies on invoking the Maven commands in a shell, and using a VS Code extension to create shortcuts within the IDE to invoke those commands.
The extension is [Command Runner](https://marketplace.visualstudio.com/items?itemName=edonet.vscode-command-runner).
Next, create a VS Code workspace (File > Open Folder...) at the ICU4J root at `<ICU>/icu4j`.
Then edit your settings for your VS Code workspace for ICU4J (this is the file at `<ICU>/icu4j/.vscode/settings.json`)
by adding this section to the settings:
```jsonnet
{
//...
"command-runner.commands": {
// The following commands assume your VS Code workspace is rooted at `<ICU_ROOT>/icu4j`. If not,
// then adjust accordingly.
"core > all > test": "cd ${workspaceFolder}; mvn -am -pl main/core install",
"core > number > test": "cd ${workspaceFolder}; mvn -am -pl main/core test -Dtest=\"com/ibm/icu/dev/test/number/*,com/ibm/icu/dev/impl/number/*\" -Dsurefire.failIfNoSpecifiedTests=false",
"core > text > test": "cd ${workspaceFolder}; mvn -am -pl main/core test -Dtest=\"com.ibm.icu.dev.test.text.*\" -Dsurefire.failIfNoSpecifiedTests=false",
"charset > test": "cd ${workspaceFolder}; mvn -am -pl main/charset test",
"common_tests > integration test": "cd ${workspaceFolder}; mvn -am -pl main/localespi test",
}
//...
}
```
As the extension's documentation describes, there are multiple ways to open up the palette of command shortcuts.
One way is to hit Ctrl/Cmd+Shift+P, then type "Run Command", then hit enter.
Another way is to right-click the background of any editor pane.
After the palette appears, you can choose which Maven build target to execute.
## Usage at the command line
Maven divides its concept of a build into a "lifecycle" of a linear sequence of steps, called "phases".
These phases correspond to common good practice tasks of a project, and they have a predefined order.
Each phase can only begin if all of the previous phases have finished successfully.
The sequence of phases include ... `compile` ... `test` ... `package` ... `integration-test` ... `verify` ... `install` ... `deploy`.
In a simple Maven project, the phases also serve as default build targets.
However, as mentioned above,
ICU4J is structured as a multi-module Maven project.
The instructions here for command line Maven usage will take the approach of using the `install` target
for all tasks.
Options can be used to control whether tests are executed, and which ones.
### Testing
To only execute a command within a submodule of the project, from the root, use the `-am -pl <projectlist>` syntax like this:
```
mvn install -am -pl main/core
```
where `<projectlist>` is a comma-separated list of names of the subfolders which contain the submodule configuration pom.xml files.
If you want to run only a specific test(s), use the `-Dtest="<test>"` option, where `<test>` can be a test name, a class name / package prefix, or a comma-separate list of them.
#### Run unit tests
The `test` target will only run unit tests (excludes integration tests). Ex:
```
mvn install -am -pl main/core -DskipITs
```
#### Run all tests (integration and unit tests)
All tests (unit tests and integration tests) will run by default.
```
mvn install -am -pl main/core
```
#### Run a single test
```
mvn install -Dtest="ULocaleTest" -Dsurefire.failIfNoSpecifiedTests=false -DskipITs
```
or
```
mvn install -Dtest="com.ibm.icu.dev.test.util.ULocaleTest" -Dsurefire.failIfNoSpecifiedTests=false -DskipITs
```
#### Run a single method in a single test
```
mvn install -Dtest="ULocaleTest#TestGetAvailableByType" -Dsurefire.failIfNoSpecifiedTests=false -DskipITs
```
#### Run multiple tests
You can use regular expression patterns and comma-separate lists,
such as:
```
mvn install -Dtest="RBBI*" -Dsurefire.failIfNoSpecifiedTests=false
mvn install -Dtest="*Locale*" -Dsurefire.failIfNoSpecifiedTests=false
```
or
```
mvn install -Dtest="*Locale*,RBBI*" -Dsurefire.failIfNoSpecifiedTests=false
```
If you want to run tests according to the package structure of the classes,
then you should use the filesystem notation for the test files in the regular expression expansion.
Therefore, this syntax will not work:
`mvn install -Dtest="com.ibm.icu.dev.test.util.*" -Dsurefire.failIfNoSpecifiedTests=false`.
Instead, you want to use this syntax:
```
mvn install -Dtest="com/ibm/icu/dev/test/util/*" -Dsurefire.failIfNoSpecifiedTests=false
```
#### Run in exhaustive mode
Some tests in ICU are configured to run only when "exhaustive mode" is enabled.
Exhaustive mode enables long running tests that would otherwise not run,
or would run far fewer iterations.
Exhaustive mode is configured through the system property `ICU.exhaustive`.
`ICU.exhaustive` takes an integer value from 0 to 10 such that,
when greater than 5,
will trigger some tests to run in exhaustive mode.
See `TestFmwk.java` for more details,
and `ExhaustiveNumberTest.java` for an example of a test using it.
```
mvn install -DICU.exhaustive=10
```
#### Skip tests
If you want to skip tests, add the options:
```
-DskipTests -DskipITs
```
The first option specifies skipping unit tests,
and the second option specifies skipping integration tests.
## More info on Maven
To learn more about the details of Maven not covered above,
start by reading the [*Maven by Example* book](https://books.sonatype.com/mvnex-book/reference/index.html),
which gives an overview of Maven.
For more details on a specific topic,
refer to the [*Maven: Complete Reference* book](https://books.sonatype.com/mvnref-book/reference/index.html).

View file

@ -0,0 +1,302 @@
---
layout: default
title: Maven Setup for Java
grand_parent: Setup for Contributors
parent: Java Setup
---
<!--
© 2016 and later: Unicode, Inc. and others.
License & terms of use: http://www.unicode.org/copyright.html
-->
# Maven Setup for Java
{: .no_toc }
## Contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Maven is a standard build tool in the Java ecosystem with a very well-defined
preferred way to organize the directory structure and execute builds.
Thus, many IDEs for Java will have some level of support for Maven.
The command line invocation is still, of course, the standard of truth for the build.
## Installation
Install Maven from your OS package manager.
The minimum version is 3.2.5 as of ICU 74,
although this may change.
See the `<ICU>/icu4j/pom.xml` root POM file's maven-enforcer-plugin
for the current minimum version.
The Maven page lists [system requirements](https://maven.apache.org/download.cgi),
which includes a minimum of JDK 8 as of ICU 74.
## Maven multi-module projects
ICU4J's codebase is structured as a "multi-module" Maven project.
In other words, the Maven project is divided into submodules that have dependencies on each other.
Multi-module projects are not uncommon in Maven over the several years,
yet the support for them by Maven is not complete.
Commonly-found instructions to use Maven at the command line
are usually designed for simple "single-module" Maven projects.
In such cases, the command names correspond intuitively to their function:
`mvn test` for running unit tests, `mvn package` for creating jar files, etc.
However, multi-module projects have the tradeoff between time and complexity:
running `mvn test` at the root recompiles all the sources
even if a module's sources are all unchanged,
which takes longer than it otherwise could.
The alternative is to always instruct Maven to compile and locally cache the artifact
for each submodule,
which speeds up tasks by avoiding duplicate compilation and testing effort,
but also changes the distinct Maven commands
`mvn {test, integration-test, ...}`
all into
`mvn install`
that are instead differentiated by appropriate options.
The instructions in this page for command line usage will choose,
from the 2 alternatives above,
the option that consistently uses `mvn install` for all Maven tasks.
Note that this choice should not affect IDEs with well working native Maven support like IntelliJ and Eclipse.
See the "IDE Setup" section for more details on how IDEs handle Maven projects differently than
the standard command line style usage of Maven.
## IDE Setup
Users of IDEs should familiarize themselves with the information about how to use Maven at
the command line,
which also includes information about Maven builds.
> :point_right: **Note**: In most IDEs, whenever the Maven configurations change (`pom.xml` files),
you will need to refresh your IDE project using the IDE's Maven plugin/functionality.
Most IDEs represent user settings for different codebases via an IDE-specific notion
usually called "project" or "workspace".
The IDE's project/workspace is a separate construct from the Maven configurations for the codebase.
Therefore, creating a new project for an existing codebase is done by "importing" the codebase,
in which the IDE creates the project/workspace settings files.
If you pull updates to the upstream ICU codebase codebase that result in changes to Maven settings,
then the IDE behavior may be behind until you update your IDE project accordingly.
### IntelliJ
IntelliJ does a good job of understanding multi-module Maven projects,
including the non-standard configuration here.
It also recognizes the customized locations of source code files and test code files in the configuration here.
To import into IntelliJ:
1. In IntelliJ, open a new project.
a. Recent versions of IntelliJ provide a dialog box on startup to select a project. Click the "Open" button.)
2. Select the root `pom.xml` in ICU4J (ex: `<ICU>/icu4j/pom.xml`)
3. That's it. Note: IntelliJ will take a few minutes to do a one-time indexing of the new source code.
Navigating the source code files between main code and test code, and running tests individually or for an entire module,
work as they do normally in IntelliJ.
### Eclipse
[Eclipse's Maven plugin](https://eclipse.dev/m2e/)
works reasonably well and can support the import of a multi-module Maven project.
These instructions have not yet verified Eclipse's handling of the import of the ICU4J using a Maven build.
### VS Code
VS Code's support of Maven projects has not been as robust as IntelliJ's when it comes to multi-module Maven projects such as what ICU4J has.
This situation has gotten better recently, and workable solutions are documented below..
The Maven extension that is mostly likely to top search result comes from [the Extension Pack for Java extension](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack) that is maintained by the maintainers of VS Code itself. However, this extension and its dependencies do not work together satisfactorily for the ICU4J codebase.
Source and test code files are not recognized properly, and it is not clear how to execute the tests.
This may improve in the future.
For now (Jan 2025), there are a couple of different options for running Maven build commands for ICU4J in VS Code.
#### Install the Java extension from Oracle
Oracle's [Java extension for VS Code](https://marketplace.visualstudio.com/items?itemName=Oracle.oracle-java) includes support for Maven projects, including multi-module Maven projects.
You can view the Java extension's view of the Maven project through the "Projects" tab of the workspace explorer accordion widget.
The project will display the list of Maven sub-modules.
Within a submodule, click on "Source Pakcages" to view the Java class packages.
From there, you can navigate to specific classes according to the package structure.
> :point_right: **Note**: This extension will use the version of Java according to the location of Java that you have defined in your `JAVA_HOME` system environment variable.
> :point_right: **Note**: You will also need the Maven command (`mvn`) in your `PATH` system environment variable for the extension to work.
![](open-sources-uniset.png)
To run all of the tests in a Maven submodule, right-click on the module and selecting "Test Project".
![](run-tests-main-core.png)
To run all of the tests in a single test class, open the test class, and click on the triangular play button on level with the class declaration line. You can right click on that button to run in debug mode and enable other options.
Every individual test will have a similar button on level with the test signature to run only that one test.
![](test-class-run-all-tests.png)
The output for a test run invocation will appear in the Debug Console tab of the bottom panel.
> :point_right: **Note**: In the Test Results tab, if the the formatting of the output that is provided per test is not formatted correctly, it may be related to formatting in the Maven CLI command's output (ex: allowing ANSI color code escape characters, which some system's Maven installtions enable by default).
![](test-class-run-tests-result.png)
#### Run Maven shell commands with a command palette
If none of the Java/Maven extensions for VS Code work with your instance of VS Code,
there is still a way to execute commands to recompile or run tests.
The workaround relies on invoking the Maven commands in a shell, and using a VS Code extension to create shortcuts within the IDE to invoke those commands.
The extension is [Command Runner](https://marketplace.visualstudio.com/items?itemName=edonet.vscode-command-runner).
Next, create a VS Code workspace (File > Open Folder...) at the ICU4J root at `<ICU>/icu4j`.
Then edit your settings for your VS Code workspace for ICU4J (this is the file at `<ICU>/icu4j/.vscode/settings.json`)
by adding this section to the settings:
```jsonnet
{
//...
"command-runner.commands": {
// The following commands assume your VS Code workspace is rooted at `<ICU_ROOT>/icu4j`. If not,
// then adjust accordingly.
"core > all > test": "cd ${workspaceFolder}; mvn -am -pl main/core install",
"core > number > test": "cd ${workspaceFolder}; mvn -am -pl main/core test -Dtest=\"com/ibm/icu/dev/test/number/*,com/ibm/icu/dev/impl/number/*\" -Dsurefire.failIfNoSpecifiedTests=false",
"core > text > test": "cd ${workspaceFolder}; mvn -am -pl main/core test -Dtest=\"com.ibm.icu.dev.test.text.*\" -Dsurefire.failIfNoSpecifiedTests=false",
"charset > test": "cd ${workspaceFolder}; mvn -am -pl main/charset test",
"common_tests > integration test": "cd ${workspaceFolder}; mvn -am -pl main/localespi test",
}
//...
}
```
As the extension's documentation describes, there are multiple ways to open up the palette of command shortcuts.
One way is to hit Ctrl/Cmd+Shift+P, then type "Run Command", then hit enter.
Another way is to right-click the background of any editor pane.
After the palette appears, you can choose which Maven build target to execute.
## Usage at the command line
Maven divides its concept of a build into a "lifecycle" of a linear sequence of steps, called "phases".
These phases correspond to common good practice tasks of a project, and they have a predefined order.
Each phase can only begin if all of the previous phases have finished successfully.
The sequence of phases include ... `compile` ... `test` ... `package` ... `integration-test` ... `verify` ... `install` ... `deploy`.
In a simple Maven project, the phases also serve as default build targets.
However, as mentioned above,
ICU4J is structured as a multi-module Maven project.
The instructions here for command line Maven usage will take the approach of using the `install` target
for all tasks.
Options can be used to control whether tests are executed, and which ones.
### Testing
To only execute a command within a submodule of the project, from the root, use the `-am -pl <projectlist>` syntax like this:
```
mvn install -am -pl main/core
```
where `<projectlist>` is a comma-separated list of names of the subfolders which contain the submodule configuration pom.xml files.
If you want to run only a specific test(s), use the `-Dtest="<test>"` option, where `<test>` can be a test name, a class name / package prefix, or a comma-separate list of them.
#### Run unit tests
The `test` target will only run unit tests (excludes integration tests). Ex:
```
mvn install -am -pl main/core -DskipITs
```
#### Run all tests (integration and unit tests)
All tests (unit tests and integration tests) will run by default.
```
mvn install -am -pl main/core
```
#### Run a single test
```
mvn install -Dtest="ULocaleTest" -Dsurefire.failIfNoSpecifiedTests=false -DskipITs
```
or
```
mvn install -Dtest="com.ibm.icu.dev.test.util.ULocaleTest" -Dsurefire.failIfNoSpecifiedTests=false -DskipITs
```
#### Run a single method in a single test
```
mvn install -Dtest="ULocaleTest#TestGetAvailableByType" -Dsurefire.failIfNoSpecifiedTests=false -DskipITs
```
#### Run multiple tests
You can use regular expression patterns and comma-separate lists,
such as:
```
mvn install -Dtest="RBBI*" -Dsurefire.failIfNoSpecifiedTests=false
mvn install -Dtest="*Locale*" -Dsurefire.failIfNoSpecifiedTests=false
```
or
```
mvn install -Dtest="*Locale*,RBBI*" -Dsurefire.failIfNoSpecifiedTests=false
```
If you want to run tests according to the package structure of the classes,
then you should use the filesystem notation for the test files in the regular expression expansion.
Therefore, this syntax will not work:
`mvn install -Dtest="com.ibm.icu.dev.test.util.*" -Dsurefire.failIfNoSpecifiedTests=false`.
Instead, you want to use this syntax:
```
mvn install -Dtest="com/ibm/icu/dev/test/util/*" -Dsurefire.failIfNoSpecifiedTests=false
```
#### Run in exhaustive mode
Some tests in ICU are configured to run only when "exhaustive mode" is enabled.
Exhaustive mode enables long running tests that would otherwise not run,
or would run far fewer iterations.
Exhaustive mode is configured through the system property `ICU.exhaustive`.
`ICU.exhaustive` takes an integer value from 0 to 10 such that,
when greater than 5,
will trigger some tests to run in exhaustive mode.
See `TestFmwk.java` for more details,
and `ExhaustiveNumberTest.java` for an example of a test using it.
```
mvn install -DICU.exhaustive=10
```
#### Skip tests
If you want to skip tests, add the options:
```
-DskipTests -DskipITs
```
The first option specifies skipping unit tests,
and the second option specifies skipping integration tests.
## More info on Maven
To learn more about the details of Maven not covered above,
start by reading the [*Maven by Example* book](https://books.sonatype.com/mvnex-book/reference/index.html),
which gives an overview of Maven.
For more details on a specific topic,
refer to the [*Maven: Complete Reference* book](https://books.sonatype.com/mvnref-book/reference/index.html).

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 295 KiB

284
docs/download/76.md Normal file
View file

@ -0,0 +1,284 @@
---
layout: default
title: ICU 76
nav_order: 900
has_children: false
parent: Downloading ICU
---
<!--
© 2024 and later: Unicode, Inc. and others.
License & terms of use: http://www.unicode.org/copyright.html
-->
# ICU 76
ICU is the [premier library for software internationalization](https://icu.unicode.org/#h.i33fakvpjb7o),
used by a [wide array of companies and organizations](https://icu.unicode.org/#h.f9qwubthqabj).
## Release Overview
ICU 76 updates to
[Unicode 16](https://www.unicode.org/versions/Unicode16.0.0/)
([blog](https://blog.unicode.org/2024/09/announcing-unicode-standard-version-160.html)),
including new characters and scripts, emoji, collation & IDNA changes, and corresponding APIs and implementations.
It also updates to
[CLDR 46](https://cldr.unicode.org/downloads/cldr-46)
([beta blog](https://blog.unicode.org/2024/09/unicode-cldr-46-beta-available-for.html))
locale data with new locales, significant updates to existing locales,
and various additions and corrections.
For example, the CLDR and Unicode default sort orders are now very nearly the same.
Most of the java.time (Temporal) types can now be formatted directly
using the existing ICU4J date/time formatting classes.
There are some new APIs to make ICU easier to use with modern C++ and Java patterns.
Most of the C/C++ APIs added for this purpose are implemented as C++ header-only APIs,
and usable on top of binary stable C APIs, which is a first for ICU.
The Java and C++ technology preview implementations of the (also in [tech preview](https://github.com/unicode-org/message-format-wg?tab=readme-ov-file#messageformat-2-technical-preview)) CLDR MessageFormat 2.0 specification have been updated to match recent changes.
ICU 76 and CLDR 46 are major releases, including a new version of Unicode and major locale data improvements.
For more details, including migration issues, see below.
Please use the [icu-support mailing list](https://icu.unicode.org/contacts) and/or [find/submit error reports](https://icu.unicode.org/bugs).
### Version Number
The initial release has library version number 76.1.
* Release date: 2024-10-24
* [List of tickets fixed in ICU 76](https://unicode-org.atlassian.net/issues/?jql=project%20%3D%20ICU%20AND%20status%20%3D%20Done%20AND%20resolution%20in%20%28Fixed%2C%20%22Fixed%20by%20Other%20Ticket%22%29%20AND%20fixVersion%20%3D%2076.1%20ORDER%20BY%20component%20ASC%2C%20created%20DESC)
If there are maintenance releases, they will be 76.2, 76.3, etc. (During ICU 76 development, the library version number was 76.0.x.)
Note: There may be additional commits on the [maint/maint-76](https://github.com/unicode-org/icu/tree/maint/maint-76) branch that are not included in the prepackaged download files.
## Common Changes
* [Unicode 16](https://www.unicode.org/versions/Unicode16.0.0/)
([blog](https://blog.unicode.org/2024/09/announcing-unicode-standard-version-160.html)):
* Adds five modern-use scripts: Garay, Gurung Khema, Kirat Rai, Ol Onal, Sunuwar
* Adds two historic scripts & almost 4000 additional Egyptian Hieroglyphs
* Seven new emoji characters
* Over 700 symbols from legacy computing environments
* ICU line breaking improvements have been upstreamed into
[UAX #14](https://www.unicode.org/reports/tr14/tr14-53.html#Modifications)
* ICU 76 adds support for the new UCD property Modifier_Combining_Mark for
[UAX #53](https://www.unicode.org/reports/tr53/) Arabic Mark Rendering
* ICU 76 also adds support for the UCD property Indic_Conjunct_Break
which was new in Unicode 15.1. ([ICU-22503](https://unicode-org.atlassian.net/browse/ICU-22503))
* [IDNA](https://www.unicode.org/reports/tr46/tr46-33.html#Modifications):
The handling of UseSTD3ASCIIRules was simplified.
Some existing characters changed from disallowed (when that was only for compatibility with
long-obsolete IDNA2003) to valid.
* [CLDR 46](https://github.com/unicode-org/cldr/blob/main/docs/site/downloads/cldr-46.md)
([beta blog](https://blog.unicode.org/2024/09/unicode-cldr-46-beta-available-for.html)):
* Significant data updates across all locales
* Locales which are now at modern coverage level: Nigerian Pidgin, Tigrinya
* Locales which are now at moderate coverage level:
Akan, Baluchi (Latin), Kangri, Tajik, Tatar, Wolof
* New measurement units "night" and "light-speed"
* Note: ICU 76 does not yet support `portion-per-1e9` (aka per-billion). (See [ICU-22781](https://unicode-org.atlassian.net/browse/ICU-22781))
* [MessageFormat 2.0 tech preview updates](https://cldr.unicode.org/downloads/cldr-46#message-format-specification)
* Language matching: Dropped the fallback mapping
desired="uk" → supported="ru"
(so that Ukrainian (uk) doesnt fall back to Russian (ru))
* [Collation](https://cldr.unicode.org/downloads/cldr-46#collation-data-changes):
Significant changes to the CLDR root collation (CLDR default sort order)
* Realigned With DUCET:
The order of groups of characters which sort below letters is now the same.
In both sort orders, non-decimal-digit numeric characters now sort after decimal digits,
and the CLDR root collation no longer tailors any currency symbols
(making some of them sort like letter sequences, as in the DUCET).
_These changes eliminate sort order differences among almost all
regular characters between the CLDR root collation and the DUCET._
* Improved Han Radical-Stroke Order:
The CLDR radical-stroke order now matches that of the Unicode Radical-Stroke Index;
traditional vs. simplified forms of radicals are now distinguished on a lower level than the number of residual strokes.
In alphabetic indexes for radical-stroke sort orders,
only the traditional forms of radicals are now available as index characters.
* Updated IBM EBCDIC code page 1388 (Simplified Chinese) mapping data to ibm-cp1388_P100-2024 ([ICU-22596](https://unicode-org.atlassian.net/browse/ICU-22596))
* Time zone data (tzdata) version 2024b (2024-sep). Note that pre-1970 data for a number of time zones has been removed, as has been the case in the upstream [tzdata](https://www.iana.org/time-zones) release since 2021b.
* The Asia/Almaty time zone has become an alias following IANA TZ database changes.
* CLDR added support for deprecated timezone codes by remapping:
CST6CDT → America/Chicago, EST → America/Panama, EST5EDT → America/New_York,
MST7MDT → America/Denver, PST8PDT → America/Los_Angeles
(These IANA TZ changes were motivated by CLDR, see
[CLDR-17111](https://unicode-org.atlassian.net/browse/CLDR-17111))
## ICU4C Specific Changes
* [API changes since ICU4C 75 (Markdown)](https://github.com/unicode-org/icu/blob/maint/maint-76/icu4c/APIChangeReport.md) / [(HTML)](https://htmlpreview.github.io/?https://github.com/unicode-org/icu/blob/maint/maint-76/icu4c/APIChangeReport.html)
* A UnicodeString can now be converted to & from UTF-16 standard string_view types
(std::u16string_view, and on Windows to/from std::wstring_view)
and other UTF-16 types (string literals, standard string classes).
Several other member functions have been widened to accept standard UTF-16 types as well.
([ICU-22843](https://unicode-org.atlassian.net/browse/ICU-22843))
* New APIs for colloquial iteration over the elements of a C++ UnicodeSet or a C USet. ([ICU-22876](https://unicode-org.atlassian.net/browse/ICU-22876))
* For details and an example see the “C++ Header-Only APIs” section of the [Migration Issues](#migration-issues) below.
* New APIs for colloquial use of C++ Collator / C UCollator with
standard C++ algorithms (e.g, sort) & data structures (e.g., map).
([ICU-22879](https://unicode-org.atlassian.net/browse/ICU-22879))
(The UCollator wrappers are also C++ header-only APIs.)
* Note: Some APIs were changed to accept a wider range of input types than before,
but in the API change report they look like the old, stable signatures are removed,
and like the wider signatures are added as “born stable”.
For example, several UnicodeString constructors that take a raw pointer
have been replaced with a signature that accepts such raw pointers but also additional input types.
* Note: Similarly, the API change report appears to show removal+addition of
certain UnicodeString::remove() and UnicodeString::removeBetween() overloads,
but only the _expression_ of one of their default parameter values has changed.
* Many changes for more robust string and memory handling.
## ICU4J Specific Changes
* [API Changes since ICU4J 75](https://htmlpreview.github.io/?https://github.com/unicode-org/icu/blob/maint/maint-76/icu4j/APIChangeReport.html)
* Most of the java.time (Temporal) types can now be formatted directly
using the existing ICU4J date/time formatting classes. ([ICU-22853](https://unicode-org.atlassian.net/browse/ICU-22853))
* New APIs for colloquial iteration over the elements of a UnicodeSet.
In addition to the existing ranges(), strings(), and UnicodeSet-is-an-Iterable,
there is a new codePoints() (returns an Iterable),
and new methods that return Streams (e.g., codePointStream() & rangeStream()).
([ICU-22845](https://unicode-org.atlassian.net/browse/ICU-22845))
## Known Issues
* Some segmentation changes should have been made as part of the Unicode 16 integration,
but were delayed to ICU 77:
* Word break: Root tailoring of colon reverted, Swedish & Finnish tailorings removed
([ICU-22941](https://unicode-org.atlassian.net/browse/ICU-22941))
([ICU 77 PR #3249](https://github.com/unicode-org/icu/pull/3249))
* These tailorings were introduced in ICU 72, but feedback has been negative,
and the UTC declined to adopt these changes.
* Updated Indic grapheme clusters to use the latest `Indic_Conjunct_Break` data
([ICU-22956](https://unicode-org.atlassian.net/browse/ICU-22956))
([ICU 77 PR #3257](https://github.com/unicode-org/icu/pull/3257))
* New APIs for colloquial C++ use of C USet ([ICU-22876](https://unicode-org.atlassian.net/browse/ICU-22876))
and C UCollator ([ICU-22879](https://unicode-org.atlassian.net/browse/ICU-22879))
* Some of the new APIs do not actually compile with `U_SHOW_CPLUSPLUS_API=0`.
They have been fixed in ICU 77 and thoroughly tested.
([ICU-22954](https://unicode-org.atlassian.net/browse/ICU-22954))
* For details about these APIs and an example see the
[“C++ Header-Only APIs” section below](#migration-issues).
* One late CLDR 46 bug fix was accidentally omitted from ICU 46:
[CLDR-18002](https://unicode-org.atlassian.net/browse/CLDR-18002) Fix likely subtag inconsistency
([CLDR PR #4105](https://github.com/unicode-org/cldr/pull/4105))
## Migration Issues
### IDNA Default Option Changed to Nontransitional Processing
After all major browsers have switched to nontransitional processing,
Unicode 15.1 (a year ago) changed the [UTS #46 spec](https://www.unicode.org/reports/tr46/#Processing)
to declare transitional processing deprecated.
ICU 76 changes the "DEFAULT" API constants from 0 to `UIDNA_NONTRANSITIONAL_TO_ASCII | UIDNA_NONTRANSITIONAL_TO_UNICODE`.
ICU 76 does not change the behavior of using options value 0.
(That would change the behavior of existing binaries linking with new ICU libraries.)
However, when code is recompiled against a new version of ICU,
and when it uses the DEFAULT constant, then it will pass these option flags into the factory method.
* In C/C++: unicode/uidna.h [UIDNA_DEFAULT](https://unicode-org.github.io/icu-docs/apidoc/dev/icu4c/uidna_8h.html#a726ca809ffd3d67ab4b8476646f26635aa1eb63014cdaf41c7ea6cf3abecf1169)
* In Java: IDNA.java [DEFAULT](https://unicode-org.github.io/icu-docs/apidoc/dev/icu4j/com/ibm/icu/text/IDNA.html#DEFAULT)
See [ICU-22294](https://unicode-org.atlassian.net/browse/ICU-22294)
### SimpleNumber::truncateStart() Removed
ICU 75 renamed the still-draft SimpleNumber::truncateStart() to setMaximumIntegerDigits().
ICU 76 removes the never-stable, original function.
Same for the C API usnum_truncateStart().
([ICU-22900](https://unicode-org.atlassian.net/browse/ICU-22900))
### C++ Header-Only APIs
ICU 76 is the first version where we add what we call C++ header-only APIs.
These are especially intended for users who rely on only binary stable DLL/library exports of C APIs
(C++ APIs cannot be binary stable).
_Please test these new APIs and let us know if you find problems —
especially if you find a platform/compiler/options combination
where the call site does end up calling into ICU DLL/library exports._
Remember that regular C++ APIs can be hidden by callers defining `U_SHOW_CPLUSPLUS_API=0`.
The new header-only APIs can be separately enabled via `U_SHOW_CPLUSPLUS_HEADER_API=1`.
([GitHub query for `U_SHOW_CPLUSPLUS_HEADER_API` in public header files](https://github.com/search?q=repo%3Aunicode-org%2Ficu+U_SHOW_CPLUSPLUS_HEADER_API+path%3Aunicode%2F*.h&type=code))
These are C++ definitions that are not exported by the ICU DLLs/libraries,
are thus inlined into the calling code,
and which may call ICU C APIs but not into ICU non-header-only C++ APIs.
Note: Some of these new APIs did not actually compile with `U_SHOW_CPLUSPLUS_API=0`.
They have been fixed in [ICU 77](77.md) and thoroughly tested.
The header-only APIs are defined in a nested `header` namespace.
If entry point renaming is turned off (the main namespace is `icu` rather than `icu_76` etc.),
then the new `U_HEADER_ONLY_NAMESPACE` is `icu::header`.
([Link to the API proposal which introduced this concept](https://docs.google.com/document/d/1xERVccTYsptzjfbjcj6HDtoKVF_mEKmslPsOiQzzaFg/view#heading=h.cf4bmhjgozry))
For example, for iterating over the code point ranges in a `USet` (excluding the strings):
```c++
U_NAMESPACE_USE
using U_HEADER_NESTED_NAMESPACE::USetRanges;
LocalUSetPointer uset(uset_openPattern(u"[abcçカ🚴]", -1, &errorCode));
for (auto [start, end] : USetRanges(uset.getAlias())) {
printf("uset.range U+%04lx..U+%04lx\n", (long)start, (long)end);
}
for (auto range : USetRanges(uset.getAlias())) {
for (UChar32 c : range) {
printf("uset.range.c U+%04lx\n", (long)c);
}
}
```
(Implementation note: On most platforms, when compiling ICU itself,
the `U_HEADER_ONLY_NAMESPACE` is `icu::internal`,
so that any such symbols that get exported differ from the ones that calling code sees.
On Windows, where DLL exports are explicit,
the namespace is always the same, but these header-only APIs are not marked for export.)
### Migration Issues Related to CLDR
* See [CLDR 46 migration issues](https://cldr.unicode.org/downloads/cldr-46#migration)
## ICU4C Platform Support
ICU4C requires C++17 and has been tested with up to C++20.
We routinely test on recent versions of Linux, macOS, and Windows.
We accept patches for other platforms.
For ICU 76, we have received a contribution to make ICU4C work again on z/OS,
using a newer (clang-based) compiler. ([ICU-22714](https://unicode-org.atlassian.net/browse/ICU-22714) [icu/pull/3008](https://github.com/unicode-org/icu/pull/3008) + [ICU-22916](https://unicode-org.atlassian.net/browse/ICU-22916) [icu/pull/3208](https://github.com/unicode-org/icu/pull/3208))
Windows: The minimum supported version is Windows 7. (See [How To Build And Install On Windows](../userguide/icu4c/build.html#how-to-build-and-install-on-windows) for more details.)
## ICU4J Platform Support
ICU4J works on Java 8..21 (at least).
ICU4J should work on Android API level 21 and later but may require “[library desugaring](https://developer.android.com/studio/write/java8-support#library-desugaring)”.
## Download
Source and binary downloads are available on the git/GitHub tag page: <https://github.com/unicode-org/icu/releases/tag/release-76-1>
See the [Source Code Setup](../devsetup/source/) page for how to download the ICU file tree directly from GitHub.
ICU locale data was generated from CLDR data equivalent to:
* <https://github.com/unicode-org/cldr/releases/tag/release-46>
* <https://github.com/unicode-org/cldr-staging/releases/tag/release-46>
[Maven dependency](https://central.sonatype.com/artifact/com.ibm.icu/icu4j):
```
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>76.1</version>
</dependency>
```

155
docs/download/77.md Normal file
View file

@ -0,0 +1,155 @@
---
layout: default
title: ICU 77
nav_order: 899
has_children: false
parent: Downloading ICU
---
<!--
© 2025 and later: Unicode, Inc. and others.
License & terms of use: http://www.unicode.org/copyright.html
-->
# ICU 77
ICU is the [premier library for software internationalization](https://icu.unicode.org/#h.i33fakvpjb7o),
used by a [wide array of companies and organizations](https://icu.unicode.org/#h.f9qwubthqabj).
## Release Overview
* Download: [releases/tag/release-77-1](https://github.com/unicode-org/icu/releases/tag/release-77-1)
* [Maven: com.ibm.icu / icu4j / version 77.1](https://mvnrepository.com/artifact/com.ibm.icu/icu4j/77.1)
ICU 77 updates to
[CLDR 47](https://cldr.unicode.org/downloads/cldr-47)
([beta blog](https://blog.unicode.org/2025/02/unicode-cldr-47-beta-available-for.html))
locale data with new locales, and various additions and corrections.
ICU 77 is mostly focused on bug fixes, segmentation conformance, and other refinements.
The Java technology preview implementation of the CLDR MessageFormat 2.0 specification has been updated to incorporate the
[CLDR 46.1 spec](https://www.unicode.org/reports/tr35/tr35-74/tr35-messageFormat.html)
plus most but not all of the CLDR 47 changes.
The C++ technology preview implementation of MessageFormat 2.0 is not yet quite up to date with CLDR 46.1.
For more details, including migration issues, see below.
Please use the [icu-support mailing list](https://icu.unicode.org/contacts) and/or [find/submit error reports](https://icu.unicode.org/bugs).
### Attention: Future Changes
Beginning with ICU 78 (2025-oct):
1. We want to move the minimum required Java version from Java 8 to Java 11.
This is a significant, useful update in terms of the Java language and
standard library, and simplifies ICU tooling which currently uses
a mix of Java 8 and Java 11.
Note that [Android desugaring](https://developer.android.com/studio/write/java11-default-support-table)
supports at least Java 11 since late 2023.\
See [ICU-23072](https://unicode-org.atlassian.net/browse/ICU-23072)
where you can provide comments.
2. We are planning to remove the
[ICU4J Locale Service Provider](../userguide/icu4j/locale-service-provider.md)
([Maven: com.ibm.icu / icu4j-localespi / version 76.1](https://mvnrepository.com/artifact/com.ibm.icu/icu4j-localespi/76.1)).
It is much less useful than when we added it, has very low usage,
needs work for newer Java versions, and complicates ICU4J development.\
See [ICU-23071](https://unicode-org.atlassian.net/browse/ICU-23071)
where you can provide comments.
### Version Number
The initial release has library version number 77.1.
* Release date: 2025-03-13
* [List of tickets fixed in ICU 77](https://unicode-org.atlassian.net/issues/?jql=project%20%3D%20ICU%20AND%20status%20%3D%20Done%20AND%20resolution%20in%20%28Fixed%2C%20%22Fixed%20by%20Other%20Ticket%22%29%20AND%20fixVersion%20%3D%2077.1%20ORDER%20BY%20component%20ASC%2C%20created%20DESC)
If there are maintenance releases, they will be 77.2, 77.3, etc. (During ICU 77 development, the library version number was 77.0.x.)
Note: There may be additional commits on the [maint/maint-77](https://github.com/unicode-org/icu/tree/maint/maint-77) branch that are not included in the prepackaged download files.
## Common Changes
* [CLDR 47](https://cldr.unicode.org/downloads/cldr-47)
([beta blog](https://blog.unicode.org/2025/02/unicode-cldr-47-beta-available-for.html)):
* No major data collection for existing locales; focus on bug fixes and structural improvements
* New regional variants: English in several European countries, and Cantonese in Macau (`yue_Hant_MO`)
* Improved RBNF (number spellout) and transliteration data
* Subtle segmentation changes to make ICU fully conform to Unicode 16
* Word break: Root tailoring of colon reverted, Swedish & Finnish tailorings removed
([ICU-22941](https://unicode-org.atlassian.net/browse/ICU-22941))
* These tailorings were introduced in ICU 72, but feedback has been negative,
and the UTC declined to adopt these changes.
* Line break: Fixed a bug in the line breaking of obscure sequences
⟨no-break space, combining mark, hyphen, alphabetic character⟩
([ICU-22986](https://unicode-org.atlassian.net/browse/ICU-22986)).
* Updated Indic grapheme clusters to use the latest `Indic_Conjunct_Break` data
([ICU-22956](https://unicode-org.atlassian.net/browse/ICU-22956))
* Time zone data (tzdata) version 2025a (2025-jan).
## ICU4C Specific Changes
* [API changes since ICU4C 76 (Markdown)](https://github.com/unicode-org/icu/blob/maint/maint-77/icu4c/APIChangeReport.md) / [(HTML)](https://htmlpreview.github.io/?https://github.com/unicode-org/icu/blob/maint/maint-77/icu4c/APIChangeReport.html)
* New APIs for colloquial C++ use of C USet ([ICU-22876](https://unicode-org.atlassian.net/browse/ICU-22876))
and C UCollator ([ICU-22879](https://unicode-org.atlassian.net/browse/ICU-22879))
* These were added in ICU 76, but some of the new APIs did not actually compile with `U_SHOW_CPLUSPLUS_API=0`.
They have been fixed in ICU 77 and thoroughly tested.
USetElementIterator now returns std::u16string instead of icu::UnicodeString,
and therefore it and related APIs have been changed to `@draft ICU 77`.
([ICU-22954](https://unicode-org.atlassian.net/browse/ICU-22954))
* For details about these APIs and an example see the
“C++ Header-Only APIs” section of the [ICU 76 Migration Issues](76.md#migration-issues).
## ICU4J Specific Changes
* [API Changes since ICU4J 76](https://htmlpreview.github.io/?https://github.com/unicode-org/icu/blob/maint/maint-77/icu4j/APIChangeReport.html)
* The Java technology preview implementation of the CLDR MessageFormat 2.0 specification has been updated to incorporate the
[CLDR 46.1 spec](https://www.unicode.org/reports/tr35/tr35-74/tr35-messageFormat.html)
plus most but not all of the CLDR 47 changes.
## Known Issues
* The new MeasureUnit for `portion-per-1e9` works for formatting,
but when the new member function `getConstantDenominator()` is called on this unit,
it incorrectly returns 0. ([ICU-23045](https://unicode-org.atlassian.net/browse/ICU-23045))
## Migration Issues
* (none yet)
### Migration Issues Related to CLDR
* See [CLDR 47 migration issues](https://cldr.unicode.org/downloads/cldr-47#migration)
## ICU4C Platform Support
ICU4C requires C++17 and has been tested with up to C++20.
We routinely test on recent versions of Linux, macOS, and Windows.
We accept patches for other platforms.
Windows: The minimum supported version is Windows 7. (See [How To Build And Install On Windows](../userguide/icu4c/build.html#how-to-build-and-install-on-windows) for more details.)
## ICU4J Platform Support
ICU4J works on Java 8..21 (at least).
ICU4J should work on Android API level 21 and later but may require “[library desugaring](https://developer.android.com/studio/write/java8-support#library-desugaring)”.
## Download
### GitHub
Source and binary downloads are available on the git/GitHub tag page: <https://github.com/unicode-org/icu/releases/tag/release-77-1>
See the [Source Code Setup](../devsetup/source/) page for how to download the ICU file tree directly from GitHub.
ICU locale data was generated from CLDR data equivalent to:
* <https://github.com/unicode-org/cldr/releases/tag/release-47>
* <https://github.com/unicode-org/cldr-staging/releases/tag/release-47>
### Maven
* https://mvnrepository.com/artifact/com.ibm.icu/icu4j/77.1
* https://mvnrepository.com/artifact/com.ibm.icu/icu4j-charset/77.1
* https://mvnrepository.com/artifact/com.ibm.icu/icu4j-localespi/77.1

78
docs/download/index.md Normal file
View file

@ -0,0 +1,78 @@
---
layout: default
title: Downloading ICU
nav_order: 100
has_children: true
---
<!--
© 2024 and later: Unicode, Inc. and others.
License & terms of use: http://www.unicode.org/copyright.html
-->
# Downloading ICU
If you want to use ICU (as opposed to developing it), it is recommended that you download an official packaged version of the ICU source code. These versions are tested more thoroughly than day-to-day development builds of the system, and they are packaged in zip and tar files for convenient download. Here are several recent releases of ICU that are available:
## Latest Release
***2025-03-13: ICU 77 is now available*** —
[releases/tag/release-77-1](https://github.com/unicode-org/icu/releases/tag/release-77-1) —
[Maven: com.ibm.icu / icu4j / version 77.1](https://mvnrepository.com/artifact/com.ibm.icu/icu4j/77.1)
[ICU 77](77.md) updates to [CLDR 47](https://cldr.unicode.org/downloads/cldr-47)
locale data with new locales, and various additions and corrections.
ICU 77 is mostly focused on bug fixes, segmentation conformance, and other refinements.
The technology preview implementations of the CLDR MessageFormat 2.0 specification have been updated to incorporate some, but not yet all, of the CLDR 47 changes. (Java more than C++)
## Previous Releases
- 2024-10-24: **ICU 76** updates to [Unicode 16](https://www.unicode.org/versions/Unicode16.0.0/) ([blog](https://blog.unicode.org/2024/09/announcing-unicode-standard-version-160.html)), including new characters and scripts, emoji, collation & IDNA changes, and corresponding APIs and implementations. It also updates to [CLDR 46](https://cldr.unicode.org/downloads/cldr-46) ([beta blog](https://blog.unicode.org/2024/09/unicode-cldr-46-beta-available-for.html)) locale data with new locales, significant updates to existing locales, and various additions and corrections. For example, the CLDR and Unicode default sort orders are now very nearly the same.
- Most of the java.time (Temporal) types can now be formatted directly. There are some new APIs to make ICU easier to use with modern C++ and Java patterns. The Java and C++ technology preview implementations of the CLDR MessageFormat 2.0 specification have been updated to match recent changes. See [ICU 76](76.md).
- 2024-04-17: **ICU 75** updates to [CLDR 45](https://cldr.unicode.org/index/downloads/cldr-45) ([beta blog](https://blog.unicode.org/2024/04/unicode-cldr-v45-beta-available-for.html)) locale data with new locales and various additions and corrections. C++ code now requires C++17 and is being made more robust. The CLDR MessageFormat 2.0 specification is now in [technology preview](https://github.com/unicode-org/message-format-wg?tab=readme-ov-file#messageformat-2-technical-preview), together with a corresponding update of the ICU4J (Java) tech preview and a new ICU4C (C++) tech preview. See [Downloading ICU &gt; ICU 75](https://icu.unicode.org/download/75).
- 2023-12-13: **ICU 74.2** released with date/time formatting bug fixes. See [Downloading ICU &gt; ICU 74](https://icu.unicode.org/download/74).
- 2023-10-31: **ICU 74** updates to [Unicode 15.1](http://blog.unicode.org/2023/09/announcing-unicode-standard-version-151.html), including new characters, emoji, security mechanisms, and corresponding APIs and implementations. It also updates to [CLDR 44](https://cldr.unicode.org/index/downloads/cldr-44) ([blog](https://blog.unicode.org/2023/10/unicode-cldr-v44-available.html)) locale data with new locales and various additions and corrections. See [Downloading ICU &gt; ICU 74](https://icu.unicode.org/download/74).
- 2023-06-15: **ICU 73.2**: Maintenance release with changes for GB18030 compliance, English AM/PM spaces, word segmentation around @ sign, etc. See [Downloading ICU &gt; ICU 73](https://icu.unicode.org/download/73).
- 2023-04-13: **ICU 73** updates to [CLDR 43](https://blog.unicode.org/2023/04/the-unicode-cldr-v43-released.html) locale data with various additions and corrections.
ICU 73 improves Japanese and Korean short-text line breaking, reduces C++ memory use in date formatting, and promotes the Java person name formatter from tech preview to draft.
For details, see [Downloading ICU &gt; ICU 73](https://icu.unicode.org/download/73).
| Release | ICU4C | ICU4J | Major Changes |
| ----- | ----- | ----- | ----- |
| [**ICU 72**](https://icu.unicode.org/download/72) | **72.1** | **72.1** | Unicode 15, CLDR 42, tech previews: person name formatting, MessageFormat 2 |
| [**ICU 71**](https://icu.unicode.org/download/71) | **71.1** | **71.1** | CLDR 41, phrase-based line breaking for Japanese. |
| [**ICU 70**](https://icu.unicode.org/download/70) | **70.1** | **70.1** | Unicode 14 & CLDR 40, emoji properties. |
| [**ICU 69**](https://icu.unicode.org/download/69) | **69.1** | **69.1** | CLDR 39, enhancements in measurement unit formatting and number formatting. |
| [**ICU 68**](https://icu.unicode.org/download/68) | **68.2** | **68.2** | CLDR 38, locale-dependent smart unit preferences (road distance, temperature, etc.), locale ID canonicalization conformant with CLDR. |
| **ICU 67** | [**67.1**](https://icu.unicode.org/download/67#h.ouaur1y940xf) | [**67.1**](https://icu.unicode.org/download/67#h.tfrvsxlm08j1) | Unicode 13 & CLDR 37. Bug fixes for date and number formatting, enhanced support for user preferences in the locale identifier. LocaleMatcher code and data improved. Number skeletons have a new “concise” form that can be used in MessageFormat strings. |
| **ICU 66** | [**66.1**](https://icu.unicode.org/download/66#h.udvu1uhvnd81) | [**66.1**](https://icu.unicode.org/download/66#h.4aoltvwuvna5) | Unicode 13 & CLDR 36.1. New, extra Q1 releases for low-risk integration of Unicode 13. |
| **ICU 65** | [**65.1**](https://icu.unicode.org/download/65#h.zcdcx3wezhki) | [**65.1**](https://icu.unicode.org/download/65#h.sve2yxt21gko) | CLDR 36 with some new measurement units. Java LocaleMatcher API is improved, and ported to C++. For building ICU data, there are new filtering options, and new tracing support for data loading in ICU4C. |
| **ICU 64** | [**64.2**](https://icu.unicode.org/download/64#h.vrjm9tyoew9f) | [**64.2**](https://icu.unicode.org/download/64#h.2p64shtntkxe) | Unicode 12.0, CLDR 35, data filtering/subsetting mechanism, improved formatting API, C++ LocaleBuilder. |
| **ICU 63** | [**63.2**](https://icu.unicode.org/download/63#h.u1gym8iosl1f) | [**63.2**](https://icu.unicode.org/download/63#h.ouec4bczpynw) | CLDR 34, API for number & currency *range* formatting, API for additional Unicode properties and for constructing custom properties; test data for upcoming Japanese era; C++ Locale enhancements; Java 7 as minimum runtime. |
| **ICU 62** | [**62.2**](https://icu.unicode.org/download/62#h.tesi0q3ajdsl) | [**62.2**](https://icu.unicode.org/download/62#h.aivenafc76s7) | Unicode 11.0, CLDR 33.1, number format skeleton pattern in MessageFormat and ICU4C DecimalFormat wrapping new NumberFormatter implementation. |
| **ICU 61** | [**61.2**](https://icu.unicode.org/download/61#h.bv7bijcse9ix) | [**61.2**](https://icu.unicode.org/download/61#h.w7fdpw54xbjz) | CLDR 33, new Java implementation for number and currency parsing, and many small API additions, improvements, and bug fixes. |
| **ICU 60** | [**60.3**](https://icu.unicode.org/download/60#h.s3yzinozhocu) | [**60.3**](https://icu.unicode.org/download/60#h.l452u1xfeng2) | Unicode 10.0, CLDR 32, and ICU4J has been tested with Java 9. New API for number formatting, NumberFormatter, which new users should link instead of NumberFormat/DecimalFormat. There are many more features and bug fixes. |
| [**ICU 59**](https://icu.unicode.org/download/59) | [**59.2**](https://icu.unicode.org/download/59#h.yksv2zydmofr) | [**59.2**](https://icu.unicode.org/download/59#h.4a4swub5xyga) | CLDR 31, Emoji 5.0 draft data, C++11 support, Java number formatting code rewrite. |
| [**ICU 58**](https://icu.unicode.org/download/58) | [**58.3**](https://icu.unicode.org/download/58#h.cii7gzh9hdsi) | [**58.3**](https://icu.unicode.org/download/58#h.yvn5vkyn1ufu) | Unicode 9.0, CLDR 30.0.2, Emoji 4.0 draft data, JUnit test integration, more locale data loading improvements. |
| [**ICU 57**](https://icu.unicode.org/download/57) | [**57.2**](https://icu.unicode.org/download/57#h.2orq2dh20i8c) | [**57.2**](https://icu.unicode.org/download/57#h.uclxjlbu3xgz) | CLDR 29, Unicode emoji properties, improved locale data loading. |
| [**ICU 56**](https://icu.unicode.org/download/56) | [**56.2**](https://icu.unicode.org/download/56#h.cyht33tccoc0) | [**56.2**](https://icu.unicode.org/download/56#h.jy58dax3hhcr) | Unicode 8.0, CLDR 28, ICU data size reduction, ICU4C DecimalFormat refactoring. |
| [**ICU 55**](https://icu.unicode.org/download/55) | [**55.2**](https://sites.google.com/unicode.org/icu/download/55?pli=1#h.o7eux855pigh) | [**55.2**](https://sites.google.com/unicode.org/icu/download/55?pli=1#h.ok82qb3y55ax) | CLDR 27.0.1, CSS line-break support in BreakIterator, easier-to-use ScientificNumberFormatter ("1.2 × 10³"), ICU4C DateFormat performance improvement, C wrapper for ListFormatter and FieldPositionIterator, regex named capture groups. ICU4J has been improved and tested for using ICU4C data and for running on Android. |
| [**ICU 54**](https://icu.unicode.org/download/54) | [**54.2**](https://icu.unicode.org/download/54#h.ub64y7kaqos7) | [**54.2**](https://icu.unicode.org/download/54#h.jnbcx7gqiidn) | CLDR 26, Unicode 7.0, many more units, Unihan in root collation, new RBNF PluralFormat syntax, dictionary-based break iterator for Burmese, tech preview of FilteredBreakIterator using ULI break data, time separator configurable from CLDR data, ... |
| [**ICU 53**](https://icu.unicode.org/download/53) | [**53.2**](https://icu.unicode.org/download/53#h.kbnahu7jfdg7) | [**53.2**](https://icu.unicode.org/download/53#h.bpcdfe5r3hxl) | CLDR 25, collation code rewrite, measure formatting for various units, relative date formatter and leniency controls in date format parsing |
| [**ICU 52**](https://icu.unicode.org/download/52) | [**52.2**](https://icu.unicode.org/download/52#h.clle0zr3jvqx) | [**52.2**](https://icu.unicode.org/download/52#h.ho3jsruxjpyp) | CLDR 24, Unicode 6.3, Plurals for fractional values, Islamic Umm al-Qura calendar, DateFormat parse leniency controls and Lao dictionary based word segmentation. |
| [**ICU 51**](https://icu.unicode.org/download/51) | [**51.3**](https://icu.unicode.org/download/51#h.ae67vrvucf1k) | [**51.3**](https://icu.unicode.org/download/51#h.p2kuuvx5ko5z) | CLDR 23, short weekday names, new time zone format patterns, display context for date format and locale display names |
| [ICU 50](https://icu.unicode.org/download/50) | [50.2](https://icu.unicode.org/download/50#h.au7pfptnrbk0) | [50.2](https://icu.unicode.org/download/50#h.h2lsiy5b0om3) | CLDR 22.1, Unicode 6.2, ordinal number support, dictionary-based break iterators for Chinese & Japanese… |
| [ICU 49](https://icu.unicode.org/download/49) | [49.1.2](https://icu.unicode.org/download/49#h.8kgchrymg08d) | [49.1](https://icu.unicode.org/download/49#h.plyzynidar2c) | CLDR 21.0.1, Unicode 6.1, simpler ICU4C build without generated platform.h, many small API additions |
| | | | Note: We have changed the [ICU release version numbering](https://unicode-org.github.io/icu/userguide/icu/design.html#version-numbers-in-icu) , combining the former first two fields into one, thus the major release sequence is ICU 4.8, ICU 49, ICU 50, … |
For more details on building ICU once you've checked out the code, please see the ICU4C or ICU4J readme (linked from the nav bar).
Note: In 2012, starting with [ICU 49](https://icu.unicode.org/download/49), we changed the [ICU release version numbering](https://unicode-org.github.io/icu/userguide/icu/design.html#version-numbers-in-icu), combining the former first two fields into one, thus the major release sequence is ..., ICU 4.6, ICU 4.8, ICU **49**, ICU 50, ICU 51, …
For older ICU releases see the [Old ICU Releases](https://icu.unicode.org/download/old) page.

View file

@ -1,7 +1,7 @@
---
layout: default
title: ICU Documentation
nav_order: 100
nav_order: 1
description: ICU Documentation
---
@ -23,12 +23,28 @@ This is the new home of the User Guide (since 2020 August).
## ICU Site
The official ICU Site is located at <https://icu.unicode.org>.
The official ICU Site is located at https://icu.unicode.org/.
It is the official landing page for the ICU project.
Some of the pages from the ICU Site have been migrated here.
The migrated sections and pages from the ICU Site are visible in the navigation bar of this site below the "ICU Site" section heading.
## Downloading ICU
The [Downloading ICU](download) page has been migrated here.
### Latest Release
***2025-03-13: ICU 77 is now available*** —
[releases/tag/release-77-1](https://github.com/unicode-org/icu/releases/tag/release-77-1) —
[Maven: com.ibm.icu / icu4j / version 77.1](https://mvnrepository.com/artifact/com.ibm.icu/icu4j/77.1)
[ICU 77](download/77.md) updates to [CLDR 47](https://cldr.unicode.org/downloads/cldr-47)
locale data with new locales, and various additions and corrections.
ICU 77 is mostly focused on bug fixes, segmentation conformance, and other refinements.
The technology preview implementations of the CLDR MessageFormat 2.0 specification have been updated to incorporate some, but not yet all, of the CLDR 47 changes. (Java more than C++)
## ICU team member pages
Other documentation pages here are written by and for team members.

View file

@ -27,8 +27,8 @@ All Rights Reserved.
# Intro and setup
These instructions describe how to regenerate ICU4C locale and linguistic data from CLDR,
and then how to convert that ICU4 data for ICU4J (data jars and maven resources).
They apply to CLDR 44 / ICU 74 and later.
and then how to convert that ICU4C data for ICU4J (data jars and maven resources).
They apply to CLDR 47 / ICU 77 and later.
To use these instructions just for generating ICU4J data from ICU4C, you only need to use
steps 1, 8, and 12 in the Process section.
@ -37,22 +37,26 @@ The full process requires local copies of
* CLDR (the source of most of the data, and some Java tools)
* The complete ICU source tree, including:
* tools: includes the LdmlConverter build tool and associated config files
* icu4c: the target for converted CLDR data, and source for ICU4J data; includes tests for the converted data
* icu4j: the target for updated data jars; includes tests for the converted data
* `tools`: includes the `LdmlConverter` build tool and associated config files
* `icu4c`: the target for converted CLDR data, and source for ICU4J data; includes tests for the converted data
* `icu4j`: the target for updated data jars; includes tests for the converted data
For an official CLDR data integration into ICU, these should be clean, freshly
checked-out. For released CLDR sources, an alternative to checking out sources
for a given version is downloading the zipped sources for the common (core.zip)
and tools (tools.zip) directory subtrees from the Data column in
for a given version is downloading the zipped sources for the common (`core.zip`)
and tools (`tools.zip`) directory subtrees from the Data column in
[CLDR Releases/Downloads](https://cldr.unicode.org/index/downloads)
Besides a standard JDK, the process also requires [ant](https://ant.apache.org) and
Besides a standard JDK 11+, the process also requires [ant](https://ant.apache.org) and
[maven](https://maven.apache.org) plus the xml-apis.jar from the
[Apache xalan package](https://xalan.apache.org/xalan-j/downloads.html) _(Is this
latter requirement still true?)_. You will also need to have performed the
latter requirement still true?)_.
If you do CLDR development you can configure maven as documented at
[CLDR Maven setup](http://cldr.unicode.org/development/maven) (non-Eclipse version).
But for the CLDR to ICU data conversion, or for regular ICU development this is not needed.
Notes:
* Enough things can (and will) fail in this process that it is best to
@ -65,12 +69,12 @@ Notes:
files are used in addition to the CLDR files as inputs to the CLDR data build
process for ICU):
* The primary file to edit for adding/removing locales and/or collation and
rbnf data is<br>
`$TOOLS_ROOT/cldr/cldr-to-icu/build-icu-data.xml`.
`rbnf` data is \
`$ICU_DIR/tools/cldr/cldr-to-icu/config.xml`.
* There are some files in `icu4c/source/data/xml/` that may need editing for
certain additions. This is especially true for brkitr additions; however there
are rbnf files there that add some rules. The collation files there mainly
hook up the UCA collation rules in `icu4c/data/unidata/UCARules.txt` to the
certain additions. This is especially true for `brkitr` additions; however there
are `rbnf` files there that add some rules. The collation files there mainly
hook up the UCA collation rules in `icu4c/source/data/unidata/UCARules.txt` to the
collation data. To process these files, certain CLDR dtds are copied over to
ICU.
@ -82,6 +86,21 @@ considerations:
resolving build issues and test failures for both ICU4C and ICU4J.
* After everything is committed, you will need to tag the cldr and cldr-staging
sources that ended up being used for the integration (see process below).
* Before doing the integration, there are some prerequisite tasks to do in CLDR,
as described in the next section.
# CLDR prerequisites for BRS integrations
The following tasks should be done in the CLDR repo before beginning a CLDR-ICU
integration that is part of the BRS process; handle each of these using a separate
ticket and a separate PR:
1. Generate updated CLDR test data (which is copied to ICU), using the process in
[Generating CLDR testData](https://docs.google.com/document/d/1-RC99npKcSSwUoYGkSzxaKOe76gYRkWhGdFzCdIBCu4/edit#heading=h.2rum9c6hrr4w)
2. Run `CLDRModify` with no options with no options and then with `-fP`. The web page
for `CLDRModify` is currently being converted to markdown, a reference to it will
be added when that process is complete.
# Environment variables
@ -105,61 +124,61 @@ There are several environment variables that need to be defined.
* `CLDR_TMP_DIR`: Parent of temporary CLDR production data. Defaults to
`$CLDR_DIR/../cldr-aux` (sibling to `CLDR_DIR`).
> **NOTE:** As of CLDR 36 and 37, the GenerateProductionData tool no longer
> **NOTE:** As of CLDR 36 and 37, the `GenerateProductionData` tool no longer
generates data by default into `$CLDR_TMP_DIR/production`; instead it
generates data into `$CLDR_DIR/../cldr-staging/production` (though there is
a command-line option to override this). However the rest of the build still
assumes that the generated data is in `$CLDR_TMP_DIR/production`.
So `CLDR_TMP_DIR` must be defined to be `CLDR_DIR/../cldr-staging`.
3. ICU-related variables
* `ICU4C_DIR`: Path to root of ICU4C sources, below which is the source dir.
* `ICU_DIR`: Path to root of ICU directory, below which are (e.g.) the
`icu4c`, `icu4j`, and `tools` directories.
* `ICU4J_ROOT`: Path to root of ICU4J sources, below which is the main dir.
* `ICU4C_DIR`: Path to root of ICU4C sources, below which is the `source` dir.
* `ICU4J_ROOT`: Path to root of ICU4J sources, below which is the `main` dir.
* `TOOLS_ROOT`: Path to root of ICU tools directory, below which are (e.g.) the
cldr and unicodetools dirs.
# Process
## 1 Environment variables
1a. Java, ant, and maven variables, adjust for your system
```
```sh
export JAVA_HOME=/usr/libexec/java_home
export ANT_OPTS="-Xmx8192m"
export MAVEN_ARGS="--no-transfer-progress"
```
1b. CLDR variables, adjust for your setup; with cygwin it might be e.g.
```
```sh
CLDR_DIR=`cygpath -wp /build/cldr`
```
Note that for cldr-staging we do not use personal forks, we commit directly.
```
```sh
export CLDR_DIR=$HOME/cldr-myfork
export CLDR_TMP_DIR=$HOME/cldr-staging
export CLDR_DATA_DIR=$HOME/cldr-staging/production
```
1c. ICU variables
```
```sh
export ICU4C_DIR=$HOME/icu-myfork/icu4c
export ICU4J_ROOT=$HOME/icu-myfork/icu4j
export TOOLS_ROOT=$HOME/icu-myfork/tools
```
1d. Directory for logs/notes (create if does not exist)
```
```sh
export NOTES=...(some directory)...
mkdir -p $NOTES
```
1e. The name of the icu data directory for Java (for example `icudt74b`)
```
```sh
export ICU_DATA_VER=icudt(version)b
```
@ -167,10 +186,10 @@ export ICU_DATA_VER=icudt(version)b
2a. Configure ICU4C, build and test without new data first, to verify that
there are no pre-existing errors, and to build some tools needed for later
steps. Here `<platform>` is the runConfigureICU code for the platform you
are building on, e.g. Linux, MacOSX, Cygwin.
steps. Here `<platform>` is the `runConfigureICU` code for the platform you
are building on, e.g. Linux, macOS, Cygwin.
(optionally build with debug enabled)
```
```sh
cd $ICU4C_DIR/source
./runConfigureICU [--enable-debug] <platform>
make clean
@ -180,7 +199,7 @@ make check 2>&1 | tee $NOTES/icu4c-oldData-makeCheck.txt
2b. Now with ICU4J, build and test without new data first, to verify that
there are no pre-existing errors (or at least to have the pre-existing errors
as a base for comparison):
```
```sh
cd $ICU4J_ROOT
mvn clean
mvn verify 2>&1 | tee $NOTES/icu4j-oldData-mvnCheck.txt
@ -195,31 +214,33 @@ cp -p $CLDR_DIR/common/dtd/ldmlICU.dtd $ICU4C_DIR/source/data/dtd/cldr/common/dt
```
3b. Update the cldr-icu tooling to use the latest tagged version of ICU
```
open $TOOLS_ROOT/cldr/cldr-to-icu/pom.xml
```sh
open $ICU_DIR/tools/cldr/cldr-to-icu/pom.xml
```
(search for `icu4j-for-cldr` and update to the latest tagged version per instructions)
3c. Update the build for any new icu version, added locales, etc.
```sh
# ICU version
open $ICU_DIR/tools/cldr/cldr-to-icu/pom.xml
# Locales and other configuration changes
open $ICU_DIR/tools/cldr/cldr-to-icu/config.xml
```
open $TOOLS_ROOT/cldr/cldr-to-icu/build-icu-data.xml
```
(update icuVersion, icuDataVersion if necessary; update lists of locales to include if necessary)
(update `icuVersion`, `icuDataVersion` if necessary; update lists of locales to include if necessary)
3d. If there are new data types or variants in CLDR, you may need to update the
files that specify mapping of CLDR data to ICU rseources:
```
open $TOOLS_ROOT/cldr/cldr-to-icu/src/main/resources/ldml2icu_locale.txt
open $TOOLS_ROOT/cldr/cldr-to-icu/src/main/resources/ldml2icu_supplemental.txt
files that specify mapping of CLDR data to ICU resources:
```sh
open $ICU_DIR/tools/cldr/cldr-to-icu/src/main/resources/ldml2icu_locale.txt
open $ICU_DIR/tools/cldr/cldr-to-icu/src/main/resources/ldml2icu_supplemental.txt
```
## 4 Build and install CLDR jar
See `$TOOLS_ROOT/cldr/lib/README.txt` for more information on the CLDR
jar and the `install-cldr-jars.sh` script.
```
cd $TOOLS_ROOT/cldr
ant install-cldr-libs
See `$ICU_DIR/tools/cldr/cldr-to-icu/README.md` for more information on the CLDR jar.
```sh
cd "$CLDR_DIR"
mvn clean install -pl :cldr-all,:cldr-code -DskipTests -DskipITs
```
## 5 Generate CLDR production data and convert for ICU
@ -232,14 +253,15 @@ This process uses ant with ICU4C's `data/build.xml`
(usually `$CLDR_TMP_DIR/production`), required if any CLDR data has changed.
* Running `ant setup` is not required, but it will print useful errors to
debug issues with your path when it fails.
```
```sh
cd $ICU4C_DIR/source/data
ant cleanprod
ant setup
ant proddata 2>&1 | tee $NOTES/cldr-newData-proddataLog.txt
```
> Note, for CLDR development, at this point tests are sometimes run on the
> Note, for CLDR development, at this point tests are sometimes run on the
production data, see
[BRS: Run tests on production data](https://cldr.unicode.org/development/cldr-big-red-switch/brs-run-tests-on-production-data)
@ -247,26 +269,27 @@ ant proddata 2>&1 | tee $NOTES/cldr-newData-proddataLog.txt
These include .txt files and .py files. These new files will replace whatever was
already present in the ICU4C sources. This process uses the `LdmlConverter` in
`$TOOLS_ROOT/cldr/cldr-to-icu/`; see `$TOOLS_ROOT/cldr/cldr-to-icu/README.txt`.
`$ICU_DIR/tools/cldr/cldr-to-icu/`; see `$ICU_DIR/tools/cldr/cldr-to-icu/README.md`.
* This process will take several minutes, during most of which there will be no log
output (so do not assume nothing is happening). Keep a log so you can investigate
anything that looks suspicious.
* Note that `ant clean` should _not_ be run before this. The `build-icu-data.xml` process
* The conversion tool
will automatically run its own "clean" step to delete files it cannot determine to
be ones that it would generate, except for pasts listed in `<retain>` elements such as
`coll/de__PHONEBOOK.txt`, `coll/de_.txt`, etc.
* Before running ant to regenerate the data, make any necessary changes to the
build-icu-data.xml file, such as adding new locales etc.
```
cd $TOOLS_ROOT/cldr/cldr-to-icu
ant -f build-icu-data.xml -DcldrDataDir="$CLDR_TMP_DIR/production" | tee $NOTES/cldr-newData-builddataLog.txt
* Before running the tool to regenerate the data, make any necessary changes to the
`config.xml` file, such as adding new locales etc.
```sh
cd $ICU_DIR/tools/cldr/cldr-to-icu
java -jar target/cldr-to-icu-1.0-SNAPSHOT-jar-with-dependencies.jar --cldrDataDir="$CLDR_TMP_DIR/production" | tee $NOTES/cldr-newData-builddataLog.txt
```
5c. Update the CLDR testData files needed by ICU4C/J tests, ensuring
they are representative of the newest CLDR data.
```
cd $TOOLS_ROOT/cldr
```sh
cd $ICU_DIR/tools/cldr
ant copy-cldr-testdata
```
@ -274,7 +297,7 @@ ant copy-cldr-testdata
(This step has been subsumed into 5c above)
5e. For now, manually re-add the `lstm` entries in `data/brkitr/root.txt`
```
```sh
open $ICU4C_DIR/source/data/brkitr/root.txt
```
Paste the following block after the dictionaries block and before the final closing '}':
@ -285,12 +308,30 @@ Paste the following block after the dictionaries block and before the final clos
}
```
5f. Update hard-coded lists in ICU
ICU has some hard-coded lists of locale-related codes that may need updating. Ideally these should
be replaced by data converted from CLDR ([ICU-22839](https://unicode-org.atlassian.net/browse/ICU-22839)). In the
meantime these need to be updated manually.
| code type | icu4c/source library file(s) | icu4c/source test file(s) |
| -------------------------------------------------------------------------------------------- | ------------------------------------------- | ------------------------------------------- |
| language<BR>(at least all language codes in ICU locales or CLDR `attributeValueValidity.xml`) | `common/uloc.cpp`: `LANGUAGES[], LANGUAGES_3[]` | `test/testdata/structLocale.txt`: Languages |
| region<BR>(at least all region codes in ICU locales or CLDR `attributeValueValidity.xml`) | `common/uloc.cpp`: `COUNTRIES[], COUNTRIES_3[]` | `test/testdata/structLocale.txt`: Countries |
| currency (see note below)<BR>(at least everything in CLDR `supplementalData.xml` `currencyData`) | `common/ucurr.cpp`: `gCurrencyList[]]` | `test/testdata/structLocale.txt`: `Currencies`,`CurrencyPlurals`<BR>`test/cintltst/currtest.c`:`TestEnumList()` |
| timezone | (not currently aware of hard-coded list) | `test/testdata/structLocale.txt`: `zoneStrings` |
Note: currency code lists are also in other code lists along with measurement units,
but these are re-generated using the procedure in
[Updating `MeasureUnit` with new CLDR data](https://unicode-org.github.io/icu/processes/release/tasks/updating-measure-unit.html)
(also mentioned in step 14 below).
## 6 Check the results
Check which data files have modifications, which have been added or removed
(if there are no changes, you may not need to proceed further). Make sure the
list seems reasonable. You may want to save logs, and possibly examine them...
```
```sh
cd $ICU4C_DIR/..
git status
git status > $NOTES/gitStatusDelta-data.txt
@ -299,7 +340,7 @@ open $NOTES/gitDiffDelta-data.txt
```
6a. You may also want to check which files were modified in CLDR production data:
```
```sh
cd $CLDR_TMP_DIR
git status
git status > $NOTES/gitStatusDelta-staging.txt
@ -309,25 +350,25 @@ git diff > $NOTES/gitDiffDelta-staging.txt
## 7 Fix data generation errors
Look for evident errors in the list of file changes, or in the file diffs.
Fixing them may entail modifying CLDR source data or `TOOLS_ROOT` config files or
Fixing them may entail modifying CLDR source data or `$ICU_DIR/tools/cldr/cldr-to-icu` config files or
tooling.
## 8 Rebuild ICU4C with new data, run tests
8a. Re-run configure and make clean, necessary to handle any files added or deleted:
```
```sh
cd $ICU4C_DIR/source
./runConfigureICU [--enable-debug] <platform>
make clean
```
8b. Do the rebuild, keeping a log as before:
```
```sh
make check 2>&1 | tee $NOTES/icu4c-newData-makeCheck.txt
```
To re-run a specific test if necessary when fixing bugs; for example:
```
```sh
cd test/intltest
DYLD_LIBRARY_PATH=../../lib:../../stubdata:../../tools/ctestfw:$DYLD_LIBRARY_PATH ./intltest -e -G format/NumberTest/NumberPermutationTest
cd ../..
@ -347,7 +388,8 @@ ticket under which you are performing the integration, if you have one), fix the
and regenerate from step 4.
If the data is OK , other sources of failure can include:
* Problems with the CLDR-ICU conversion process (pehaps some locale data is not getting
* Problems with the CLDR-ICU conversion process (perhaps some locale data is not getting
converted properly; go back to step 3, adjust and repeat from there.
* Problems with ICU library code that may not be using new resources properly. Fix and
repeat from step 8.
@ -357,17 +399,17 @@ If the data is OK , other sources of failure can include:
you will need to update `icu4c/test/testdata/structLocale.txt` (otherwise
`/tsutil/cldrtest/TestLocaleStructure` may fail).
## 10 Running ICU4C tests in exhaustive mode.
## 10 Running ICU4C tests in exhaustive mode
Exhautive tests should always be run for a CLDR-ICU integration PR before it is merged.
Exhaustive tests should always be run for a CLDR-ICU integration PR before it is merged.
Once you have a PR, you can do this for both C and J as part of the pre-merge CI tests
by adding the following as a comment in the pull request:<br>
`/azp run CI-Exhaustive` (the exhaustive tests are not run automatically on every PR).
by manually running a workflow (the exhaustive tests are not run automatically on every PR).
See [Continuous Integration / Exhaustive Tests](../userguide/dev/ci.md#exhaustive-tests).
The following instructions run the ICU4C exhaustive tests locally (which you may want to do
before even committing changes, or which may be necessary to diagnose failures in the
CI tests:
```
CI tests):
```sh
cd $ICU4C_DIR/source
export INTLTEST_OPTS="-e"
export CINTLTST_OPTS="-e"
@ -382,13 +424,13 @@ appropriate, and repeating from step 4 or 8 as appropriate.
## 12 Transfer the ICU4C data to ICU4J
12a. You need to reconfigure ICU4C to include the unicore data.
```
```sh
cd $ICU4C_DIR/source
ICU_DATA_BUILDTOOL_OPTS=--include_uni_core_data ./runConfigureICU <platform>
```
12b. Rebuild the data with the new config setting, then create the ICU4J data jar.
```
```sh
cd $ICU4C_DIR/source/data
make clean
make -j -l2.5
@ -396,13 +438,13 @@ make icu4j-data-install
```
12c. Create the test data jar
```
```sh
cd $ICU4C_DIR/source/test/testdata
make icu4j-data-install
```
12d. Update the extracted {main, test} data files in the Maven build
```
```sh
cd $ICU4J_ROOT
./extract-data-files.sh
```
@ -410,7 +452,7 @@ cd $ICU4J_ROOT
## 13 Rebuild ICU4J with new data, run tests
13a. Run the tests using the maven build
```
```sh
cd $ICU4J_ROOT
mvn clean
mvn install 2>&1 | tee $NOTES/icu4j-newData-mvnCheck.txt
@ -418,26 +460,29 @@ mvn install 2>&1 | tee $NOTES/icu4j-newData-mvnCheck.txt
It is possible to re-run a specific test class or method if necessary when fixing bugs.
For example (using artifactId, full class name, test all methods):
```
For example (using `artifactId`, full class name, test all methods):
```sh
mvn install -pl :core -Dtest=com.ibm.icu.dev.test.util.LocaleBuilderTest
```
or (example of using module path, class name, one method):
```
```sh
mvn install -pl main/common_tests -Dtest=MeasureUnitTest#TestGreek
```
13b. Optionally run the tests in exhautive mode
13b. Optionally run the tests in exhaustive mode
Optionally run before committing changes, or run to diagnose failures from
running exhastive CI tests in the PR using `/azp run CI-Exhaustive`:
```
Optionally run exhaustive tests locally before committing changes:
```sh
cd $ICU4J_ROOT
mvn install -DICU.exhaustive=10 2>&1 | tee $NOTES/icu4j-newData-mvnCheckEx.txt
```
Exhaustive tests in CI can be triggered by running the "Exhaustive Tests for ICU"
action from the GitHub web UI.
See [Continuous Integration / Exhaustive Tests](../userguide/dev/ci.md#exhaustive-tests).
Running a specific test is the same as above:
```
```sh
mvn install --pl :core -DICU.exhaustive=10 -Dtest=ExhaustiveNumberTest
```
@ -449,7 +494,7 @@ step 4, as appropriate, until there are no more failures in ICU4C or ICU4J.
Note that certain data changes and related test failures may require the
rebuilding of other kinds of data and/or code. For example:
### Updating MeasureUnit code and tests
### Updating `MeasureUnit` code and tests
If you see a failure such as
```
@ -457,7 +502,7 @@ MeasureUnitTest testCLDRUnitAvailability Failure (MeasureUnitTest.java:3410) : U
```
then you will need to update the C and J library and test code for new measurement
units, see the procedure at
[Updating MeasureUnit with new CLDR data](https://unicode-org.github.io/icu/processes/release/tasks/updating-measure-unit.html)
[Updating `MeasureUnit` with new CLDR data](https://unicode-org.github.io/icu/processes/release/tasks/updating-measure-unit.html)
### Updating plurals test data
@ -470,12 +515,12 @@ To address these requires updating the LOCALE_SNAPSHOT data in
```
$ICU4J_ROOT/main/common_tests/src/test/java/com/ibm/icu/dev/test/format/PluralRulesTest.java
```
by modifying the TestLocales() test there to run `generateLOCALE_SNAPSHOT()` and
by modifying the `TestLocales()` test there to run `generateLOCALE_SNAPSHOT()` and
then copying in the updated data.
## 15 Check the ICU file changes and commit
```
```sh
cd $ICU4C_DIR/source
make clean
cd $ICU4J_ROOT
@ -495,13 +540,13 @@ git push origin ICU-nnnnn-branchname
(Only for an official integration from CLDR git repositories)
16a. Check cldr-staging changes, and commit
```
```sh
cd $CLDR_TMP_DIR
git status
```
Then `git add` or `git rm` files as necessary. Record the changes, commit and push.
```
```sh
git status > $NOTES/gitStatusDelta-production-afterAdd.txt
git commit -m 'CLDR-nnnnn production data corresponding to CLDR release-nn-stage'
git push origin main
@ -512,8 +557,8 @@ git push origin main
(There may be other cldr-staging changes unrelated to production data, such as charts
or spec; we want to include them in the tag, so pull first, but log to see what the
chnages are first)
```
changes are first)
```sh
cd $CLDR_TMP_DIR
git pull
git log
@ -526,7 +571,7 @@ git push --tags
We need to tag the main cldr repository. If $CLDR_DIR represents that repository,
this is easy:
```
```sh
cd $CLDR_DIR
git tag -a "release-nn-stage" -m "CLDR-nnnnn: tag CLDR release-nn-stage"
git push --tags
@ -534,7 +579,7 @@ git push --tags
However if $CLDR_DIR represents your personal fork or a branch from it, you need to
figure out what commit hash yo have integrated, and tag that hash in the main repo.
```
```sh
cd $CLDR_DIR
git log
```
@ -542,7 +587,7 @@ Note the latest commit hash hhhhhhhh...
Then switch to the main repo, update it, and tag the appropriate hash (making sure
it is in that repo!):
```
```sh
cd $HOME/cldr
git pull
git log
@ -550,7 +595,7 @@ git tag -a "release-nn-stage" -m "CLDR-nnnnn: tag CLDR release-nn-stage" hhhhhhh
git push --tags
```
## 18 Pubish the cldr tags in github
## 18 Publish the cldr tags in github
You should publish the cldr and cldr-staging tags in github.

View file

@ -59,6 +59,10 @@ Also, please look out for this type of message: "\***\*\* WARNING Bad namespace
not defined inside the "icu" namespace. Consider adding **U_NAMESPACE_BEGIN**
and **U_NAMESPACE_END** around the class and member definitions.
## Update the runners
In all workflow yaml files, update macos-n, ubuntu-p.q, windows-yyyy to the version currently designated -latest on https://github.com/actions/runner-images?tab=readme-ov-file#available-images.
## Update the pool bundles
*Obsolete for ICU 64+*: The pool bundles are no longer checked in. Instead,

View file

@ -193,8 +193,8 @@ API change report.
3. The output file `icu4j<ver>.api3.gz` is created in `<icu4j_root>/out` directory.
4. Copy the output .gz file to `<icu4j_root>/tools/build` directory and check in the
file to the repository.
5. You may delete very old versions of the API signature files. Keeping 10
versions to the latest should be good enough.
5. You may delete very old versions of the API signature files. We keep last 5
versions including a new release and ICU_3.6.
Note: This task is only necessary for reference releases, because we won't
change public APIs in maintenance releases. The API signature file for an ICU4J
@ -368,27 +368,23 @@ Note: This is also referenced below [Upload API documentations](docs.md#upload-a
### ICU4J
**Note:** JCite must be installed for building ICU4J documentation:
<https://icu.unicode.org/setup/java/ant#TOC-Building-ICU4J-API-Reference-Document-with-JCite>
Build the API documentation pages for the new release:
```
ant releaseDocs
cd icu4j
releases_tools/github_release.sh
```
The API documentation will be found in targets/github_release/
#### Alternative method:
Next, update the documents for this version:
* Copy the `icu4j-<version>-fulljavadoc.jar` to the to `icu-docs/apidoc` directory, either dev (for release candidates) or released (for public distribution).
* Unzip the `icu4j-<version>-fulljavadoc.jar` in that directory.
* Verify that the documentation is updated, then remove the .jar file.
* Update the file README.md for either the Released or the Dev line with the new version.
* Use `git add .` then create a github commit with the ICU issue for this version, e.g., [Pull request #58](https://github.com/unicode-org/icu-docs/pull/58).
* Create the pull request, obtain a review, and merge when all is OK.
**Note:** JCite must be installed for building ICU4J documentation:
<https://icu.unicode.org/setup/java/ant#TOC-Building-ICU4J-API-Reference-Document-with-JCite>
Use the release target
```
ant releaseVer
```
which generate all release files.
* Upload the output files including icu4j-docs.jar to the release page first,
* Then update the live API docs from the generated docs.jar.

View file

@ -126,6 +126,37 @@ the UTF-8 signature byte sequence ("BOM").~~
## Clean up import statements
### From command line
This can be done from command line using the
[Google Java Format](https://github.com/google/google-java-format) tool.
**WARNING:** requires JDK 17 or newer (December 2024)
Download the latest Google Java Format from Maven Central:
```sh
mvn dependency:copy -Dartifact=com.google.googlejavaformat:google-java-format:LATEST:jar:all-deps \
-DoutputDirectory=/tmp \
-Dmdep.stripVersion=true \
-q -ntp
```
Cleanup all Java files (only imports, nothing else):
```sh
find . -type f -name '*.java' | xargs java -jar /tmp/google-java-format-all-deps.jar -i --aosp --fix-imports-only --skip-sorting-imports
```
Remove the Google Java Format artifact from the temporary folder:
```sh
rm /tmp/google-java-format-all-deps.jar
```
You can (of course) download it from
[GitHub Releases](https://github.com/google/google-java-format/releases). \
Or save it in a personal tools folder and keep it around.
### From Eclipse
The Eclipse IDE provides a feature which allow you to organize import statements
for multiple files. Right click on projects/source folders/files, you can select
\[Source\] - \[Organize Imports\] which resolve all wildcard imports and sort
@ -474,7 +505,7 @@ make check
## Test ICU4C Samples and Demos
### Windows build and test
Note: Since ICU 73, this task has been included in the Azure DevOps Pipeline which is triggered automatically upon merging with main/maint* branches.
Note: Since ICU 76, this task has been included in the GHA workflows which are triggered automatically upon merging with main/maint* branches.
These instructions explain how to run the tests manually.
To build the ICU4C samples on Windows with Visual Studio, use the following

View file

@ -111,10 +111,10 @@ Oracle JRE, you should go to the J2SE download page
download the latest JDK DST Timezone Update Tool and apply the patch to your
local JRE.
To run the test case, you just need to invoke the ant target "jdktzCheck".
To run the test case, you just need to invoke mvn verify goal with the special property as below.
```sh
$ ant jdktzCheck
$ mvn verify -Dcom.ibm.icu.util.TimeZone.DefaultTimeZoneType=JDK
```
**Note:** You might not be able to get the update tool matching the tzdata

View file

@ -57,13 +57,34 @@ merging post RC fixes from trunk and others.
Every commit being shipped in the next ICU release should be labeled with a Jira
ticket that is marked as fixed with the correct fix version. Further, there
should be no Jira tickets marked as fixed with the current fixVersion that do
not have commits. To check this, run the following tool:
not have commits.
### Run locally
To check this, run the following tool:
<https://github.com/unicode-org/icu/tree/main/tools/commit-checker>
Follow the instructions in the README file to generate the report and send it
Follow the instructions in the README file to generate the report locally and send it
for review.
### Run via CI
Alternatively, you can run the "BRS Commit Checker Report" workflow directly from the project page CI
by:
1. Go to the [Actions tab](https://github.com/unicode-org/icu/actions)
1. Click on the "BRS Commit Checker Report" workflow name on the left hand list of workflows
1. Click the "Run workflow" dropdown.
The dropdown should reveal an input form in which to provide inputs
1. Provide the same inputs in the form as you would for a local run of the tool,
as described in the tool's Readme in the instructions above.
The only difference from the local run instructions is that git branch names in the
Actions workflow input form should be prefixed with `origin/`.
---
## Fix Mis-ticketted commits

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

View file

@ -165,28 +165,19 @@ trunk at the source revision is good.~~
Create the download page before the first milestone, if we have one, or before
the release candidate.
Log into the ICU homepage Google Site. (If you don't have write access, ask one
of the editors to grant you access.)
Since ICU 76, new download pages are in Markdown on GitHub, at docs/download/ .
Verify that there is not already a page for the upcoming release: Either via the
sitemap, or on the bottom of the main download page where it says something like
"Subpages (27): View All".
In your ICU workspace, copy the download page for the last release.
Adjust the navbar data at the top: Title, and nav_order one fewer than last time.
Copy the download page for the last release: Go to that page, gear menu, Copy
page; "Name your page" using just the major version number for now (e.g., "61")
so that the page URL is just that number, select "Put page under Downloading
ICU", click the red COPY button.
Adjust the new page as needed: Adjust the title to "ICU 77" (with the right version number...),
remove contents specific to the previous release, update all version numbers, update all links.
Adjust the new page as needed: Change the title to "Download ICU 61 Release
Candidate" (with the right version number...), remove contents specific to the
previous release, update all version numbers, update all links.
Put a big, **bold+italics** warning at the top like "This version has not been
released yet. Use it for testing but do not use it in production!"
Put a big, bold+italics, red warning at the top like "This version has not been
released yet. Use it for testing but not in production!"
Save the page. It is generally a good idea to save frequently. For further
edits, simply go back into edit mode. (Keyboard shortcut 'e' for edit, ctrl+s
for save.)
Compare with the one-year-ago release page and adjust for whether we have a major release,
a new Unicode version, etc.
Add new contents for the upcoming release: Grab some text from the sibling
Unicode and CLDR release notes, look at the proposal status doc for this
@ -198,9 +189,7 @@ like a Migration Issues section etc.
Ask everyone on the team to add stuff & details.
**Once the page has been created and various people are invited to edit it,
everyone should keep editing short so that the page is not locked for others for
long periods of time.**
Once the page has been created and merged, consider editing online on GitHub.
### Maintenance release
@ -241,16 +230,22 @@ Download Directories are located at, for example,
corresponding to <http://download.icu-project.org/ex/files/icu4c/4.4.2/>
Look at previous releases for an example.
### Java Source/Bin:
### Java Source/Bin
**Post 76.1 see [Publish - Version 76.1](release.md)**
Follow instructions here: [Building ICU4J Release Files](../release-build.md)
### C source/binary:
**Post 76.1 see [Publish - Version 76.1](release.md)**
<span style="background:yellow">***WORK IN PROGRESS***</a>
#### Source and Linux Binaries:
**Post 76.1 see [Publish - Version 76.1](release.md)**
Important: this step works with Unix make + docker.
First, install *docker* and *docker-compose. D*o not proceed until *docker run
@ -285,6 +280,9 @@ run \`make dist\`.
#### Windows Binary:
**Post 76.1 see [Publish - Version 76.1](release.md)** \
That new flow overlaps with _"Using the output from the build bots"_ below.
* Manual process:
* Build with MSVC x64 Release. (See the ICU
[readme.html](https://github.com/unicode-org/icu/main/blob/icu4c/readme.html)
@ -309,36 +307,24 @@ run \`make dist\`.
* Click on the green check mark (✔) on the most recent/last commit. (It
might be a red X if the builds failed, hopefully not).
* This will open up a pop-up with links to various CI builds.
* Click on one of the various links that says "Details" for the Azure CI
builds.
* Click on one of the various links that says "Details" for any of the GHA
builds and click on "Summary".
* This will open up the GitHub overview of the build status.<br>
![image](azure-ci-builds.png)<br>
* Click on the link "View more details on Azure Pipelines" link.
* This will take you to the actual Azure CI build page.
* On the top right of the page there should be a button titled
"Artifacts". Click this and it should show a drop-down with various ZIP
files that you can download.<br>
![image](azure-ci-builds-artifacts.png)<br>
* The ZIP may automatically download for you.
* However, if you are signed-in to visualstudio.com then you might see a
dialog titled "Artifacts explorer".
* In this case click on the name, then the "..." button to download the
zip file.<br>
![image](azure-ci-builds-artifacts-download.png)<br>
* Download both the x64 (64-bit) and x86 (32-bit) ZIP files.
![image](gha-ci-summary.png)<br>
* Scroll down at the bottom to find the sub-section "Artifacts". It should show you list of zips you can download<br>
![image](gha-ci-artifacts.png)<br>
* Download the x64, x86 and ARM zip files.
* For each architecture:
* Extract the Zip file. (It will have a name like
"20190829.6_ICU4C_MSVC_x64_Release.zip").
"icu4c.Win64.run_#104.zip").
* Navigate into the folder with the same name.
* Rename the file "icu-windows.zip" to the appropriate name:
* Ex: The x64 zip for version 64.1 was named
"icu4c-64_1-Win64-MSVC2017.zip"
* Ex: The x86 zip for version 64.1 was named
"icu4c-64_1-Win32-MSVC2017.zip"
* Note: Note: As of ICU 68, the pre-built binaries use MSVC2019
instead of MSVC2017.
* Check and verify the names of the zip file are appropriate:
* Ex: The x64 zip for version 76.1 should be named
"icu4c-76_1-Win64-MSVC2022.zip"
* Ex: The x86 zip for version 76.1 should be named
"icu4c-76_1-Win32-MSVC2022.zip"
* Note: For RC releases the name looked like this:
"icu4c-64rc-Win64-MSVC2017.zip"
"icu4c-76rc-Win64-MSVC2022"
* ~~AIX Bin:~~ (AIX is broken and ignored for now.)
* ~~login to gcc119.fsffrance.org and copy the ICU4C source archive
created above to there.~~
@ -357,15 +343,19 @@ run \`make dist\`.
#### Output of icuexportdata:
**Post 76.1 see [Publish - Version 76.1](release.md)**
This step publishes pre-processed Unicode property data, which may be ingested by downstream clients such as ICU4X.
* Using the output from the build bots:
* Navigate to the Azure Pipeline `C: Create Artifacts from icuexportdata` and download its single artifact (`icuexportdata_output`)
* Navigate to the GHA Workflow `icu4c-icuexportdata` and download the artifact (`icuexportdata_output`) from summary page
* Unzip the file
* Rename the `icuexportdata_tag-goes-here.zip` file to the correct tag (replacing slashes with dashes)
### Signing archives and creating checksums:
**Post 76.1 see [Publish - Version 76.1](release.md)**
#### Step 0. PGP keys:
Use your own personal PGP key. Make sure that at least one other member of the

View file

@ -0,0 +1,82 @@
---
layout: default
title: Publish - Version 76.1 - WIP
parent: Release & Milestone Tasks
grand_parent: Contributors
nav_order: 90
---
<!--
© 2024 and later: Unicode, Inc. and others.
License & terms of use: http://www.unicode.org/copyright.html
-->
# Publish - Version 76.1 - WIP
{: .no_toc }
## Contents
{: .no_toc .text-delta }
---
## Most artifacts are now built in the GitHub CI. Work in Progress!!!
Many of the tasks that used to be done before "by hand" are now at least
partially done by GitHub Actions.
The release requires (for now) triggering the actions "by hand".
First go to [Github - unicode-org/icu](https://github.com/unicode-org/icu).
Create a release, give it a tag (something like `release-76` or `release-74-2`) \
Make sure the release is **DRAFT**.
See [Release & Milestone Tasks - Tagging](index.md#tagging) for details.
That tag will need to be passed to several of the actions below.
Go to [Github - unicode-org/icu](https://github.com/unicode-org/icu) -- Actions
and select the action to run from the left side.
Select an action and (from the right side) select "Run workflow".
Some actions will have an "Run the tests." option. \
**KEEP IT ON!** It is there for development, but you MUST run the tests for release.
Most will have a "Release tag to upload to." option. \
Here you should use the release tag.
1. **GHA ICU4C** \
This will create and add to release: \
* The Windows binaries (`icu4c-{icuver}-Win32-MSVC20??.zip`,
`icu4c-{icuver}-Win64-MSVC20??.zip`, `icu4c-{icuver}-WinARM64-MSVC20??.zip`)
* The packaged data for ICU4X (`icuexportdata_tag-goes-here.zip`)
1. **Release - ICU4C artifacts on Fedora** (`release-icu4c-fedora.yml`) \
This will create and add to release:
* `icu4c-{icuver}-Fedora_Linux??-x64.tgz`.
1. **Release - ICU4C artifacts on Ubuntu** (`release-icu4c-ubuntu.yml`) \
This will create and add to release:
* The `icu4c-{icuver}-Ubuntu??.04-x64.tgz` file
* The icu4c data files (`icu4c-{icuver}-data.zip`,
`icu4c-{icuver}-data-bin-b.zip`, `icu4c-{icuver}-data-bin-l.zip`)
* The icu4c source archives (`icu4c-{icuver}-src.tgz` and `icu4c-{icuver}-src.zip`)
* The ICU4C documentation (`icu4c-76_1-docs.zip`) \
**WARNING:** this is also the one to be published (unpacked) for web access
1. **Release - ICU4J publish to Maven Central** (`release-icu4j-maven.yml`) \
This will create, publish to Maven Cental (using Sonatype), and add to release:
* All the official Maven artifacts, including sources and javadoc. \
The Maven Central artifacts have checksums and are digitally signed. \
Someone with access to Sonatype Nexus should still login there and authorize
the promotion to Maven Central.
* The unified Java documentation, (`icu4j-76.1-fulljavadoc.jar`) \
**WARNING:** this is also the one to be published (unpacked) for web access
1. **Release - Create checksums and GPG sign** (`release-check-sign.yml`) \
THIS SHOULD BE THE LAST ACTION YOU RUN. \
After all the artifacts from the previous steps are posted to the release. \
The action will download all the artifacts from release,
create checksum files (`SHASUM512.txt` and `*.md5`),
and digital signature files (`*.asc`)

View file

@ -36,7 +36,6 @@ compiled with Java system libraries from JRE 7.*</span>
* Java Runtime Environment 7 (used as bootclasspath for cross-compilation)
* Apache Ant 1.10.x (the latest available version)
\[<http://ant.apache.org/>\]
* JCite 1.13.0 \[<https://arrenbrecht.ch/jcite/>\]
### Other Prerequisites only for GA
@ -56,9 +55,6 @@ compiled with Java system libraries from JRE 7.*</span>
### Configuration
* Set environment variable `JAVA_HOME` to point to the JDK directory.
* Set environment variable `JCITE_DIR` to specify JCite binary location (see[
Building ICU4J API Reference Document with
JCite](../../../setup/java/ant/index.md))
* See `build.properties` to check version strings are properly set.
* `api.report.version` / `api.report.prev.version` are used for locating
API signature files and should be integer numbers.
@ -150,7 +146,6 @@ compiled with Java system libraries from JRE 7.*</span>
[echo] [WARNING] Insufficient Build Configuration for ICU4J Release
[echo] JDK Tools Version: 1.8.0_152
[echo] JRE 7 System Library Path: Not Defined!
[echo] JCite Library Path: /home/yoshito/java-libs/jcite-1.13.0/build/jcite.jar:/home/yoshito/java-libs/jcite-1.13.0/lib/commons-discovery-0.4.jar:/home/yoshito/java-libs/jcite-1.13.0/lib/commons-logging-1.1.jar:/home/yoshito/java-libs/jcite-1.13.0/lib/java2html.jar`
[echo] ################################################################
BUILD SUCCESSFUL

View file

@ -0,0 +1,150 @@
---
layout: default
title: Updating MeasureUnit with new CLDR data
parent: Release & Milestone Tasks
grand_parent: Contributors
nav_order: 120
---
<!--
© 2020 and later: Unicode, Inc. and others.
License & terms of use: http://www.unicode.org/copyright.html
-->
# Updating MeasureUnit with new CLDR data
{: .no_toc }
## Contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
This document explains how to update the C++ and Java version of the MeasureUnit
class with new CLDR data.
Code is generated by running MeasureUnitTest.java unit tests, which writes
generated code to System.out. Two ways to access this:
1. Within **eclipse**:
- Open MeasureUnitTest.java, run it by clicking on the green play button on
menu bar.
- Copy the generated code from the eclipse console to the clipboard.
2. With **ant**:
- Run: `ant checkTest
-Dtestclass='com.ibm.icu.dev.test.format.MeasureUnitTest'`
- Open the checkTest output: `out/junit-results/checkTest/html/index.html`
- Navigate to "System.out" at the bottom of the MeasureUnitTest page to find
the generated code, and copy to the clipboard.
After syncing CLDR data with ICU do the following. This documentation assumes
that you are updating the MeasureUnit clases for ICU 68.
* Check out
$GIT_ROOT/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/format/MeasureUnitTest.java
* Open MeasureUnitTest.java.
* Find the `testZZZ` test, its code should all be commented out. This test will
execute last and will run the desired code.
Make sure DRAFT_VERSIONS at top of MeasureUnitTest.java is set correctly.
These are the ICU versions that have draft methods.
## Update MeasureUnit.java
* Change `testZZZ` to run `generateConstants(“68”); // ICU 68.`
* Run MeasureUnitTest.java, copy the generated code (see instructions above).
* Open MeasureUnit.java:
$GIT_ROOT/icu4j/main/core/src/main/java/com/ibm/icu/util/MeasureUnit.java
* Look for line containing:
`// Start generated MeasureUnit constants`
* Look for line containing:
`// End generated MeasureUnit constants`
* Replace all the generated code in between with the contents of the clipboard
* Run the MeasureUnitTest.java to ensure that the new code is backward
compatible. These compatibility tests are called something like
`TestCompatible65`, which tests backward compatibility with ICU 65.
* Create a compatibility test for ICU 68. Change `testZZZ` to run
`generateBackwardCompatibilityTest(“68”)`
* Run tests.
* Copy generated test (see instructions above) into MeasureUnitTest.java
* Run tests again to ensure that new code is backward compatible with itself
## Update ICU4C
* checkout ICU4C
### Update measunit.h
* Change testZZZ to run `generateCXXHConstants(“68”); // ICU 68`.
* Run MeasureUnitTest.java, copy the generated code (see instructions above).
* Open $GIT_ROOT/icu4c/source/i18n/unicode/measunit.h. Look for line containing:
`// Start generated createXXX methods`
* Look for line:
`// End generated createXXX methods`
* Replace all the generated code in between with the contents of the clipboard
### Update measunit.cpp
* Change testZZZ to run generateCXXConstants();
* Run MeasureUnitTest.java, copy the generated code (see instructions above).
* Open $GIT_ROOT/icu4c/source/i18n/measunit.cpp. Look for line containing:
`// Start generated code for measunit.cpp`
* Look for lines
`// End generated code for measunit.cpp`
* Replace all the generated code in between with the contents of the clipboard
### Run C++ tests
* Run `./intltest format/MeasureFormatTest` from `test/intltest` to ensure new
code is backward compatible.
* Create a compatibility test for ICU 68. Change `testZZZ` in eclipse to run
`generateCXXBackwardCompatibilityTest(“68”)`
* Run tests.
* Copy generated test (see instructions above) into
$GIT_ROOT/icu4c/source/test/intltest/measfmttest.cpp. Make other necessary
changes to make test compile. You can find these changes by searching for
`TestCompatible65()`
* Run tests again to ensure that new code is backward compatible with itself
## Finishing changes
These last changes are necessary to permanently record the ICU version number of
any new measure units. Without these changes any new functions for this release
will be considered new for the next release too.
* Change `testZZZ` to run `updateJAVAVersions(“68”);`
* Run MeasureUnitTest.java, copy the generated code (see instructions above).
* Append the clipboard contents to the values of the JAVA_VERSIONS variable
near the top of MeasureUnitTest.java.
**Important:** what you are copying are just the new functions for the current
ICU version, in this case 68. Therefore append, do not replace.
## Updating units.txt and unitConstants
The standard ldml2icu process is used to update ICU's resource files (see
[cldr-icu-readme.txt](https://github.com/unicode-org/icu/blob/main/icu4c/source/data/cldr-icu-readme.txt)).
CLDR's units.xml defines conversion rates in terms of some constants defined in
`unitConstants`.
For efficiency and simplicity, ICU does not read `unitConstants` from the
resource file. If any new constants are added, some code changes would be
needed. This would be caught by `testUnitConstantFreshness` unit test in
`units_test.cpp`.
They are hard-coded:
* Java: `UnitConverter.java` has the constant names in
`UnitConverter.Factor.addEntity()` and constant values in
`UnitConverter.Factor.getConversionRate()`.
* C++: `units_converter.cpp` has the constant names in
`addSingleFactorConstant()`, with the constant values in `double
constantsValues[]` in the `units_converter.h` header file.

View file

@ -12,9 +12,11 @@ License & terms of use: http://www.unicode.org/copyright.html
-->
# Updating MeasureUnit with new CLDR data
{: .no_toc }
## Contents
{: .no_toc .text-delta }
1. TOC
@ -22,117 +24,94 @@ License & terms of use: http://www.unicode.org/copyright.html
---
This document explains how to update the C++ and Java version of the MeasureUnit
This document explains how to update the C++ and Java version of the `MeasureUnit`
class with new CLDR data.
Code is generated by running MeasureUnitTest.java unit tests, which writes
generated code to System.out. Two ways to access this:
This document applies to ICU 77 and later.
For older versions see updating-measure-unit-old.md
1. Within **eclipse**:
- Open MeasureUnitTest.java, run it by clicking on the green play button on
menu bar.
- Copy the generated code from the eclipse console to the clipboard.
Make sure `DRAFT_VERSION_SET` at top of
`./icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/format/MeasureUnitGeneratorTest.java`
is set correctly. \
These are the ICU versions that have draft methods.
2. With **ant**:
- Run: `ant checkTest
-Dtestclass='com.ibm.icu.dev.test.format.MeasureUnitTest'`
- Open the checkTest output: `out/junit-results/checkTest/html/index.html`
- Navigate to "System.out" at the bottom of the MeasureUnitTest page to find
the generated code, and copy to the clipboard.
The code is generated by running `MeasureUnitGeneratorTest.java` unit tests, which writes
generated code to various file.
After syncing CLDR data with ICU do the following. This documentation assumes
that you are updating the MeasureUnit clases for ICU 68.
1. With **maven** (command line):
- Change folder to `{icuRoot}/icu4j`
- run `mvn install -DskipTests -DskipITs`
- run `mvn install -q -Dtest=MeasureUnitGeneratorTest -DgenerateMeasureUnitUpdate -f main/common_tests`
* Check out
$GIT_ROOT/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/format/MeasureUnitTest.java
* Open MeasureUnitTest.java.
* Find the `testZZZ` test, its code should all be commented out. This test will
execute last and will run the desired code.
2. Within **Eclipse**:
- Open `MeasureUnitGeneratorTest.java`, find the `generateUnitTestsUpdate` methods
and run it by clicking on the green play button on menu bar. \
Choose "JUnit Test" if asked. \
This will not generate the update, but it will run the test and create a "Run Configuration". \
Open it (Main menu -- "Run" -- "Run Configurations"), select the one named
`MeasureUnitGeneratorTest.generateUnitTestsUpdate`, go to the "Arguments" tab and add
`-DgenerateMeasureUnitUpdate` to the "VM Arguments" text area.
Make sure DRAFT_VERSIONS at top of MeasureUnitTest.java is set correctly.
These are the ICU versions that have draft methods.
Both methods will generate files with in `icu4j/main/common_tests/target/` folder. \
The file names and the logging to the standard output will guide you.
## Update MeasureUnit.java
It currently looks something like this:
```
Copy the generated code fragments from / to
/some/absolute/path/icu4j/main/common_tests/target/MeasureUnit.java \
/some/absolute/path/icu4j/main/core/src/main/java/com/ibm/icu/util/MeasureUnit.java
* Change `testZZZ` to run `generateConstants(“68”); // ICU 68.`
* Run MeasureUnitTest.java, copy the generated code (see instructions above).
* Open MeasureUnit.java:
$GIT_ROOT/icu4j/main/core/src/main/java/com/ibm/icu/util/MeasureUnit.java
* Look for line containing:
Copy the generated code fragments from / to
/some/absolute/path/icu4j/main/common_tests/target/MeasureUnitCompatibilityTest.java \
/some/absolute/path/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/format/MeasureUnitCompatibilityTest.java
`// Start generated MeasureUnit constants`
* Look for line containing:
Copy the generated code fragments from / to
/some/absolute/path/icu4j/main/common_tests/target/measunit.h \
/some/absolute/path/icu4c/source/i18n/unicode/measunit.h
`// End generated MeasureUnit constants`
* Replace all the generated code in between with the contents of the clipboard
* Run the MeasureUnitTest.java to ensure that the new code is backward
compatible. These compatibility tests are called something like
`TestCompatible65`, which tests backward compatibility with ICU 65.
* Create a compatibility test for ICU 68. Change `testZZZ` to run
`generateBackwardCompatibilityTest(“68”)`
* Run tests.
* Copy generated test (see instructions above) into MeasureUnitTest.java
* Run tests again to ensure that new code is backward compatible with itself
Copy the generated code fragments from / to
/some/absolute/path/icu4j/main/common_tests/target/measunit.cpp \
/some/absolute/path/icu4c/source/i18n/measunit.cpp
## Update ICU4C
Copy the generated code fragments from / to
/some/absolute/path/icu4j/main/common_tests/target/measfmttest.cpp \
/some/absolute/path/icu4c/source/test/intltest/measfmttest.cpp
* checkout ICU4C
Copy the generated code fragments from / to
/some/absolute/path/icu4j/main/common_tests/target/MeasureUnitGeneratorTest.java \
/some/absolute/path/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/format/MeasureUnitGeneratorTest.java
```
### Update measunit.h
Some kind of diff tool or editor (for example `vi -d`) work nicely.
* Change testZZZ to run `generateCXXHConstants(“68”); // ICU 68`.
* Run MeasureUnitTest.java, copy the generated code (see instructions above).
* Open $GIT_ROOT/icu4c/source/i18n/unicode/measunit.h. Look for line containing:
Look for line containing `// Start generated ...` and `// End generated ...`
These lines exist in both the original files, and the generated one. \
Replace all the generated code in between with the contents of the clipboard.
`// Start generated createXXX methods`
* Look for line:
If the generated code has no `// Start` ... `// End ...` pair then the new
code should be appended at some fixed place (details below).
`// End generated createXXX methods`
* Replace all the generated code in between with the contents of the clipboard
* **`MeasureUnit.java`:** replace range.
* **`MeasureUnitCompatibilityTest.java`:** append the new generated method at the end. \
It is named something like `TestCompatible<version>()`. \
Don't add it if it already exists.
* **`measunit.h`:** replace range.
* **`measunit.cpp`:** replace range.
* **`measfmttest.cpp`:** append the new generated method after the last
`MeasureFormatTest::TestCompatible<version>()` method. \
Don't add it if it already exists. \
WARNING: here you should add the method in two places. The method proper, with code,
as generated, and the declaration in the class definition.
* **`MeasureUnitGeneratorTest.java`:** append the new pairs of measure + version at
the end of the `JAVA_VERSIONS` structure. \
Don't add them if they already exist.
### Update measunit.cpp
## Run tests for both `icu4c` and `icu4j`
* Change testZZZ to run generateCXXConstants();
* Run MeasureUnitTest.java, copy the generated code (see instructions above).
* Open $GIT_ROOT/icu4c/source/i18n/measunit.cpp. Look for line containing:
## Updating `units.txt` and `unitConstants`
`// Start generated code for measunit.cpp`
* Look for lines
`// End generated code for measunit.cpp`
* Replace all the generated code in between with the contents of the clipboard
### Run C++ tests
* Run `./intltest format/MeasureFormatTest` from `test/intltest` to ensure new
code is backward compatible.
* Create a compatibility test for ICU 68. Change `testZZZ` in eclipse to run
`generateCXXBackwardCompatibilityTest(“68”)`
* Run tests.
* Copy generated test (see instructions above) into
$GIT_ROOT/icu4c/source/test/intltest/measfmttest.cpp. Make other necessary
changes to make test compile. You can find these changes by searching for
`TestCompatible65()`
* Run tests again to ensure that new code is backward compatible with itself
## Finishing changes
These last changes are necessary to permanently record the ICU version number of
any new measure units. Without these changes any new functions for this release
will be considered new for the next release too.
* Change `testZZZ` to run `updateJAVAVersions(“68”);`
* Run MeasureUnitTest.java, copy the generated code (see instructions above).
* Append the clipboard contents to the values of the JAVA_VERSIONS variable
near the top of MeasureUnitTest.java.
**Important:** what you are copying are just the new functions for the current
ICU version, in this case 68. Therefore append, do not replace.
## Updating units.txt and unitConstants
The standard ldml2icu process is used to update ICU's resource files (see
[cldr-icu-readme.txt](https://github.com/unicode-org/icu/blob/main/icu4c/source/data/cldr-icu-readme.txt)).
The standard `ldml2icu` process is used to update ICU's resource files (see
[`cldr-icu-readme.txt`](https://github.com/unicode-org/icu/blob/main/icu4c/source/data/cldr-icu-readme.txt)).
CLDR's units.xml defines conversion rates in terms of some constants defined in
`unitConstants`.
@ -142,6 +121,7 @@ needed. This would be caught by `testUnitConstantFreshness` unit test in
`units_test.cpp`.
They are hard-coded:
* Java: `UnitConverter.java` has the constant names in
`UnitConverter.Factor.addEntity()` and constant values in
`UnitConverter.Factor.getConversionRate()`.

View file

@ -53,6 +53,15 @@ need to be correspondingly updated. See below for more files to be updated and s
[icu4c/source/data/misc/icuver.txt](https://github.com/unicode-org/icu/blob/main/icu4c/source/data/misc/icuver.txt)
needs to be updated with the correct version number for ICU and its data.
### CLDR-to-ICU Conversion
#### Since ICU 77
The tool takes the `icuVersion` and `icuDataVersion` from the official ICU APIs.
(from the icu4j listed as a dependency of the tool, usually the one you just built from the `icu4j` folder).
If you need values different than that, you can specify them as the command line parameters (`--icuVersion` and `--icuDataVersion`).
#### Since ICU 68
In
@ -161,7 +170,12 @@ Changing the version for Java starting with ICU 74 requires a few steps:
public static final String <b>ICU_DATA_VERSION_PATH = "74b";</b>
</pre>
2. When creating the final release of a major ICU version,
2. [icu4j/main/core/src/test/java/com/ibm/icu/dev/test/util/DebugUtilitiesData.java](https://github.com/unicode-org/icu/blob/main/icu4j/main/core/src/test/java/com/ibm/icu/dev/test/util/DebugUtilitiesData.java)
There is a public string named `ICU4C_VERSION` which should be updated accordingly.
`public static final String ICU4C_VERSION="74.0.1";`
3. When creating the final release of a major ICU version,
or a point release (minor version update on a maintenance branch),
update the Maven project version for ICU4J at the root (`icu4j/pom.xml`) and all of the submodules
with the following Maven command.
@ -185,26 +199,40 @@ The command requires a version number string that follows the typical Java / Mav
mvn versions:set -DnewVersion=74.1 -DgenerateBackupPoms=false
```
3. Immediately after creating the final release of a major ICU version, update the value that represents just the major version number of the semantic version. To do this, update the value of the ICU `icu.major.version` property in the root Maven pom.xml file at `icu4j/pom.xml`.
4. Immediately after creating the final release of a major ICU version, update the value that represents just the major version number of the semantic version. To do this, update the value of the ICU `icu.major.version` property in the root Maven pom.xml file at `icu4j/pom.xml`.
This can be done by running the following command:
```
mvn versions:set-property -DnewVersion=74 -Dproperty=icu.major.version
mvn versions:set-property -DnewVersion=74 -Dproperty=icu.major.version -DgenerateBackupPoms=false
```
This should happen at the same time and along with the work in the previous step for the version number
when the version number is updated on `main` in the commit after the release/maintanence branch is cut.
In other words, the above `versions:set-property` step should be executed at the same time
`mvn versions:set -DnewVersion=74.0.1-SNAPSHOT` is executed.
`mvn versions:set -DnewVersion=74.0.1-SNAPSHOT -DgenerateBackupPoms=false` is executed.
4. Update the following variables in `icu4j/releases_tools/shared.sh`
5. Update the following variables in `icu4j/releases_tools/shared.sh`
* `artifact_version` - The version used in the Maven `pom.xml` files. You can alternatively produce this value by running `mvn help:evaluate -Dexpression=project.version -q -DforceStdout`.
* `github_rel_version` - The version used in the name of the GitHub downloadable artifacts. For example "73_2" or "74rc".
* `api_report_version` - The major version of the new version. Change during RC BRS.
* `api_report_prev_version` - The major version of the previous version. Change during RC BRS.
6. cldr-to-icu build tool has a dependency on the icu4j packages which needs to be updated in [`tools/cldr/cldr-to-icu/pom.xml`](https://github.com/unicode-org/icu/blob/main/tools/cldr/cldr-to-icu/pom.xml). Please update it to match the version that was updated in `icu4j/pom.xml` in the steps above.
```xml
<version>74.0.1-SNAPSHOT</version>
```
Since ICU 77 this moved to a property:
```xml
<icu4j.version>77.0.1-SNAPSHOT</icu4j.version>
```
Which can be easily be set from command line:
```sh
mvn versions:set-property -Dproperty=icu4j.version -DnewVersion=77.1 -f $ICU_DIR/tools/cldr/cldr-to-icu -DgenerateBackupPoms=false
```
#### Until ICU 73 (inclusive)
@ -265,7 +293,7 @@ For updating ICU version numbers, follow the steps below.
3. [icu4j/main/core/src/main/java/com/ibm/icu/util/VersionInfo.java](https://github.com/unicode-org/icu/blob/main/icu4j/main/core/src/main/java/com/ibm/icu/util/VersionInfo.java)
There is a static block starting at line 501 (as of 54.1) in the source file.
Update the `ICU_VERSION` value, where the first three arguments represent the
major, minor, and patch versions of a semantic version.
Use the `getInstance(major, 0, 1, 0)` as the version during pre-release development,

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

View file

@ -196,6 +196,12 @@ value, such as `ucol_greater`, `ucol_greaterOrEqual`, `ucol_equal` (in C)
`Collator::greater`, `Collator::greaterOrEqual`, `Collator::equal` (in C++) and
`Collator.equals` (in Java).
As of ICU 76 there are also C++ convenience functions and templates to create
standard library compliant comparison function objects that use a collator to
perform comparisons (instead of using the comparison operators on the strings
being compared), such as `Collator::less()` for a C++ API `Collator` or
`collator::less()` for a C API `UCollator`.
### Examples
**C:**
@ -238,6 +244,48 @@ delete coll;
}
```
**C++:** (as of ICU 76)
```c++
icu::ErrorCode status;
icu::Locale locale = icu::Locale::forLanguageTag("sv", status);
icu::LocalPointer<Collator> collator(icu::Collator::createInstance(locale, status), status);
status.assertSuccess(); // Override ErrorCode::handleFailure() to handle failure.
std::vector<std::string> utf8{
"Arnold", "Øystein", "Ingrid", "Åke", "Olof", "İsmail", "Örjan",
};
std::sort(utf8.begin(), utf8.end(), collator->less());
std::vector<UnicodeString> utf16{
u"Arnold", u"Øystein", u"Ingrid", u"Åke", u"Olof", u"İsmail", u"Örjan",
};
std::sort(utf16.begin(), utf16.end(), collator->less());
```
**C++:** (calling the ICU C API, as of ICU 76)
```c++
UErrorCode status = U_ZERO_ERROR;
icu::LocalUCollatorPointer ucollator(ucol_open("sv", &status));
assert(U_SUCCESS(status));
assert(ucollator.isValid());
std::vector<std::string> utf8{
"Arnold", "Øystein", "Ingrid", "Åke", "Olof", "İsmail", "Örjan",
};
std::sort(utf8.begin(), utf8.end(), icu::header::collator::less(ucollator.getAlias()));
std::vector<std::u16string> utf16{
u"Arnold", u"Øystein", u"Ingrid", u"Åke", u"Olof", u"İsmail", u"Örjan",
};
std::sort(utf16.begin(), utf16.end(), icu::header::collator::less(ucollator.getAlias()));
```
**Java:**
```java

View file

@ -66,8 +66,7 @@ classes.*
When a calendar object is created, via either `Calendar::create()`, or
`ucal_open()`, or indirectly within a date formatter, ICU looks up the 'default'
calendar type for that locale. At present, all locales default to a Gregorian
calendar, except for the compatibility locales th_TH_TRADITIONAL and
ja_JP_TRADITIONAL. If the "calendar" keyword is supplied, this value will
calendar. If the "calendar" keyword is supplied, this value will
override the default for that locale.
For instance, `Calendar::createInstance("fr_FR", status)` will create a Gregorian calendar,

View file

@ -29,11 +29,8 @@ ICU4J's unit tests in JUnit).
ICU uses Continuous Integration systems to run these tests automatically for each new code contribution,
and upon each update to a future contribution under development
(that is: for each [successful Pull Request merge, and upon a new push of new git commits to a Pull Request](../gitdev.md)).
ICU has 2 systems configured to run Continuous Integration testing:
* Github Actions
* Azure Pipelines
(that is: for each [successful Pull Request merge, and upon a new push of new git commits to a Pull Request](./gitdev.md)).
ICU has GitHub Actions configured to run Continuous Integration testing.
Continuous Integration systems can also be used to regularly and automatically run other tasks besides testing.
ICU uses a CI workflow to automatically publish changes to its User Guide that is hosted on Github Pages.
@ -52,7 +49,19 @@ Individual tests can be configured in the ICU Github repository:
4. Choose one of the rule sets and click "Edit". ***Note: all rule sets should be changed in the same way***
5. Ensure that "Require status checks to pass before merging" is enabled
6. Underneath that enabled checkbox, the table "Status checks that are required." lists the currently enabled tests ("checks") that must pass before a Pull Request can be merged to the branch
7. If a new test (check) needs to be added, use the search box above the table and type the display name of the check, then click on it in the drop down list to add it to the table of required checks.
7. Set the only required check to be `enforce-all-checks`.
- The [`wait-for-checks` Github Action](https://github.com/marketplace/actions/wait-for-checks)
correctly enforces that all checks of interest are passing,
while only inspecting activated checks
(ignoring checks that are inactive or skipped due to conditional triggering).
- See the `enforce-all-checks` job of the `.github/workflows/wait-for-checks.yml` workflow for usage details.
- For background info, see [this discussion](https://github.com/orgs/community/discussions/13690) for an explanation of the shortcoming in Github Actions currently that prompts the need for this solution.
8. If a new test (check) needs to be added, then update the regular expression in the `enforce-all-checks` job of the `.github/workflows/wait-for-checks.yml` workflow so that it will match on the name of the new check.
- For checks defined in Github Actions,
the name of the check is the name of the job.
In GHA workflows, if the job name is not explicitly overridden,
then the name falls back to the job identifier as written in the workflow file.
## Github Actions
@ -109,70 +118,17 @@ the workflow will not run and Github is not capable of ignoring the check in tha
Open Source users can now access machines with [at least 4 cores available per job](https://github.blog/2024-01-17-github-hosted-runners-double-the-power-for-open-source/).
## Azure Pipelines
### Exhaustive Tests
Exhaustive tests run tests on a larger, more complete dataset than the regular unit tests.
The larger dataset makes them run much longer than an individual unit test.
Thus, exhaustive tests are not run automatically on every PR.
They must pass before new versions of CLDR can be integrated into ICU,
which is a part of the release process.
ICU also uses [Azure Pipelines](https://azure.microsoft.com/en-us/products/devops/pipelines) to run CI jobs.
It may be desirable to run exhaustive tests manually on a PR for areas of code that are known to need the extra test coverage provided by exhaustive tests.
To trigger exhaustive tests manually:
### Workflow files
Workflow files are in YAML form stored at `.ci-builds/`.
### UI Dashboard
All Azure piplines show up in the
[Azure Piplines ICU project dashboard](https://dev.azure.com/ms/icu/),
specifically in the
[Pipelines page](https://dev.azure.com/ms/icu/_build).
After clicking on a specific pipeline,
all of the instances/runs for that pipeline appear.
All of the runs can be filtered in the Branch filter by the destination branch name (ex: `main`) or the PR number (ex: `2874`).
### Configuration
#### Initial Setup with Github.
The upstream Github repo needs to be connected to Azure Pipelines in order for Azure Pipelines to listen for and trigger new pipelines based on events occuring in Github,
and to return the status back to Github.
This configuration is started by ensuring that the upstream ICU repo `unicode-org/icu` has the Azure Pipelines 3rd party app installed from the Github Marketplace.
Once installed, the app will appear in the repo's Github "Settings" page under "Integrations" > "Github Apps".
In order to configure a newly pipeline in Azure using the Github app for Azure Pipelines, you must do:
1. Create and check-in a new YAML file in the icu repo at `.ci-builds/`
2. In the repo settings, go to "Github Apps"
3. In the Installed GitHub Apps section, click option to configure "Azure Pipelines".
4. A page to update Azure Pipeline's repository access apears next. Click on "Update access".
5. Next a page to authenticate with your Microsoft credentials appear. Sign in with Microsoft credentials.
6. Select ADO org as `ms` and project as `icu`, click on continue.
7. After authentication from Azure and Github, you come to the new pipeline wizard.
8. Select repo as `unicode-org/icu` and select "Existing Azure Pipelines YAML file" and choose the yaml file created in step #1
9. Review YAML file and click save. You will find a new pipeline created with name `unicode-org.icu`. Rename it to a more appropriate name
***The pipline should now run as per the YAML rules and would be visible from Github settings for branch protection.***
#### Jobs
Jobs can be added, removed, and edited merely by editing the YAML workflow files.
The syntax for Azure Pipelines workflows is very similar to Github Actions, including the YAML format.
However, there are noteworthy differences in functionality and the expression of equivalent configurations aross the systems and syntaxes.
#### Conditional Triggers
Conditional triggers can be configured for Azure Pipelines similarly to Github Actions.
Note: The triggers for merges to a branch (ex: `main`) may need to be duplicated into a separate trigger section for Pull Requests because they seem to be handled differently.
### Caveats
In order to set up a pipeline, a person must simultaneously have access to the Azure Pipelines project for ICU and to the Github ICU repository.
If an Azure Pipeline only has one job,
that job might not be shown on a PR's main page within the list of all of the running CI checks.
There will only be an entry with the pipeline name in the list of checks.
However, if an Azure Pipeline has multiple jobs,
then each of the constituent jobs of the pipeline will be represent in the list of checks,
in addition to an entry for the pipeline itself.
1. Go to your respective fork of the project (username/icu) if the PR is not already merged. Otherwise, go to https://github.com/unicode-org/icu (Note: your fork's default (main) branch should be in sync with upstream main branch for new actions to appear in your fork)
2. Select on the "Actions" tab from the top bar
3. On the left pane under All workflows, find "Exhaustive Tests for ICU" and click on run workflow, select branch and click 'Run workflow'.
![Run Workflow](../assets/gha_run_workflow.png)

View file

@ -198,41 +198,9 @@ Coding examples help users to understand the usage of each API. Whenever
possible, it is encouraged to embed a code snippet illustrating the usage of an
API along with the functional specification.
#### Embedding Coding Examples in ICU4J - JCite
Since ICU4J 49M2, the ICU4J ant build target "doc" utilizes an external tool
called [JCite](https://arrenbrecht.ch/jcite/). The tool allows us to cite a
fragment of existing source code into JavaDoc comment using a tag. To embed a
code snippet with the tag. For example,
`{@.jcite com.ibm.icu.samples.util.timezone.BasicTimeZoneExample:---getNextTransitionExample}`
will be replaced a fragment of code marked by comment lines
`// ---getNextTransisionExample` in `BasicTimeZoneExample.java` in package
`com.ibm.icu.samples.util.timezone`. When embedding code snippet using JCite, we
recommend to follow next guidelines
* A sample code should be placed in `<icu4j_root>/samples/src` directory,
although you can cite any source fragment from source files in
`<icu4j_root>/demos/src`, `<icu4j_root\>/main/core/*/src`,
`<icu4j_root>/main/test/*/src`.
* A sample code should use package name -
`com.ibm.icu.samples.<subpackage>.<facility>`. `<subpackage>` is corresponding
to the target ICU API class's package, that is, one of lang/math/text/util.
`<facility>` is a name of facility, which is usually the base class of the
service. For example, use package `com.ibm.icu.samples.text.dateformat` for
samples related to ICU's date format service,
`com.ibm.icu.samples.util.timezone` for samples related to time zone service.
* A sample code should be self-contained as much as possible (use only JDK and
ICU public APIs if possible). This allows readers to cut & paste a code
snippet to try it out easily.
* The citing comment should start with three consecutive hyphen followed by
lower camel case token - for example, "`// ---compareToExample`"
* Keep in mind that the JCite tag `{@.jcite ...}` is not resolved without JCite.
It is encouraged to avoid placing code snippet within a sentence. Instead,
you should place a code snippet using JCite in an independent paragraph.
#### Embedding Coding Examples in ICU4C
Also since ICU4C 49M2, ICU4C docs (using the [\\snippet command](http://www.doxygen.nl/manual/commands.html#cmdsnippet)
Since ICU4C 49M2, ICU4C docs (using the [\\snippet command](http://www.doxygen.nl/manual/commands.html#cmdsnippet)
which is new in Doxygen 1.7.5) can cite a fragment of existing sample or test code.
Example in `ucnv.h`:

View file

@ -591,16 +591,9 @@ Send the PR off for review. As in the Easy Way, **you should use the MERGE COMMI
## Requesting an Exhaustive Test run on a Pull-Request (PR)
The ICU4C and ICU4J Exhaustive Tests run on the main branch after a pull-request
has been submitted. They do not run on pull-requests by default as they take 1-2
hours to run.
The ICU4C and ICU4J Exhaustive Tests run on the main branch periodically once
every Saturday (at 4:00 AM UTC) and post merging on the maintenance branches.
They do not run on pull-requests by default as they take 1-2 hours to run.
However, you can manually request the CI builds to run the exhaustive tests on a
PR by commenting with the following text:
```
/azp run CI-Exhaustive
```
This will trigger the test run on the PR. This is covered more in a separate
[document](https://docs.google.com/document/d/1kmcFFUozpWah_y7dk_Inlw_BIq3vG3-ZR2A28tIiXJc/edit?usp=sharing).
However, you can manually request the CI builds to run the exhaustive tests.
See [Continuous Integration / Exhaustive Tests](./ci.md#exhaustive-tests).

View file

@ -212,6 +212,16 @@ The rule updates are done first for ICU4C, and then ported (code changes) or mov
Updating the test with new or revised rules requires changing the test source code, in `icu4c/source/test/intltest/rbbitst.cpp`. Look for the classes RBBICharMonkey, RBBIWordMonkey, RBBISentMonkey and RBBILineMonkey. The body of each class tracks the corresponding UAX-14 or UAX-29 specifications in defining the character classes and break rules.
The rules, as well as the partition of the code space used to generate the random sample strings,
are defined by regular expressions and Unicode sets generated by GenerateBreakTest in the
Unicode tools, which runs as part of MakeUnicodeFiles.
Copy the relevant lines from `Generated/UCD/17.0.0/extra/*BreakTest.cpp.txt` into `rbbitst.cpp`.
When developing changes to the line breaking algorithms that require changes to property assignments,
the generated rules and partition may need to be adjusted for testing.
However, the updated rules should only be merged into ICU once the property changes have actually been
made in the UCD and imported into ICU, at which point the unmodified generated partition and rules can
be used in `rbbitst.cpp`.
After making changes, as a final check, let the test run for an extended period of time, on the order of several hours.
Run it from a terminal, and just interrupt it (Ctrl-C) when it's gone long enough.

View file

@ -205,7 +205,7 @@ Note that the examples may not reflect current CLDR data.
| --- | --- | --- | --- |
| `G` | era designator | `G`, `GG`, or `GGG`<br/>`GGGG`<br/>`GGGGG` | AD<br/>Anno Domini<br/>A |
| `y` | year | `yy`<br/>`y` or `yyyy` | 96<br/>1996 |
| `Y` | year of "Week of Year" | `Y` | 1997 |
| `Y` | year in “Week of Year” based calendars in which the year transition occurs on a week boundary; may differ from calendar year y near a year transition. This year designation is used with pattern character w in the ISO 8601 year-week calendar, for example. | `Y` | 1997 |
| `u` | extended year | `u` | 4601 |
| `U` | cyclic year name, as in Chinese lunar calendar | `U` | 甲子 |
| `r` | related Gregorian year | `r` | 1996 |

Binary file not shown.

View file

@ -0,0 +1,37 @@
// © 2025 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
#include <iostream>
#include "unicode/utypes.h"
#include "unicode/calendar.h"
#include "unicode/errorcode.h"
#include "unicode/locid.h"
#include "unicode/messageformat2.h"
using namespace icu;
int main() {
ErrorCode errorCode;
UParseError parseError;
icu::Calendar* cal(Calendar::createInstance(errorCode));
cal->set(2025, Calendar::JANUARY, 28);
UDate date = cal->getTime(errorCode);
message2::MessageFormatter::Builder builder(errorCode);
message2::MessageFormatter mf = builder
.setPattern("Hello {$user}, today is {$now :date style=long}!", parseError, errorCode)
.setLocale(Locale("en_US"))
.build(errorCode);
std::map<UnicodeString, message2::Formattable> argsBuilder;
argsBuilder["user"] = message2::Formattable("John");
argsBuilder["now"] = message2::Formattable::forDate(date);
message2::MessageArguments arguments(argsBuilder, errorCode);
icu::UnicodeString result = mf.formatToString(arguments, errorCode);
std::string strResult;
result.toUTF8String(strResult);
std::cout << strResult << std::endl;
}

View file

@ -27,31 +27,33 @@ It will be a successor to the current [ICU MessageFormat](index.md).
MessageFormat 2.0 is being developed
[in a working group](https://github.com/unicode-org/message-format-wg),
which has created a [draft specification](https://github.com/unicode-org/message-format-wg/tree/main/spec).
A version of the specification is included in [LDML 45](https://unicode.org/reports/tr35/tr35-messageFormat.html#Contents).
Also see the
[API docs for `MessageFormatter`](https://unicode-org.github.io/icu-docs/apidoc/released/icu4j/index.html?com/ibm/icu/message2/MessageFormatter.html).*
## Overview of `MessageFormatter`
In ICU4J, the `MessageFormatter` class is the next iteration of [MessageFormat](https://unicode-org.github.io/icu-docs/apidoc/released/icu4j/com/ibm/icu/text/MessageFormat.html).
This new version will build on the lessons learned from using MessageFormat for 25 years in various environments, when used directly or as a base for other public APIs.
The `MessageFormatter` class is the next iteration of MessageFormat, implemented in both [ICU4J](https://unicode-org.github.io/icu-docs/apidoc/released/icu4j/com/ibm/icu/text/MessageFormat.html) and [ICU4C](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classicu_1_1message2_1_1MessageFormatter.html)
This new version builds on the lessons learned from using MessageFormat for 25 years in various environments, when used directly or as a base for other public APIs.
The effort to design a succesor to `MessageFormat` will result in a specification referred to as MessageFormat 2.0.
The effort to design a successor to `MessageFormat` is a specification referred to as MessageFormat 2.0.
The reasoning for this effort is shared in the [“Why MessageFormat needs a successor”](https://github.com/unicode-org/message-format-wg/blob/main/docs/why_mf_next.md) document.
MessageFormat 2.0 will be more modular and easier to port and backport.
It will also provide extension points via interfaces to allow users to supply new formatters and selectors without having to modify the specification.
MessageFormat 2.0 is more modular and easier to port and backport.
It also provides extension points via interfaces to allow users to supply new formatters and selectors without having to modify the specification.
ICU will eventually include support for new formatters, such as intervals, relative time, lists, measurement units, personal names, and more, as well as the ability for users to supply their own custom implementations.
These will potentially support use cases like grammatical gender, inflection, markup regimes (such as those require for text-to-speech), and other complex message management needs.
The MessageFormat Working Group, which develops the new data model, semantics, and syntax, is hosted on [GitHub](https://github.com/unicode-org/message-format-wg).
The current specification for the syntax and data model can be found [here](https://github.com/unicode-org/message-format-wg/blob/main/spec/syntax.md).
This technical preview implements enough functions for `MessageFormater` to be useful in many situations,
but the final set of functions and the parameters accepted by those functions is not yet finalized.
This technical preview implements functions according to the LDML 45 version of the specification.
## Examples
### ICU4J
### Basic usage
#### Examples
##### Basic usage
```java
import static org.junit.Assert.assertEquals;
@ -81,7 +83,7 @@ public void testMf2() {
}
```
### Placeholder examples
##### Placeholder examples
| Code to set runtime value for placeholder | Examples of placeholder in message pattern |
|----------------------------------------------------|------------------------------------------------------------------------------|
@ -91,12 +93,12 @@ public void testMf2() {
| No argument for fixed values known at build time | `{(123456789.531) :number}` |
### Plural selection message
#### Plural selection message
```java
@Test
public void testMf2Selection() {
final String message = "match {$count :plural}"
final String message = ".match {$count :plural}"
+ " when 1 {You have one notification.}"
+ " when one {You have {$count} notification.}"
+ " when * {You have {$count} notifications.}";
@ -123,12 +125,11 @@ public void testMf2Selection() {
}
```
### Built-in formatter functions
#### Built-in formatter functions
The tech preview implementation comes with formatters for numbers (`number`),
date / time (`datetime`),
plural selectors (`plural` and `selectordinal`),
and general selector (`select`),
The tech preview implementation comes with a formatter and selector for numbers (`number`),
date / time formatters (`datetime`),
and a string selector (`string`),
very similar to what MessageFormat offers.
The [ICU test code](https://github.com/unicode-org/icu/tree/main/icu4j/main/core/src/test/java/com/ibm/icu/dev/test/message2)
@ -136,9 +137,10 @@ covers most features, and has examples of how to make custom placeholder formatt
you can look for classes that implement `com.ibm.icu.message2.FormatterFactory`
(they are named `Custom*Test.java`).
## Functions currently implemented
#### Functions currently implemented
These are the functions implemented right now:
These are the functions implemented in ICU 75.1. The functions will change
in a future release to be consistent with the current MF2 specification.
<table border="1">
@ -191,19 +193,19 @@ TBD if this will be merged into <code>plural</code> (with some <code>kind</code>
<tr><td><code>select</code></td><td>Literal match, same as MessageFormat's <code>select</code>.</td></tr>
</table>
## Quickstart guide
#### Quickstart guide
If you don't have ICU set up, here are instructions for doing that using Maven or Gradle:
### Requirements
##### Requirements
- JDK (version 8 or newer)
- Maven or Gradle
- Your preferred IDE or text editor
### Maven
##### Maven
#### Create a new project
###### Create a new project
```
$ mvn archetype:generate -DgroupId=org.unicode -DartifactId=mf2 -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
@ -211,7 +213,7 @@ $ mvn archetype:generate -DgroupId=org.unicode -DartifactId=mf2 -DarchetypeArtif
$ cd mf2
```
#### Add a dependency to ICU4J 72.1 (or newer)
###### Add a dependency to ICU4J 75.1 (or newer)
In the `pom.xml` find the `<dependencies>` element and add this:
@ -219,24 +221,24 @@ In the `pom.xml` find the `<dependencies>` element and add this:
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>72.1</version>
<version>75.1</version>
</dependency>
```
#### Add a bit of code
###### Add a bit of code
Open the test file (`src/test/java/org/unicode/AppTest.java`)
and copy / paste the include directives and the `testMf2()` method shown in the previous section.
#### Test it
###### Test it
```
$ mvn test
```
### Gradle
##### Gradle
#### Create a new project
###### Create a new project
```
$ mkdir mf2
@ -246,25 +248,25 @@ $ cd mf2
$ gradle init --dsl groovy --test-framework junit --type java-application --package org.unicode --project-name mf2
```
#### Add a dependency to ICU4J 72.1 (or newer)
###### Add a dependency to ICU4J 75.1 (or newer)
In the `app/build.gradle` file, find the `dependencies {...}` section add this:
```
implementation 'com.ibm.icu:icu4j:72.1'
```
#### Add a bit of code
###### Add a bit of code
Open the test file (`src/test/java/org/unicode/AppTest.java`)
and copy / paste the include directives and the `testMf2()` method shown in the previous section.
#### Test it
##### Test it
```
$ gradle test
```
### Experiment from here
##### Experiment from here
At this point you have a basic application using MessageFormat 2.
@ -276,3 +278,8 @@ You can experiment with more messages using as inspiration:
You should be able to use your preferred IDE (Eclipse, IntelliJ, Visual Studio Code, more), use a different build system, etc.
### ICU4C
Some helpful documentation for ICU4C in MF2 is being developed at [messageformat.dev](https://messageformat.dev/docs/integration/cpp/),
as well an unofficial [MF2 syntax documentation](https://messageformat.dev/docs/quick-start/)
and an interactive [playground](https://messageformat.dev/playground/) for testing messages.

View file

@ -0,0 +1,366 @@
---
layout: default
title: Trying MF 2.0 Final Candidate
nav_order: 3
parent: Formatting Messages
grand_parent: Formatting
---
<!--
© 2025 and later: Unicode, Inc. and others.
License & terms of use: http://www.unicode.org/copyright.html
-->
# Trying MF 2.0 Final Candidate
{: .no_toc }
## Contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
## C++ Linux & macOS
1. Prepare a sandbox folder
```sh
export ICU_SANDBOX=~/hello_icu_mf2
mkdir $ICU_SANDBOX
cd $ICU_SANDBOX
```
1. Build ICU4C (you only need to do this once)
```sh
git clone https://github.com/unicode-org/icu.git
pushd icu/icu4c/source
# Run this and choose the platform and toolchain you prefer
./runConfigureICU --help
# if macOS
./runConfigureICU macOS/gcc
# else if Linux (gcc is just an example, there are 5 Linux options)
./runConfigureICU Linux/gcc
# end
export DESTDIR=$ICU_SANDBOX/icu_release
make -j8 releaseDist
popd
```
1. Create a minimal C++ file here (we are in the `$ICU_SANDBOX` folder) called [`hello_mf2.cpp`](hello_mf2.cpp) (click to view and/or download). The contents are reproduced below.
```cpp
// hello_mf2.cpp
#include <iostream>
#include "unicode/utypes.h"
#include "unicode/calendar.h"
#include "unicode/errorcode.h"
#include "unicode/locid.h"
#include "unicode/messageformat2.h"
using namespace icu;
int main() {
ErrorCode errorCode;
UParseError parseError;
icu::Calendar* cal(Calendar::createInstance(errorCode));
cal->set(2025, Calendar::JANUARY, 28);
UDate date = cal->getTime(errorCode);
message2::MessageFormatter::Builder builder(errorCode);
message2::MessageFormatter mf = builder
.setPattern("Hello {$user}, today is {$now :date style=long}!", parseError, errorCode)
.setLocale(Locale("en_US"))
.build(errorCode);
std::map<UnicodeString, message2::Formattable> argsBuilder;
argsBuilder["user"] = message2::Formattable("John");
argsBuilder["now"] = message2::Formattable::forDate(date);
message2::MessageArguments arguments(argsBuilder, errorCode);
icu::UnicodeString result = mf.formatToString(arguments, errorCode);
std::string strResult;
result.toUTF8String(strResult);
std::cout << strResult << std::endl;
}
```
1. Build your application and run it
```sh
g++ hello_mf2.cpp -I$DESTDIR/usr/local/include -std=c++17 -L$DESTDIR/usr/local/lib -licuuc -licudata -licui18n
# if macOS
DYLD_LIBRARY_PATH=$DESTDIR/usr/local/lib ./a.out
# else if Linux
LD_LIBRARY_PATH=$DESTDIR/usr/local/lib ./a.out
# end
```
This will output
```
Hello John, today is January 28, 2025!
```
## C++ Windows with Visual Studio
### From Visual Studio with minimal work
These instructions will use a release version of ICU4C (tested with 76.1) and
a "Hello ICU world" project already created.
They provide minimal effort that only requires downloading and opening in Visual Studio
before using.
> :point_right: **Note**: the MessageFormat 2 implementation in a previously release version may be behind the spec in the first few releases of ICU after the MF2.0 spec was declared 1.0 in CLDR 46.1,
which occurred between ICU 76 and ICU 77. The difference between latest MF2.0 and the spec version supported in ICU may be minimal.
1. Download the Visual Studio artifacts from the
[official release of ICU 76.1](https://github.com/unicode-org/icu/releases/tag/release-76-1):
* [icu4c-76_1-Win32-MSVC2022.zip](https://github.com/unicode-org/icu/releases/download/release-76-1/icu4c-76_1-Win32-MSVC2022.zip)
* [icu4c-76_1-Win64-MSVC2022.zip](https://github.com/unicode-org/icu/releases/download/release-76-1/icu4c-76_1-Win64-MSVC2022.zip)
1. Download the "Hello ICU / MF2 World" project [HelloMF2.zip](HelloMF2.zip).
1. Unzip the files you just downloaded and merge the content of the two ICU folders.
The "hello world" project to be a sibling to the icu folder.
1. The folder tree structure should look like this
```
someFolderOfYourChoice\
+- HelloMF2\
| \- HelloMF2\
\- icu\
\- icu4c\
+- bin\
+- bin64\
+- include\
| \- unicode\
+- lib\
\- lib64\
```
1. Open the `HelloMF2.sln` solution in Visual Studio and you are ready to go.
### From command line
Start the Visual Studio "x64 Native Tools Command Prompt for VS 20xx"
1. Prepare a sandbox folder
```cmd
set ICU_SANDBOX=%USERPROFILE%\hello_icu_mf2
md %ICU_SANDBOX%
cd %ICU_SANDBOX%
```
1. Build ICU4C (you only need to do this once):
```cmd
git clone https://github.com/unicode-org/icu.git
cd icu\icu4c
msbuild source/allinone/allinone.sln /p:Configuration=Release /p:Platform=x64 /p:SkipUWP=true
cd ..\..
set DESTDIR=%ICU_SANDBOX%\icu_release
rd /q/s %DESTDIR%
md %DESTDIR%
xcopy icu\icu4c\include %DESTDIR%\include /E /V /I /Q /Y
xcopy icu\icu4c\bin64 %DESTDIR%\bin64 /E /V /I /Q /Y
xcopy icu\icu4c\lib64 %DESTDIR%\lib64 /E /V /I /Q /Y
```
1. Create a minimal C++ file here (we are in the `$ICU_SANDBOX` folder). Call it `hello_mf2.cpp`.
The link to download and the contents are listed above (see the Linux section).
1. Build your application and run it
```cmd
set DESTDIR=%ICU_SANDBOX%\icu_release
cl /std:c++17 /EHsc /I %DESTDIR%\include %DESTDIR%/lib64/*.lib hello_mf2.cpp
rem set PATH only once, not every time
set PATH=%DESTDIR%\bin64;%PATH%
.\hello_mf2.exe
```
This will output
```
Hello John, today is January 28, 2025!
```
### From Visual Studio (UI)
1. Prepare a sandbox folder. Call it `hello_icu_mf2`.
1. Build ICU4C (you only need to do this once)
* Clone the ICU repository from
<https://github.com/unicode-org/icu> to the `hello_icu_mf2` folder.
We will end up with the folder `hello_icu_mf2\icu`.
* Start Visual Studio.
* Select _"Open a project or solution"_
* Open the `allinone.sln` solution from the `hello_icu_mf2\icu\icu4c\source\allinone` folder.
* Select the "Build" -- "Configuration Manager" menu
* Change the active solution to "Release" and "x64" (or another architecture, but you will have to be consistent everywhere after this)
* Select the "Build" -- "Build solution" menu
* Select the "File" -- "Close solution" menu
1. Create a minimal C++ project in the `hello_icu_mf2` folder. Call it `hello_mf2`.
* You are still in Visual Studio. Select "Create a new project"
* Choose the project template "Console App" (tagged `C++`, `Windows`, `Console`)
* Click the "Next" button
* Set the "Project name" to "HelloMF2" and set the "Location" to the `hello_icu_mf2` folder. \
* Click "Create"
* A project will be created in the `hello_icu_mf2\HelloMF2` folder.
1. Create a macro pointing to the ICU folder with the files we built.
* Select the "View" -- "Property Manager" menu
* In the new dialog select the root of the tree ("HelloMF2", not the Debug / Release leafs)
* Right click and select "Add New Project Property Sheet..."
* Call it `IcuPropertySheet.props` and click "Add"
* Open (double-click) `IcuPropertySheet` in any of the "leafs" of the tree on the left.
For example in `HelloMF2 / Release | 64 / IcuPropertySheet`
* Select "User Macros" under "Common Properties" (left tree)
* Click the "Add Macro" button
* Name it `IcuDistro` and set the "Value" to the `..\icu\icu4c` folder.
If the test project we created is not in `hello_icu_mf2`, next to `icu`, then you can use a full path to the ICU folder where you just did a built.
You can also point it to one you downloaded (from the GitHub releases, see above).
* Click the "OK" button
1. Configure the project
* Select `HelloMF2` in the left-side tree
* Select the "Project" -- "Properties" menu
* For "Configuration" (top-left) select "All Configurations"
* For "Platform" (top-right) select "All Platforms"
* In the left side tree:
* "C/C++" / "General" set "Additional Include Directories" to
`$(IcuDistro)\include;%(AdditionalIncludeDirectories)`
* "C/C++" / "Language" set "C++ Language Standard" to
`ISO C++17 Standard (/std:c++17)`
* "Linker" / "General" set "Additional Dependencies" to \
`icudt.lib;icuin.lib;icuuc.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)`
* "Linker" / "General" set "Additional Library Directories" to \
`$(IcuDistro)/lib64;%(AdditionalLibraryDirectories)`
* "Debugging" set "Environment" to \
`PATH=$(IcuDistro)/bin64;%PATH%`
* For "Platform" (top-right) select "Win32"
* In the left side tree remove the `64` in two of the settings:
* "Linker" / "General" set "Additional Library Directories" to \
`$(IcuDistro)/lib;%(AdditionalLibraryDirectories)`
* "Debugging" set "Environment" to \
`PATH=$(IcuDistro)/bin;%PATH%`
1. Update the default source file to use some ICU functionality
* Select the "View" -- "Solution Explorer" menu
* In the left-side tree "HelloMF2" / "Source Files" open `HelloMF2.cpp`
* Download the `hello_mf2.cpp` file (see earlier in this page for download link) and save it as
`HelloMF2.cpp`, thereby replacing it.
1. At this point you should be able to build and run the application, debug it, etc.
1. When run, it will output
```
Hello John, today is January 28, 2025!
```
## Java
We will assume that if you are interested in testing a pre-release Java library
you already have (or know how to install) a JDK, Apache Maven, git,
know how to create a project in your favorite IDE, and so on.
### What you need
* JDK, any version between 8 and 23
* Apache Maven
### Instructions
1. Create a new Maven project
```sh
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=hello_icu_mf2 -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.5 -DinteractiveMode=false
cd hello_icu_mf2
```
1. Modify the `pom.xml` file
1. The project created as above uses the Java 17 version.
If you are using a lower version then change `<maven.compiler.release>` property to whatever Java version you are using.
```sh
# Example on how to set the Java version to 11
mvn versions:set-property -Dproperty=maven.compiler.release -DnewVersion=11
```
1. Edit the file and add this to `<dependencies>`
```xml
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>77.0.1-SNAPSHOT</version>
</dependency>
```
**Warning:** make sure it is done in `dependencies`, not in `dependencyManagement / dependencies`
1. Edit the `src/test/java/com/mycompany/app/AppTest.java` file
1. Add a new test method
```java
@Test
public void testMessageFormat2() {
MessageFormatter mf2 = MessageFormatter.builder()
.setLocale(Locale.US)
.setPattern("Hello {$user}, today is {$now :date style=long}!")
.build();
Calendar cal = Calendar.getInstance();
cal.set(2025, 0, 28);
Map<String, Object> arguments = new HashMap<>();
arguments.put("user", "John");
arguments.put("now", cal);
System.out.println(mf2.formatToString(arguments));
}
```
1. Add imports
```java
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import com.ibm.icu.util.Calendar;
import com.ibm.icu.message2.MessageFormatter;
```
1. Now run the tests
```sh
mvn package -q
```
This will output the following in the the tests' console output
```
Hello John, today is January 28, 2025!
```

View file

@ -106,4 +106,4 @@ included, building, installing, etc.
Current license: <https://github.com/unicode-org/icu/blob/main/LICENSE>
See also FAQ section ["How is the ICU licensed"](icufaq/index#how-is-icu-licensed)
See also FAQ section ["How is the ICU licensed"](../icu4c/faq.md#how-is-icu-licensed)

View file

@ -368,55 +368,54 @@ Some platforms use package management tools to control the installation and unin
## How To Build And Install On z/OS (OS/390)
You can install ICU on z/OS or OS/390 (the previous name of z/OS), but IBM tests only the z/OS installation. You install ICU in a z/OS UNIX system services file system such as HFS or zFS. On this platform, it is important that you understand a few details:
You can install ICU on z/OS or OS/390 (the previous name of z/OS), but IBM tests only the z/OS installation. You install ICU in a z/OS UNIX System Services (z/OS UNIX) file system such as HFS or zFS. On this platform, it is important that you understand a few details:
* The makedep and GNU make tools are required for building ICU. If it is not already installed on your system, it is available at the [z/OS UNIX - Tools and Toys](http://www-03.ibm.com/servers/eserver/zseries/zos/unix/bpxa1toy.html) site. The PATH environment variable should be updated to contain the location of this executable prior to build. Failure to add these tools to your PATH will cause ICU build failures or cause pkgdata to fail to run.
* Since USS does not support using the mmap() function over NFS, it is recommended that you build ICU on a local filesystem. Once ICU has been built, you should not have this problem while using ICU when the data library has been built as a shared library, which is this is the default setting.
* Encoding considerations: The source code assumes that it is compiled with codepage ibm-1047 (to be exact, the UNIX System Services variant of it). The pax command converts all of the source code files from ASCII to codepage ibm-1047 (USS) EBCDIC. However, some files are binary files and must not be converted, or must be converted back to their original state. You can use the [unpax-icu.sh](https://github.com/unicode-org/icu/blob/main/icu4c/as_is/os390/unpax-icu.sh) script to do this for you automatically. It will unpackage the tar file and convert all the necessary files for you automatically.
* z/OS supports both native S/390 hexadecimal floating point and (with OS/390 2.6 and later) IEEE 754 binary floating point. This is a compile time option. Applications built with IEEE should use ICU DLLs that are built with IEEE (and vice versa). The environment variable IEEE390=0 will cause the z/OS version of ICU to be built without IEEE floating point support and use the native hexadecimal floating point. By default ICU is built with IEEE 754 support. Native floating point support is sufficient for codepage conversion, resource bundle and UnicodeString operations, but the Format APIs require IEEE binary floating point.
* z/OS introduced the concept of Extra Performance Linkage (XPLINK) to bring performance improvement opportunities to call-intensive C and C++ applications such as ICU. XPLINK is enabled on a DLL-by-DLL basis, so if you are considering using XPLINK in your application that uses ICU, you should consider building the XPLINK-enabled version of ICU. You need to set ICU's environment variable `OS390_XPLINK=1` prior to invoking the make process to produce binaries that are enabled for XPLINK. The XPLINK option, which is available for z/OS 1.2 and later, requires the PTF PQ69418 to build XPLINK enabled binaries.
* ICU requires XPLINK for the icuio library. If you want to use the rest of ICU without XPLINK, then you must use the --disable-icuio configure option.
* The latest versions of z/OS use [XPLINK version (C128) of the C++ standard library](https://www.ibm.com/support/knowledgecenter/SSLTBW_2.2.0/com.ibm.zos.v2r2.cbcux01/oebind6.htm) by default. You may see [an error](https://www.ibm.com/support/knowledgecenter/SSLTBW_2.2.0/com.ibm.zos.v2r2.cbcux01/oebind5.htm) when running with XPLINK disabled. To avoid this error, set the following environment variable or similar:
* GNU make is required for building ICU. If it is not already installed on your system, it is available at the [IBM Open Enterprise Foundation for z/OS](https://www.ibm.com/products/open-enterprise-foundation-zos) or [ZOS Open Tools](https://github.com/zopencommunity). Ensure that the PATH environment variable includes the location of this executable prior to building. Failure to add this tool to your PATH may cause ICU build failures or prevent pkgdata from running.
* Since z/OS UNIX does not support using the mmap() function over NFS, it is recommended that you build ICU on a local filesystem. Once ICU has been built, you should not have this problem while using ICU when the data library has been built as a shared library, which is this is the default setting.
* Encoding considerations: The source code assumes that it is compiled with codepage ibm-1047 (to be exact, the z/OS UNIX variant of it). The pax command converts all of the source code files from ASCII to codepage ibm-1047 (z/OS UNIX) EBCDIC. However, some files are binary files and must not be converted, or must be converted back to their original state. You can use the [unpax-icu.sh](https://github.com/unicode-org/icu/blob/main/icu4c/as_is/os390/unpax-icu.sh) script to do this for you automatically. It will unpackage the tar file and convert all the necessary files for you automatically.
* z/OS supports both native S/390 hexadecimal floating point and (with OS/390 2.6 and later) IEEE 754 binary floating point. This is a compile time option. Applications built with IEEE should use ICU DLLs that are built with IEEE (and vice versa). The environment variable ICU_IS_NOT_IEEE754=1 will disable IEEE floating point support on z/OS and use the native hexadecimal floating point. By default, ICU is built with IEEE 754 support. Native hexadecimal floating point support is sufficient for codepage conversion, resource bundle and UnicodeString operations, but the Format APIs require IEEE binary floating point.
* Use IBM Open XL C/C++ 2.1 for z/OS (or later) for z/OS build of ICU library. IBM XL C/C++ for z/OS does not support C++17 and can only build up to ICU v58. Target architecture can be controlled with TARGET_ICU_ARCH enviromental variable, default is arch10.
When building ICU data, you might need to set the following environment variables:
```
export _CXX_PSYSIX="CEE.SCEELIB(C128N)":"CBC.SCLBSID(IOSTREAM,COMPLEX)"
export _ENCODE_FILE_NEW=IBM-1047
export _ENCODE_FILE_EXISTING=IBM-1047
export _CEE_RUNOPTS="FILETAG(AUTOCVT,AUTOTAG) POSIX(ON)"
export _BPXK_AUTOCVT=ON
export _TAG_REDIR_ERR=txt
export _TAG_REDIR_IN=txt
export _TAG_REDIR_OUT=txt
```
* When building ICU data, the heap size may need to be increased with the following environment variable:
The rest of the instructions for building and testing ICU on z/OS UNIX are the same as the [How To Build And Install On UNIX](#how-to-build-and-install-on-unix) section.
### z/OS (Batch/PDS) support outside the z/OS UNIX environment
ICU on z/OS builds its libraries into the z/OS UNIX file system (HFS). In addition, some libraries are built with batch-ready names. The default batch-ready ICU naming convention is LICU as prefix, 2 characters for version of ICU library, and 2 characters for specific ICU library name (see examples below). Use the following environmental variables to control z/OS batch-ready build of ICU:
* ICU_PDS_NAME_PREFIX sets the library name prefix.
* ICU_PDS_NAME_SUFFIX sets the library name suffix. If not set, the suffix is empty by default.
* ICU_PDS_NAME overrides ICU_PDS_NAME_PREFIX and two-character ICU library version. The two-character code for the specific ICU library will be appended.
* ICU_PLUGINS_DD indicates the ICU plug-ins location. A value of 1 forces the ICU to load plug-ins from //DD:ICUPLUG. ICU_PLUGINS_DD is not set by default, which means the ICU reads plug-ins from an HFS directory.
Detailed schema of batch-ready naming:
```
export _CEE_RUNOPTS="HEAPPOOLS(ON),HEAP(4M,1M,ANY,FREE,0K,4080)"
{ICU_PDS_NAME_PREFIX}{two-character ICU library version}{two-character ICU library code}{ICU_PDS_NAME_SUFFIX}
{ ICU_PDS_NAME }
```
* The rest of the instructions for building and testing ICU on z/OS with UNIX System Services are the same as the [How To Build And Install On UNIX](#how-to-build-and-install-on-unix) section.
### z/OS (Batch/PDS) support outside the UNIX system services environment
By default, ICU builds its libraries into the UNIX file system (HFS). In addition, there is a z/OS specific environment variable (OS390BATCH) to build some libraries into the z/OS native file system. This is useful, for example, when your application is externalized via Job Control Language (JCL).
The OS390BATCH environment variable enables non-UNIX support including the batch environment. When OS390BATCH is set, the libicui18n_XX_.dll, libicuuc_XX_.dll, and libicudt_XX_e.dll binaries are built into data sets (the native file system). Turning on OS390BATCH does not turn off the normal z/OS UNIX build. This means that the z/OS UNIX (HFS) DLLs will always be created.
Two additional environment variables indicate the names of the z/OS data sets to use. The LOADMOD environment variable identifies the name of the data set that contains the dynamic link libraries (DLLs) and the LOADEXP environment variable identifies the name of the data set that contains the side decks, which are normally the files with the .x suffix in the UNIX file system.
A data set is roughly equivalent to a UNIX or Windows file. For most kinds of data sets the operating system maintains record boundaries. UNIX and Windows files are byte streams. Two kinds of data sets are PDS and PDSE. Each data set of these two types contains a directory. It is like a UNIX directory. Each "file" is called a "member". Each member name is limited to eight bytes, normally EBCDIC.
Here is an example of some environment variables that you can set prior to building ICU:
Default batch-ready library subset names mapped to original UNIX names:
```
OS390BATCH=1
LOADMOD=_USER_.ICU.LOAD
LOADEXP=_USER_.ICU.EXP
LICU76DA - libicudata.so
LICU76IN - libicui18n.so
LICU76IO - libicuio.so
LICU76UC - libicuuc.so
```
The PDS member names for the DLL file names are as follows:
```
IXMI_XX_IN --> libicui18n_XX_.dll
IXMI_XX_UC --> libicuuc_XX_.dll
IXMI_XX_DA --> libicudt_XX_e.dll
```
You should point the LOADMOD environment variable at a partitioned data set extended (PDSE) and point the LOADEXP environment variable at a partitioned data set (PDS). The PDSE can be allocated with the following attributes:
To use ICU from batch, copy the ICU libraries to a PDSE data set with the following attributes:
```
Data Set Name . . . : USER.ICU.LOAD
@ -434,24 +433,6 @@ Secondary cylinders : 5
Data set name type : LIBRARY
```
The PDS can be allocated with the following attributes:
```
Data Set Name . . . : USER.ICU.EXP
Management class. . : **None**
Storage class . . . : BASE
Volume serial . . . : TSO007
Device type . . . . : 3390
Data class. . . . . : **None**
Organization . . . : PO
Record format . . . : FB
Record length . . . : 80
Block size . . . . : 3200
1st extent cylinders: 3
Secondary cylinders : 3
Data set name type : PDS
```
## How To Build And Install On The IBM i Family (IBM i, i5/OS OS/400)
Before you start building ICU, ICU requires the following:
@ -524,14 +505,14 @@ The autoconf docs use the term "build" for A, and "host" for B. More details at:
Three initially-empty directories will be used in this example:
| **/icu** | a copy of the ICU source |
| **/buildA** | an empty directory, it will contain ICU built for A (MacOSX in this case) |
| **/buildA** | an empty directory, it will contain ICU built for A (macOS in this case) |
| **/buildB** | an empty directory, it will contain ICU built for B (HaikuOS in this case) |
1. Check out or unpack the ICU source code into the `/icu` directory.You will have the directories `/icu/source`, etc.
2. Build ICU in `/buildA` normally (using `runConfigureICU` or `configure`):
```
cd /buildA
sh /icu/source/runConfigureICU MacOSX
sh /icu/source/runConfigureICU macOS
gnumake
```
3. Set `PATH` or other variables as needed, such as `CPPFLAGS`.

View file

@ -153,7 +153,7 @@ See the [Building ICU4C](./icu4c/build) section.
From ICU version 4.2 on, the configure script will build with the default bit
width of your platform. You can request 64 or 32 bits with the
**--with-library-bits=** option, (e.g. `runConfigureICU Linux
**--with-library-bits=64**` or `runConfigureICU MacOSX
**--with-library-bits=64**` or `runConfigureICU macOS
**--with-library-bits=32**`).
(For the behavior of attempting 64 bits if possible, use
**--with-library-bits=64else32**).

View file

@ -288,11 +288,10 @@ Once the JDK and Maven are installed, run the desired Maven target. For example:
[INFO] demos [jar]
[INFO] samples [jar]
[INFO] tools_misc [jar]
[INFO] utilities-for-cldr [jar]
[INFO] perf-tests [jar]
[INFO]
[INFO] -----------------------< com.ibm.icu:icu4j-root >-----------------------
[INFO] Building International Components for Unicode for Java (icu4j-root) 74.1-SNAPSHOT [1/17]
[INFO] Building International Components for Unicode for Java (icu4j-root) 74.1-SNAPSHOT [1/16]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --- maven-enforcer-plugin:3.3.0:enforce (enforce-maven) @ icu4j-root ---
@ -320,12 +319,11 @@ Once the JDK and Maven are installed, run the desired Maven target. For example:
[INFO] demos .............................................. SUCCESS [ 0.111 s]
[INFO] samples ............................................ SUCCESS [ 0.076 s]
[INFO] tools_misc ......................................... SUCCESS [ 0.079 s]
[INFO] utilities-for-cldr ................................. SUCCESS [ 1.284 s]
[INFO] perf-tests ......................................... SUCCESS [ 0.128 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 04:16 min
[INFO] Total time: 04:15 min
[INFO] Finished at: 2023-10-03T16:16:06-07:00
[INFO] ------------------------------------------------------------------------
~~~

View file

@ -20,6 +20,8 @@ License & terms of use: http://www.unicode.org/copyright.html
---
# WARNING: Please note that for ICU 78 (2025-oct) we are planning to remove the ICU4J Locale Service Provider. See the [ICU 77 page](https://unicode-org.github.io/icu/download/77.html) for details.
## Overview
Java SE 6 introduced a new feature which allows Java user code to extend locale

View file

@ -55,7 +55,7 @@ The ICU Data Build Tool enables you to write a configuration file that
specifies what features and locales to include in a custom data bundle.
The configuration file may be written in either [JSON](http://json.org/) or
[Hjson](https://hjson.org/). To build ICU4C with custom data, set the
[Hjson](https://hjson.github.io/). To build ICU4C with custom data, set the
`ICU_DATA_FILTER_FILE` environment variable when running `runConfigureICU` on
Unix or when building the data package on Windows. For example:

View file

@ -163,6 +163,10 @@ example, even if ICU is built in "files" mode, you must still link against the
This option builds ICU data as a single (large) static library. This mode is
more complex to use. If you encounter errors, you may need to build ICU
multiple times.
* `--with-data-packaging=auto`
With this option, `configure` will pick `library` unless the options
`--enable-static` and `--disable-shared` are also given, in which case
it'll pic `static` instead.
* `--with-data-packaging=files`
With this option, ICU outputs separate individual files (.res, .cnv, etc)
which will be loaded at runtime. Read the rest of this document, especially

View file

@ -97,17 +97,20 @@ The optional four-letter script code follows the language code. If specified, it
should be a valid script code as listed on the
[Unicode ISO 15924 Registry](https://www.unicode.org/iso15924/iso15924-codes.html).
### Country code
### Region code
There are often different language conventions within the same language. For
example, Spanish is spoken in many countries in Central and South America but
the currencies are different in each country. To allow for these differences
among specific geographical, political, or cultural regions, locales are
specified by two-letter, uppercase codes. For example, "ES" represents Spain and
"MX" represents Mexico. The two letter country code uses the
[ISO-3166](https://www.iso.org/iso-3166-country-codes.html) standard.
Java supports two letter country codes that uses ISO-3166 and UN M.49 code.
among specific geographical, political, or cultural regions, locales follow
the [BCP 47](https://www.rfc-editor.org/info/bcp47) convention of specifying
regions by using two-letter-uppercase
[ISO-3166](https://www.iso.org/iso-3166-country-codes.html) or three-digit
[UN M.49](https://unstats.un.org/unsd/methodology/m49/) codes. For example,
"ES" represents Spain, "MX" represents Mexico, and "419" represents Latin America
and the Caribbean. For more information, please see the
[unicode_region_subtag](https://www.unicode.org/reports/tr35/#unicode_region_subtag_validity)
section of the [Locale Data Markup Language](https://www.unicode.org/reports/tr35/).
### Variant code
@ -388,11 +391,7 @@ and `Locale::createCanonical`. The latter API exists in both C++ and Java.
es@collation=traditional, hi__DIRECT => hi@collation=direct, zh_TW_STROKE =>
zh_TW@collation=stroke, zh__PINYIN => zh@collation=pinyin.
9. Variants specifying a calendar are remapped to calendar keyword specifiers,
as follows: ja_JP_TRADITIONAL => ja_JP@calendar=japanese, th_TH_TRADITIONAL
=> th_TH@calendar=buddhist.
10. Special case: C => en_US_POSIX.
9. Special case: C => en_US_POSIX.
Certain other operations are not performed by either level 1 or level 2
canonicalization. These are listed here for completeness.

View file

@ -456,6 +456,76 @@ modification and is useful for operations on text that may have associated
meta-data (e.g., styled text), especially in the Transliterator API.
UnicodeString implements Replaceable.
UnicodeString can be used together with standard library algorithms and containers:
```c++
#include <unicode/locid.h>
#include <unicode/stringoptions.h>
#include <unicode/unistr.h>
#include <unicode/ustream.h>
#include <algorithm>
#include <cstdlib>
#include <functional>
#include <iostream>
#include <ostream>
#include <unordered_set>
#include <vector>
// Output all strings in this container to this stream.
template <template <typename...> typename C, typename... Args>
std::ostream& operator<<(std::ostream& stream, const C<Args...>& c) {
for (const icu::UnicodeString& s : c) {
stream << s << std::endl;
}
return stream;
}
int main(int argc, char* argv[]) {
// Create a set of icu::UnicodeString objects.
const auto hasher = std::mem_fn(&icu::UnicodeString::hashCode);
std::unordered_set<icu::UnicodeString, decltype(hasher)> set(
{u"aaa", u"bbb", u"ccc"}, 0, hasher);
std::cout << "-1-" << std::endl << set;
// Create a vector from the strings in the set.
std::vector<icu::UnicodeString> vector(set.begin(), set.end());
std::cout << "-2-" << std::endl << vector;
// For each string in the set, append it to the vector, then uppercase it.
for (const icu::UnicodeString& s : set) {
vector.emplace_back(s).toUpper(icu::Locale::getEnglish());
}
std::cout << "-3-" << std::endl << vector;
// Sort the strings in ascending order (the default).
std::sort(vector.begin(), vector.end());
std::cout << "-4-" << std::endl << vector;
// Sort the strings in descending order.
std::sort(vector.begin(), vector.end(), std::greater());
std::cout << "-5-" << std::endl << vector;
// Sort the strings in ascending order, case-insensitively.
std::sort(vector.begin(), vector.end(),
[](const icu::UnicodeString& lhs, const icu::UnicodeString& rhs) {
return lhs.caseCompare(rhs, U_FOLD_CASE_DEFAULT) < 0;
});
std::cout << "-6-" << std::endl << vector;
return EXIT_SUCCESS;
}
```
See the [Collation API](../collation/api.md) for how to use a collator to sort
strings in natural language ordering for humans.
### C++ Unicode String Literals
Like in C, there are macros that enable users to instantiate a UnicodeString

View file

@ -194,7 +194,7 @@ complete a complete description of the API.
| `(?! ...)` | Negative look-ahead assertion. True if the parenthesized pattern does not match at the current input position. Does not advance the input position.
| `(?<= ...)` | Look-behind assertion. True if the parenthesized pattern matches text preceding the current input position, with the last character of the match being the input character just before the current position. Does not alter the input position. The length of possible strings matched by the look-behind pattern must not be unbounded (no \* or + operators.)
| `(?<! ...)` | Negative Look-behind assertion. True if the parenthesized pattern does not match text preceding the current input position, with the last character of the match being the input character just before the current position. Does not alter the input position. The length of possible strings matched by the look-behind pattern must not be unbounded (no \* or + operators.)
| `(?<name>...)` | Named capture group. The <angle brackets> are literal - they appear in the pattern.
| `(?<name>...)` | Named capture group. The \<angle brackets> are literal - they appear in the pattern.
| `(?ismwx-ismwx:...)` | Flag settings. Evaluate the parenthesized expression with the specified flags enabled or -disabled.
| `(?ismwx-ismwx)` | Flag settings. Change the flag settings. Changes apply to the portion of the pattern following the setting. For example, (?i) changes to a case insensitive match.

View file

@ -503,7 +503,7 @@ the position, for those cases:
The first rule will convert "x", when preceded by a vowel, into "ks". The
transform will then backup to the position before the vowel and continue. In the
next pass, the "ak" will match and be invoked. Thus, if the source text is "ax",
the result will be "ack".
the result will be "acks".
> :point_right: **Note**: *Although you can move the cursor forward or backward, it is limited in two
ways: (a) to the text that is matched, (b) within the original substring that is

File diff suppressed because it is too large Load diff

View file

@ -5,471 +5,199 @@
License & terms of use: http://www.unicode.org/copyright.html
-->
# ICU4C API Comparison: ICU 74 with ICU 75
# ICU4C API Comparison: ICU 76 with ICU 77
> _Note_ Markdown format of this document is new for ICU 65.
- [Removed from ICU 74](#removed)
- [Deprecated or Obsoleted in ICU 75](#deprecated)
- [Changed in ICU 75](#changed)
- [Promoted to stable in ICU 75](#promoted)
- [Added in ICU 75](#added)
- [Other existing drafts in ICU 75](#other)
- [Removed from ICU 76](#removed)
- [Deprecated or Obsoleted in ICU 77](#deprecated)
- [Changed in ICU 77](#changed)
- [Promoted to stable in ICU 77](#promoted)
- [Added in ICU 77](#added)
- [Other existing drafts in ICU 77](#other)
- [Signature Simplifications](#simplifications)
## Removed
Removed from ICU 74
Removed from ICU 76
| File | API | ICU 74 | ICU 75 |
| File | API | ICU 76 | ICU 77 |
|---|---|---|---|
| caniter.h | <tt>static</tt> void icu::CanonicalIterator::permute(UnicodeString&amp;, bool, Hashtable*, UErrorCode&amp;) | Internal | (missing)
| gregocal.h | UDate icu::GregorianCalendar::defaultCenturyStart() const | Internal | (missing)
| gregocal.h | bool icu::GregorianCalendar::haveDefaultCentury() const | Internal | (missing)
| gregocal.h | int32_t icu::GregorianCalendar::defaultCenturyStartYear() const | Internal | (missing)
| platform.h | <tt>#define</tt> U_HAVE_INTTYPES_H | Internal | (missing)
| platform.h | <tt>#define</tt> U_HAVE_STDINT_H | Internal | (missing)
| messageformat2_data_model.h | Builder&amp; icu::message2::MFDataModel::Builder::addSelector(Expression&amp;&amp;, UErrorCode&amp;) | InternalICU 75 | (missing)
| resbund.h | const Locale icu::ResourceBundle::getLocale(ULocDataLocaleType, UErrorCode&amp;) const | StableICU 2.8 | (missing)
| timezone.h | <tt>static</tt> const UnicodeString icu::TimeZone::getEquivalentID(const UnicodeString&amp;, int32_t) | StableICU 2.0 | (missing)
| uset.h | UnicodeString U_HEADER_ONLY_NAMESPACE::USetElementIterator::operator* () const | DraftICU 76 | (missing)
## Deprecated
Deprecated or Obsoleted in ICU 75
Deprecated or Obsoleted in ICU 77
| File | API | ICU 74 | ICU 75 |
| File | API | ICU 76 | ICU 77 |
|---|---|---|---|
| simplenumberformatter.h | void icu::number::SimpleNumber::truncateStart(uint32_t, UErrorCode&amp;) | DraftICU 73 | DeprecatedICU 75
| usimplenumberformatter.h | void usnum_truncateStart(USimpleNumber*, int32_t, UErrorCode*) | DraftICU 73 | DeprecatedICU 75
## Changed
Changed in ICU 75 (old, new)
Changed in ICU 77 (old, new)
| File | API | ICU 74 | ICU 75 |
| File | API | ICU 76 | ICU 77 |
|---|---|---|---|
| calendar.h | bool icu::Calendar::inTemporalLeapYear(UErrorCode&amp;) const | Draft→StableICU 73
| calendar.h | const char* icu::Calendar::getTemporalMonthCode(UErrorCode&amp;) const | Draft→StableICU 73
| calendar.h | void icu::Calendar::setTemporalMonthCode(const char*, UErrorCode&amp;) | Draft→StableICU 73
| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getBeaufort() | Draft→StableICU 73
| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createBeaufort(UErrorCode&amp;) | Draft→StableICU 73
| numfmt.h | <tt>enum</tt> icu::NumberFormat::ERoundingMode::kRoundHalfCeiling | Draft→StableICU 73
| numfmt.h | <tt>enum</tt> icu::NumberFormat::ERoundingMode::kRoundHalfFloor | Draft→StableICU 73
| numfmt.h | <tt>enum</tt> icu::NumberFormat::ERoundingMode::kRoundHalfOdd | Draft→StableICU 73
| simplenumberformatter.h | FormattedNumber icu::number::SimpleNumberFormatter::format(SimpleNumber, UErrorCode&amp;) const | Draft→StableICU 73
| simplenumberformatter.h | FormattedNumber icu::number::SimpleNumberFormatter::formatInt64(int64_t, UErrorCode&amp;) const | Draft→StableICU 73
| simplenumberformatter.h | SimpleNumber&amp; icu::number::SimpleNumber::operator=(SimpleNumber&amp;&amp;) | Draft→StableICU 73
| simplenumberformatter.h | SimpleNumberFormatter&amp; icu::number::SimpleNumberFormatter::operator=(SimpleNumberFormatter&amp;&amp;) | Draft→StableICU 73
| simplenumberformatter.h | icu::number::SimpleNumber::SimpleNumber()=default | Draft→StableICU 73
| simplenumberformatter.h | icu::number::SimpleNumber::SimpleNumber(SimpleNumber&amp;&amp;) | Draft→StableICU 73
| simplenumberformatter.h | icu::number::SimpleNumber::~SimpleNumber() | Draft→StableICU 73
| simplenumberformatter.h | icu::number::SimpleNumberFormatter::SimpleNumberFormatter()=default | Draft→StableICU 73
| simplenumberformatter.h | icu::number::SimpleNumberFormatter::SimpleNumberFormatter(SimpleNumberFormatter&amp;&amp;) | Draft→StableICU 73
| simplenumberformatter.h | icu::number::SimpleNumberFormatter::~SimpleNumberFormatter() | Draft→StableICU 73
| simplenumberformatter.h | <tt>static</tt> SimpleNumber icu::number::SimpleNumber::forInt64(int64_t, UErrorCode&amp;) | Draft→StableICU 73
| simplenumberformatter.h | <tt>static</tt> SimpleNumberFormatter icu::number::SimpleNumberFormatter::forLocale(const icu::Locale&amp;, UErrorCode&amp;) | Draft→StableICU 73
| simplenumberformatter.h | <tt>static</tt> SimpleNumberFormatter icu::number::SimpleNumberFormatter::forLocaleAndGroupingStrategy(const icu::Locale&amp;, UNumberGroupingStrategy, UErrorCode&amp;) | Draft→StableICU 73
| simplenumberformatter.h | <tt>static</tt> SimpleNumberFormatter icu::number::SimpleNumberFormatter::forLocaleAndSymbolsAndGroupingStrategy(const icu::Locale&amp;, const DecimalFormatSymbols&amp;, UNumberGroupingStrategy, UErrorCode&amp;) | Draft→StableICU 73
| simplenumberformatter.h | void icu::number::SimpleNumber::multiplyByPowerOfTen(int32_t, UErrorCode&amp;) | Draft→StableICU 73
| simplenumberformatter.h | void icu::number::SimpleNumber::roundTo(int32_t, UNumberFormatRoundingMode, UErrorCode&amp;) | Draft→StableICU 73
| simplenumberformatter.h | void icu::number::SimpleNumber::setMinimumFractionDigits(uint32_t, UErrorCode&amp;) | Draft→StableICU 73
| simplenumberformatter.h | void icu::number::SimpleNumber::setMinimumIntegerDigits(uint32_t, UErrorCode&amp;) | Draft→StableICU 73
| simplenumberformatter.h | void icu::number::SimpleNumber::setSign(USimpleNumberSign, UErrorCode&amp;) | Draft→StableICU 73
| simplenumberformatter.h | void icu::number::SimpleNumber::truncateStart(uint32_t, UErrorCode&amp;) | DraftICU 73 | DeprecatedICU 75
| ucal.h | <tt>enum</tt> UCalendarDateFields::UCAL_ORDINAL_MONTH | Draft→StableICU 73
| uset.h | <tt>enum</tt> ::USET_SIMPLE_CASE_INSENSITIVE | Draft→StableICU 73
| usimplenumberformatter.h | USimpleNumber* usnum_openForInt64(int64_t, UErrorCode*) | Draft→StableICU 73
| usimplenumberformatter.h | USimpleNumberFormatter* usnumf_openForLocale(const char*, UErrorCode*) | Draft→StableICU 73
| usimplenumberformatter.h | USimpleNumberFormatter* usnumf_openForLocaleAndGroupingStrategy(const char*, UNumberGroupingStrategy, UErrorCode*) | Draft→StableICU 73
| usimplenumberformatter.h | <tt>enum</tt> USimpleNumberSign::UNUM_SIMPLE_NUMBER_MINUS_SIGN | Draft→StableICU 73
| usimplenumberformatter.h | <tt>enum</tt> USimpleNumberSign::UNUM_SIMPLE_NUMBER_NO_SIGN | Draft→StableICU 73
| usimplenumberformatter.h | <tt>enum</tt> USimpleNumberSign::UNUM_SIMPLE_NUMBER_PLUS_SIGN | Draft→StableICU 73
| usimplenumberformatter.h | void usnum_close(USimpleNumber*) | Draft→StableICU 73
| usimplenumberformatter.h | void usnum_multiplyByPowerOfTen(USimpleNumber*, int32_t, UErrorCode*) | Draft→StableICU 73
| usimplenumberformatter.h | void usnum_roundTo(USimpleNumber*, int32_t, UNumberFormatRoundingMode, UErrorCode*) | Draft→StableICU 73
| usimplenumberformatter.h | void usnum_setMinimumFractionDigits(USimpleNumber*, int32_t, UErrorCode*) | Draft→StableICU 73
| usimplenumberformatter.h | void usnum_setMinimumIntegerDigits(USimpleNumber*, int32_t, UErrorCode*) | Draft→StableICU 73
| usimplenumberformatter.h | void usnum_setSign(USimpleNumber*, USimpleNumberSign, UErrorCode*) | Draft→StableICU 73
| usimplenumberformatter.h | void usnum_setToInt64(USimpleNumber*, int64_t, UErrorCode*) | Draft→StableICU 73
| usimplenumberformatter.h | void usnum_truncateStart(USimpleNumber*, int32_t, UErrorCode*) | DraftICU 73 | DeprecatedICU 75
| usimplenumberformatter.h | void usnumf_close(USimpleNumberFormatter*) | Draft→StableICU 73
| usimplenumberformatter.h | void usnumf_format(const USimpleNumberFormatter*, USimpleNumber*, UFormattedNumber*, UErrorCode*) | Draft→StableICU 73
| usimplenumberformatter.h | void usnumf_formatInt64(const USimpleNumberFormatter*, int64_t, UFormattedNumber*, UErrorCode*) | Draft→StableICU 73
| numberformatter.h | UnlocalizedNumberFormatter icu::number::LocalizedNumberFormatter::withoutLocale() &amp;&amp; | Draft→StableICU 75
| numberformatter.h | UnlocalizedNumberFormatter icu::number::LocalizedNumberFormatter::withoutLocale() const &amp; | Draft→StableICU 75
| numberrangeformatter.h | UnlocalizedNumberRangeFormatter icu::number::LocalizedNumberRangeFormatter::withoutLocale() &amp;&amp; | Draft→StableICU 75
| numberrangeformatter.h | UnlocalizedNumberRangeFormatter icu::number::LocalizedNumberRangeFormatter::withoutLocale() const &amp; | Draft→StableICU 75
| simplenumberformatter.h | void icu::number::SimpleNumber::setMaximumIntegerDigits(uint32_t, UErrorCode&amp;) | Draft→StableICU 75
| uchar.h | bool u_hasIDType(UChar32, UIdentifierType) | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierStatus::U_ID_STATUS_ALLOWED | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierStatus::U_ID_STATUS_RESTRICTED | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_DEFAULT_IGNORABLE | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_DEPRECATED | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_EXCLUSION | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_INCLUSION | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_LIMITED_USE | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_NOT_CHARACTER | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_NOT_NFKC | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_NOT_XID | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_OBSOLETE | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_RECOMMENDED | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_TECHNICAL | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_UNCOMMON_USE | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UProperty::UCHAR_IDENTIFIER_STATUS | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UProperty::UCHAR_IDENTIFIER_TYPE | Draft→StableICU 75
| uchar.h | int32_t u_getIDTypes(UChar32, UIdentifierType*, int32_t, UErrorCode*) | Draft→StableICU 75
| uniset.h | U_HEADER_NESTED_NAMESPACE::USetElementIterator icu::UnicodeSet::begin() const | DraftICU 76 | DraftICU 77
| uniset.h | U_HEADER_NESTED_NAMESPACE::USetElementIterator icu::UnicodeSet::end() const | DraftICU 76 | DraftICU 77
| uset.h | USetElementIterator &amp; U_HEADER_ONLY_NAMESPACE::USetElementIterator::operator++() | DraftICU 76 | DraftICU 77
| uset.h | USetElementIterator U_HEADER_ONLY_NAMESPACE::USetElementIterator::operator++(int) | DraftICU 76 | DraftICU 77
| uset.h | USetElementIterator U_HEADER_ONLY_NAMESPACE::USetElements::begin() const | DraftICU 76 | DraftICU 77
| uset.h | USetElementIterator U_HEADER_ONLY_NAMESPACE::USetElements::end() const | DraftICU 76 | DraftICU 77
| uset.h | U_HEADER_ONLY_NAMESPACE::USetElementIterator::USetElementIterator(const USetElementIterator&amp;)=default | DraftICU 76 | DraftICU 77
| uset.h | U_HEADER_ONLY_NAMESPACE::USetElements::USetElements(const USet*) | DraftICU 76 | DraftICU 77
| uset.h | U_HEADER_ONLY_NAMESPACE::USetElements::USetElements(const USetElements&amp;)=default | DraftICU 76 | DraftICU 77
| uset.h | bool U_HEADER_ONLY_NAMESPACE::USetElementIterator::operator!=(const USetElementIterator&amp;) const | DraftICU 76 | DraftICU 77
| uset.h | bool U_HEADER_ONLY_NAMESPACE::USetElementIterator::operator==(const USetElementIterator&amp;) const | DraftICU 76 | DraftICU 77
| usimplenumberformatter.h | void usnum_setMaximumIntegerDigits(USimpleNumber*, int32_t, UErrorCode*) | Draft→StableICU 75
## Promoted
Promoted to stable in ICU 75
Promoted to stable in ICU 77
| File | API | ICU 74 | ICU 75 |
| File | API | ICU 76 | ICU 77 |
|---|---|---|---|
| calendar.h | bool icu::Calendar::inTemporalLeapYear(UErrorCode&amp;) const | Draft→StableICU 73
| calendar.h | const char* icu::Calendar::getTemporalMonthCode(UErrorCode&amp;) const | Draft→StableICU 73
| calendar.h | void icu::Calendar::setTemporalMonthCode(const char*, UErrorCode&amp;) | Draft→StableICU 73
| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getBeaufort() | Draft→StableICU 73
| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createBeaufort(UErrorCode&amp;) | Draft→StableICU 73
| numfmt.h | <tt>enum</tt> icu::NumberFormat::ERoundingMode::kRoundHalfCeiling | Draft→StableICU 73
| numfmt.h | <tt>enum</tt> icu::NumberFormat::ERoundingMode::kRoundHalfFloor | Draft→StableICU 73
| numfmt.h | <tt>enum</tt> icu::NumberFormat::ERoundingMode::kRoundHalfOdd | Draft→StableICU 73
| simplenumberformatter.h | FormattedNumber icu::number::SimpleNumberFormatter::format(SimpleNumber, UErrorCode&amp;) const | Draft→StableICU 73
| simplenumberformatter.h | FormattedNumber icu::number::SimpleNumberFormatter::formatInt64(int64_t, UErrorCode&amp;) const | Draft→StableICU 73
| simplenumberformatter.h | SimpleNumber&amp; icu::number::SimpleNumber::operator=(SimpleNumber&amp;&amp;) | Draft→StableICU 73
| simplenumberformatter.h | SimpleNumberFormatter&amp; icu::number::SimpleNumberFormatter::operator=(SimpleNumberFormatter&amp;&amp;) | Draft→StableICU 73
| simplenumberformatter.h | icu::number::SimpleNumber::SimpleNumber()=default | Draft→StableICU 73
| simplenumberformatter.h | icu::number::SimpleNumber::SimpleNumber(SimpleNumber&amp;&amp;) | Draft→StableICU 73
| simplenumberformatter.h | icu::number::SimpleNumber::~SimpleNumber() | Draft→StableICU 73
| simplenumberformatter.h | icu::number::SimpleNumberFormatter::SimpleNumberFormatter()=default | Draft→StableICU 73
| simplenumberformatter.h | icu::number::SimpleNumberFormatter::SimpleNumberFormatter(SimpleNumberFormatter&amp;&amp;) | Draft→StableICU 73
| simplenumberformatter.h | icu::number::SimpleNumberFormatter::~SimpleNumberFormatter() | Draft→StableICU 73
| simplenumberformatter.h | <tt>static</tt> SimpleNumber icu::number::SimpleNumber::forInt64(int64_t, UErrorCode&amp;) | Draft→StableICU 73
| simplenumberformatter.h | <tt>static</tt> SimpleNumberFormatter icu::number::SimpleNumberFormatter::forLocale(const icu::Locale&amp;, UErrorCode&amp;) | Draft→StableICU 73
| simplenumberformatter.h | <tt>static</tt> SimpleNumberFormatter icu::number::SimpleNumberFormatter::forLocaleAndGroupingStrategy(const icu::Locale&amp;, UNumberGroupingStrategy, UErrorCode&amp;) | Draft→StableICU 73
| simplenumberformatter.h | <tt>static</tt> SimpleNumberFormatter icu::number::SimpleNumberFormatter::forLocaleAndSymbolsAndGroupingStrategy(const icu::Locale&amp;, const DecimalFormatSymbols&amp;, UNumberGroupingStrategy, UErrorCode&amp;) | Draft→StableICU 73
| simplenumberformatter.h | void icu::number::SimpleNumber::multiplyByPowerOfTen(int32_t, UErrorCode&amp;) | Draft→StableICU 73
| simplenumberformatter.h | void icu::number::SimpleNumber::roundTo(int32_t, UNumberFormatRoundingMode, UErrorCode&amp;) | Draft→StableICU 73
| simplenumberformatter.h | void icu::number::SimpleNumber::setMinimumFractionDigits(uint32_t, UErrorCode&amp;) | Draft→StableICU 73
| simplenumberformatter.h | void icu::number::SimpleNumber::setMinimumIntegerDigits(uint32_t, UErrorCode&amp;) | Draft→StableICU 73
| simplenumberformatter.h | void icu::number::SimpleNumber::setSign(USimpleNumberSign, UErrorCode&amp;) | Draft→StableICU 73
| ucal.h | <tt>enum</tt> UCalendarDateFields::UCAL_ORDINAL_MONTH | Draft→StableICU 73
| uscript.h | <tt>enum</tt> UScriptCode::USCRIPT_ARABIC_NASTALIQ | (missing) | StableICU 75| *(Born Stable)* |
| uset.h | <tt>enum</tt> ::USET_SIMPLE_CASE_INSENSITIVE | Draft→StableICU 73
| usimplenumberformatter.h | USimpleNumber* usnum_openForInt64(int64_t, UErrorCode*) | Draft→StableICU 73
| usimplenumberformatter.h | USimpleNumberFormatter* usnumf_openForLocale(const char*, UErrorCode*) | Draft→StableICU 73
| usimplenumberformatter.h | USimpleNumberFormatter* usnumf_openForLocaleAndGroupingStrategy(const char*, UNumberGroupingStrategy, UErrorCode*) | Draft→StableICU 73
| usimplenumberformatter.h | <tt>enum</tt> USimpleNumberSign::UNUM_SIMPLE_NUMBER_MINUS_SIGN | Draft→StableICU 73
| usimplenumberformatter.h | <tt>enum</tt> USimpleNumberSign::UNUM_SIMPLE_NUMBER_NO_SIGN | Draft→StableICU 73
| usimplenumberformatter.h | <tt>enum</tt> USimpleNumberSign::UNUM_SIMPLE_NUMBER_PLUS_SIGN | Draft→StableICU 73
| usimplenumberformatter.h | void usnum_close(USimpleNumber*) | Draft→StableICU 73
| usimplenumberformatter.h | void usnum_multiplyByPowerOfTen(USimpleNumber*, int32_t, UErrorCode*) | Draft→StableICU 73
| usimplenumberformatter.h | void usnum_roundTo(USimpleNumber*, int32_t, UNumberFormatRoundingMode, UErrorCode*) | Draft→StableICU 73
| usimplenumberformatter.h | void usnum_setMinimumFractionDigits(USimpleNumber*, int32_t, UErrorCode*) | Draft→StableICU 73
| usimplenumberformatter.h | void usnum_setMinimumIntegerDigits(USimpleNumber*, int32_t, UErrorCode*) | Draft→StableICU 73
| usimplenumberformatter.h | void usnum_setSign(USimpleNumber*, USimpleNumberSign, UErrorCode*) | Draft→StableICU 73
| usimplenumberformatter.h | void usnum_setToInt64(USimpleNumber*, int64_t, UErrorCode*) | Draft→StableICU 73
| usimplenumberformatter.h | void usnumf_close(USimpleNumberFormatter*) | Draft→StableICU 73
| usimplenumberformatter.h | void usnumf_format(const USimpleNumberFormatter*, USimpleNumber*, UFormattedNumber*, UErrorCode*) | Draft→StableICU 73
| usimplenumberformatter.h | void usnumf_formatInt64(const USimpleNumberFormatter*, int64_t, UFormattedNumber*, UErrorCode*) | Draft→StableICU 73
| numberformatter.h | UnlocalizedNumberFormatter icu::number::LocalizedNumberFormatter::withoutLocale() &amp;&amp; | Draft→StableICU 75
| numberformatter.h | UnlocalizedNumberFormatter icu::number::LocalizedNumberFormatter::withoutLocale() const &amp; | Draft→StableICU 75
| numberrangeformatter.h | UnlocalizedNumberRangeFormatter icu::number::LocalizedNumberRangeFormatter::withoutLocale() &amp;&amp; | Draft→StableICU 75
| numberrangeformatter.h | UnlocalizedNumberRangeFormatter icu::number::LocalizedNumberRangeFormatter::withoutLocale() const &amp; | Draft→StableICU 75
| resbund.h | Locale icu::ResourceBundle::getLocale(ULocDataLocaleType, UErrorCode&amp;) const | (missing) | StableICU 2.8
| simplenumberformatter.h | void icu::number::SimpleNumber::setMaximumIntegerDigits(uint32_t, UErrorCode&amp;) | Draft→StableICU 75
| timezone.h | <tt>static</tt> UnicodeString icu::TimeZone::getEquivalentID(const UnicodeString&amp;, int32_t) | (missing) | StableICU 2.0
| uchar.h | bool u_hasIDType(UChar32, UIdentifierType) | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierStatus::U_ID_STATUS_ALLOWED | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierStatus::U_ID_STATUS_RESTRICTED | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_DEFAULT_IGNORABLE | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_DEPRECATED | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_EXCLUSION | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_INCLUSION | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_LIMITED_USE | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_NOT_CHARACTER | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_NOT_NFKC | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_NOT_XID | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_OBSOLETE | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_RECOMMENDED | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_TECHNICAL | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_UNCOMMON_USE | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UProperty::UCHAR_IDENTIFIER_STATUS | Draft→StableICU 75
| uchar.h | <tt>enum</tt> UProperty::UCHAR_IDENTIFIER_TYPE | Draft→StableICU 75
| uchar.h | int32_t u_getIDTypes(UChar32, UIdentifierType*, int32_t, UErrorCode*) | Draft→StableICU 75
| usimplenumberformatter.h | void usnum_setMaximumIntegerDigits(USimpleNumber*, int32_t, UErrorCode*) | Draft→StableICU 75
## Added
Added in ICU 75
Added in ICU 77
| File | API | ICU 74 | ICU 75 |
| File | API | ICU 76 | ICU 77 |
|---|---|---|---|
| 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
| 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
| 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
| 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
| 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
| 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
| 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
| 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
| 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
| numberrangeformatter.h | UnlocalizedNumberRangeFormatter icu::number::LocalizedNumberRangeFormatter::withoutLocale() const &amp; | (missing) | DraftICU 75
| simplenumberformatter.h | void icu::number::SimpleNumber::setMaximumIntegerDigits(uint32_t, UErrorCode&amp;) | (missing) | DraftICU 75
| uchar.h | bool u_hasIDType(UChar32, UIdentifierType) | (missing) | DraftICU 75
| uchar.h | <tt>enum</tt> UIdentifierStatus::U_ID_STATUS_ALLOWED | (missing) | DraftICU 75
| uchar.h | <tt>enum</tt> UIdentifierStatus::U_ID_STATUS_RESTRICTED | (missing) | DraftICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_DEFAULT_IGNORABLE | (missing) | DraftICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_DEPRECATED | (missing) | DraftICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_EXCLUSION | (missing) | DraftICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_INCLUSION | (missing) | DraftICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_LIMITED_USE | (missing) | DraftICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_NOT_CHARACTER | (missing) | DraftICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_NOT_NFKC | (missing) | DraftICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_NOT_XID | (missing) | DraftICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_OBSOLETE | (missing) | DraftICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_RECOMMENDED | (missing) | DraftICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_TECHNICAL | (missing) | DraftICU 75
| uchar.h | <tt>enum</tt> UIdentifierType::U_ID_TYPE_UNCOMMON_USE | (missing) | DraftICU 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
| 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
| 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
| locid.h | <tt>static</tt> Locale icu::Locale::createFromName(StringPiece) | (missing) | Internal
| measunit.h | MeasureUnit icu::MeasureUnit::withConstantDenominator(uint64_t, UErrorCode&amp;) const | (missing) | DraftICU 77
| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPortionPer1E9() | (missing) | DraftICU 77
| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPortionPer1E9(UErrorCode&amp;) | (missing) | DraftICU 77
| measunit.h | uint64_t icu::MeasureUnit::getConstantDenominator(UErrorCode&amp;) const | (missing) | DraftICU 77
| messageformat2_data_model.h | Builder&amp; icu::message2::MFDataModel::Builder::addSelector(VariableName&amp;&amp;, UErrorCode&amp;) | (missing) | InternalICU 75
| resbund.h | Locale icu::ResourceBundle::getLocale(ULocDataLocaleType, UErrorCode&amp;) const | (missing) | StableICU 2.8
| timezone.h | <tt>static</tt> UnicodeString icu::TimeZone::getEquivalentID(const UnicodeString&amp;, int32_t) | (missing) | StableICU 2.0
| uset.h | std::u16string U_HEADER_ONLY_NAMESPACE::USetElementIterator::operator* () const | (missing) | DraftICU 77
| utypes.h | <tt>enum</tt> UErrorCode::U_MF_BAD_OPTION | (missing) | InternalICU 77
## Other
Other existing drafts in ICU 75
Other existing drafts in ICU 77
| File | API | ICU 74 | ICU 75 |
| File | API | ICU 76 | ICU 77 |
|---|---|---|---|
| coll.h | auto icu::Collator::equal_to() const | DraftICU 76 |
| coll.h | auto icu::Collator::greater() const | DraftICU 76 |
| coll.h | auto icu::Collator::greater_equal() const | DraftICU 76 |
| coll.h | auto icu::Collator::less() const | DraftICU 76 |
| coll.h | auto icu::Collator::less_equal() const | DraftICU 76 |
| coll.h | auto icu::Collator::not_equal_to() const | DraftICU 76 |
| measfmt.h | void icu::MeasureFormat::parseObject(const UnicodeString&amp;, Formattable&amp;, ParsePosition&amp;) const | DraftICU 53 |
| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getGasolineEnergyDensity() | DraftICU 74 |
| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createGasolineEnergyDensity(UErrorCode&amp;) | DraftICU 74 |
| measure.h | bool icu::Measure::operator!=(const UObject&amp;) const | DraftICU 74 |
| normalizer2.h | <tt>static</tt> const Normalizer2* icu::Normalizer2::getNFKCSimpleCasefoldInstance(UErrorCode&amp;) | DraftICU 74 |
| timezone.h | <tt>static</tt> UnicodeString&amp; icu::TimeZone::getIanaID(const UnicodeString&amp;, UnicodeString&amp;, UErrorCode&amp;) | DraftICU 74 |
| ucal.h | int32_t ucal_getIanaTimeZoneID(const UChar*, int32_t, UChar*, int32_t, UErrorCode*) | DraftICU 74 |
| uchar.h | <tt>enum</tt> UProperty::UCHAR_IDS_UNARY_OPERATOR | DraftICU 74 |
| uchar.h | <tt>enum</tt> UProperty::UCHAR_ID_COMPAT_MATH_CONTINUE | DraftICU 74 |
| uchar.h | <tt>enum</tt> UProperty::UCHAR_ID_COMPAT_MATH_START | DraftICU 74 |
| ulocale.h | UEnumeration* ulocale_getKeywords(const ULocale*, UErrorCode*) | DraftICU 74 |
| ulocale.h | UEnumeration* ulocale_getUnicodeKeywords(const ULocale*, UErrorCode*) | DraftICU 74 |
| ulocale.h | ULocale* ulocale_openForLanguageTag(const char*, int32_t, UErrorCode*) | DraftICU 74 |
| ulocale.h | ULocale* ulocale_openForLocaleID(const char*, int32_t, UErrorCode*) | DraftICU 74 |
| ulocale.h | bool ulocale_isBogus(const ULocale*) | DraftICU 74 |
| ulocale.h | const char* ulocale_getBaseName(const ULocale*) | DraftICU 74 |
| ulocale.h | const char* ulocale_getLanguage(const ULocale*) | DraftICU 74 |
| ulocale.h | const char* ulocale_getLocaleID(const ULocale*) | DraftICU 74 |
| ulocale.h | const char* ulocale_getRegion(const ULocale*) | DraftICU 74 |
| ulocale.h | const char* ulocale_getScript(const ULocale*) | DraftICU 74 |
| ulocale.h | const char* ulocale_getVariant(const ULocale*) | DraftICU 74 |
| ulocale.h | int32_t ulocale_getKeywordValue(const ULocale*, const char*, int32_t, char*, int32_t, UErrorCode*) | DraftICU 74 |
| ulocale.h | int32_t ulocale_getUnicodeKeywordValue(const ULocale*, const char*, int32_t, char*, int32_t, UErrorCode*) | DraftICU 74 |
| ulocale.h | void ulocale_close(ULocale*) | DraftICU 74 |
| ulocbuilder.h | ULocale* ulocbld_buildULocale(ULocaleBuilder*, UErrorCode*) | DraftICU 74 |
| ulocbuilder.h | ULocaleBuilder* ulocbld_open() | DraftICU 74 |
| ulocbuilder.h | bool ulocbld_copyErrorTo(const ULocaleBuilder*, UErrorCode*) | DraftICU 74 |
| ulocbuilder.h | int32_t ulocbld_buildLanguageTag(ULocaleBuilder*, char*, int32_t, UErrorCode*) | DraftICU 74 |
| ulocbuilder.h | int32_t ulocbld_buildLocaleID(ULocaleBuilder*, char*, int32_t, UErrorCode*) | DraftICU 74 |
| ulocbuilder.h | void ulocbld_addUnicodeLocaleAttribute(ULocaleBuilder*, const char*, int32_t) | DraftICU 74 |
| ulocbuilder.h | void ulocbld_adoptULocale(ULocaleBuilder*, ULocale*) | DraftICU 74 |
| ulocbuilder.h | void ulocbld_clear(ULocaleBuilder*) | DraftICU 74 |
| ulocbuilder.h | void ulocbld_clearExtensions(ULocaleBuilder*) | DraftICU 74 |
| ulocbuilder.h | void ulocbld_close(ULocaleBuilder*) | DraftICU 74 |
| ulocbuilder.h | void ulocbld_removeUnicodeLocaleAttribute(ULocaleBuilder*, const char*, int32_t) | DraftICU 74 |
| ulocbuilder.h | void ulocbld_setExtension(ULocaleBuilder*, char, const char*, int32_t) | DraftICU 74 |
| ulocbuilder.h | void ulocbld_setLanguage(ULocaleBuilder*, const char*, int32_t) | DraftICU 74 |
| ulocbuilder.h | void ulocbld_setLanguageTag(ULocaleBuilder*, const char*, int32_t) | DraftICU 74 |
| ulocbuilder.h | void ulocbld_setLocale(ULocaleBuilder*, const char*, int32_t) | DraftICU 74 |
| ulocbuilder.h | void ulocbld_setRegion(ULocaleBuilder*, const char*, int32_t) | DraftICU 74 |
| ulocbuilder.h | void ulocbld_setScript(ULocaleBuilder*, const char*, int32_t) | DraftICU 74 |
| ulocbuilder.h | void ulocbld_setUnicodeLocaleKeyword(ULocaleBuilder*, const char*, int32_t, const char*, int32_t) | DraftICU 74 |
| ulocbuilder.h | void ulocbld_setVariant(ULocaleBuilder*, const char*, int32_t) | DraftICU 74 |
| unorm2.h | const UNormalizer2* unorm2_getNFKCSimpleCasefoldInstance(UErrorCode*) | DraftICU 74 |
| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getLightSpeed() | DraftICU 76 |
| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getNight() | DraftICU 76 |
| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createLightSpeed(UErrorCode&amp;) | DraftICU 76 |
| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createNight(UErrorCode&amp;) | DraftICU 76 |
| uchar.h | <tt>enum</tt> UIndicConjunctBreak::U_INCB_CONSONANT | DraftICU 76 |
| uchar.h | <tt>enum</tt> UIndicConjunctBreak::U_INCB_EXTEND | DraftICU 76 |
| uchar.h | <tt>enum</tt> UIndicConjunctBreak::U_INCB_LINKER | DraftICU 76 |
| uchar.h | <tt>enum</tt> UIndicConjunctBreak::U_INCB_NONE | DraftICU 76 |
| uchar.h | <tt>enum</tt> UProperty::UCHAR_INDIC_CONJUNCT_BREAK | DraftICU 76 |
| uchar.h | <tt>enum</tt> UProperty::UCHAR_MODIFIER_COMBINING_MARK | DraftICU 76 |
| uniset.h | U_HEADER_NESTED_NAMESPACE::USetCodePoints icu::UnicodeSet::codePoints() const | DraftICU 76 |
| uniset.h | U_HEADER_NESTED_NAMESPACE::USetRanges icu::UnicodeSet::ranges() const | DraftICU 76 |
| uniset.h | U_HEADER_NESTED_NAMESPACE::USetStrings icu::UnicodeSet::strings() const | DraftICU 76 |
| unistr.h | UNISTR_FROM_STRING_EXPLICIT icu::UnicodeString::UnicodeString(const S&amp;) | DraftICU 76 |
| unistr.h | UnicodeString&amp; icu::UnicodeString::append(const S&amp;) | DraftICU 76 |
| unistr.h | UnicodeString&amp; icu::UnicodeString::operator+=(const S&amp;) | DraftICU 76 |
| unistr.h | UnicodeString&amp; icu::UnicodeString::operator=(const S&amp;) | DraftICU 76 |
| unistr.h | bool icu::UnicodeString::operator!=(const S&amp;) const | DraftICU 76 |
| unistr.h | bool icu::UnicodeString::operator==(const S&amp;) const | DraftICU 76 |
| unistr.h | icu::UnicodeString::operator std::u16string_view() const | DraftICU 76 |
| unistr.h | icu::UnicodeString::operator std::wstring_view() const | DraftICU 76 |
| unistr.h | <tt>static</tt> UnicodeString icu::UnicodeString::readOnlyAlias(const S&amp;) | DraftICU 76 |
| unistr.h | <tt>static</tt> UnicodeString icu::UnicodeString::readOnlyAlias(const UnicodeString&amp;) | DraftICU 76 |
| uregex.h | <tt>enum</tt> URegexpFlag::UREGEX_CANON_EQ | DraftICU 2.4 |
| uspoof.h | icu::UnicodeString&amp; uspoof_getBidiSkeletonUnicodeString(const USpoofChecker*, UBiDiDirection, const icu::UnicodeString&amp;, icu::UnicodeString&amp;, UErrorCode*) | DraftICU 74 |
| uspoof.h | int32_t uspoof_getBidiSkeleton(const USpoofChecker*, UBiDiDirection, const UChar*, int32_t, UChar*, int32_t, UErrorCode*) | DraftICU 74 |
| uspoof.h | int32_t uspoof_getBidiSkeletonUTF8(const USpoofChecker*, UBiDiDirection, const char*, int32_t, char*, int32_t, UErrorCode*) | DraftICU 74 |
| uspoof.h | uint32_t uspoof_areBidiConfusable(const USpoofChecker*, UBiDiDirection, const UChar*, int32_t, const UChar*, int32_t, UErrorCode*) | DraftICU 74 |
| uspoof.h | uint32_t uspoof_areBidiConfusableUTF8(const USpoofChecker*, UBiDiDirection, const char*, int32_t, const char*, int32_t, UErrorCode*) | DraftICU 74 |
| uspoof.h | uint32_t uspoof_areBidiConfusableUnicodeString(const USpoofChecker*, UBiDiDirection, const icu::UnicodeString&amp;, const icu::UnicodeString&amp;, UErrorCode*) | DraftICU 74 |
| uset.h | CodePointRange U_HEADER_ONLY_NAMESPACE::USetRangeIterator::operator* () const | DraftICU 76 |
| uset.h | USetCodePointIterator &amp; U_HEADER_ONLY_NAMESPACE::USetCodePointIterator::operator++() | DraftICU 76 |
| uset.h | USetCodePointIterator U_HEADER_ONLY_NAMESPACE::USetCodePointIterator::operator++(int) | DraftICU 76 |
| uset.h | USetCodePointIterator U_HEADER_ONLY_NAMESPACE::USetCodePoints::begin() const | DraftICU 76 |
| uset.h | USetCodePointIterator U_HEADER_ONLY_NAMESPACE::USetCodePoints::end() const | DraftICU 76 |
| uset.h | USetRangeIterator &amp; U_HEADER_ONLY_NAMESPACE::USetRangeIterator::operator++() | DraftICU 76 |
| uset.h | USetRangeIterator U_HEADER_ONLY_NAMESPACE::USetRangeIterator::operator++(int) | DraftICU 76 |
| uset.h | USetRangeIterator U_HEADER_ONLY_NAMESPACE::USetRanges::begin() const | DraftICU 76 |
| uset.h | USetRangeIterator U_HEADER_ONLY_NAMESPACE::USetRanges::end() const | DraftICU 76 |
| uset.h | USetStringIterator &amp; U_HEADER_ONLY_NAMESPACE::USetStringIterator::operator++() | DraftICU 76 |
| uset.h | USetStringIterator U_HEADER_ONLY_NAMESPACE::USetStringIterator::operator++(int) | DraftICU 76 |
| uset.h | USetStringIterator U_HEADER_ONLY_NAMESPACE::USetStrings::begin() const | DraftICU 76 |
| uset.h | USetStringIterator U_HEADER_ONLY_NAMESPACE::USetStrings::end() const | DraftICU 76 |
| uset.h | U_HEADER_ONLY_NAMESPACE::USetCodePointIterator::USetCodePointIterator(const USetCodePointIterator&amp;)=default | DraftICU 76 |
| uset.h | U_HEADER_ONLY_NAMESPACE::USetCodePoints::USetCodePoints(const USet*) | DraftICU 76 |
| uset.h | U_HEADER_ONLY_NAMESPACE::USetCodePoints::USetCodePoints(const USetCodePoints&amp;)=default | DraftICU 76 |
| uset.h | U_HEADER_ONLY_NAMESPACE::USetRangeIterator::USetRangeIterator(const USetRangeIterator&amp;)=default | DraftICU 76 |
| uset.h | U_HEADER_ONLY_NAMESPACE::USetRanges::USetRanges(const USet*) | DraftICU 76 |
| uset.h | U_HEADER_ONLY_NAMESPACE::USetRanges::USetRanges(const USetRanges&amp;)=default | DraftICU 76 |
| uset.h | U_HEADER_ONLY_NAMESPACE::USetStringIterator::USetStringIterator(const USetStringIterator&amp;)=default | DraftICU 76 |
| uset.h | U_HEADER_ONLY_NAMESPACE::USetStrings::USetStrings(const USet*) | DraftICU 76 |
| uset.h | U_HEADER_ONLY_NAMESPACE::USetStrings::USetStrings(const USetStrings&amp;)=default | DraftICU 76 |
| uset.h | bool U_HEADER_ONLY_NAMESPACE::USetCodePointIterator::operator!=(const USetCodePointIterator&amp;) const | DraftICU 76 |
| uset.h | bool U_HEADER_ONLY_NAMESPACE::USetCodePointIterator::operator==(const USetCodePointIterator&amp;) const | DraftICU 76 |
| uset.h | bool U_HEADER_ONLY_NAMESPACE::USetRangeIterator::operator!=(const USetRangeIterator&amp;) const | DraftICU 76 |
| uset.h | bool U_HEADER_ONLY_NAMESPACE::USetRangeIterator::operator==(const USetRangeIterator&amp;) const | DraftICU 76 |
| uset.h | bool U_HEADER_ONLY_NAMESPACE::USetStringIterator::operator!=(const USetStringIterator&amp;) const | DraftICU 76 |
| uset.h | bool U_HEADER_ONLY_NAMESPACE::USetStringIterator::operator==(const USetStringIterator&amp;) const | DraftICU 76 |
| uset.h | UChar32 U_HEADER_ONLY_NAMESPACE::USetCodePointIterator::operator* () const | DraftICU 76 |
| uset.h | const UChar* uset_getString(const USet*, int32_t, int32_t*) | DraftICU 76 |
| uset.h | int32_t uset_getStringCount(const USet*) | DraftICU 76 |
| uset.h | std::u16string_view U_HEADER_ONLY_NAMESPACE::USetStringIterator::operator* () const | DraftICU 76 |
## Simplifications
@ -479,7 +207,7 @@ This section shows cases where the signature was "simplified" for the sake of co
## Colophon
Contents generated by StableAPI tool on Thu Mar 28 15:48:25 PDT 2024
Contents generated by StableAPI tool on Wed Feb 19 16:10:28 PST 2025
Copyright © 2019 and later: Unicode, Inc. and others.
License & terms of use: http://www.unicode.org/copyright.html

View file

@ -1,4 +1,4 @@
# Doxyfile 1.8.13
# Doxyfile 1.9.1
# Copyright (C) 2016 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
@ -25,11 +25,11 @@
# Project related configuration options
#---------------------------------------------------------------------------
# This tag specifies the encoding used for all characters in the config file
# that follow. The default is UTF-8 which is also the encoding used for all text
# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
# for the list of possible encodings.
# This tag specifies the encoding used for all characters in the configuration
# file that follow. The default is UTF-8 which is also the encoding used for all
# text before the first occurrence of this tag. Doxygen uses libiconv (or the
# iconv built into libc) for the transcoding. See
# https://www.gnu.org/software/libiconv/ for the list of possible encodings.
# The default value is: UTF-8.
DOXYFILE_ENCODING = UTF-8
@ -101,6 +101,14 @@ ALLOW_UNICODE_NAMES = NO
OUTPUT_LANGUAGE = English
# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all
# documentation generated by doxygen is written. Doxygen will use this
# information to generate all generated output in the proper direction.
# Possible values are: None, LTR, RTL and Context.
# The default value is: None.
OUTPUT_TEXT_DIRECTION = None
# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
# descriptions after the members that are listed in the file and class
# documentation (similar to Javadoc). Set to NO to disable this.
@ -187,6 +195,16 @@ SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = YES
# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line
# such as
# /***************
# as being the beginning of a Javadoc-style comment "banner". If set to NO, the
# Javadoc-style will behave just like regular comments and it will not be
# interpreted by doxygen.
# The default value is: NO.
JAVADOC_BANNER = NO
# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
# line (until the first dot) of a Qt-style comment as the brief description. If
# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
@ -207,6 +225,14 @@ QT_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
# By default Python docstrings are displayed as preformatted text and doxygen's
# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the
# doxygen's special commands can be used and the contents of the docstring
# documentation blocks is shown as doxygen documentation.
# The default value is: YES.
PYTHON_DOCSTRING = YES
# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
# documentation from any documented member that it re-implements.
# The default value is: YES.
@ -234,7 +260,12 @@ TAB_SIZE = 8
# will allow you to put the command \sideeffect (or @sideeffect) in the
# documentation, which will result in a user-defined paragraph with heading
# "Side Effects:". You can put \n's in the value part of an alias to insert
# newlines.
# newlines (in the resulting output). You can put ^^ in the value part of an
# alias to insert a newline as if a physical newline was in the original file.
# When you need a literal { or } or , in the value part of an alias you have to
# escape them by means of a backslash (\), this can lead to conflicts with the
# commands \{ and \} for these it is advised to use the version @{ and @} or use
# a double escape (\\{ and \\})
ALIASES = "memo=\par Note:\n" \
"draft=\xrefitem draft \"Draft\" \"Draft List\" This API may be changed in the future versions and was introduced in" \
@ -244,12 +275,6 @@ ALIASES = "memo=\par Note:\n" \
"system=\xrefitem system \"System\" \"System List\" \n Do not use unless you know what you are doing." \
"internal=\xrefitem internal \"Internal\" \"Internal List\" Do not use. This API is for internal use only."
# This tag can be used to specify a number of word-keyword mappings (TCL only).
# A mapping has the form "name=value". For example adding "class=itcl::class"
# will allow you to use the command class in the itcl::class meaning.
TCL_SUBST =
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
# only. Doxygen will then generate output that is more tailored for C. For
# instance, some of the names that are used will be different. The list of all
@ -278,28 +303,40 @@ OPTIMIZE_FOR_FORTRAN = NO
OPTIMIZE_OUTPUT_VHDL = NO
# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice
# sources only. Doxygen will then generate output that is more tailored for that
# language. For instance, namespaces will be presented as modules, types will be
# separated into more groups, etc.
# The default value is: NO.
OPTIMIZE_OUTPUT_SLICE = NO
# Doxygen selects the parser to use depending on the extension of the files it
# parses. With this tag you can assign which parser to use for a given
# extension. Doxygen has a built-in mapping, but you can override or extend it
# using this tag. The format is ext=language, where ext is a file extension, and
# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
# Fortran. In the later case the parser tries to guess whether the code is fixed
# or free formatted code, this is the default for Fortran type files), VHDL. For
# instance to make doxygen treat .inc files as Fortran files (default is PHP),
# and .f files as C (default is Fortran), use: inc=Fortran f=C.
# language is one of the parsers supported by doxygen: IDL, Java, JavaScript,
# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL,
# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
# tries to guess whether the code is fixed or free formatted code, this is the
# default for Fortran type files). For instance to make doxygen treat .inc files
# as Fortran files (default is PHP), and .f files as C (default is Fortran),
# use: inc=Fortran f=C.
#
# Note: For files without extension you can use no_extension as a placeholder.
#
# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
# the files are not read by doxygen.
# the files are not read by doxygen. When specifying no_extension you should add
# * to the FILE_PATTERNS.
#
# Note see also the list of default file extension mappings.
EXTENSION_MAPPING =
# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
# according to the Markdown format, which allows for more readable
# documentation. See http://daringfireball.net/projects/markdown/ for details.
# documentation. See https://daringfireball.net/projects/markdown/ for details.
# The output of markdown processing is further processed by doxygen, so you can
# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
# case of backward compatibilities issues.
@ -311,7 +348,7 @@ MARKDOWN_SUPPORT = YES
# to that level are automatically included in the table of contents, even if
# they do not have an id attribute.
# Note: This feature currently applies only to Markdown headings.
# Minimum value: 0, maximum value: 99, default value: 0.
# Minimum value: 0, maximum value: 99, default value: 5.
# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
TOC_INCLUDE_HEADINGS = 0
@ -341,7 +378,7 @@ BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen
# will parse them like normal C++ but will assume all classes use public instead
# of private inheritance when no explicit protection keyword is present.
# The default value is: NO.
@ -427,6 +464,19 @@ TYPEDEF_HIDES_STRUCT = NO
LOOKUP_CACHE_SIZE = 0
# The NUM_PROC_THREADS specifies the number threads doxygen is allowed to use
# during processing. When set to 0 doxygen will based this on the number of
# cores available in the system. You can set it explicitly to a value larger
# than 0 to get more control over the balance between CPU load and processing
# speed. At this moment only the input processing can be done using multiple
# threads. Since this is still an experimental feature the default is set to 1,
# which efficively disables parallel processing. Please report any issues you
# encounter. Generating dot graphs in parallel is controlled by the
# DOT_NUM_THREADS setting.
# Minimum value: 0, maximum value: 32, default value: 1.
NUM_PROC_THREADS = 1
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
@ -447,6 +497,12 @@ EXTRACT_ALL = NO
EXTRACT_PRIVATE = NO
# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual
# methods of a class will be included in the documentation.
# The default value is: NO.
EXTRACT_PRIV_VIRTUAL = NO
# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
# scope will be included in the documentation.
# The default value is: NO.
@ -484,6 +540,13 @@ EXTRACT_LOCAL_METHODS = NO
EXTRACT_ANON_NSPACES = NO
# If this flag is set to YES, the name of an unnamed parameter in a declaration
# will be determined by the corresponding definition. By default unnamed
# parameters remain unnamed in the output.
# The default value is: YES.
RESOLVE_UNNAMED_PARAMS = YES
# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
# undocumented members inside documented classes or files. If set to NO these
# members will be included in the various overviews, but no documentation
@ -501,8 +564,8 @@ HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO
# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
# (class|struct|union) declarations. If set to NO, these declarations will be
# included in the documentation.
# declarations. If set to NO, these declarations will be included in the
# documentation.
# The default value is: NO.
HIDE_FRIEND_COMPOUNDS = NO
@ -521,11 +584,18 @@ HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = YES
# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
# names in lower-case letters. If set to YES, upper-case letters are also
# allowed. This is useful if you have classes or files whose names only differ
# in case and if your file system supports case sensitive file names. Windows
# and Mac users are advised to set this option to NO.
# With the correct setting of option CASE_SENSE_NAMES doxygen will better be
# able to match the capabilities of the underlying filesystem. In case the
# filesystem is case sensitive (i.e. it supports files in the same directory
# whose names only differ in casing), the option must be set to YES to properly
# deal with such files in case they appear in the input. For filesystems that
# are not case sensitive the option should be be set to NO to properly deal with
# output files written for symbols that only differ in casing, such as for two
# classes, one named CLASS and the other named Class, and to also support
# references to files without having to specify the exact matching casing. On
# Windows (including Cygwin) and MacOS, users should typically set this option
# to NO, whereas on Linux or other Unix flavors it should typically be set to
# YES.
# The default value is: system dependent.
CASE_SENSE_NAMES = YES
@ -712,7 +782,7 @@ LAYOUT_FILE =
# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
# the reference definitions. This must be a list of .bib files. The .bib
# extension is automatically appended if omitted. This requires the bibtex tool
# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
# For LaTeX the style of the bibliography can be controlled using
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
# search path. See also \cite for info how to create references.
@ -757,13 +827,17 @@ WARN_IF_DOC_ERROR = YES
# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
# are documented, but have no documentation for their parameters or return
# value. If set to NO, doxygen will only warn about wrong or incomplete
# parameter documentation, but not about the absence of documentation.
# parameter documentation, but not about the absence of documentation. If
# EXTRACT_ALL is set to YES then this flag will automatically be disabled.
# The default value is: NO.
WARN_NO_PARAMDOC = NO
# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
# a warning is encountered.
# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS
# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but
# at the end of the doxygen process doxygen will return with a non-zero status.
# Possible values are: NO, YES and FAIL_ON_WARNINGS.
# The default value is: NO.
WARN_AS_ERROR = NO
@ -802,8 +876,8 @@ INPUT = @srcdir@/common/unicode \
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
# documentation (see: http://www.gnu.org/software/libiconv) for the list of
# possible encodings.
# documentation (see:
# https://www.gnu.org/software/libiconv/) for the list of possible encodings.
# The default value is: UTF-8.
INPUT_ENCODING = UTF-8
@ -816,11 +890,15 @@ INPUT_ENCODING = UTF-8
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
# read by doxygen.
#
# Note the list of default checked file patterns might differ from the list of
# default file extension mappings.
#
# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf.
# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment),
# *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, *.vhdl,
# *.ucf, *.qsf and *.ice.
FILE_PATTERNS = *.h
@ -979,7 +1057,7 @@ INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
# function all documented functions referencing it will be listed.
# entity all documented functions referencing it will be listed.
# The default value is: NO.
REFERENCED_BY_RELATION = YES
@ -1011,12 +1089,12 @@ SOURCE_TOOLTIPS = YES
# If the USE_HTAGS tag is set to YES then the references to source code will
# point to the HTML generated by the htags(1) tool instead of doxygen built-in
# source browser. The htags tool is part of GNU's global source tagging system
# (see http://www.gnu.org/software/global/global.html). You will need version
# (see https://www.gnu.org/software/global/global.html). You will need version
# 4.8.6 or higher.
#
# To use it do the following:
# - Install the latest version of global
# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file
# - Make sure the INPUT points to the root of the source tree
# - Run doxygen as normal
#
@ -1039,16 +1117,22 @@ USE_HTAGS = NO
VERBATIM_HEADERS = YES
# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
# cost of reduced performance. This can be particularly helpful with template
# rich C++ code for which doxygen's built-in parser lacks the necessary type
# information.
# clang parser (see:
# http://clang.llvm.org/) for more accurate parsing at the cost of reduced
# performance. This can be particularly helpful with template rich C++ code for
# which doxygen's built-in parser lacks the necessary type information.
# Note: The availability of this option depends on whether or not doxygen was
# generated with the -Duse-libclang=ON option for CMake.
# generated with the -Duse_libclang=ON option for CMake.
# The default value is: NO.
CLANG_ASSISTED_PARSING = NO
# If clang assisted parsing is enabled and the CLANG_ADD_INC_PATHS tag is set to
# YES then doxygen will add the directory of each input to the include path.
# The default value is: YES.
CLANG_ADD_INC_PATHS = YES
# If clang assisted parsing is enabled you can provide the compiler with command
# line options that you would normally use when invoking the compiler. Note that
# the include paths will already be set by doxygen for the files and directories
@ -1057,6 +1141,19 @@ CLANG_ASSISTED_PARSING = NO
CLANG_OPTIONS =
# If clang assisted parsing is enabled you can provide the clang parser with the
# path to the directory containing a file called compile_commands.json. This
# file is the compilation database (see:
# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the
# options used when the source files were built. This is equivalent to
# specifying the -p option to a clang tool, such as clang-check. These options
# will then be passed to the parser. Any options specified with CLANG_OPTIONS
# will be added as well.
# Note: The availability of this option depends on whether or not doxygen was
# generated with the -Duse_libclang=ON option for CMake.
CLANG_DATABASE_PATH =
#---------------------------------------------------------------------------
# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
@ -1068,13 +1165,6 @@ CLANG_OPTIONS =
ALPHABETICAL_INDEX = YES
# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
# which the alphabetical index list will be split.
# Minimum value: 1, maximum value: 20, default value: 5.
# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
COLS_IN_ALPHA_INDEX = 5
# In case all classes in a project start with a common prefix, all classes will
# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
# can be used to specify a prefix (or a list of prefixes) that should be ignored
@ -1175,7 +1265,7 @@ HTML_EXTRA_FILES =
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
# will adjust the colors in the style sheet and background images according to
# this color. Hue is specified as an angle on a colorwheel, see
# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
# https://en.wikipedia.org/wiki/Hue for more information. For instance the value
# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
# purple, and 360 is red again.
# Minimum value: 0, maximum value: 359, default value: 220.
@ -1211,6 +1301,17 @@ HTML_COLORSTYLE_GAMMA = 80
HTML_TIMESTAMP = NO
# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
# documentation will contain a main index with vertical navigation menus that
# are dynamically created via JavaScript. If disabled, the navigation index will
# consists of multiple levels of tabs that are statically embedded in every HTML
# page. Disable this option to support browsers that do not have JavaScript,
# like the Qt help browser.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_DYNAMIC_MENUS = YES
# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
# documentation will contain sections that can be hidden and shown after the
# page has loaded.
@ -1234,13 +1335,14 @@ HTML_INDEX_NUM_ENTRIES = 100
# If the GENERATE_DOCSET tag is set to YES, additional index files will be
# generated that can be used as input for Apple's Xcode 3 integrated development
# environment (see: http://developer.apple.com/tools/xcode/), introduced with
# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
# Makefile in the HTML output directory. Running make will produce the docset in
# that directory and running make install will install the docset in
# environment (see:
# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To
# create a documentation set, doxygen will generate a Makefile in the HTML
# output directory. Running make will produce the docset in that directory and
# running make install will install the docset in
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
# for more information.
# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy
# genXcode/_index.html for more information.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
@ -1279,8 +1381,8 @@ DOCSET_PUBLISHER_NAME = Publisher
# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
# Windows.
# (see:
# https://www.microsoft.com/en-us/download/details.aspx?id=21138) on Windows.
#
# The HTML Help Workshop contains a compiler that can convert all HTML output
# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
@ -1310,7 +1412,7 @@ CHM_FILE =
HHC_LOCATION =
# The GENERATE_CHI flag controls if a separate .chi index file is generated
# (YES) or that it should be included in the primary .chm file (NO).
# (YES) or that it should be included in the main .chm file (NO).
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
@ -1355,7 +1457,8 @@ QCH_FILE =
# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
# Project output. For more information please see Qt Help Project / Namespace
# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
# (see:
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
# The default value is: org.doxygen.Project.
# This tag requires that the tag GENERATE_QHP is set to YES.
@ -1363,8 +1466,8 @@ QHP_NAMESPACE = org.doxygen.Project
# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
# Help Project output. For more information please see Qt Help Project / Virtual
# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
# folders).
# Folders (see:
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders).
# The default value is: doc.
# This tag requires that the tag GENERATE_QHP is set to YES.
@ -1372,30 +1475,30 @@ QHP_VIRTUAL_FOLDER = doc
# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
# filter to add. For more information please see Qt Help Project / Custom
# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
# filters).
# Filters (see:
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_CUST_FILTER_NAME =
# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
# custom filter to add. For more information please see Qt Help Project / Custom
# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
# filters).
# Filters (see:
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_CUST_FILTER_ATTRS =
# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
# project's filter section matches. Qt Help Project / Filter Attributes (see:
# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).
# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_SECT_FILTER_ATTRS =
# The QHG_LOCATION tag can be used to specify the location of Qt's
# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
# generated .qhp file.
# The QHG_LOCATION tag can be used to specify the location (absolute path
# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to
# run qhelpgenerator on the generated .qhp file.
# This tag requires that the tag GENERATE_QHP is set to YES.
QHG_LOCATION =
@ -1472,6 +1575,17 @@ TREEVIEW_WIDTH = 250
EXT_LINKS_IN_WINDOW = NO
# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg
# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see
# https://inkscape.org) to generate formulas as SVG images instead of PNGs for
# the HTML output. These images will generally look nicer at scaled resolutions.
# Possible values are: png (the default) and svg (looks nicer but requires the
# pdf2svg or inkscape tool).
# The default value is: png.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_FORMULA_FORMAT = png
# Use this tag to change the font size of LaTeX formulas included as images in
# the HTML documentation. When you change the font size after a successful
# doxygen run you need to manually remove any form_*.png images from the HTML
@ -1481,7 +1595,7 @@ EXT_LINKS_IN_WINDOW = NO
FORMULA_FONTSIZE = 10
# Use the FORMULA_TRANPARENT tag to determine whether or not the images
# Use the FORMULA_TRANSPARENT tag to determine whether or not the images
# generated for formulas are transparent PNGs. Transparent PNGs are not
# supported properly for IE 6.0, but are supported on all modern browsers.
#
@ -1492,8 +1606,14 @@ FORMULA_FONTSIZE = 10
FORMULA_TRANSPARENT = YES
# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands
# to create new LaTeX commands to be used in formulas as building blocks. See
# the section "Including formulas" for details.
FORMULA_MACROFILE =
# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
# http://www.mathjax.org) which uses client side Javascript for the rendering
# https://www.mathjax.org) which uses client side JavaScript for the rendering
# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
# installed or if you want to formulas look prettier in the HTML output. When
# enabled you may also need to install MathJax separately and configure the path
@ -1505,7 +1625,7 @@ USE_MATHJAX = NO
# When MathJax is enabled you can set the default output format to be used for
# the MathJax output. See the MathJax site (see:
# http://docs.mathjax.org/en/latest/output.html) for more details.
# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details.
# Possible values are: HTML-CSS (which is slower, but has the best
# compatibility), NativeMML (i.e. MathML) and SVG.
# The default value is: HTML-CSS.
@ -1520,8 +1640,8 @@ MATHJAX_FORMAT = HTML-CSS
# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
# Content Delivery Network so you can quickly see the result without installing
# MathJax. However, it is strongly recommended to install a local copy of
# MathJax from http://www.mathjax.org before deployment.
# The default value is: http://cdn.mathjax.org/mathjax/latest.
# MathJax from https://www.mathjax.org before deployment.
# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2.
# This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
@ -1535,7 +1655,8 @@ MATHJAX_EXTENSIONS =
# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
# of code that will be used on startup of the MathJax code. See the MathJax site
# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
# (see:
# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an
# example see the documentation.
# This tag requires that the tag USE_MATHJAX is set to YES.
@ -1563,7 +1684,7 @@ MATHJAX_CODEFILE =
SEARCHENGINE = NO
# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
# implemented using a web server instead of a web client using Javascript. There
# implemented using a web server instead of a web client using JavaScript. There
# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
# setting. When disabled, doxygen will generate a PHP script for searching and
# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
@ -1582,7 +1703,8 @@ SERVER_BASED_SEARCH = NO
#
# Doxygen ships with an example indexer (doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library
# Xapian (see: http://xapian.org/).
# Xapian (see:
# https://xapian.org/).
#
# See the section "External Indexing and Searching" for details.
# The default value is: NO.
@ -1595,8 +1717,9 @@ EXTERNAL_SEARCH = NO
#
# Doxygen ships with an example indexer (doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library
# Xapian (see: http://xapian.org/). See the section "External Indexing and
# Searching" for details.
# Xapian (see:
# https://xapian.org/). See the section "External Indexing and Searching" for
# details.
# This tag requires that the tag SEARCHENGINE is set to YES.
SEARCHENGINE_URL =
@ -1647,21 +1770,35 @@ LATEX_OUTPUT = latex
# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
# invoked.
#
# Note that when enabling USE_PDFLATEX this option is only used for generating
# bitmaps for formulas in the HTML output, but not in the Makefile that is
# written to the output directory.
# The default file is: latex.
# Note that when not enabling USE_PDFLATEX the default is latex when enabling
# USE_PDFLATEX the default is pdflatex and when in the later case latex is
# chosen this is overwritten by pdflatex. For specific output languages the
# default can have been set differently, this depends on the implementation of
# the output language.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_CMD_NAME = latex
# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
# index for LaTeX.
# Note: This tag is used in the Makefile / make.bat.
# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file
# (.tex).
# The default file is: makeindex.
# This tag requires that the tag GENERATE_LATEX is set to YES.
MAKEINDEX_CMD_NAME = makeindex
# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to
# generate index for LaTeX. In case there is no backslash (\) as first character
# it will be automatically added in the LaTeX code.
# Note: This tag is used in the generated output file (.tex).
# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat.
# The default value is: makeindex.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_MAKEINDEX_CMD = makeindex
# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
# documents. This may be useful for small projects and may help to save some
# trees in general.
@ -1746,9 +1883,11 @@ LATEX_EXTRA_FILES =
PDF_HYPERLINKS = NO
# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
# the PDF file directly from the LaTeX files. Set this option to YES, to get a
# higher quality PDF documentation.
# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as
# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX
# files. Set this option to YES, to get a higher quality PDF documentation.
#
# See also section LATEX_CMD_NAME for selecting the engine.
# The default value is: YES.
# This tag requires that the tag GENERATE_LATEX is set to YES.
@ -1782,7 +1921,7 @@ LATEX_SOURCE_CODE = NO
# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
# bibliography, e.g. plainnat, or ieeetr. See
# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
# https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
# The default value is: plain.
# This tag requires that the tag GENERATE_LATEX is set to YES.
@ -1796,6 +1935,14 @@ LATEX_BIB_STYLE = plain
LATEX_TIMESTAMP = NO
# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)
# path from which the emoji images will be read. If a relative path is entered,
# it will be relative to the LATEX_OUTPUT directory. If left blank the
# LATEX_OUTPUT directory will be used.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_EMOJI_DIRECTORY =
#---------------------------------------------------------------------------
# Configuration options related to the RTF output
#---------------------------------------------------------------------------
@ -1835,9 +1982,9 @@ COMPACT_RTF = NO
RTF_HYPERLINKS = NO
# Load stylesheet definitions from file. Syntax is similar to doxygen's config
# file, i.e. a series of assignments. You only have to provide replacements,
# missing definitions are set to their default value.
# Load stylesheet definitions from file. Syntax is similar to doxygen's
# configuration file, i.e. a series of assignments. You only have to provide
# replacements, missing definitions are set to their default value.
#
# See also section "Doxygen usage" for information on how to generate the
# default style sheet that doxygen normally uses.
@ -1846,8 +1993,8 @@ RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE =
# Set optional variables used in the generation of an RTF document. Syntax is
# similar to doxygen's config file. A template extensions file can be generated
# using doxygen -e rtf extensionFile.
# similar to doxygen's configuration file. A template extensions file can be
# generated using doxygen -e rtf extensionFile.
# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_EXTENSIONS_FILE =
@ -1933,6 +2080,13 @@ XML_OUTPUT = xml
XML_PROGRAMLISTING = YES
# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include
# namespace members in file scope as well, matching the HTML output.
# The default value is: NO.
# This tag requires that the tag GENERATE_XML is set to YES.
XML_NS_MEMB_FILE_SCOPE = NO
#---------------------------------------------------------------------------
# Configuration options related to the DOCBOOK output
#---------------------------------------------------------------------------
@ -1965,9 +2119,9 @@ DOCBOOK_PROGRAMLISTING = NO
#---------------------------------------------------------------------------
# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
# AutoGen Definitions (see http://autogen.sf.net) file that captures the
# structure of the code including all documentation. Note that this feature is
# still experimental and incomplete at the moment.
# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures
# the structure of the code including all documentation. Note that this feature
# is still experimental and incomplete at the moment.
# The default value is: NO.
GENERATE_AUTOGEN_DEF = NO
@ -2079,7 +2233,7 @@ PREDEFINED = U_EXPORT2= \
U_CDECL_BEGIN= \
U_CDECL_END= \
"U_NAMESPACE_BEGIN=namespace icu{" \
"U_NAMESPACE_END=}" \
U_NAMESPACE_END=} \
U_SHOW_CPLUSPLUS_API=1 \
U_DEFINE_LOCAL_OPEN_POINTER()= \
U_IN_DOXYGEN=1 \
@ -2129,7 +2283,7 @@ TAGFILES =
# tag file that is based on the input files it reads. See section "Linking to
# external documentation" for more information about the usage of tag files.
GENERATE_TAGFILE = "@builddir@/doc/html/icudocs.tag"
GENERATE_TAGFILE = @builddir@/doc/html/icudocs.tag
# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
# the class index. If set to NO, only the inherited external classes will be
@ -2152,12 +2306,6 @@ EXTERNAL_GROUPS = YES
EXTERNAL_PAGES = YES
# The PERL_PATH should be the absolute path and name of the perl script
# interpreter (i.e. the result of 'which perl').
# The default file (with absolute path) is: /usr/bin/perl.
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
@ -2171,15 +2319,6 @@ PERL_PATH = /usr/bin/perl
CLASS_DIAGRAMS = YES
# You can define message sequence charts within doxygen comments using the \msc
# command. Doxygen will then run the mscgen tool (see:
# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
# documentation. The MSCGEN_PATH tag allows you to specify the directory where
# the mscgen tool resides. If left empty the tool is assumed to be found in the
# default search path.
MSCGEN_PATH =
# You can include diagrams made with dia in doxygen documentation. Doxygen will
# then run dia to produce the diagram and insert it in the documentation. The
# DIA_PATH tag allows you to specify the directory where the dia binary resides.
@ -2277,10 +2416,32 @@ UML_LOOK = NO
# but if the number exceeds 15, the total amount of fields shown is limited to
# 10.
# Minimum value: 0, maximum value: 100, default value: 10.
# This tag requires that the tag HAVE_DOT is set to YES.
# This tag requires that the tag UML_LOOK is set to YES.
UML_LIMIT_NUM_FIELDS = 10
# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and
# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS
# tag is set to YES, doxygen will add type and arguments for attributes and
# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen
# will not generate fields with class member information in the UML graphs. The
# class diagrams will look similar to the default class diagrams but using UML
# notation for the relationships.
# Possible values are: NO, YES and NONE.
# The default value is: NO.
# This tag requires that the tag UML_LOOK is set to YES.
DOT_UML_DETAILS = NO
# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters
# to display on a single line. If the actual line length exceeds this threshold
# significantly it will wrapped across multiple lines. Some heuristics are apply
# to avoid ugly line breaks.
# Minimum value: 0, maximum value: 1000, default value: 17.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_WRAP_THRESHOLD = 17
# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
# collaboration graphs will show the relations between templates and their
# instances.
@ -2472,9 +2633,11 @@ DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate
# files that are used to generate the various graphs.
#
# Note: This setting is not only used for dot files but also for msc and
# plantuml temporary files.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_CLEANUP = YES

View file

@ -77,7 +77,7 @@ EXTRA_DATA =
## List of phony targets
.PHONY : all all-local all-recursive install install-local install-udata install-udata-files install-udata-dlls \
install-recursive clean clean-local clean-recursive distclean \
install-recursive install-manx clean clean-local clean-recursive distclean \
distclean-local distclean-recursive doc dist dist-local dist-recursive \
check check-local check-recursive clean-recursive-with-twist install-icu \
doc install-doc tests icu4j-data icu4j-data-install update-windows-makefiles xcheck-local xcheck-recursive xperf xcheck xperf-recursive \
@ -88,9 +88,9 @@ check-exhaustive check-exhaustive-local check-exhaustive-recursive releaseDist
## List of standard targets
all: all-local all-recursive
install: install-recursive install-local
install: install-recursive
clean: clean-recursive-with-twist clean-local
distclean : distclean-recursive distclean-local
distclean : distclean-recursive
dist: dist-recursive
check: all check-recursive
check-recursive: all
@ -133,7 +133,7 @@ doc/html/index.html: Doxyfile $(wildcard ./common/unicode/platform.h $(srcdir)/c
Doxyfile: $(srcdir)/Doxyfile.in
CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
$(DOCZIP): doc
$(DOCZIP): doc-searchengine
-$(RMV) $(DOCZIP)
( cd doc/html ; zip -r ../../$(DOCZIP) * )
endif
@ -206,7 +206,7 @@ endif
ifeq ($(DOXYGEN),)
install-doc:
else
install-doc: doc
install-doc: doc-searchengine
$(RM) -r $(DESTDIR)$(docdir)/$(docsubdir)
$(MKINSTALLDIRS) $(DESTDIR)$(docdir)/$(docsubdir)
$(INSTALL_DATA) $(docfiles) $(DESTDIR)$(docdir)/$(docsubdir)
@ -275,24 +275,36 @@ config/icu-uc.pc: config/icu.pc Makefile icudefs.mk
@cat config/icu.pc > $@
@echo "Description: $(PACKAGE_ICU_DESCRIPTION): Common and Data libraries" >> $@
@echo "Name: $(PACKAGE)-uc" >> $@
@echo "Libs:" '-L$${libdir}' "${ICULIBS_UC}" "${ICULIBS_DT}" >> $@
@echo "Libs.private:" '$${baselibs}' >> $@
ifeq ($(ENABLE_SHARED),)
@echo "Libs:" '-L$${libdir}' "${ICULIBS_UC}" "${ICULIBS_DT}" '$${baselibs}' >> $@
else
@echo "Libs:" '-L$${libdir}' "${ICULIBS_UC}" >> $@
@echo "Libs.private:" "${ICULIBS_DT}" '$${baselibs}' >> $@
endif
@echo $@ updated.
config/icu-i18n.pc: config/icu.pc Makefile icudefs.mk
@cat config/icu.pc > $@
@echo "Description: $(PACKAGE_ICU_DESCRIPTION): Internationalization library" >> $@
@echo "Name: $(PACKAGE)-i18n" >> $@
ifeq ($(ENABLE_SHARED),)
@echo "Requires: icu-uc" >> $@
@echo "Libs:" "${ICULIBS_I18N}" >> $@
else
@echo "Requires.private: icu-uc" >> $@
endif
@echo "Libs:" '-L$${libdir}' "${ICULIBS_I18N}" >> $@
@echo $@ updated.
config/icu-io.pc: config/icu.pc Makefile icudefs.mk
@cat config/icu.pc > $@
@echo "Description: $(PACKAGE_ICU_DESCRIPTION): Stream and I/O Library" >> $@
@echo "Name: $(PACKAGE)-io" >> $@
ifeq ($(ENABLE_SHARED),)
@echo "Requires: icu-i18n" >> $@
@echo "Libs:" "${ICULIBS_IO}" >> $@
else
@echo "Requires.private: icu-i18n" >> $@
endif
@echo "Libs:" '-L$${libdir}' "${ICULIBS_IO}" >> $@
@echo $@ updated.
ICULEHB_LIBS=@ICULEHB_LIBS@
@ -306,12 +318,20 @@ config/icu-lx.pc: config/icu.pc Makefile icudefs.mk
@cat config/icu.pc > $@
@echo "Description: $(PACKAGE_ICU_DESCRIPTION): Paragraph Layout library $(USING_HB)" >> $@
@echo "Name: $(PACKAGE)-lx" >> $@
ifeq ($(ENABLE_SHARED),)
ifneq ($(ICULEHB_LIBS),)
@echo "Requires: icu-le-hb icu-uc" >> $@
else
@echo "Requires: icu-le" >> $@
endif
@echo "Libs:" "${ICULIBS_LX}" >> $@
else
ifneq ($(ICULEHB_LIBS),)
@echo "Requires.private: icu-le-hb icu-uc" >> $@
else
@echo "Requires.private: icu-le" >> $@
endif
endif
@echo "Libs:" '-L$${libdir}' "${ICULIBS_LX}" >> $@
@echo $@ updated.
@ -357,7 +377,7 @@ config.status: $(srcdir)/configure $(srcdir)/common/unicode/uvernum.h
install-manx: $(MANX_FILES)
$(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION)
ifneq ($(MANX_FILES),)
$(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION)
$(INSTALL_DATA) $^ $(DESTDIR)$(mandir)/man$(SECTION)
endif
config/%.$(SECTION): $(srcdir)/config/%.$(SECTION).in

View file

@ -449,7 +449,7 @@ AC_DEFUN([AC_CHECK_64BIT_LIBS],
AC_DEFUN([AC_CHECK_STRICT_COMPILE],
[
AC_MSG_CHECKING([whether strict compiling is on])
AC_ARG_ENABLE(strict,[ --enable-strict compile with strict compiler options [default=yes]], [
AC_ARG_ENABLE(strict,[ --disable-strict do not compile with strict compiler options], [
if test "$enableval" = no
then
ac_use_strict_options=no

View file

@ -1,6 +1,6 @@
# generated automatically by aclocal 1.16.1 -*- Autoconf -*-
# generated automatically by aclocal 1.16.5 -*- Autoconf -*-
# Copyright (C) 1996-2018 Free Software Foundation, Inc.
# Copyright (C) 1996-2021 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@ -12,9 +12,9 @@
# PARTICULAR PURPOSE.
m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
dnl serial 11 (pkg-config-0.29.1)
dnl
# pkg.m4 - Macros to locate and use pkg-config. -*- Autoconf -*-
# serial 12 (pkg-config-0.29.2)
dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
dnl
@ -55,7 +55,7 @@ dnl
dnl See the "Since" comment for each macro you use to see what version
dnl of the macros you require.
m4_defun([PKG_PREREQ],
[m4_define([PKG_MACROS_VERSION], [0.29.1])
[m4_define([PKG_MACROS_VERSION], [0.29.2])
m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
[m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
])dnl PKG_PREREQ
@ -100,7 +100,7 @@ dnl Check to see whether a particular set of modules exists. Similar to
dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
dnl
dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
dnl only at the first occurence in configure.ac, so if the first place
dnl only at the first occurrence in configure.ac, so if the first place
dnl it's called might be skipped (such as if it is within an "if", you
dnl have to call PKG_CHECK_EXISTS manually
AC_DEFUN([PKG_CHECK_EXISTS],
@ -156,7 +156,7 @@ AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
pkg_failed=no
AC_MSG_CHECKING([for $1])
AC_MSG_CHECKING([for $2])
_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
_PKG_CONFIG([$1][_LIBS], [libs], [$2])
@ -166,17 +166,17 @@ and $1[]_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.])
if test $pkg_failed = yes; then
AC_MSG_RESULT([no])
AC_MSG_RESULT([no])
_PKG_SHORT_ERRORS_SUPPORTED
if test $_pkg_short_errors_supported = yes; then
$1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
else
$1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
$1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
else
$1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
# Put the nasty error message in config.log where it belongs
echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
m4_default([$4], [AC_MSG_ERROR(
m4_default([$4], [AC_MSG_ERROR(
[Package requirements ($2) were not met:
$$1_PKG_ERRORS
@ -187,8 +187,8 @@ installed software in a non-standard prefix.
_PKG_TEXT])[]dnl
])
elif test $pkg_failed = untried; then
AC_MSG_RESULT([no])
m4_default([$4], [AC_MSG_FAILURE(
AC_MSG_RESULT([no])
m4_default([$4], [AC_MSG_FAILURE(
[The pkg-config script could not be found or is too old. Make sure it
is in your PATH or set the PKG_CONFIG environment variable to the full
path to pkg-config.
@ -198,10 +198,10 @@ _PKG_TEXT
To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
])
else
$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
AC_MSG_RESULT([yes])
$3
$3
fi[]dnl
])dnl PKG_CHECK_MODULES
@ -288,5 +288,73 @@ AS_VAR_COPY([$1], [pkg_cv_][$1])
AS_VAR_IF([$1], [""], [$5], [$4])dnl
])dnl PKG_CHECK_VAR
dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES,
dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND],
dnl [DESCRIPTION], [DEFAULT])
dnl ------------------------------------------
dnl
dnl Prepare a "--with-" configure option using the lowercase
dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and
dnl PKG_CHECK_MODULES in a single macro.
AC_DEFUN([PKG_WITH_MODULES],
[
m4_pushdef([with_arg], m4_tolower([$1]))
m4_pushdef([description],
[m4_default([$5], [build with ]with_arg[ support])])
m4_pushdef([def_arg], [m4_default([$6], [auto])])
m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes])
m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no])
m4_case(def_arg,
[yes],[m4_pushdef([with_without], [--without-]with_arg)],
[m4_pushdef([with_without],[--with-]with_arg)])
AC_ARG_WITH(with_arg,
AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),,
[AS_TR_SH([with_]with_arg)=def_arg])
AS_CASE([$AS_TR_SH([with_]with_arg)],
[yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)],
[auto],[PKG_CHECK_MODULES([$1],[$2],
[m4_n([def_action_if_found]) $3],
[m4_n([def_action_if_not_found]) $4])])
m4_popdef([with_arg])
m4_popdef([description])
m4_popdef([def_arg])
])dnl PKG_WITH_MODULES
dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES,
dnl [DESCRIPTION], [DEFAULT])
dnl -----------------------------------------------
dnl
dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES
dnl check._[VARIABLE-PREFIX] is exported as make variable.
AC_DEFUN([PKG_HAVE_WITH_MODULES],
[
PKG_WITH_MODULES([$1],[$2],,,[$3],[$4])
AM_CONDITIONAL([HAVE_][$1],
[test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"])
])dnl PKG_HAVE_WITH_MODULES
dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES,
dnl [DESCRIPTION], [DEFAULT])
dnl ------------------------------------------------------
dnl
dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after
dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make
dnl and preprocessor variable.
AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES],
[
PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4])
AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"],
[AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])])
])dnl PKG_HAVE_DEFINE_WITH_MODULES
m4_include([config/m4/icu-conditional.m4])
m4_include([acinclude.m4])

View file

@ -3,6 +3,6 @@
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- This file is used to set the ICU Major Version number, which is used as a suffix on various file names in other Visual Studio projects. -->
<PropertyGroup>
<IcuMajorVersion>75</IcuMajorVersion>
<IcuMajorVersion>78</IcuMajorVersion>
</PropertyGroup>
</Project>

View file

@ -44,10 +44,10 @@ ifeq ($(ENABLE_SO_VERSION_DATA),1)
SO_VERSION_DATA = common.res
endif
ifeq ($(OS390BATCH),1)
ifeq ($(BUILD_HOST_ICU),OS390)
BATCH_TARGET = $(BATCH_COMMON_TARGET)
BATCH_LIBS = $(BATCH_LIBICUDT) -lm
endif # OS390BATCH
endif
endif # ENABLE_SHARED
@ -58,10 +58,6 @@ DYNAMICCFLAGS = $(SHAREDLIBCFLAGS)
DYNAMICCXXFLAGS = $(SHAREDLIBCXXFLAGS)
CFLAGS += $(LIBCFLAGS)
CXXFLAGS += $(LIBCXXFLAGS)
ifeq ($(OS390BATCH),1)
CFLAGS += -WI
CXXFLAGS += -WI
endif
CPPFLAGS += -I$(srcdir) $(LIBCPPFLAGS) $(CPPFLAGSICUUC)
# we want DEFS here
@ -191,10 +187,10 @@ ifneq ($(wildcard $(libdir)/$(MIDDLE_SO_TARGET)),)
endif
endif
ifeq ($(OS390BATCH),1)
ifeq ($(BUILD_HOST_ICU),OS390)
$(BATCH_TARGET):$(OBJECTS)
$(SHLIB.cc) $(LD_SONAME) $(OUTOPT)$@ $^ $(BATCH_LIBS)
endif # OS390BATCH
$(SHLIB.cc) $(LD_SONAME) -Wl,-x$@.x $(OUTOPT)$@ $^ $(BATCH_LIBS)
endif
endif # ENABLE_SHARED
ifeq (,$(MAKECMDGOALS))

View file

@ -25,7 +25,7 @@ Appendable::~Appendable() {}
UBool
Appendable::appendCodePoint(UChar32 c) {
if(c<=0xffff) {
return appendCodeUnit((char16_t)c);
return appendCodeUnit(static_cast<char16_t>(c));
} else {
return appendCodeUnit(U16_LEAD(c)) && appendCodeUnit(U16_TRAIL(c));
}

View file

@ -75,7 +75,7 @@ static void set32x64Bits(uint32_t table[64], int32_t start, int32_t limit) {
int32_t trail=start&0x3f; // Named for UTF-8 2-byte trail byte with lower 6 bits.
// Set one bit indicating an all-one block.
uint32_t bits=(uint32_t)1<<lead;
uint32_t bits = static_cast<uint32_t>(1) << lead;
if((start+1)==limit) { // Single-character shortcut.
table[trail]|=bits;
return;
@ -100,9 +100,9 @@ static void set32x64Bits(uint32_t table[64], int32_t start, int32_t limit) {
++lead;
}
if(lead<limitLead) {
bits=~(((unsigned)1<<lead)-1);
bits = ~((static_cast<unsigned>(1) << lead) - 1);
if(limitLead<0x20) {
bits&=((unsigned)1<<limitLead)-1;
bits &= (static_cast<unsigned>(1) << limitLead) - 1;
}
for(trail=0; trail<64; ++trail) {
table[trail]|=bits;
@ -111,7 +111,7 @@ static void set32x64Bits(uint32_t table[64], int32_t start, int32_t limit) {
// limit<=0x800. If limit==0x800 then limitLead=32 and limitTrail=0.
// In that case, bits=1<<limitLead is undefined but the bits value
// is not used because trail<limitTrail is already false.
bits=(uint32_t)1<<((limitLead == 0x20) ? (limitLead - 1) : limitLead);
bits = static_cast<uint32_t>(1) << ((limitLead == 0x20) ? (limitLead - 1) : limitLead);
for(trail=0; trail<limitTrail; ++trail) {
table[trail]|=bits;
}
@ -290,22 +290,22 @@ int32_t BMPSet::findCodePoint(UChar32 c, int32_t lo, int32_t hi) const {
UBool
BMPSet::contains(UChar32 c) const {
if((uint32_t)c<=0xff) {
return (UBool)latin1Contains[c];
} else if((uint32_t)c<=0x7ff) {
return (UBool)((table7FF[c&0x3f]&((uint32_t)1<<(c>>6)))!=0);
} else if((uint32_t)c<0xd800 || (c>=0xe000 && c<=0xffff)) {
if (static_cast<uint32_t>(c) <= 0xff) {
return latin1Contains[c];
} else if (static_cast<uint32_t>(c) <= 0x7ff) {
return (table7FF[c & 0x3f] & (static_cast<uint32_t>(1) << (c >> 6))) != 0;
} else if (static_cast<uint32_t>(c) < 0xd800 || (c >= 0xe000 && c <= 0xffff)) {
int lead=c>>12;
uint32_t twoBits=(bmpBlockBits[(c>>6)&0x3f]>>lead)&0x10001;
if(twoBits<=1) {
// All 64 code points with the same bits 15..6
// are either in the set or not.
return (UBool)twoBits;
return twoBits;
} else {
// Look up the code point in its 4k block of code points.
return containsSlow(c, list4kStarts[lead], list4kStarts[lead+1]);
}
} else if((uint32_t)c<=0x10ffff) {
} else if (static_cast<uint32_t>(c) <= 0x10ffff) {
// surrogate or supplementary code point
return containsSlow(c, list4kStarts[0xd], list4kStarts[0x11]);
} else {
@ -332,7 +332,7 @@ BMPSet::span(const char16_t *s, const char16_t *limit, USetSpanCondition spanCon
break;
}
} else if(c<=0x7ff) {
if((table7FF[c&0x3f]&((uint32_t)1<<(c>>6)))==0) {
if ((table7FF[c & 0x3f] & (static_cast<uint32_t>(1) << (c >> 6))) == 0) {
break;
}
} else if(c<0xd800 || c>=0xe000) {
@ -372,7 +372,7 @@ BMPSet::span(const char16_t *s, const char16_t *limit, USetSpanCondition spanCon
break;
}
} else if(c<=0x7ff) {
if((table7FF[c&0x3f]&((uint32_t)1<<(c>>6)))!=0) {
if ((table7FF[c & 0x3f] & (static_cast<uint32_t>(1) << (c >> 6))) != 0) {
break;
}
} else if(c<0xd800 || c>=0xe000) {
@ -421,7 +421,7 @@ BMPSet::spanBack(const char16_t *s, const char16_t *limit, USetSpanCondition spa
break;
}
} else if(c<=0x7ff) {
if((table7FF[c&0x3f]&((uint32_t)1<<(c>>6)))==0) {
if ((table7FF[c & 0x3f] & (static_cast<uint32_t>(1) << (c >> 6))) == 0) {
break;
}
} else if(c<0xd800 || c>=0xe000) {
@ -464,7 +464,7 @@ BMPSet::spanBack(const char16_t *s, const char16_t *limit, USetSpanCondition spa
break;
}
} else if(c<=0x7ff) {
if((table7FF[c&0x3f]&((uint32_t)1<<(c>>6)))!=0) {
if ((table7FF[c & 0x3f] & (static_cast<uint32_t>(1) << (c >> 6))) != 0) {
break;
}
} else if(c<0xd800 || c>=0xe000) {
@ -527,7 +527,7 @@ BMPSet::spanUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanConditi
b=*s;
} while(U8_IS_SINGLE(b));
}
length=(int32_t)(limit-s);
length = static_cast<int32_t>(limit - s);
}
if(spanCondition!=USET_SPAN_NOT_CONTAINED) {
@ -547,7 +547,7 @@ BMPSet::spanUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanConditi
* the truncated sequence.
*/
b=*(limit-1);
if((int8_t)b<0) {
if (static_cast<int8_t>(b) < 0) {
// b>=0x80: lead or trail byte
if(b<0xc0) {
// single trail byte, check for preceding 3- or 4-byte lead byte
@ -602,15 +602,15 @@ BMPSet::spanUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanConditi
if(b>=0xe0) {
if(b<0xf0) {
if( /* handle U+0000..U+FFFF inline */
(t1=(uint8_t)(s[0]-0x80)) <= 0x3f &&
(t2=(uint8_t)(s[1]-0x80)) <= 0x3f
(t1 = static_cast<uint8_t>(s[0] - 0x80)) <= 0x3f &&
(t2 = static_cast<uint8_t>(s[1] - 0x80)) <= 0x3f
) {
b&=0xf;
uint32_t twoBits=(bmpBlockBits[t1]>>b)&0x10001;
if(twoBits<=1) {
// All 64 code points with this lead byte and middle trail byte
// are either in the set or not.
if(twoBits!=(uint32_t)spanCondition) {
if (twoBits != static_cast<uint32_t>(spanCondition)) {
return s-1;
}
} else {
@ -624,12 +624,12 @@ BMPSet::spanUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanConditi
continue;
}
} else if( /* handle U+10000..U+10FFFF inline */
(t1=(uint8_t)(s[0]-0x80)) <= 0x3f &&
(t2=(uint8_t)(s[1]-0x80)) <= 0x3f &&
(t3=(uint8_t)(s[2]-0x80)) <= 0x3f
(t1 = static_cast<uint8_t>(s[0] - 0x80)) <= 0x3f &&
(t2 = static_cast<uint8_t>(s[1] - 0x80)) <= 0x3f &&
(t3 = static_cast<uint8_t>(s[2] - 0x80)) <= 0x3f
) {
// Give an illegal sequence the same value as the result of contains(FFFD).
UChar32 c=((UChar32)(b-0xf0)<<18)|((UChar32)t1<<12)|(t2<<6)|t3;
UChar32 c = (static_cast<UChar32>(b - 0xf0) << 18) | (static_cast<UChar32>(t1) << 12) | (t2 << 6) | t3;
if( ( (0x10000<=c && c<=0x10ffff) ?
containsSlow(c, list4kStarts[0x10], list4kStarts[0x11]) :
containsFFFD
@ -643,9 +643,9 @@ BMPSet::spanUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanConditi
} else {
if( /* handle U+0000..U+07FF inline */
b>=0xc0 &&
(t1=(uint8_t)(*s-0x80)) <= 0x3f
(t1 = static_cast<uint8_t>(*s - 0x80)) <= 0x3f
) {
if((USetSpanCondition)((table7FF[t1]&((uint32_t)1<<(b&0x1f)))!=0) != spanCondition) {
if (static_cast<USetSpanCondition>((table7FF[t1] & (static_cast<uint32_t>(1) << (b & 0x1f))) != 0) != spanCondition) {
return s-1;
}
++s;
@ -711,7 +711,7 @@ BMPSet::spanBackUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanCon
c=utf8_prevCharSafeBody(s, 0, &length, b, -3);
// c is a valid code point, not ASCII, not a surrogate
if(c<=0x7ff) {
if((USetSpanCondition)((table7FF[c&0x3f]&((uint32_t)1<<(c>>6)))!=0) != spanCondition) {
if (static_cast<USetSpanCondition>((table7FF[c & 0x3f] & (static_cast<uint32_t>(1) << (c >> 6))) != 0) != spanCondition) {
return prev+1;
}
} else if(c<=0xffff) {
@ -720,7 +720,7 @@ BMPSet::spanBackUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanCon
if(twoBits<=1) {
// All 64 code points with the same bits 15..6
// are either in the set or not.
if(twoBits!=(uint32_t)spanCondition) {
if (twoBits != static_cast<uint32_t>(spanCondition)) {
return prev+1;
}
} else {

View file

@ -156,7 +156,7 @@ private:
};
inline UBool BMPSet::containsSlow(UChar32 c, int32_t lo, int32_t hi) const {
return (UBool)(findCodePoint(c, lo, hi) & 1);
return findCodePoint(c, lo, hi) & 1;
}
U_NAMESPACE_END

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