### ICU4J Data Installation Output Example Source: https://github.com/unicode-org/icu/blob/main/icu4c/source/data/unidata/changes.txt Example output from the ICU4J data installation process, showing directory creation, data packaging, and JAR file creation. ```text make[1]: Entering directory '/usr/local/google/home/mscherer/icu/uni/dbg/icu4c/data' mkdir -p ./out/icu4j/com/ibm/icu/impl/data/icudt74b mkdir -p ./out/icu4j/tzdata/com/ibm/icu/impl/data/icudt74b LD_LIBRARY_PATH=../lib:../stubdata:../tools/ctestfw:$LD_LIBRARY_PATH ../bin/icupkg ./out/tmp/icudt74l.dat ./out/icu4j/icudt74b.dat -s ./out/build/icudt74l -x '*' -tb -d ./out/icu4j/com/ibm/icu/impl/data/icudt74b mv ./out/icu4j/"com/ibm/icu/impl/data/icudt74b/zoneinfo64.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt74b/metaZones.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt74b/timezoneTypes.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt74b/windowsZones.res" "./out/icu4j/tzdata/com/ibm/icu/impl/data/icudt74b" jar cf ./out/icu4j/icudata.jar -C ./out/icu4j com/ibm/icu/impl/data/icudt74b/ mkdir -p /tmp/icu4j/main/shared/data cp ./out/icu4j/icudata.jar /tmp/icu4j/main/shared/data jar cf ./out/icu4j/icutzdata.jar -C ./out/icu4j/tzdata com/ibm/icu/impl/data/icudt74b/ mkdir -p /tmp/icu4j/main/shared/data cp ./out/icu4j/icutzdata.jar /tmp/icu4j/main/shared/data make[1]: Leaving directory '/usr/local/google/home/mscherer/icu/uni/dbg/icu4c/data' ``` -------------------------------- ### ICU4C Data Installation Output Example Source: https://github.com/unicode-org/icu/blob/main/icu4c/source/data/unidata/changes.txt Example output from the ICU4C data installation process, showing directory creation and package manipulation. ```bash make[1]: Entering directory '/usr/local/google/home/mscherer/icu/uni/dbg/icu4c/data' mkdir -p ./out/icu4j/com/ibm/icu/impl/data/icudt72b mkdir -p ./out/icu4j/tzdata/com/ibm/icu/impl/data/icudt72b LD_LIBRARY_PATH=../lib:../stubdata:../tools/ctestfw:$LD_LIBRARY_PATH ../bin/icupkg ./out/tmp/icudt72l.dat ./out/icu4j/icudt72b.dat -s ./out/build/icudt72l -x '*' -tb -d ./out/icu4j/com/ibm/icu/impl/data/icudt72b mv ./out/icu4j/"com/ibm/icu/impl/data/icudt72b/zoneinfo64.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt72b/metaZones.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt72b/timezoneTypes.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt72b/windowsZones.res" "./out/icu4j/tzdata/com/ibm/icu/impl/data/icudt72b" jar cf ./out/icu4j/icudata.jar -C ./out/icu4j com/ibm/icu/impl/data/icudt72b/ mkdir -p /tmp/icu4j/main/shared/data cp ./out/icu4j/icudata.jar /tmp/icu4j/main/shared/data jar cf ./out/icu4j/icutzdata.jar -C ./out/icu4j/tzdata com/ibm/icu/impl/data/icudt72b/ mkdir -p /tmp/icu4j/main/shared/data cp ./out/icu4j/icutzdata.jar /tmp/icu4j/main/shared/data make[1]: Leaving directory '/usr/local/google/home/mscherer/icu/uni/dbg/icu4c/data' ``` -------------------------------- ### ICU4C Data Installation Output Example Source: https://github.com/unicode-org/icu/blob/main/icu4c/source/data/unidata/changes.txt This is an example output from the 'icu4j-data-install' command, showing directory creation, data packaging, and file movement. ```bash make[1]: Entering directory '/usr/local/google/home/mscherer/icu/uni/dbg/icu4c/data' mkdir -p ./out/icu4j/com/ibm/icu/impl/data/icudt73b mkdir -p ./out/icu4j/tzdata/com/ibm/icu/impl/data/icudt73b LD_LIBRARY_PATH=../lib:../stubdata:../tools/ctestfw:$LD_LIBRARY_PATH ../bin/icupkg ./out/tmp/icudt73l.dat ./out/icu4j/icudt73b.dat -s ./out/build/icudt73l -x '*' -tb -d ./out/icu4j/com/ibm/icu/impl/data/icudt73b mv ./out/icu4j/"com/ibm/icu/impl/data/icudt73b/zoneinfo64.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt73b/metaZones.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt73b/timezoneTypes.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt73b/windowsZones.res" "./out/icu4j/tzdata/com/ibm/icu/impl/data/icudt73b" jar cf ./out/icu4j/icudata.jar -C ./out/icu4j com/ibm/icu/impl/data/icudt73b/ mkdir -p /tmp/icu4j/main/shared/data cp ./out/icu4j/icudata.jar /tmp/icu4j/main/shared/data jar cf ./out/icu4j/icutzdata.jar -C ./out/icu4j/tzdata com/ibm/icu/impl/data/icudt73b/ mkdir -p /tmp/icu4j/main/shared/data cp ./out/icu4j/icutzdata.jar /tmp/icu4j/main/shared/data make[1]: Leaving directory '/usr/local/google/home/mscherer/icu/uni/dbg/icu4c/data' ``` -------------------------------- ### ICU4C Data Installation Output Example Source: https://github.com/unicode-org/icu/blob/main/icu4c/source/data/unidata/changes.txt Example output from the ICU4C data installation process, showing directory creation, data packaging, and file movement for ICU4J. ```text make[1]: Entering directory '/usr/local/google/home/mscherer/icu/uni/dbg/icu4c/data' mkdir -p ./out/icu4j/com/ibm/icu/impl/data/icudt66b mkdir -p ./out/icu4j/tzdata/com/ibm/icu/impl/data/icudt66b LD_LIBRARY_PATH=../lib:../stubdata:../tools/ctestfw:$LD_LIBRARY_PATH ../bin/icupkg ./out/tmp/icudt66l.dat ./out/icu4j/icudt66b.dat -s ./out/build/icudt66l -x '*' -tb -d ./out/icu4j/com/ibm/icu/impl/data/icudt66b mv ./out/icu4j/"com/ibm/icu/impl/data/icudt66b/zoneinfo64.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt66b/metaZones.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt66b/timezoneTypes.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt66b/windowsZones.res" "./out/icu4j/tzdata/com/ibm/icu/impl/data/icudt66b" jar cf ./out/icu4j/icudata.jar -C ./out/icu4j com/ibm/icu/impl/data/icudt66b/ mkdir -p /tmp/icu4j/main/shared/data cp ./out/icu4j/icudata.jar /tmp/icu4j/main/shared/data jar cf ./out/icu4j/icutzdata.jar -C ./out/icu4j/tzdata com/ibm/icu/impl/data/icudt66b/ mkdir -p /tmp/icu4j/main/shared/data cp ./out/icu4j/icutzdata.jar /tmp/icu4j/main/shared/data make[1]: Leaving directory '/usr/local/google/home/mscherer/icu/uni/dbg/icu4c/data' ``` -------------------------------- ### Initialize and Prepare String with StringPrep (Java) Source: https://github.com/unicode-org/icu/blob/main/docs/userguide/strings/stringprep.md Shows how to initialize a StringPrep profile from a binary file and use it to prepare a string. This example uses a singleton pattern for the StringPrep instance. ```java private static final StringPrep nfscsi = null; //singleton instance private static final NFSCSIStringPrep prep=new NFSCSIStringPrep(); private NFSCSIStringPrep() { try { InputStream nfscsiFile = TestUtil.getDataStream("nfscsi.spp"); nfscsi = new StringPrep(nfscsiFile); nfscsiFile.close(); } catch(IOException e) { throw new RuntimeException(e.toString()); } } private static byte[] prepare(byte[] src, StringPrep prep) throws StringPrepParseException, UnsupportedEncodingException { String s = new String(src, "UTF-8"); UCharacterIterator iter = UCharacterIterator.getInstance(s); StringBuffer out = prep.prepare(iter,StringPrep.DEFAULT); return out.toString().getBytes("UTF-8"); } ``` -------------------------------- ### Get Help for configure Source: https://github.com/unicode-org/icu/blob/main/docs/userguide/icu4c/build.md Displays available configure options that can be passed to `runConfigureICU`. ```bash ./configure --help ``` -------------------------------- ### Setup for Generating ICU Chinese Collation Data Source: https://github.com/unicode-org/icu/blob/main/icu4c/source/data/unidata/changes.txt Configure environment variables and install necessary JARs for generating ICU Chinese collation data. This includes setting JAVA_HOME, TOOLS_ROOT, CLDR directories, and running an installation script. ```shell export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 export TOOLS_ROOT=~/icu/uni/src/tools export CLDR_DIR=~/cldr/uni/src export CLDR_DATA_DIR=~/cldr/uni/src cd "$TOOLS_ROOT/cldr/lib" ./install-cldr-jars.sh "$CLDR_DIR" ``` -------------------------------- ### Create New Maven Project Source: https://github.com/unicode-org/icu/blob/main/docs/userguide/format_parse/messages/try-mf2.md Use the Maven archetype plugin to generate a new quickstart project. Navigate into the created project directory. ```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 ``` -------------------------------- ### Example of a Markdown Note Source: https://github.com/unicode-org/icu/blob/main/docs/userguide/dev/editing.md Demonstrates how to format a note using Markdown. Start the line with '> :point_right: **Note**:' to create a note block. ```markdown > :point_right: **Note**: ``` -------------------------------- ### Basic Build and Test with Make Source: https://github.com/unicode-org/icu/blob/main/vendor/double-conversion/upstream/README.md The Makefile provides a shortcut to build the library and run all tests. ```bash make make test ``` -------------------------------- ### Get Specific Date Fields (C++) Source: https://github.com/unicode-org/icu/blob/main/docs/userguide/format_parse/datetime/examples.md Use FieldPosition to extract specific fields like the year from a date. Requires DateFormat and Locale setup. ```cpp UErrorCode status = U_ZERO_ERROR; FieldPosition pos(DateFormat::YEAR_FIELD) UDate myDate = Calendar::getNow(); UnicodeString str; DateFormat* df = DateFormat::createDateInstance ( DateFormat::LONG, Locale::getFrance()); df->format(myDate, str, pos, status); cout << pos.getBeginIndex() << "," << pos. getEndIndex() << endl; ``` -------------------------------- ### Get Help for runConfigureICU Source: https://github.com/unicode-org/icu/blob/main/docs/userguide/icu4c/build.md Displays help information for the `runConfigureICU` script, including supported platforms and options. ```bash ./runConfigureICU --help ``` -------------------------------- ### Get Word Boundaries Containing a Double-Click Position (C++) Source: https://github.com/unicode-org/icu/blob/main/docs/userguide/boundaryanalysis/index.md Determines the start and end positions of the word that contains a given index. Assumes a BreakIterator instance is already available. ```cpp void wordContaining(BreakIterator& wordBrk, int32_t idx, const UnicodeString& s, int32_t& start, int32_t& end) { // this function is written to assume that we have an // appropriate BreakIterator stored in an object or a // global variable somewhere-- When possible, programmers // should avoid having the create() and delete calls in // a function of this nature. if (s.isEmpty()) return; wordBrk.setText(s); start = wordBrk.preceding(idx + 1); end = wordBrk.next(); // NOTE: for this and similar operations, use preceding() and next() // as shown here, not following() and previous(). preceding() is // faster than following() and next() is faster than previous() // NOTE: By using preceding(idx + 1) above, we're adopting the convention // that if the double-click comes right on top of a word boundary, it // selects the word that _begins_ on that boundary (preceding(idx) would // instead select the word that _ends_ on that boundary). } ``` -------------------------------- ### Update Dependencies and Run Jekyll Server Source: https://github.com/unicode-org/icu/blob/main/docs/userguide/dev/editing.md Updates project dependencies using Bundler and starts the Jekyll local development server. Ensure you are in the User Guide docs root directory. ```bash cd /docs # change to User Guide docs root directory bundle update bundle exec jekyll server ``` -------------------------------- ### Get Word Boundaries Containing a Double-Click Position (C) Source: https://github.com/unicode-org/icu/blob/main/docs/userguide/boundaryanalysis/index.md Determines the start and end positions of the word containing a given index using the C API. Requires a pre-initialized UBreakIterator. ```c void wordContaining(UBreakIterator* wordBrk, int32_t idx, const UChar* s, int32_t sLen, int32_t* start, int32_t* end, UErrorCode* err) { if (wordBrk == NULL || s == NULL || start == NULL || end == NULL) { *err = U_ILLEGAL_ARGUMENT_ERROR; return; } ubrk_setText(wordBrk, s, sLen, err); if (U_SUCCESS(*err)) { *start = ubrk_preceding(wordBrk, idx + 1); *end = ubrk_next(wordBrk); } } ``` -------------------------------- ### Any-Publishing Transform Example Source: https://github.com/unicode-org/icu/blob/main/docs/userguide/transforms/general/index.md A comprehensive example demonstrating various features like variable definitions, context, and dual conversions to prepare ASCII text for desktop publishing. ```plaintext # Variables $single = \' ; $space = ' ' ; $double = \" ; $back = \` ; $tab = '\u0008' ; # the following is for spaces, line ends, (, [, {, ... $makeRight = [[:separator:][:start punctuation:][:initial punctuation:]] ; # fix UNIX quotes $back $back > “ ; # generate right d.q.m. (double quotation mark) $back > ‘ ; # fix typewriter quotes, by context $makeRight { $double <> “ ; # convert a double to right d.q.m. after certain chars ^ { $double > “ ; # convert a double at the start of the line. $double <> ” ; # otherwise convert to a left q.m. $makeRight {$single} <> ‘ ; # do the same for s.q.m.s ^ {$single} > ‘ ; $single <> ’; # fix multiple spaces and hyphens $space {$space} > ; # collapse multiple spaces '--' <> — ; # convert fake dash into real one ``` -------------------------------- ### Create LayoutEngine Instance Source: https://github.com/unicode-org/icu/blob/main/docs/userguide/layoutengine/index.md Demonstrates how to create a LayoutEngine instance using LayoutEngineFactory. Requires font and script information. ```c++ LEFontInstace *font = ; UScriptCode script = ; LEErrorCode error = LE_NO_ERROR; LayoutEngine *engine; engine = LayoutEngine::layoutEngineFactory(font, script, 0, // language - ignored error); ``` -------------------------------- ### Define and use a variable for line separators Source: https://github.com/unicode-org/icu/blob/main/docs/userguide/transforms/general/rules.md This example defines a variable '$break' to include various line separator characters and uses it to match 'a' at the start or end of a line. This provides platform-independent line ending handling. ```icu $break = [[:Zp:][:Zl:] - … $] ; $break { a > A ; ``` -------------------------------- ### Define and Use Variables - ICU Rules Source: https://github.com/unicode-org/icu/blob/main/docs/userguide/boundaryanalysis/break-rules.md Define reusable expressions using variables starting with '$'. Variables cannot be reassigned and are useful for simplifying complex rules. This example defines and uses a variable for ASCII letters and numbers. ```icu $ASCIILetNum = [A-Za-z0-9]; $ASCIILetNum+; ``` -------------------------------- ### Open, Prepare, and Close StringPrep Profile (C++) Source: https://github.com/unicode-org/icu/blob/main/docs/userguide/strings/stringprep.md Demonstrates opening a StringPrep profile, preparing a string according to its rules, and then closing the profile. Applications should reuse profile objects for efficiency. ```cpp UErrorCode status = U_ZERO_ERROR; UParseError parseError; /* open the StringPrep profile */ UStringPrepProfile* nameprep = usprep_open("/usr/joe/mydata", "nfscsi", &status); if(U_FAILURE(status)) { /* handle the error */ } /* prepare the string for use according * to the rules specified in the profile */ int32_t retLen = usprep_prepare(src, srcLength, dest, destCapacity, USPREP_ALLOW_UNASSIGNED, nameprep, &parseError, &status); /* close the profile */ usprep_close(nameprep); ```