FAQ
Updated Branches:
   refs/heads/1994-merge-rcouch-multi-repo [created] b19d05576


http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/vtzone.h
----------------------------------------------------------------------
diff --git a/apps/couch_collate/platform/osx/icu/unicode/vtzone.h b/apps/couch_collate/platform/osx/icu/unicode/vtzone.h
deleted file mode 100644
index 9463f35..0000000
--- a/apps/couch_collate/platform/osx/icu/unicode/vtzone.h
+++ /dev/null
@@ -1,443 +0,0 @@
-/*
-*******************************************************************************
-* Copyright (C) 2007-2008, International Business Machines Corporation and *
-* others. All Rights Reserved. *
-*******************************************************************************
-*/
-#ifndef VTZONE_H
-#define VTZONE_H
-
-#include "unicode/utypes.h"
-
-/**
- * \file
- * \brief C++ API: RFC2445 VTIMEZONE support
- */
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/basictz.h"
-
-U_NAMESPACE_BEGIN
-
-class VTZWriter;
-class VTZReader;
-class UVector;
-
-/**
- * <code>VTimeZone</code> is a class implementing RFC2445 VTIMEZONE. You can create a
- * <code>VTimeZone</code> instance from a time zone ID supported by <code>TimeZone</code>.
- * With the <code>VTimeZone</code> instance created from the ID, you can write out the rule
- * in RFC2445 VTIMEZONE format. Also, you can create a <code>VTimeZone</code> instance
- * from RFC2445 VTIMEZONE data stream, which allows you to calculate time
- * zone offset by the rules defined by the data.<br><br>
- * Note: The consumer of this class reading or writing VTIMEZONE data is responsible to
- * decode or encode Non-ASCII text. Methods reading/writing VTIMEZONE data in this class
- * do nothing with MIME encoding.
- * @stable ICU 4.0
- */
-class U_I18N_API VTimeZone : public BasicTimeZone {
-public:
- /**
- * Copy constructor.
- * @param source The <code>VTimeZone</code> object to be copied.
- * @stable ICU 4.0
- */
- VTimeZone(const VTimeZone& source);
-
- /**
- * Destructor.
- * @stable ICU 4.0
- */
- virtual ~VTimeZone();
-
- /**
- * Assignment operator.
- * @param right The object to be copied.
- * @stable ICU 4.0
- */
- VTimeZone& operator=(const VTimeZone& right);
-
- /**
- * Return true if the given <code>TimeZone</code> objects are
- * semantically equal. Objects of different subclasses are considered unequal.
- * @param that The object to be compared with.
- * @return true if the given <code>TimeZone</code> objects are
- *semantically equal.
- * @stable ICU 4.0
- */
- virtual UBool operator==(const TimeZone& that) const;
-
- /**
- * Return true if the given <code>TimeZone</code> objects are
- * semantically unequal. Objects of different subclasses are considered unequal.
- * @param that The object to be compared with.
- * @return true if the given <code>TimeZone</code> objects are
- * semantically unequal.
- * @stable ICU 4.0
- */
- virtual UBool operator!=(const TimeZone& that) const;
-
- /**
- * Create a <code>VTimeZone</code> instance by the time zone ID.
- * @param ID The time zone ID, such as America/New_York
- * @return A <code>VTimeZone</code> object initialized by the time zone ID,
- * or NULL when the ID is unknown.
- * @stable ICU 4.0
- */
- static VTimeZone* createVTimeZoneByID(const UnicodeString& ID);
-
- /**
- * Create a <code>VTimeZone</code> instance by RFC2445 VTIMEZONE data
- *
- * @param vtzdata The string including VTIMEZONE data block
- * @param status Output param to filled in with a success or an error.
- * @return A <code>VTimeZone</code> initialized by the VTIMEZONE data or
- * NULL if failed to load the rule from the VTIMEZONE data.
- * @stable ICU 4.0
- */
- static VTimeZone* createVTimeZone(const UnicodeString& vtzdata, UErrorCode& status);
-
- /**
- * Gets the RFC2445 TZURL property value. When a <code>VTimeZone</code> instance was
- * created from VTIMEZONE data, the initial value is set by the TZURL property value
- * in the data. Otherwise, the initial value is not set.
- * @param url Receives the RFC2445 TZURL property value.
- * @return TRUE if TZURL attribute is available and value is set.
- * @stable ICU 4.0
- */
- UBool getTZURL(UnicodeString& url) const;
-
- /**
- * Sets the RFC2445 TZURL property value.
- * @param url The TZURL property value.
- * @stable ICU 4.0
- */
- void setTZURL(const UnicodeString& url);
-
- /**
- * Gets the RFC2445 LAST-MODIFIED property value. When a <code>VTimeZone</code> instance
- * was created from VTIMEZONE data, the initial value is set by the LAST-MODIFIED property
- * value in the data. Otherwise, the initial value is not set.
- * @param lastModified Receives the last modified date.
- * @return TRUE if lastModified attribute is available and value is set.
- * @stable ICU 4.0
- */
- UBool getLastModified(UDate& lastModified) const;
-
- /**
- * Sets the RFC2445 LAST-MODIFIED property value.
- * @param lastModified The LAST-MODIFIED date.
- * @stable ICU 4.0
- */
- void setLastModified(UDate lastModified);
-
- /**
- * Writes RFC2445 VTIMEZONE data for this time zone
- * @param result Output param to filled in with the VTIMEZONE data.
- * @param status Output param to filled in with a success or an error.
- * @stable ICU 4.0
- */
- void write(UnicodeString& result, UErrorCode& status) const;
-
- /**
- * Writes RFC2445 VTIMEZONE data for this time zone applicalbe
- * for dates after the specified start time.
- * @param start The start date.
- * @param result Output param to filled in with the VTIMEZONE data.
- * @param status Output param to filled in with a success or an error.
- * @stable ICU 4.0
- */
- void write(UDate start, UnicodeString& result, UErrorCode& status) /*const*/;
-
- /**
- * Writes RFC2445 VTIMEZONE data applicalbe for the specified date.
- * Some common iCalendar implementations can only handle a single time
- * zone property or a pair of standard and daylight time properties using
- * BYDAY rule with day of week (such as BYDAY=1SUN). This method produce
- * the VTIMEZONE data which can be handled these implementations. The rules
- * produced by this method can be used only for calculating time zone offset
- * around the specified date.
- * @param time The date used for rule extraction.
- * @param result Output param to filled in with the VTIMEZONE data.
- * @param status Output param to filled in with a success or an error.
- * @stable ICU 4.0
- */
- void writeSimple(UDate time, UnicodeString& result, UErrorCode& status) /*const*/;
-
- /**
- * Clones TimeZone objects polymorphically. Clients are responsible for deleting
- * the TimeZone object cloned.
- * @return A new copy of this TimeZone object.
- * @stable ICU 4.0
- */
- virtual TimeZone* clone(void) const;
-
- /**
- * Returns the TimeZone's adjusted GMT offset (i.e., the number of milliseconds to add
- * to GMT to get local time in this time zone, taking daylight savings time into
- * account) as of a particular reference date. The reference date is used to determine
- * whether daylight savings time is in effect and needs to be figured into the offset
- * that is returned (in other words, what is the adjusted GMT offset in this time zone
- * at this particular date and time?). For the time zones produced by createTimeZone(),
- * the reference data is specified according to the Gregorian calendar, and the date
- * and time fields are local standard time.
- *
- * <p>Note: Don't call this method. Instead, call the getOffset(UDate...) overload,
- * which returns both the raw and the DST offset for a given time. This method
- * is retained only for backward compatibility.
- *
- * @param era The reference date's era
- * @param year The reference date's year
- * @param month The reference date's month (0-based; 0 is January)
- * @param day The reference date's day-in-month (1-based)
- * @param dayOfWeek The reference date's day-of-week (1-based; 1 is Sunday)
- * @param millis The reference date's milliseconds in day, local standard time
- * @param status Output param to filled in with a success or an error.
- * @return The offset in milliseconds to add to GMT to get local time.
- * @stable ICU 4.0
- */
- virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
- uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const;
-
- /**
- * Gets the time zone offset, for current date, modified in case of
- * daylight savings. This is the offset to add *to* UTC to get local time.
- *
- * <p>Note: Don't call this method. Instead, call the getOffset(UDate...) overload,
- * which returns both the raw and the DST offset for a given time. This method
- * is retained only for backward compatibility.
- *
- * @param era The reference date's era
- * @param year The reference date's year
- * @param month The reference date's month (0-based; 0 is January)
- * @param day The reference date's day-in-month (1-based)
- * @param dayOfWeek The reference date's day-of-week (1-based; 1 is Sunday)
- * @param millis The reference date's milliseconds in day, local standard time
- * @param monthLength The length of the given month in days.
- * @param status Output param to filled in with a success or an error.
- * @return The offset in milliseconds to add to GMT to get local time.
- * @stable ICU 4.0
- */
- virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
- uint8_t dayOfWeek, int32_t millis,
- int32_t monthLength, UErrorCode& status) const;
-
- /**
- * Returns the time zone raw and GMT offset for the given moment
- * in time. Upon return, local-millis = GMT-millis + rawOffset +
- * dstOffset. All computations are performed in the proleptic
- * Gregorian calendar. The default implementation in the TimeZone
- * class delegates to the 8-argument getOffset().
- *
- * @param date moment in time for which to return offsets, in
- * units of milliseconds from January 1, 1970 0:00 GMT, either GMT
- * time or local wall time, depending on `local'.
- * @param local if true, `date' is local wall time; otherwise it
- * is in GMT time.
- * @param rawOffset output parameter to receive the raw offset, that
- * is, the offset not including DST adjustments
- * @param dstOffset output parameter to receive the DST offset,
- * that is, the offset to be added to `rawOffset' to obtain the
- * total offset between local and GMT time. If DST is not in
- * effect, this value is zero; otherwise it is a positive value,
- * typically one hour.
- * @param ec input-output error code
- * @stable ICU 4.0
- */
- virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
- int32_t& dstOffset, UErrorCode& ec) const;
-
- /**
- * Sets the TimeZone's raw GMT offset (i.e., the number of milliseconds to add
- * to GMT to get local time, before taking daylight savings time into account).
- *
- * @param offsetMillis The new raw GMT offset for this time zone.
- * @stable ICU 4.0
- */
- virtual void setRawOffset(int32_t offsetMillis);
-
- /**
- * Returns the TimeZone's raw GMT offset (i.e., the number of milliseconds to add
- * to GMT to get local time, before taking daylight savings time into account).
- *
- * @return The TimeZone's raw GMT offset.
- * @stable ICU 4.0
- */
- virtual int32_t getRawOffset(void) const;
-
- /**
- * Queries if this time zone uses daylight savings time.
- * @return true if this time zone uses daylight savings time,
- * false, otherwise.
- * @stable ICU 4.0
- */
- virtual UBool useDaylightTime(void) const;
-
- /**
- * Queries if the given date is in daylight savings time in
- * this time zone.
- * This method is wasteful since it creates a new GregorianCalendar and
- * deletes it each time it is called. This is a deprecated method
- * and provided only for Java compatibility.
- *
- * @param date the given UDate.
- * @param status Output param filled in with success/error code.
- * @return true if the given date is in daylight savings time,
- * false, otherwise.
- * @deprecated ICU 2.4. Use Calendar::inDaylightTime() instead.
- */
- virtual UBool inDaylightTime(UDate date, UErrorCode& status) const;
-
- /**
- * Returns true if this zone has the same rule and offset as another zone.
- * That is, if this zone differs only in ID, if at all.
- * @param other the <code>TimeZone</code> object to be compared with
- * @return true if the given zone is the same as this one,
- * with the possible exception of the ID
- * @stable ICU 4.0
- */
- virtual UBool hasSameRules(const TimeZone& other) const;
-
- /**
- * Gets the first time zone transition after the base time.
- * @param base The base time.
- * @param inclusive Whether the base time is inclusive or not.
- * @param result Receives the first transition after the base time.
- * @return TRUE if the transition is found.
- * @stable ICU 4.0
- */
- virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/;
-
- /**
- * Gets the most recent time zone transition before the base time.
- * @param base The base time.
- * @param inclusive Whether the base time is inclusive or not.
- * @param result Receives the most recent transition before the base time.
- * @return TRUE if the transition is found.
- * @stable ICU 4.0
- */
- virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/;
-
- /**
- * Returns the number of <code>TimeZoneRule</code>s which represents time transitions,
- * for this time zone, that is, all <code>TimeZoneRule</code>s for this time zone except
- * <code>InitialTimeZoneRule</code>. The return value range is 0 or any positive value.
- * @param status Receives error status code.
- * @return The number of <code>TimeZoneRule</code>s representing time transitions.
- * @stable ICU 4.0
- */
- virtual int32_t countTransitionRules(UErrorCode& status) /*const*/;
-
- /**
- * Gets the <code>InitialTimeZoneRule</code> and the set of <code>TimeZoneRule</code>
- * which represent time transitions for this time zone. On successful return,
- * the argument initial points to non-NULL <code>InitialTimeZoneRule</code> and
- * the array trsrules is filled with 0 or multiple <code>TimeZoneRule</code>
- * instances up to the size specified by trscount. The results are referencing the
- * rule instance held by this time zone instance. Therefore, after this time zone
- * is destructed, they are no longer available.
- * @param initial Receives the initial timezone rule
- * @param trsrules Receives the timezone transition rules
- * @param trscount On input, specify the size of the array 'transitions' receiving
- * the timezone transition rules. On output, actual number of
- * rules filled in the array will be set.
- * @param status Receives error status code.
- * @stable ICU 4.0
- */
- virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
- const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) /*const*/;
-
-private:
- enum { DEFAULT_VTIMEZONE_LINES = 100 };
-
- /**
- * Default constructor.
- */
- VTimeZone();
- static VTimeZone* createVTimeZone(VTZReader* reader);
- void write(VTZWriter& writer, UErrorCode& status) const;
- void write(UDate start, VTZWriter& writer, UErrorCode& status) /*const*/;
- void writeSimple(UDate time, VTZWriter& writer, UErrorCode& status) /*const*/;
- void load(VTZReader& reader, UErrorCode& status);
- void parse(UErrorCode& status);
-
- void writeZone(VTZWriter& w, BasicTimeZone& basictz, UVector* customProps,
- UErrorCode& status) const;
-
- void writeHeaders(VTZWriter& w, UErrorCode& status) const;
- void writeFooter(VTZWriter& writer, UErrorCode& status) const;
-
- void writeZonePropsByTime(VTZWriter& writer, UBool isDst, const UnicodeString& tzname,
- int32_t fromOffset, int32_t toOffset, UDate time, UBool withRDATE,
- UErrorCode& status) const;
- void writeZonePropsByDOM(VTZWriter& writer, UBool isDst, const UnicodeString& tzname,
- int32_t fromOffset, int32_t toOffset,
- int32_t month, int32_t dayOfMonth, UDate startTime, UDate untilTime,
- UErrorCode& status) const;
- void writeZonePropsByDOW(VTZWriter& writer, UBool isDst, const UnicodeString& tzname,
- int32_t fromOffset, int32_t toOffset,
- int32_t month, int32_t weekInMonth, int32_t dayOfWeek,
- UDate startTime, UDate untilTime, UErrorCode& status) const;
- void writeZonePropsByDOW_GEQ_DOM(VTZWriter& writer, UBool isDst, const UnicodeString& tzname,
- int32_t fromOffset, int32_t toOffset,
- int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
- UDate startTime, UDate untilTime, UErrorCode& status) const;
- void writeZonePropsByDOW_GEQ_DOM_sub(VTZWriter& writer, int32_t month, int32_t dayOfMonth,
- int32_t dayOfWeek, int32_t numDays,
- UDate untilTime, int32_t fromOffset, UErrorCode& status) const;
- void writeZonePropsByDOW_LEQ_DOM(VTZWriter& writer, UBool isDst, const UnicodeString& tzname,
- int32_t fromOffset, int32_t toOffset,
- int32_t month, int32_t dayOfMonth, int32_t dayOfWeek,
- UDate startTime, UDate untilTime, UErrorCode& status) const;
- void writeFinalRule(VTZWriter& writer, UBool isDst, const AnnualTimeZoneRule* rule,
- int32_t fromRawOffset, int32_t fromDSTSavings,
- UDate startTime, UErrorCode& status) const;
-
- void beginZoneProps(VTZWriter& writer, UBool isDst, const UnicodeString& tzname,
- int32_t fromOffset, int32_t toOffset, UDate startTime, UErrorCode& status) const;
- void endZoneProps(VTZWriter& writer, UBool isDst, UErrorCode& status) const;
- void beginRRULE(VTZWriter& writer, int32_t month, UErrorCode& status) const;
- void appendUNTIL(VTZWriter& writer, const UnicodeString& until, UErrorCode& status) const;
-
- BasicTimeZone *tz;
- UVector *vtzlines;
- UnicodeString tzurl;
- UDate lastmod;
- UnicodeString olsonzid;
- UnicodeString icutzver;
-
-public:
- /**
- * Return the class ID for this class. This is useful only for comparing to
- * a return value from getDynamicClassID(). For example:
- * <pre>
- * . Base* polymorphic_pointer = createPolymorphicObject();
- * . if (polymorphic_pointer->getDynamicClassID() ==
- * . erived::getStaticClassID()) ...
- * </pre>
- * @return The class ID for all objects of this class.
- * @stable ICU 4.0
- */
- static UClassID U_EXPORT2 getStaticClassID(void);
-
- /**
- * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This
- * method is to implement a simple version of RTTI, since not all C++
- * compilers support genuine RTTI. Polymorphic operator==() and clone()
- * methods call this method.
- *
- * @return The class ID for this object. All objects of a
- * given class have the same class ID. Objects of
- * other classes have different class IDs.
- * @stable ICU 4.0
- */
- virtual UClassID getDynamicClassID(void) const;
-};
-
-U_NAMESPACE_END
-
-#endif /* #if !UCONFIG_NO_FORMATTING */
-
-#endif // VTZONE_H
-//eof

http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/rebar.config
----------------------------------------------------------------------
diff --git a/apps/couch_collate/rebar.config b/apps/couch_collate/rebar.config
deleted file mode 100644
index 7bfd49e..0000000
--- a/apps/couch_collate/rebar.config
+++ /dev/null
@@ -1,9 +0,0 @@
-%% -*- tab-width: 4;erlang-indent-level: 4;indent-tabs-mode: nil -*-
-%% ex: ft=erlang ts=4 sw=4 et
-
-{erl_opts, [
- warnings_as_errors,
- warn_export_all
-]}.
-
-{pre_hooks, [{clean, "rm -fr ebin priv erl_crash.dump"}]}.

http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/rebar.config.script
----------------------------------------------------------------------
diff --git a/apps/couch_collate/rebar.config.script b/apps/couch_collate/rebar.config.script
deleted file mode 100644
index 21bb978..0000000
--- a/apps/couch_collate/rebar.config.script
+++ /dev/null
@@ -1,90 +0,0 @@
-%% -*- tab-width: 4;erlang-indent-level: 4;indent-tabs-mode: nil -*-
-%% ex: ft=erlang ts=4 sw=4 et
-
-%% Licensed under the Apache License, Version 2.0 (the "License"); you may not
-%% use this file except in compliance with the License. You may obtain a copy of
-%% the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-%% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-%% License for the specific language governing permissions and limitations under
-%% the License.
-
-Arch = erlang:system_info(system_architecture),
-
-ICUConfig = fun(Args) ->
- {0, Value} = eunit_lib:command("icu-config " ++ Args),
- [C||C <- Value, C =/= $\n]
-end,
-
-GetFlag = fun(Name, Args) ->
- case os:getenv(Name) of
- false -> ICUConfig(Args);
- Val -> Val
- end
- end,
-
-GetFlag1 = fun(Name, Default) ->
- case os:getenv(Name) of
- false -> Default;
- Val -> Val
- end
- end,
-
-BuildStatic = os:getenv("COUCHDB_STATIC") =:= "1" andalso
- os:getenv("USE_STATIC_ICU") =:= "1",
-
-
-IsDarwin = case os:type() of
- {unix, darwin} -> true;
- _ -> false
-end,
-
-UseSystemIcu = IsDarwin andalso os:getenv("USE_STATIC_ICU") /= "1",
-
-PortEnv = case {UseSystemIcu, BuildStatic} of
- {true, _} ->
- CFLAGS = GetFlag1("ICU_CFLAGS",
- "-Iplatform/osx/icu -I/usr/include -fPIC"),
- LDFLAGS = GetFlag1("ICU_LDFLAGS",
- "-lpthread -lm -licucore -lstdc++ -L/usr/lib " ++
- "$DRV_LDFLAGS -fPIC"),
- [
- {"CFLAGS", "$DRV_CFLAGS " ++ CFLAGS},
- {"LDFLAGS", LDFLAGS}
- ];
-
- {_, true} ->
- CFLAGS = GetFlag1("ICU_CFLAGS", "-I.libs/icu/include"),
- LDFLAGS = GetFlag1("ICU_LDFLAGS", "-lstdc++ -fPIC " ++
- ".libs/icu/lib/libicui18n.a " ++
- ".libs/icu/lib/libicuuc.a " ++
- ".libs/icu/lib/libicudata.a"),
- [
- {"DRV_CFLAGS", "$DRV_CFLAGS " ++ CFLAGS ++ " -D BSD_SOURCE"},
- {"DRV_LDFLAGS", "$DRV_LDFLAGS " ++ LDFLAGS}
- ];
- {_, false} ->
- ICUCFLAGS = GetFlag("ICU_CFLAGS", "--cflags"),
- ICUCXXFLAGS = GetFlag("ICU_CXXFLAGS", "--cxxflags"),
- ICULDFLAGS = GetFlag("ICU_LDFLAGS", "--ldflags"),
- ICUINCPATH = GetFlag("ICU_INCPATH", "--cppflags-searchpath"),
-
- [
- {"CFLAGS", ICUCFLAGS ++ " $CFLAGS " ++ ICUINCPATH},
- {"CXXFLAGS", ICUCXXFLAGS ++ " $CXXFLAGS " ++ ICUINCPATH},
- {"LDFLAGS", ICULDFLAGS ++ " $LDFLAGS"}
- ]
-end,
-
-PortInfo = [{port_env, PortEnv},
- {port_specs, [
- {filename:join(["priv", Arch, "couch_collate.so"]),
- ["c_src/*.c"]}]},
- {pre_hooks, [{compile, "./build_icu.sh"}]},
- {post_hooks, [{clean, "./build_icu.sh clean"}]}],
-
-lists:keymerge(1,lists:keysort(1, PortInfo), lists:keysort(1, CONFIG)).

http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/src/couch_collate.app.src
----------------------------------------------------------------------
diff --git a/apps/couch_collate/src/couch_collate.app.src b/apps/couch_collate/src/couch_collate.app.src
deleted file mode 100644
index c41495c..0000000
--- a/apps/couch_collate/src/couch_collate.app.src
+++ /dev/null
@@ -1,13 +0,0 @@
-%% -*- tab-width: 4;erlang-indent-level: 4;indent-tabs-mode: nil -*-
-%% ex: ft=erlang ts=4 sw=4 et
-
-{application, couch_collate,
- [
- {description, "couchdb collation module"},
- {vsn, "1.0.0"},
- {registered, []},
- {applications, [kernel,
- stdlib]},
- {included_applications, []},
- {env, []}
-]}.

http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/src/couch_collate.erl
----------------------------------------------------------------------
diff --git a/apps/couch_collate/src/couch_collate.erl b/apps/couch_collate/src/couch_collate.erl
deleted file mode 100644
index 341510f..0000000
--- a/apps/couch_collate/src/couch_collate.erl
+++ /dev/null
@@ -1,62 +0,0 @@
-% Licensed under the Apache License, Version 2.0 (the "License"); you may not
-% use this file except in compliance with the License. You may obtain a copy of
-% the License at
-%
-% http://www.apache.org/licenses/LICENSE-2.0
-%
-% Unless required by applicable law or agreed to in writing, software
-% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-% License for the specific language governing permissions and limitations under
-% the License.
-
--module(couch_collate).
-
--export([init/0]).
--export([collate/2, collate/3]).
-
--on_load(init/0).
-
--type collate_options() :: [nocase].
--export_type([collate_options/0]).
-
-init() ->
- PrivDir = case code:priv_dir(?MODULE) of
- {error, _} ->
- EbinDir = filename:dirname(code:which(?MODULE)),
- AppPath = filename:dirname(EbinDir),
- filename:join(AppPath, "priv");
- Path ->
- Path
- end,
- NumScheds = erlang:system_info(schedulers),
- Arch = erlang:system_info(system_architecture),
- (catch erlang:load_nif(filename:join([PrivDir, Arch, ?MODULE]),
- NumScheds)),
- case erlang:system_info(otp_release) of
- "R13B03" -> true;
- _ -> ok
- end.
-
-%% @doc compare 2 string, result is -1 for lt, 0 for eq and 1 for gt.
--spec collate(binary(), binary()) -> 0 | -1 | 1.
-collate(A, B) ->
- collate(A, B, []).
-
--spec collate(binary(), binary(), collate_options()) -> 0 | -1 | 1.
-collate(A, B, Options) when is_binary(A), is_binary(B) ->
- HasNoCase = case lists:member(nocase, Options) of
- true -> 1; % Case insensitive
- false -> 0 % Case sensitive
- end,
- do_collate(A, B, HasNoCase).
-
-%% @private
-
-do_collate(BinaryA, BinaryB, 0) ->
- collate_nif(BinaryA, BinaryB, 0);
-do_collate(BinaryA, BinaryB, 1) ->
- collate_nif(BinaryA, BinaryB, 1).
-
-collate_nif(_BinaryA, _BinaryB, _HasCase) ->
- exit(couch_collate_not_loaded).

Search Discussions

  • Benoitc at Feb 13, 2014 at 6:14 pm
    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/decimfmt.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/decimfmt.h b/apps/couch_collate/platform/osx/icu/unicode/decimfmt.h
    deleted file mode 100644
    index a584a9c..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/decimfmt.h
    +++ /dev/null
    @@ -1,1901 +0,0 @@
    -/*
    -********************************************************************************
    -* Copyright (C) 1997-2009, International Business Machines
    -* Corporation and others. All Rights Reserved.
    -********************************************************************************
    -*
    -* File DECIMFMT.H
    -*
    -* Modification History:
    -*
    -* Date Name Description
    -* 02/19/97 aliu Converted from java.
    -* 03/20/97 clhuang Updated per C++ implementation.
    -* 04/03/97 aliu Rewrote parsing and formatting completely, and
    -* cleaned up and debugged. Actually works now.
    -* 04/17/97 aliu Changed DigitCount to int per code review.
    -* 07/10/97 helena Made ParsePosition a class and get rid of the function
    -* hiding problems.
    -* 09/09/97 aliu Ported over support for exponential formats.
    -* 07/20/98 stephen Changed documentation
    -********************************************************************************
    -*/
    -
    -#ifndef DECIMFMT_H
    -#define DECIMFMT_H
    -
    -#include "unicode/utypes.h"
    -/**
    - * \file
    - * \brief C++ API: Formats decimal numbers.
    - */
    -
    -#if !UCONFIG_NO_FORMATTING
    -
    -#include "unicode/dcfmtsym.h"
    -#include "unicode/numfmt.h"
    -#include "unicode/locid.h"
    -
    -U_NAMESPACE_BEGIN
    -
    -class DigitList;
    -class ChoiceFormat;
    -class UnicodeSet;
    -
    -/**
    - * DecimalFormat is a concrete subclass of NumberFormat that formats decimal
    - * numbers. It has a variety of features designed to make it possible to parse
    - * and format numbers in any locale, including support for Western, Arabic, or
    - * Indic digits. It also supports different flavors of numbers, including
    - * integers ("123"), fixed-point numbers ("123.4"), scientific notation
    - * ("1.23E4"), percentages ("12%"), and currency amounts ("$123"). All of these
    - * flavors can be easily localized.
    - *
    - * <p>To obtain a NumberFormat for a specific locale (including the default
    - * locale) call one of NumberFormat's factory methods such as
    - * createInstance(). Do not call the DecimalFormat constructors directly, unless
    - * you know what you are doing, since the NumberFormat factory methods may
    - * return subclasses other than DecimalFormat.
    - *
    - * <p><strong>Example Usage</strong>
    - *
    - * \code
    - * // Normally we would have a GUI with a menu for this
    - * int32_t locCount;
    - * const Locale* locales = NumberFormat::getAvailableLocales(locCount);
    - *
    - * double myNumber = -1234.56;
    - * UErrorCode success = U_ZERO_ERROR;
    - * NumberFormat* form;
    - *
    - * // Print out a number with the localized number, currency and percent
    - * // format for each locale.
    - * UnicodeString countryName;
    - * UnicodeString displayName;
    - * UnicodeString str;
    - * UnicodeString pattern;
    - * Formattable fmtable;
    - * for (int32_t j = 0; j < 3; ++j) {
    - * cout << endl << "FORMAT " << j << endl;
    - * for (int32_t i = 0; i < locCount; ++i) {
    - * if (locales[i].getCountry(countryName).size() == 0) {
    - * // skip language-only
    - * continue;
    - * }
    - * switch (j) {
    - * case 0:
    - * form = NumberFormat::createInstance(locales[i], success ); break;
    - * case 1:
    - * form = NumberFormat::createCurrencyInstance(locales[i], success ); break;
    - * default:
    - * form = NumberFormat::createPercentInstance(locales[i], success ); break;
    - * }
    - * if (form) {
    - * str.remove();
    - * pattern = ((DecimalFormat*)form)->toPattern(pattern);
    - * cout << locales[i].getDisplayName(displayName) << ": " << pattern;
    - * cout << " -> " << form->format(myNumber,str) << endl;
    - * form->parse(form->format(myNumber,str), fmtable, success);
    - * delete form;
    - * }
    - * }
    - * }
    - * \endcode
    - *
    - * <p><strong>Patterns</strong>
    - *
    - * <p>A DecimalFormat consists of a <em>pattern</em> and a set of
    - * <em>symbols</em>. The pattern may be set directly using
    - * applyPattern(), or indirectly using other API methods which
    - * manipulate aspects of the pattern, such as the minimum number of integer
    - * digits. The symbols are stored in a DecimalFormatSymbols
    - * object. When using the NumberFormat factory methods, the
    - * pattern and symbols are read from ICU's locale data.
    - *
    - * <p><strong>Special Pattern Characters</strong>
    - *
    - * <p>Many characters in a pattern are taken literally; they are matched during
    - * parsing and output unchanged during formatting. Special characters, on the
    - * other hand, stand for other characters, strings, or classes of characters.
    - * For example, the '#' character is replaced by a localized digit. Often the
    - * replacement character is the same as the pattern character; in the U.S. locale,
    - * the ',' grouping character is replaced by ','. However, the replacement is
    - * still happening, and if the symbols are modified, the grouping character
    - * changes. Some special characters affect the behavior of the formatter by
    - * their presence; for example, if the percent character is seen, then the
    - * value is multiplied by 100 before being displayed.
    - *
    - * <p>To insert a special character in a pattern as a literal, that is, without
    - * any special meaning, the character must be quoted. There are some exceptions to
    - * this which are noted below.
    - *
    - * <p>The characters listed here are used in non-localized patterns. Localized
    - * patterns use the corresponding characters taken from this formatter's
    - * DecimalFormatSymbols object instead, and these characters lose
    - * their special status. Two exceptions are the currency sign and quote, which
    - * are not localized.
    - *
    - * <table border=0 cellspacing=3 cellpadding=0>
    - * <tr bgcolor="#ccccff">
    - * <td align=left><strong>Symbol</strong>
    - * <td align=left><strong>Location</strong>
    - * <td align=left><strong>Localized?</strong>
    - * <td align=left><strong>Meaning</strong>
    - * <tr valign=top>
    - * <td><code>0</code>
    - * <td>Number
    - * <td>Yes
    - * <td>Digit
    - * <tr valign=top bgcolor="#eeeeff">
    - * <td><code>1-9</code>
    - * <td>Number
    - * <td>Yes
    - * <td>'1' through '9' indicate rounding.
    - * <tr valign=top>
    - * <td><code>\htmlonly&#x40;\endhtmlonly</code> <!--doxygen doesn't like @-->
    - * <td>Number
    - * <td>No
    - * <td>Significant digit
    - * <tr valign=top bgcolor="#eeeeff">
    - * <td><code>#</code>
    - * <td>Number
    - * <td>Yes
    - * <td>Digit, zero shows as absent
    - * <tr valign=top>
    - * <td><code>.</code>
    - * <td>Number
    - * <td>Yes
    - * <td>Decimal separator or monetary decimal separator
    - * <tr valign=top bgcolor="#eeeeff">
    - * <td><code>-</code>
    - * <td>Number
    - * <td>Yes
    - * <td>Minus sign
    - * <tr valign=top>
    - * <td><code>,</code>
    - * <td>Number
    - * <td>Yes
    - * <td>Grouping separator
    - * <tr valign=top bgcolor="#eeeeff">
    - * <td><code>E</code>
    - * <td>Number
    - * <td>Yes
    - * <td>Separates mantissa and exponent in scientific notation.
    - * <em>Need not be quoted in prefix or suffix.</em>
    - * <tr valign=top>
    - * <td><code>+</code>
    - * <td>Exponent
    - * <td>Yes
    - * <td>Prefix positive exponents with localized plus sign.
    - * <em>Need not be quoted in prefix or suffix.</em>
    - * <tr valign=top bgcolor="#eeeeff">
    - * <td><code>;</code>
    - * <td>Subpattern boundary
    - * <td>Yes
    - * <td>Separates positive and negative subpatterns
    - * <tr valign=top>
    - * <td><code>\%</code>
    - * <td>Prefix or suffix
    - * <td>Yes
    - * <td>Multiply by 100 and show as percentage
    - * <tr valign=top bgcolor="#eeeeff">
    - * <td><code>\\u2030</code>
    - * <td>Prefix or suffix
    - * <td>Yes
    - * <td>Multiply by 1000 and show as per mille
    - * <tr valign=top>
    - * <td><code>\htmlonly&curren;\endhtmlonly</code> (<code>\\u00A4</code>)
    - * <td>Prefix or suffix
    - * <td>No
    - * <td>Currency sign, replaced by currency symbol. If
    - * doubled, replaced by international currency symbol.
    - * If present in a pattern, the monetary decimal separator
    - * is used instead of the decimal separator.
    - * <tr valign=top bgcolor="#eeeeff">
    - * <td><code>'</code>
    - * <td>Prefix or suffix
    - * <td>No
    - * <td>Used to quote special characters in a prefix or suffix,
    - * for example, <code>"'#'#"</code> formats 123 to
    - * <code>"#123"</code>. To create a single quote
    - * itself, use two in a row: <code>"# o''clock"</code>.
    - * <tr valign=top>
    - * <td><code>*</code>
    - * <td>Prefix or suffix boundary
    - * <td>Yes
    - * <td>Pad escape, precedes pad character
    - * </table>
    - *
    - * <p>A DecimalFormat pattern contains a postive and negative
    - * subpattern, for example, "#,##0.00;(#,##0.00)". Each subpattern has a
    - * prefix, a numeric part, and a suffix. If there is no explicit negative
    - * subpattern, the negative subpattern is the localized minus sign prefixed to the
    - * positive subpattern. That is, "0.00" alone is equivalent to "0.00;-0.00". If there
    - * is an explicit negative subpattern, it serves only to specify the negative
    - * prefix and suffix; the number of digits, minimal digits, and other
    - * characteristics are ignored in the negative subpattern. That means that
    - * "#,##0.0#;(#)" has precisely the same result as "#,##0.0#;(#,##0.0#)".
    - *
    - * <p>The prefixes, suffixes, and various symbols used for infinity, digits,
    - * thousands separators, decimal separators, etc. may be set to arbitrary
    - * values, and they will appear properly during formatting. However, care must
    - * be taken that the symbols and strings do not conflict, or parsing will be
    - * unreliable. For example, either the positive and negative prefixes or the
    - * suffixes must be distinct for parse() to be able
    - * to distinguish positive from negative values. Another example is that the
    - * decimal separator and thousands separator should be distinct characters, or
    - * parsing will be impossible.
    - *
    - * <p>The <em>grouping separator</em> is a character that separates clusters of
    - * integer digits to make large numbers more legible. It commonly used for
    - * thousands, but in some locales it separates ten-thousands. The <em>grouping
    - * size</em> is the number of digits between the grouping separators, such as 3
    - * for "100,000,000" or 4 for "1 0000 0000". There are actually two different
    - * grouping sizes: One used for the least significant integer digits, the
    - * <em>primary grouping size</em>, and one used for all others, the
    - * <em>secondary grouping size</em>. In most locales these are the same, but
    - * sometimes they are different. For example, if the primary grouping interval
    - * is 3, and the secondary is 2, then this corresponds to the pattern
    - * "#,##,##0", and the number 123456789 is formatted as "12,34,56,789". If a
    - * pattern contains multiple grouping separators, the interval between the last
    - * one and the end of the integer defines the primary grouping size, and the
    - * interval between the last two defines the secondary grouping size. All others
    - * are ignored, so "#,##,###,####" == "###,###,####" == "##,#,###,####".
    - *
    - * <p>Illegal patterns, such as "#.#.#" or "#.###,###", will cause
    - * DecimalFormat to set a failing UErrorCode.
    - *
    - * <p><strong>Pattern BNF</strong>
    - *
    - * <pre>
    - * pattern := subpattern (';' subpattern)?
    - * subpattern := prefix? number exponent? suffix?
    - * number := (integer ('.' fraction)?) | sigDigits
    - * prefix := '\\u0000'..'\\uFFFD' - specialCharacters
    - * suffix := '\\u0000'..'\\uFFFD' - specialCharacters
    - * integer := '#'* '0'* '0'
    - * fraction := '0'* '#'*
    - * sigDigits := '#'* '@' '@'* '#'*
    - * exponent := 'E' '+'? '0'* '0'
    - * padSpec := '*' padChar
    - * padChar := '\\u0000'..'\\uFFFD' - quote
    - * &nbsp;
    - * Notation:
    - * X* 0 or more instances of X
    - * X? 0 or 1 instances of X
    - * X|Y either X or Y
    - * C..D any character from C up to D, inclusive
    - * S-T characters in S, except those in T
    - * </pre>
    - * The first subpattern is for positive numbers. The second (optional)
    - * subpattern is for negative numbers.
    - *
    - * <p>Not indicated in the BNF syntax above:
    - *
    - * <ul><li>The grouping separator ',' can occur inside the integer and
    - * sigDigits elements, between any two pattern characters of that
    - * element, as long as the integer or sigDigits element is not
    - * followed by the exponent element.
    - *
    - * <li>Two grouping intervals are recognized: That between the
    - * decimal point and the first grouping symbol, and that
    - * between the first and second grouping symbols. These
    - * intervals are identical in most locales, but in some
    - * locales they differ. For example, the pattern
    - * &quot;#,##,###&quot; formats the number 123456789 as
    - * &quot;12,34,56,789&quot;.</li>
    - *
    - * <li>The pad specifier <code>padSpec</code> may appear before the prefix,
    - * after the prefix, before the suffix, after the suffix, or not at all.
    - *
    - * <li>In place of '0', the digits '1' through '9' may be used to
    - * indicate a rounding increment.
    - * </ul>
    - *
    - * <p><strong>Parsing</strong>
    - *
    - * <p>DecimalFormat parses all Unicode characters that represent
    - * decimal digits, as defined by u_charDigitValue(). In addition,
    - * DecimalFormat also recognizes as digits the ten consecutive
    - * characters starting with the localized zero digit defined in the
    - * DecimalFormatSymbols object. During formatting, the
    - * DecimalFormatSymbols-based digits are output.
    - *
    - * <p>During parsing, grouping separators are ignored.
    - *
    - * <p>If parse(UnicodeString&,Formattable&,ParsePosition&)
    - * fails to parse a string, it leaves the parse position unchanged.
    - * The convenience method parse(UnicodeString&,Formattable&,UErrorCode&)
    - * indicates parse failure by setting a failing
    - * UErrorCode.
    - *
    - * <p><strong>Formatting</strong>
    - *
    - * <p>Formatting is guided by several parameters, all of which can be
    - * specified either using a pattern or using the API. The following
    - * description applies to formats that do not use <a href="#sci">scientific
    - * notation</a> or <a href="#sigdig">significant digits</a>.
    - *
    - * <ul><li>If the number of actual integer digits exceeds the
    - * <em>maximum integer digits</em>, then only the least significant
    - * digits are shown. For example, 1997 is formatted as "97" if the
    - * maximum integer digits is set to 2.
    - *
    - * <li>If the number of actual integer digits is less than the
    - * <em>minimum integer digits</em>, then leading zeros are added. For
    - * example, 1997 is formatted as "01997" if the minimum integer digits
    - * is set to 5.
    - *
    - * <li>If the number of actual fraction digits exceeds the <em>maximum
    - * fraction digits</em>, then half-even rounding it performed to the
    - * maximum fraction digits. For example, 0.125 is formatted as "0.12"
    - * if the maximum fraction digits is 2. This behavior can be changed
    - * by specifying a rounding increment and a rounding mode.
    - *
    - * <li>If the number of actual fraction digits is less than the
    - * <em>minimum fraction digits</em>, then trailing zeros are added.
    - * For example, 0.125 is formatted as "0.1250" if the mimimum fraction
    - * digits is set to 4.
    - *
    - * <li>Trailing fractional zeros are not displayed if they occur
    - * <em>j</em> positions after the decimal, where <em>j</em> is less
    - * than the maximum fraction digits. For example, 0.10004 is
    - * formatted as "0.1" if the maximum fraction digits is four or less.
    - * </ul>
    - *
    - * <p><strong>Special Values</strong>
    - *
    - * <p><code>NaN</code> is represented as a single character, typically
    - * <code>\\uFFFD</code>. This character is determined by the
    - * DecimalFormatSymbols object. This is the only value for which
    - * the prefixes and suffixes are not used.
    - *
    - * <p>Infinity is represented as a single character, typically
    - * <code>\\u221E</code>, with the positive or negative prefixes and suffixes
    - * applied. The infinity character is determined by the
    - * DecimalFormatSymbols object.
    - *
    - * <a name="sci"><strong>Scientific Notation</strong></a>
    - *
    - * <p>Numbers in scientific notation are expressed as the product of a mantissa
    - * and a power of ten, for example, 1234 can be expressed as 1.234 x 10<sup>3</sup>. The
    - * mantissa is typically in the half-open interval [1.0, 10.0) or sometimes [0.0, 1.0),
    - * but it need not be. DecimalFormat supports arbitrary mantissas.
    - * DecimalFormat can be instructed to use scientific
    - * notation through the API or through the pattern. In a pattern, the exponent
    - * character immediately followed by one or more digit characters indicates
    - * scientific notation. Example: "0.###E0" formats the number 1234 as
    - * "1.234E3".
    - *
    - * <ul>
    - * <li>The number of digit characters after the exponent character gives the
    - * minimum exponent digit count. There is no maximum. Negative exponents are
    - * formatted using the localized minus sign, <em>not</em> the prefix and suffix
    - * from the pattern. This allows patterns such as "0.###E0 m/s". To prefix
    - * positive exponents with a localized plus sign, specify '+' between the
    - * exponent and the digits: "0.###E+0" will produce formats "1E+1", "1E+0",
    - * "1E-1", etc. (In localized patterns, use the localized plus sign rather than
    - * '+'.)
    - *
    - * <li>The minimum number of integer digits is achieved by adjusting the
    - * exponent. Example: 0.00123 formatted with "00.###E0" yields "12.3E-4". This
    - * only happens if there is no maximum number of integer digits. If there is a
    - * maximum, then the minimum number of integer digits is fixed at one.
    - *
    - * <li>The maximum number of integer digits, if present, specifies the exponent
    - * grouping. The most common use of this is to generate <em>engineering
    - * notation</em>, in which the exponent is a multiple of three, e.g.,
    - * "##0.###E0". The number 12345 is formatted using "##0.####E0" as "12.345E3".
    - *
    - * <li>When using scientific notation, the formatter controls the
    - * digit counts using significant digits logic. The maximum number of
    - * significant digits limits the total number of integer and fraction
    - * digits that will be shown in the mantissa; it does not affect
    - * parsing. For example, 12345 formatted with "##0.##E0" is "12.3E3".
    - * See the section on significant digits for more details.
    - *
    - * <li>The number of significant digits shown is determined as
    - * follows: If areSignificantDigitsUsed() returns false, then the
    - * minimum number of significant digits shown is one, and the maximum
    - * number of significant digits shown is the sum of the <em>minimum
    - * integer</em> and <em>maximum fraction</em> digits, and is
    - * unaffected by the maximum integer digits. If this sum is zero,
    - * then all significant digits are shown. If
    - * areSignificantDigitsUsed() returns true, then the significant digit
    - * counts are specified by getMinimumSignificantDigits() and
    - * getMaximumSignificantDigits(). In this case, the number of
    - * integer digits is fixed at one, and there is no exponent grouping.
    - *
    - * <li>Exponential patterns may not contain grouping separators.
    - * </ul>
    - *
    - * <a name="sigdig"><strong>Significant Digits</strong></a>
    - *
    - * <code>DecimalFormat</code> has two ways of controlling how many
    - * digits are shows: (a) significant digits counts, or (b) integer and
    - * fraction digit counts. Integer and fraction digit counts are
    - * described above. When a formatter is using significant digits
    - * counts, the number of integer and fraction digits is not specified
    - * directly, and the formatter settings for these counts are ignored.
    - * Instead, the formatter uses however many integer and fraction
    - * digits are required to display the specified number of significant
    - * digits. Examples:
    - *
    - * <table border=0 cellspacing=3 cellpadding=0>
    - * <tr bgcolor="#ccccff">
    - * <td align=left>Pattern
    - * <td align=left>Minimum significant digits
    - * <td align=left>Maximum significant digits
    - * <td align=left>Number
    - * <td align=left>Output of format()
    - * <tr valign=top>
    - * <td><code>\@\@\@</code>
    - * <td>3
    - * <td>3
    - * <td>12345
    - * <td><code>12300</code>
    - * <tr valign=top bgcolor="#eeeeff">
    - * <td><code>\@\@\@</code>
    - * <td>3
    - * <td>3
    - * <td>0.12345
    - * <td><code>0.123</code>
    - * <tr valign=top>
    - * <td><code>\@\@##</code>
    - * <td>2
    - * <td>4
    - * <td>3.14159
    - * <td><code>3.142</code>
    - * <tr valign=top bgcolor="#eeeeff">
    - * <td><code>\@\@##</code>
    - * <td>2
    - * <td>4
    - * <td>1.23004
    - * <td><code>1.23</code>
    - * </table>
    - *
    - * <ul>
    - * <li>Significant digit counts may be expressed using patterns that
    - * specify a minimum and maximum number of significant digits. These
    - * are indicated by the <code>'@'</code> and <code>'#'</code>
    - * characters. The minimum number of significant digits is the number
    - * of <code>'@'</code> characters. The maximum number of significant
    - * digits is the number of <code>'@'</code> characters plus the number
    - * of <code>'#'</code> characters following on the right. For
    - * example, the pattern <code>"@@@"</code> indicates exactly 3
    - * significant digits. The pattern <code>"@##"</code> indicates from
    - * 1 to 3 significant digits. Trailing zero digits to the right of
    - * the decimal separator are suppressed after the minimum number of
    - * significant digits have been shown. For example, the pattern
    - * <code>"@##"</code> formats the number 0.1203 as
    - * <code>"0.12"</code>.
    - *
    - * <li>If a pattern uses significant digits, it may not contain a
    - * decimal separator, nor the <code>'0'</code> pattern character.
    - * Patterns such as <code>"@00"</code> or <code>"@.###"</code> are
    - * disallowed.
    - *
    - * <li>Any number of <code>'#'</code> characters may be prepended to
    - * the left of the leftmost <code>'@'</code> character. These have no
    - * effect on the minimum and maximum significant digits counts, but
    - * may be used to position grouping separators. For example,
    - * <code>"#,#@#"</code> indicates a minimum of one significant digits,
    - * a maximum of two significant digits, and a grouping size of three.
    - *
    - * <li>In order to enable significant digits formatting, use a pattern
    - * containing the <code>'@'</code> pattern character. Alternatively,
    - * call setSignificantDigitsUsed(TRUE).
    - *
    - * <li>In order to disable significant digits formatting, use a
    - * pattern that does not contain the <code>'@'</code> pattern
    - * character. Alternatively, call setSignificantDigitsUsed(FALSE).
    - *
    - * <li>The number of significant digits has no effect on parsing.
    - *
    - * <li>Significant digits may be used together with exponential notation. Such
    - * patterns are equivalent to a normal exponential pattern with a minimum and
    - * maximum integer digit count of one, a minimum fraction digit count of
    - * <code>getMinimumSignificantDigits() - 1</code>, and a maximum fraction digit
    - * count of <code>getMaximumSignificantDigits() - 1</code>. For example, the
    - * pattern <code>"@@###E0"</code> is equivalent to <code>"0.0###E0"</code>.
    - *
    - * <li>If signficant digits are in use, then the integer and fraction
    - * digit counts, as set via the API, are ignored. If significant
    - * digits are not in use, then the signficant digit counts, as set via
    - * the API, are ignored.
    - *
    - * </ul>
    - *
    - * <p><strong>Padding</strong>
    - *
    - * <p>DecimalFormat supports padding the result of
    - * format() to a specific width. Padding may be specified either
    - * through the API or through the pattern syntax. In a pattern the pad escape
    - * character, followed by a single pad character, causes padding to be parsed
    - * and formatted. The pad escape character is '*' in unlocalized patterns, and
    - * can be localized using DecimalFormatSymbols::setSymbol() with a
    - * DecimalFormatSymbols::kPadEscapeSymbol
    - * selector. For example, <code>"$*x#,##0.00"</code> formats 123 to
    - * <code>"$xx123.00"</code>, and 1234 to <code>"$1,234.00"</code>.
    - *
    - * <ul>
    - * <li>When padding is in effect, the width of the positive subpattern,
    - * including prefix and suffix, determines the format width. For example, in
    - * the pattern <code>"* #0 o''clock"</code>, the format width is 10.
    - *
    - * <li>The width is counted in 16-bit code units (UChars).
    - *
    - * <li>Some parameters which usually do not matter have meaning when padding is
    - * used, because the pattern width is significant with padding. In the pattern
    - * "* ##,##,#,##0.##", the format width is 14. The initial characters "##,##,"
    - * do not affect the grouping size or maximum integer digits, but they do affect
    - * the format width.
    - *
    - * <li>Padding may be inserted at one of four locations: before the prefix,
    - * after the prefix, before the suffix, or after the suffix. If padding is
    - * specified in any other location, applyPattern()
    - * sets a failing UErrorCode. If there is no prefix,
    - * before the prefix and after the prefix are equivalent, likewise for the
    - * suffix.
    - *
    - * <li>When specified in a pattern, the 32-bit code point immediately
    - * following the pad escape is the pad character. This may be any character,
    - * including a special pattern character. That is, the pad escape
    - * <em>escapes</em> the following character. If there is no character after
    - * the pad escape, then the pattern is illegal.
    - *
    - * </ul>
    - *
    - * <p><strong>Rounding</strong>
    - *
    - * <p>DecimalFormat supports rounding to a specific increment. For
    - * example, 1230 rounded to the nearest 50 is 1250. 1.234 rounded to the
    - * nearest 0.65 is 1.3. The rounding increment may be specified through the API
    - * or in a pattern. To specify a rounding increment in a pattern, include the
    - * increment in the pattern itself. "#,#50" specifies a rounding increment of
    - * 50. "#,##0.05" specifies a rounding increment of 0.05.
    - *
    - * <ul>
    - * <li>Rounding only affects the string produced by formatting. It does
    - * not affect parsing or change any numerical values.
    - *
    - * <li>A <em>rounding mode</em> determines how values are rounded; see
    - * DecimalFormat::ERoundingMode. Rounding increments specified in
    - * patterns use the default mode, DecimalFormat::kRoundHalfEven.
    - *
    - * <li>Some locales use rounding in their currency formats to reflect the
    - * smallest currency denomination.
    - *
    - * <li>In a pattern, digits '1' through '9' specify rounding, but otherwise
    - * behave identically to digit '0'.
    - * </ul>
    - *
    - * <p><strong>Synchronization</strong>
    - *
    - * <p>DecimalFormat objects are not synchronized. Multiple
    - * threads should not access one formatter concurrently.
    - *
    - * <p><strong>Subclassing</strong>
    - *
    - * <p><em>User subclasses are not supported.</em> While clients may write
    - * subclasses, such code will not necessarily work and will not be
    - * guaranteed to work stably from release to release.
    - */
    -class U_I18N_API DecimalFormat: public NumberFormat {
    -public:
    - /**
    - * Rounding mode.
    - * @stable ICU 2.4
    - */
    - enum ERoundingMode {
    - kRoundCeiling, /**< Round towards positive infinity */
    - kRoundFloor, /**< Round towards negative infinity */
    - kRoundDown, /**< Round towards zero */
    - kRoundUp, /**< Round away from zero */
    - kRoundHalfEven, /**< Round towards the nearest integer, or
    - towards the nearest even integer if equidistant */
    - kRoundHalfDown, /**< Round towards the nearest integer, or
    - towards zero if equidistant */
    - kRoundHalfUp /**< Round towards the nearest integer, or
    - away from zero if equidistant */
    - // We don't support ROUND_UNNECESSARY
    - };
    -
    - /**
    - * Pad position.
    - * @stable ICU 2.4
    - */
    - enum EPadPosition {
    - kPadBeforePrefix,
    - kPadAfterPrefix,
    - kPadBeforeSuffix,
    - kPadAfterSuffix
    - };
    -
    - /**
    - * Create a DecimalFormat using the default pattern and symbols
    - * for the default locale. This is a convenient way to obtain a
    - * DecimalFormat when internationalization is not the main concern.
    - * <P>
    - * To obtain standard formats for a given locale, use the factory methods
    - * on NumberFormat such as createInstance. These factories will
    - * return the most appropriate sub-class of NumberFormat for a given
    - * locale.
    - * @param status Output param set to success/failure code. If the
    - * pattern is invalid this will be set to a failure code.
    - * @stable ICU 2.0
    - */
    - DecimalFormat(UErrorCode& status);
    -
    - /**
    - * Create a DecimalFormat from the given pattern and the symbols
    - * for the default locale. This is a convenient way to obtain a
    - * DecimalFormat when internationalization is not the main concern.
    - * <P>
    - * To obtain standard formats for a given locale, use the factory methods
    - * on NumberFormat such as createInstance. These factories will
    - * return the most appropriate sub-class of NumberFormat for a given
    - * locale.
    - * @param pattern A non-localized pattern string.
    - * @param status Output param set to success/failure code. If the
    - * pattern is invalid this will be set to a failure code.
    - * @stable ICU 2.0
    - */
    - DecimalFormat(const UnicodeString& pattern,
    - UErrorCode& status);
    -
    - /**
    - * Create a DecimalFormat from the given pattern and symbols.
    - * Use this constructor when you need to completely customize the
    - * behavior of the format.
    - * <P>
    - * To obtain standard formats for a given
    - * locale, use the factory methods on NumberFormat such as
    - * createInstance or createCurrencyInstance. If you need only minor adjustments
    - * to a standard format, you can modify the format returned by
    - * a NumberFormat factory method.
    - *
    - * @param pattern a non-localized pattern string
    - * @param symbolsToAdopt the set of symbols to be used. The caller should not
    - * delete this object after making this call.
    - * @param status Output param set to success/failure code. If the
    - * pattern is invalid this will be set to a failure code.
    - * @stable ICU 2.0
    - */
    - DecimalFormat( const UnicodeString& pattern,
    - DecimalFormatSymbols* symbolsToAdopt,
    - UErrorCode& status);
    -
    - /**
    - * Create a DecimalFormat from the given pattern and symbols.
    - * Use this constructor when you need to completely customize the
    - * behavior of the format.
    - * <P>
    - * To obtain standard formats for a given
    - * locale, use the factory methods on NumberFormat such as
    - * createInstance or createCurrencyInstance. If you need only minor adjustments
    - * to a standard format, you can modify the format returned by
    - * a NumberFormat factory method.
    - *
    - * @param pattern a non-localized pattern string
    - * @param symbolsToAdopt the set of symbols to be used. The caller should not
    - * delete this object after making this call.
    - * @param parseError Output param to receive errors occured during parsing
    - * @param status Output param set to success/failure code. If the
    - * pattern is invalid this will be set to a failure code.
    - * @stable ICU 2.0
    - */
    - DecimalFormat( const UnicodeString& pattern,
    - DecimalFormatSymbols* symbolsToAdopt,
    - UParseError& parseError,
    - UErrorCode& status);
    - /**
    - * Create a DecimalFormat from the given pattern and symbols.
    - * Use this constructor when you need to completely customize the
    - * behavior of the format.
    - * <P>
    - * To obtain standard formats for a given
    - * locale, use the factory methods on NumberFormat such as
    - * createInstance or createCurrencyInstance. If you need only minor adjustments
    - * to a standard format, you can modify the format returned by
    - * a NumberFormat factory method.
    - *
    - * @param pattern a non-localized pattern string
    - * @param symbols the set of symbols to be used
    - * @param status Output param set to success/failure code. If the
    - * pattern is invalid this will be set to a failure code.
    - * @stable ICU 2.0
    - */
    - DecimalFormat( const UnicodeString& pattern,
    - const DecimalFormatSymbols& symbols,
    - UErrorCode& status);
    -
    - /**
    - * Copy constructor.
    - *
    - * @param source the DecimalFormat object to be copied from.
    - * @stable ICU 2.0
    - */
    - DecimalFormat(const DecimalFormat& source);
    -
    - /**
    - * Assignment operator.
    - *
    - * @param rhs the DecimalFormat object to be copied.
    - * @stable ICU 2.0
    - */
    - DecimalFormat& operator=(const DecimalFormat& rhs);
    -
    - /**
    - * Destructor.
    - * @stable ICU 2.0
    - */
    - virtual ~DecimalFormat();
    -
    - /**
    - * Clone this Format object polymorphically. The caller owns the
    - * result and should delete it when done.
    - *
    - * @return a polymorphic copy of this DecimalFormat.
    - * @stable ICU 2.0
    - */
    - virtual Format* clone(void) const;
    -
    - /**
    - * Return true if the given Format objects are semantically equal.
    - * Objects of different subclasses are considered unequal.
    - *
    - * @param other the object to be compared with.
    - * @return true if the given Format objects are semantically equal.
    - * @stable ICU 2.0
    - */
    - virtual UBool operator==(const Format& other) const;
    -
    - /**
    - * Format a double or long number using base-10 representation.
    - *
    - * @param number The value to be formatted.
    - * @param appendTo Output parameter to receive result.
    - * Result is appended to existing contents.
    - * @param pos On input: an alignment field, if desired.
    - * On output: the offsets of the alignment field.
    - * @return Reference to 'appendTo' parameter.
    - * @stable ICU 2.0
    - */
    - virtual UnicodeString& format(double number,
    - UnicodeString& appendTo,
    - FieldPosition& pos) const;
    - /**
    - * Format a long number using base-10 representation.
    - *
    - * @param number The value to be formatted.
    - * @param appendTo Output parameter to receive result.
    - * Result is appended to existing contents.
    - * @param pos On input: an alignment field, if desired.
    - * On output: the offsets of the alignment field.
    - * @return Reference to 'appendTo' parameter.
    - * @stable ICU 2.0
    - */
    - virtual UnicodeString& format(int32_t number,
    - UnicodeString& appendTo,
    - FieldPosition& pos) const;
    - /**
    - * Format an int64 number using base-10 representation.
    - *
    - * @param number The value to be formatted.
    - * @param appendTo Output parameter to receive result.
    - * Result is appended to existing contents.
    - * @param pos On input: an alignment field, if desired.
    - * On output: the offsets of the alignment field.
    - * @return Reference to 'appendTo' parameter.
    - * @stable ICU 2.8
    - */
    - virtual UnicodeString& format(int64_t number,
    - UnicodeString& appendTo,
    - FieldPosition& pos) const;
    -
    - /**
    - * Format a Formattable using base-10 representation.
    - *
    - * @param obj The value to be formatted.
    - * @param appendTo Output parameter to receive result.
    - * Result is appended to existing contents.
    - * @param pos On input: an alignment field, if desired.
    - * On output: the offsets of the alignment field.
    - * @param status Error code indicating success or failure.
    - * @return Reference to 'appendTo' parameter.
    - * @stable ICU 2.0
    - */
    - virtual UnicodeString& format(const Formattable& obj,
    - UnicodeString& appendTo,
    - FieldPosition& pos,
    - UErrorCode& status) const;
    -
    - /**
    - * Redeclared NumberFormat method.
    - * Formats an object to produce a string.
    - *
    - * @param obj The object to format.
    - * @param appendTo Output parameter to receive result.
    - * Result is appended to existing contents.
    - * @param status Output parameter filled in with success or failure status.
    - * @return Reference to 'appendTo' parameter.
    - * @stable ICU 2.0
    - */
    - UnicodeString& format(const Formattable& obj,
    - UnicodeString& appendTo,
    - UErrorCode& status) const;
    -
    - /**
    - * Redeclared NumberFormat method.
    - * Format a double number.
    - *
    - * @param number The value to be formatted.
    - * @param appendTo Output parameter to receive result.
    - * Result is appended to existing contents.
    - * @return Reference to 'appendTo' parameter.
    - * @stable ICU 2.0
    - */
    - UnicodeString& format(double number,
    - UnicodeString& appendTo) const;
    -
    - /**
    - * Redeclared NumberFormat method.
    - * Format a long number. These methods call the NumberFormat
    - * pure virtual format() methods with the default FieldPosition.
    - *
    - * @param number The value to be formatted.
    - * @param appendTo Output parameter to receive result.
    - * Result is appended to existing contents.
    - * @return Reference to 'appendTo' parameter.
    - * @stable ICU 2.0
    - */
    - UnicodeString& format(int32_t number,
    - UnicodeString& appendTo) const;
    -
    - /**
    - * Redeclared NumberFormat method.
    - * Format an int64 number. These methods call the NumberFormat
    - * pure virtual format() methods with the default FieldPosition.
    - *
    - * @param number The value to be formatted.
    - * @param appendTo Output parameter to receive result.
    - * Result is appended to existing contents.
    - * @return Reference to 'appendTo' parameter.
    - * @stable ICU 2.8
    - */
    - UnicodeString& format(int64_t number,
    - UnicodeString& appendTo) const;
    - /**
    - * Parse the given string using this object's choices. The method
    - * does string comparisons to try to find an optimal match.
    - * If no object can be parsed, index is unchanged, and NULL is
    - * returned. The result is returned as the most parsimonious
    - * type of Formattable that will accomodate all of the
    - * necessary precision. For example, if the result is exactly 12,
    - * it will be returned as a long. However, if it is 1.5, it will
    - * be returned as a double.
    - *
    - * @param text The text to be parsed.
    - * @param result Formattable to be set to the parse result.
    - * If parse fails, return contents are undefined.
    - * @param parsePosition The position to start parsing at on input.
    - * On output, moved to after the last successfully
    - * parse character. On parse failure, does not change.
    - * @see Formattable
    - * @stable ICU 2.0
    - */
    - virtual void parse(const UnicodeString& text,
    - Formattable& result,
    - ParsePosition& parsePosition) const;
    -
    - // Declare here again to get rid of function hiding problems.
    - /**
    - * Parse the given string using this object's choices.
    - *
    - * @param text The text to be parsed.
    - * @param result Formattable to be set to the parse result.
    - * @param status Output parameter filled in with success or failure status.
    - * @stable ICU 2.0
    - */
    - virtual void parse(const UnicodeString& text,
    - Formattable& result,
    - UErrorCode& status) const;
    -
    - /**
    - * Parses text from the given string as a currency amount. Unlike
    - * the parse() method, this method will attempt to parse a generic
    - * currency name, searching for a match of this object's locale's
    - * currency display names, or for a 3-letter ISO currency code.
    - * This method will fail if this format is not a currency format,
    - * that is, if it does not contain the currency pattern symbol
    - * (U+00A4) in its prefix or suffix.
    - *
    - * @param text the string to parse
    - * @param result output parameter to receive result. This will have
    - * its currency set to the parsed ISO currency code.
    - * @param pos input-output position; on input, the position within
    - * text to match; must have 0 <= pos.getIndex() < text.length();
    - * on output, the position after the last matched character. If
    - * the parse fails, the position in unchanged upon output.
    - * @return a reference to result
    - * @internal
    - */
    - virtual Formattable& parseCurrency(const UnicodeString& text,
    - Formattable& result,
    - ParsePosition& pos) const;
    -
    - /**
    - * Returns the decimal format symbols, which is generally not changed
    - * by the programmer or user.
    - * @return desired DecimalFormatSymbols
    - * @see DecimalFormatSymbols
    - * @stable ICU 2.0
    - */
    - virtual const DecimalFormatSymbols* getDecimalFormatSymbols(void) const;
    -
    - /**
    - * Sets the decimal format symbols, which is generally not changed
    - * by the programmer or user.
    - * @param symbolsToAdopt DecimalFormatSymbols to be adopted.
    - * @stable ICU 2.0
    - */
    - virtual void adoptDecimalFormatSymbols(DecimalFormatSymbols* symbolsToAdopt);
    -
    - /**
    - * Sets the decimal format symbols, which is generally not changed
    - * by the programmer or user.
    - * @param symbols DecimalFormatSymbols.
    - * @stable ICU 2.0
    - */
    - virtual void setDecimalFormatSymbols(const DecimalFormatSymbols& symbols);
    -
    -
    - /**
    - * Get the positive prefix.
    - *
    - * @param result Output param which will receive the positive prefix.
    - * @return A reference to 'result'.
    - * Examples: +123, $123, sFr123
    - * @stable ICU 2.0
    - */
    - UnicodeString& getPositivePrefix(UnicodeString& result) const;
    -
    - /**
    - * Set the positive prefix.
    - *
    - * @param newValue the new value of the the positive prefix to be set.
    - * Examples: +123, $123, sFr123
    - * @stable ICU 2.0
    - */
    - virtual void setPositivePrefix(const UnicodeString& newValue);
    -
    - /**
    - * Get the negative prefix.
    - *
    - * @param result Output param which will receive the negative prefix.
    - * @return A reference to 'result'.
    - * Examples: -123, ($123) (with negative suffix), sFr-123
    - * @stable ICU 2.0
    - */
    - UnicodeString& getNegativePrefix(UnicodeString& result) const;
    -
    - /**
    - * Set the negative prefix.
    - *
    - * @param newValue the new value of the the negative prefix to be set.
    - * Examples: -123, ($123) (with negative suffix), sFr-123
    - * @stable ICU 2.0
    - */
    - virtual void setNegativePrefix(const UnicodeString& newValue);
    -
    - /**
    - * Get the positive suffix.
    - *
    - * @param result Output param which will receive the positive suffix.
    - * @return A reference to 'result'.
    - * Example: 123%
    - * @stable ICU 2.0
    - */
    - UnicodeString& getPositiveSuffix(UnicodeString& result) const;
    -
    - /**
    - * Set the positive suffix.
    - *
    - * @param newValue the new value of the positive suffix to be set.
    - * Example: 123%
    - * @stable ICU 2.0
    - */
    - virtual void setPositiveSuffix(const UnicodeString& newValue);
    -
    - /**
    - * Get the negative suffix.
    - *
    - * @param result Output param which will receive the negative suffix.
    - * @return A reference to 'result'.
    - * Examples: -123%, ($123) (with positive suffixes)
    - * @stable ICU 2.0
    - */
    - UnicodeString& getNegativeSuffix(UnicodeString& result) const;
    -
    - /**
    - * Set the negative suffix.
    - *
    - * @param newValue the new value of the negative suffix to be set.
    - * Examples: 123%
    - * @stable ICU 2.0
    - */
    - virtual void setNegativeSuffix(const UnicodeString& newValue);
    -
    - /**
    - * Get the multiplier for use in percent, permill, etc.
    - * For a percentage, set the suffixes to have "%" and the multiplier to be 100.
    - * (For Arabic, use arabic percent symbol).
    - * For a permill, set the suffixes to have "\\u2031" and the multiplier to be 1000.
    - *
    - * @return the multiplier for use in percent, permill, etc.
    - * Examples: with 100, 1.23 -> "123", and "123" -> 1.23
    - * @stable ICU 2.0
    - */
    - int32_t getMultiplier(void) const;
    -
    - /**
    - * Set the multiplier for use in percent, permill, etc.
    - * For a percentage, set the suffixes to have "%" and the multiplier to be 100.
    - * (For Arabic, use arabic percent symbol).
    - * For a permill, set the suffixes to have "\\u2031" and the multiplier to be 1000.
    - *
    - * @param newValue the new value of the multiplier for use in percent, permill, etc.
    - * Examples: with 100, 1.23 -> "123", and "123" -> 1.23
    - * @stable ICU 2.0
    - */
    - virtual void setMultiplier(int32_t newValue);
    -
    - /**
    - * Get the rounding increment.
    - * @return A positive rounding increment, or 0.0 if rounding
    - * is not in effect.
    - * @see #setRoundingIncrement
    - * @see #getRoundingMode
    - * @see #setRoundingMode
    - * @stable ICU 2.0
    - */
    - virtual double getRoundingIncrement(void) const;
    -
    - /**
    - * Set the rounding increment. This method also controls whether
    - * rounding is enabled.
    - * @param newValue A positive rounding increment, or 0.0 to disable rounding.
    - * Negative increments are equivalent to 0.0.
    - * @see #getRoundingIncrement
    - * @see #getRoundingMode
    - * @see #setRoundingMode
    - * @stable ICU 2.0
    - */
    - virtual void setRoundingIncrement(double newValue);
    -
    - /**
    - * Get the rounding mode.
    - * @return A rounding mode
    - * @see #setRoundingIncrement
    - * @see #getRoundingIncrement
    - * @see #setRoundingMode
    - * @stable ICU 2.0
    - */
    - virtual ERoundingMode getRoundingMode(void) const;
    -
    - /**
    - * Set the rounding mode. This has no effect unless the rounding
    - * increment is greater than zero.
    - * @param roundingMode A rounding mode
    - * @see #setRoundingIncrement
    - * @see #getRoundingIncrement
    - * @see #getRoundingMode
    - * @stable ICU 2.0
    - */
    - virtual void setRoundingMode(ERoundingMode roundingMode);
    -
    - /**
    - * Get the width to which the output of format() is padded.
    - * The width is counted in 16-bit code units.
    - * @return the format width, or zero if no padding is in effect
    - * @see #setFormatWidth
    - * @see #getPadCharacterString
    - * @see #setPadCharacter
    - * @see #getPadPosition
    - * @see #setPadPosition
    - * @stable ICU 2.0
    - */
    - virtual int32_t getFormatWidth(void) const;
    -
    - /**
    - * Set the width to which the output of format() is padded.
    - * The width is counted in 16-bit code units.
    - * This method also controls whether padding is enabled.
    - * @param width the width to which to pad the result of
    - * format(), or zero to disable padding. A negative
    - * width is equivalent to 0.
    - * @see #getFormatWidth
    - * @see #getPadCharacterString
    - * @see #setPadCharacter
    - * @see #getPadPosition
    - * @see #setPadPosition
    - * @stable ICU 2.0
    - */
    - virtual void setFormatWidth(int32_t width);
    -
    - /**
    - * Get the pad character used to pad to the format width. The
    - * default is ' '.
    - * @return a string containing the pad character. This will always
    - * have a length of one 32-bit code point.
    - * @see #setFormatWidth
    - * @see #getFormatWidth
    - * @see #setPadCharacter
    - * @see #getPadPosition
    - * @see #setPadPosition
    - * @stable ICU 2.0
    - */
    - virtual UnicodeString getPadCharacterString() const;
    -
    - /**
    - * Set the character used to pad to the format width. If padding
    - * is not enabled, then this will take effect if padding is later
    - * enabled.
    - * @param padChar a string containing the pad charcter. If the string
    - * has length 0, then the pad characer is set to ' '. Otherwise
    - * padChar.char32At(0) will be used as the pad character.
    - * @see #setFormatWidth
    - * @see #getFormatWidth
    - * @see #getPadCharacterString
    - * @see #getPadPosition
    - * @see #setPadPosition
    - * @stable ICU 2.0
    - */
    - virtual void setPadCharacter(const UnicodeString &padChar);
    -
    - /**
    - * Get the position at which padding will take place. This is the location
    - * at which padding will be inserted if the result of format()
    - * is shorter than the format width.
    - * @return the pad position, one of kPadBeforePrefix,
    - * kPadAfterPrefix, kPadBeforeSuffix, or
    - * kPadAfterSuffix.
    - * @see #setFormatWidth
    - * @see #getFormatWidth
    - * @see #setPadCharacter
    - * @see #getPadCharacterString
    - * @see #setPadPosition
    - * @see #EPadPosition
    - * @stable ICU 2.0
    - */
    - virtual EPadPosition getPadPosition(void) const;
    -
    - /**
    - * Set the position at which padding will take place. This is the location
    - * at which padding will be inserted if the result of format()
    - * is shorter than the format width. This has no effect unless padding is
    - * enabled.
    - * @param padPos the pad position, one of kPadBeforePrefix,
    - * kPadAfterPrefix, kPadBeforeSuffix, or
    - * kPadAfterSuffix.
    - * @see #setFormatWidth
    - * @see #getFormatWidth
    - * @see #setPadCharacter
    - * @see #getPadCharacterString
    - * @see #getPadPosition
    - * @see #EPadPosition
    - * @stable ICU 2.0
    - */
    - virtual void setPadPosition(EPadPosition padPos);
    -
    - /**
    - * Return whether or not scientific notation is used.
    - * @return TRUE if this object formats and parses scientific notation
    - * @see #setScientificNotation
    - * @see #getMinimumExponentDigits
    - * @see #setMinimumExponentDigits
    - * @see #isExponentSignAlwaysShown
    - * @see #setExponentSignAlwaysShown
    - * @stable ICU 2.0
    - */
    - virtual UBool isScientificNotation(void);
    -
    - /**
    - * Set whether or not scientific notation is used. When scientific notation
    - * is used, the effective maximum number of integer digits is <= 8. If the
    - * maximum number of integer digits is set to more than 8, the effective
    - * maximum will be 1. This allows this call to generate a 'default' scientific
    - * number format without additional changes.
    - * @param useScientific TRUE if this object formats and parses scientific
    - * notation
    - * @see #isScientificNotation
    - * @see #getMinimumExponentDigits
    - * @see #setMinimumExponentDigits
    - * @see #isExponentSignAlwaysShown
    - * @see #setExponentSignAlwaysShown
    - * @stable ICU 2.0
    - */
    - virtual void setScientificNotation(UBool useScientific);
    -
    - /**
    - * Return the minimum exponent digits that will be shown.
    - * @return the minimum exponent digits that will be shown
    - * @see #setScientificNotation
    - * @see #isScientificNotation
    - * @see #setMinimumExponentDigits
    - * @see #isExponentSignAlwaysShown
    - * @see #setExponentSignAlwaysShown
    - * @stable ICU 2.0
    - */
    - virtual int8_t getMinimumExponentDigits(void) const;
    -
    - /**
    - * Set the minimum exponent digits that will be shown. This has no
    - * effect unless scientific notation is in use.
    - * @param minExpDig a value >= 1 indicating the fewest exponent digits
    - * that will be shown. Values less than 1 will be treated as 1.
    - * @see #setScientificNotation
    - * @see #isScientificNotation
    - * @see #getMinimumExponentDigits
    - * @see #isExponentSignAlwaysShown
    - * @see #setExponentSignAlwaysShown
    - * @stable ICU 2.0
    - */
    - virtual void setMinimumExponentDigits(int8_t minExpDig);
    -
    - /**
    - * Return whether the exponent sign is always shown.
    - * @return TRUE if the exponent is always prefixed with either the
    - * localized minus sign or the localized plus sign, false if only negative
    - * exponents are prefixed with the localized minus sign.
    - * @see #setScientificNotation
    - * @see #isScientificNotation
    - * @see #setMinimumExponentDigits
    - * @see #getMinimumExponentDigits
    - * @see #setExponentSignAlwaysShown
    - * @stable ICU 2.0
    - */
    - virtual UBool isExponentSignAlwaysShown(void);
    -
    - /**
    - * Set whether the exponent sign is always shown. This has no effect
    - * unless scientific notation is in use.
    - * @param expSignAlways TRUE if the exponent is always prefixed with either
    - * the localized minus sign or the localized plus sign, false if only
    - * negative exponents are prefixed with the localized minus sign.
    - * @see #setScientificNotation
    - * @see #isScientificNotation
    - * @see #setMinimumExponentDigits
    - * @see #getMinimumExponentDigits
    - * @see #isExponentSignAlwaysShown
    - * @stable ICU 2.0
    - */
    - virtual void setExponentSignAlwaysShown(UBool expSignAlways);
    -
    - /**
    - * Return the grouping size. Grouping size is the number of digits between
    - * grouping separators in the integer portion of a number. For example,
    - * in the number "123,456.78", the grouping size is 3.
    - *
    - * @return the grouping size.
    - * @see setGroupingSize
    - * @see NumberFormat::isGroupingUsed
    - * @see DecimalFormatSymbols::getGroupingSeparator
    - * @stable ICU 2.0
    - */
    - int32_t getGroupingSize(void) const;
    -
    - /**
    - * Set the grouping size. Grouping size is the number of digits between
    - * grouping separators in the integer portion of a number. For example,
    - * in the number "123,456.78", the grouping size is 3.
    - *
    - * @param newValue the new value of the grouping size.
    - * @see getGroupingSize
    - * @see NumberFormat::setGroupingUsed
    - * @see DecimalFormatSymbols::setGroupingSeparator
    - * @stable ICU 2.0
    - */
    - virtual void setGroupingSize(int32_t newValue);
    -
    - /**
    - * Return the secondary grouping size. In some locales one
    - * grouping interval is used for the least significant integer
    - * digits (the primary grouping size), and another is used for all
    - * others (the secondary grouping size). A formatter supporting a
    - * secondary grouping size will return a positive integer unequal
    - * to the primary grouping size returned by
    - * getGroupingSize(). For example, if the primary
    - * grouping size is 4, and the secondary grouping size is 2, then
    - * the number 123456789 formats as "1,23,45,6789", and the pattern
    - * appears as "#,##,###0".
    - * @return the secondary grouping size, or a value less than
    - * one if there is none
    - * @see setSecondaryGroupingSize
    - * @see NumberFormat::isGroupingUsed
    - * @see DecimalFormatSymbols::getGroupingSeparator
    - * @stable ICU 2.4
    - */
    - int32_t getSecondaryGroupingSize(void) const;
    -
    - /**
    - * Set the secondary grouping size. If set to a value less than 1,
    - * then secondary grouping is turned off, and the primary grouping
    - * size is used for all intervals, not just the least significant.
    - *
    - * @param newValue the new value of the secondary grouping size.
    - * @see getSecondaryGroupingSize
    - * @see NumberFormat#setGroupingUsed
    - * @see DecimalFormatSymbols::setGroupingSeparator
    - * @stable ICU 2.4
    - */
    - virtual void setSecondaryGroupingSize(int32_t newValue);
    -
    - /**
    - * Allows you to get the behavior of the decimal separator with integers.
    - * (The decimal separator will always appear with decimals.)
    - *
    - * @return TRUE if the decimal separator always appear with decimals.
    - * Example: Decimal ON: 12345 -> 12345.; OFF: 12345 -> 12345
    - * @stable ICU 2.0
    - */
    - UBool isDecimalSeparatorAlwaysShown(void) const;
    -
    - /**
    - * Allows you to set the behavior of the decimal separator with integers.
    - * (The decimal separator will always appear with decimals.)
    - *
    - * @param newValue set TRUE if the decimal separator will always appear with decimals.
    - * Example: Decimal ON: 12345 -> 12345.; OFF: 12345 -> 12345
    - * @stable ICU 2.0
    - */
    - virtual void setDecimalSeparatorAlwaysShown(UBool newValue);
    -
    - /**
    - * Synthesizes a pattern string that represents the current state
    - * of this Format object.
    - *
    - * @param result Output param which will receive the pattern.
    - * Previous contents are deleted.
    - * @return A reference to 'result'.
    - * @see applyPattern
    - * @stable ICU 2.0
    - */
    - virtual UnicodeString& toPattern(UnicodeString& result) const;
    -
    - /**
    - * Synthesizes a localized pattern string that represents the current
    - * state of this Format object.
    - *
    - * @param result Output param which will receive the localized pattern.
    - * Previous contents are deleted.
    - * @return A reference to 'result'.
    - * @see applyPattern
    - * @stable ICU 2.0
    - */
    - virtual UnicodeString& toLocalizedPattern(UnicodeString& result) const;
    -
    - /**
    - * Apply the given pattern to this Format object. A pattern is a
    - * short-hand specification for the various formatting properties.
    - * These properties can also be changed individually through the
    - * various setter methods.
    - * <P>
    - * There is no limit to integer digits are set
    - * by this routine, since that is the typical end-user desire;
    - * use setMaximumInteger if you want to set a real value.
    - * For negative numbers, use a second pattern, separated by a semicolon
    - * <pre>
    - * . Example "#,#00.0#" -> 1,234.56
    - * </pre>
    - * This means a minimum of 2 integer digits, 1 fraction digit, and
    - * a maximum of 2 fraction digits.
    - * <pre>
    - * . Example: "#,#00.0#;(#,#00.0#)" for negatives in parantheses.
    - * </pre>
    - * In negative patterns, the minimum and maximum counts are ignored;
    - * these are presumed to be set in the positive pattern.
    - *
    - * @param pattern The pattern to be applied.
    - * @param parseError Struct to recieve information on position
    - * of error if an error is encountered
    - * @param status Output param set to success/failure code on
    - * exit. If the pattern is invalid, this will be
    - * set to a failure result.
    - * @stable ICU 2.0
    - */
    - virtual void applyPattern(const UnicodeString& pattern,
    - UParseError& parseError,
    - UErrorCode& status);
    - /**
    - * Sets the pattern.
    - * @param pattern The pattern to be applied.
    - * @param status Output param set to success/failure code on
    - * exit. If the pattern is invalid, this will be
    - * set to a failure result.
    - * @stable ICU 2.0
    - */
    - virtual void applyPattern(const UnicodeString& pattern,
    - UErrorCode& status);
    -
    - /**
    - * Apply the given pattern to this Format object. The pattern
    - * is assumed to be in a localized notation. A pattern is a
    - * short-hand specification for the various formatting properties.
    - * These properties can also be changed individually through the
    - * various setter methods.
    - * <P>
    - * There is no limit to integer digits are set
    - * by this routine, since that is the typical end-user desire;
    - * use setMaximumInteger if you want to set a real value.
    - * For negative numbers, use a second pattern, separated by a semicolon
    - * <pre>
    - * . Example "#,#00.0#" -> 1,234.56
    - * </pre>
    - * This means a minimum of 2 integer digits, 1 fraction digit, and
    - * a maximum of 2 fraction digits.
    - *
    - * Example: "#,#00.0#;(#,#00.0#)" for negatives in parantheses.
    - *
    - * In negative patterns, the minimum and maximum counts are ignored;
    - * these are presumed to be set in the positive pattern.
    - *
    - * @param pattern The localized pattern to be applied.
    - * @param parseError Struct to recieve information on position
    - * of error if an error is encountered
    - * @param status Output param set to success/failure code on
    - * exit. If the pattern is invalid, this will be
    - * set to a failure result.
    - * @stable ICU 2.0
    - */
    - virtual void applyLocalizedPattern(const UnicodeString& pattern,
    - UParseError& parseError,
    - UErrorCode& status);
    -
    - /**
    - * Apply the given pattern to this Format object.
    - *
    - * @param pattern The localized pattern to be applied.
    - * @param status Output param set to success/failure code on
    - * exit. If the pattern is invalid, this will be
    - * set to a failure result.
    - * @stable ICU 2.0
    - */
    - virtual void applyLocalizedPattern(const UnicodeString& pattern,
    - UErrorCode& status);
    -
    -
    - /**
    - * Sets the maximum number of digits allowed in the integer portion of a
    - * number. This override limits the integer digit count to 309.
    - *
    - * @param newValue the new value of the maximum number of digits
    - * allowed in the integer portion of a number.
    - * @see NumberFormat#setMaximumIntegerDigits
    - * @stable ICU 2.0
    - */
    - virtual void setMaximumIntegerDigits(int32_t newValue);
    -
    - /**
    - * Sets the minimum number of digits allowed in the integer portion of a
    - * number. This override limits the integer digit count to 309.
    - *
    - * @param newValue the new value of the minimum number of digits
    - * allowed in the integer portion of a number.
    - * @see NumberFormat#setMinimumIntegerDigits
    - * @stable ICU 2.0
    - */
    - virtual void setMinimumIntegerDigits(int32_t newValue);
    -
    - /**
    - * Sets the maximum number of digits allowed in the fraction portion of a
    - * number. This override limits the fraction digit count to 340.
    - *
    - * @param newValue the new value of the maximum number of digits
    - * allowed in the fraction portion of a number.
    - * @see NumberFormat#setMaximumFractionDigits
    - * @stable ICU 2.0
    - */
    - virtual void setMaximumFractionDigits(int32_t newValue);
    -
    - /**
    - * Sets the minimum number of digits allowed in the fraction portion of a
    - * number. This override limits the fraction digit count to 340.
    - *
    - * @param newValue the new value of the minimum number of digits
    - * allowed in the fraction portion of a number.
    - * @see NumberFormat#setMinimumFractionDigits
    - * @stable ICU 2.0
    - */
    - virtual void setMinimumFractionDigits(int32_t newValue);
    -
    - /**
    - * Returns the minimum number of significant digits that will be
    - * displayed. This value has no effect unless areSignificantDigitsUsed()
    - * returns true.
    - * @return the fewest significant digits that will be shown
    - * @stable ICU 3.0
    - */
    - int32_t getMinimumSignificantDigits() const;
    -
    - /**
    - * Returns the maximum number of significant digits that will be
    - * displayed. This value has no effect unless areSignificantDigitsUsed()
    - * returns true.
    - * @return the most significant digits that will be shown
    - * @stable ICU 3.0
    - */
    - int32_t getMaximumSignificantDigits() const;
    -
    - /**
    - * Sets the minimum number of significant digits that will be
    - * displayed. If <code>min</code> is less than one then it is set
    - * to one. If the maximum significant digits count is less than
    - * <code>min</code>, then it is set to <code>min</code>. This
    - * value has no effect unless areSignificantDigits() returns true.
    - * @param min the fewest significant digits to be shown
    - * @stable ICU 3.0
    - */
    - void setMinimumSignificantDigits(int32_t min);
    -
    - /**
    - * Sets the maximum number of significant digits that will be
    - * displayed. If <code>max</code> is less than one then it is set
    - * to one. If the minimum significant digits count is greater
    - * than <code>max</code>, then it is set to <code>max</code>.
    - * This value has no effect unless areSignificantDigits() returns
    - * true.
    - * @param max the most significant digits to be shown
    - * @stable ICU 3.0
    - */
    - void setMaximumSignificantDigits(int32_t max);
    -
    - /**
    - * Returns true if significant digits are in use, or false if
    - * integer and fraction digit counts are in use.
    - * @return true if significant digits are in use
    - * @stable ICU 3.0
    - */
    - UBool areSignificantDigitsUsed() const;
    -
    - /**
    - * Sets whether significant digits are in use, or integer and
    - * fraction digit counts are in use.
    - * @param useSignificantDigits true to use significant digits, or
    - * false to use integer and fraction digit counts
    - * @stable ICU 3.0
    - */
    - void setSignificantDigitsUsed(UBool useSignificantDigits);
    -
    - public:
    - /**
    - * Sets the currency used to display currency
    - * amounts. This takes effect immediately, if this format is a
    - * currency format. If this format is not a currency format, then
    - * the currency is used if and when this object becomes a
    - * currency format through the application of a new pattern.
    - * @param theCurrency a 3-letter ISO code indicating new currency
    - * to use. It need not be null-terminated. May be the empty
    - * string or NULL to indicate no currency.
    - * @param ec input-output error code
    - * @stable ICU 3.0
    - */
    - virtual void setCurrency(const UChar* theCurrency, UErrorCode& ec);
    -
    - /**
    - * Sets the currency used to display currency amounts. See
    - * setCurrency(const UChar*, UErrorCode&).
    - * @deprecated ICU 3.0. Use setCurrency(const UChar*, UErrorCode&).
    - */
    - virtual void setCurrency(const UChar* theCurrency);
    -
    - /**
    - * The resource tags we use to retrieve decimal format data from
    - * locale resource bundles.
    - * @deprecated ICU 3.4. This string has no public purpose. Please don't use it.
    - */
    - static const char fgNumberPatterns[];
    -
    -public:
    -
    - /**
    - * Return the class ID for this class. This is useful only for
    - * comparing to a return value from getDynamicClassID(). For example:
    - * <pre>
    - * . Base* polymorphic_pointer = createPolymorphicObject();
    - * . if (polymorphic_pointer->getDynamicClassID() ==
    - * . Derived::getStaticClassID()) ...
    - * </pre>
    - * @return The class ID for all objects of this class.
    - * @stable ICU 2.0
    - */
    - static UClassID U_EXPORT2 getStaticClassID(void);
    -
    - /**
    - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override.
    - * This method is to implement a simple version of RTTI, since not all
    - * C++ compilers support genuine RTTI. Polymorphic operator==() and
    - * clone() methods call this method.
    - *
    - * @return The class ID for this object. All objects of a
    - * given class have the same class ID. Objects of
    - * other classes have different class IDs.
    - * @stable ICU 2.0
    - */
    - virtual UClassID getDynamicClassID(void) const;
    -
    -private:
    - DecimalFormat(); // default constructor not implemented
    -
    - int32_t precision(UBool isIntegral) const;
    -
    - /**
    - * Do real work of constructing a new DecimalFormat.
    - */
    - void construct(UErrorCode& status,
    - UParseError& parseErr,
    - const UnicodeString* pattern = 0,
    - DecimalFormatSymbols* symbolsToAdopt = 0
    - );
    -
    - /**
    - * Does the real work of generating a pattern.
    - *
    - * @param result Output param which will receive the pattern.
    - * Previous contents are deleted.
    - * @param localized TRUE return localized pattern.
    - * @return A reference to 'result'.
    - */
    - UnicodeString& toPattern(UnicodeString& result, UBool localized) const;
    -
    - /**
    - * Does the real work of applying a pattern.
    - * @param pattern The pattern to be applied.
    - * @param localized If true, the pattern is localized; else false.
    - * @param parseError Struct to recieve information on position
    - * of error if an error is encountered
    - * @param status Output param set to success/failure code on
    - * exit. If the pattern is invalid, this will be
    - * set to a failure result.
    - */
    - void applyPattern(const UnicodeString& pattern,
    - UBool localized,
    - UParseError& parseError,
    - UErrorCode& status);
    - /**
    - * Do the work of formatting a number, either a double or a long.
    - *
    - * @param appendTo Output parameter to receive result.
    - * Result is appended to existing contents.
    - * @param fieldPosition On input: an alignment field, if desired.
    - * On output: the offsets of the alignment field.
    - * @param digits the digits to be formatted.
    - * @param isInteger if TRUE format the digits as Integer.
    - * @return Reference to 'appendTo' parameter.
    - */
    - UnicodeString& subformat(UnicodeString& appendTo,
    - FieldPosition& fieldPosition,
    - DigitList& digits,
    - UBool isInteger) const;
    -
    - void parse(const UnicodeString& text,
    - Formattable& result,
    - ParsePosition& pos,
    - UBool parseCurrency) const;
    -
    - enum {
    - fgStatusInfinite,
    - fgStatusLength // Leave last in list.
    - } StatusFlags;
    -
    - UBool subparse(const UnicodeString& text, ParsePosition& parsePosition,
    - DigitList& digits, UBool* status,
    - UChar* currency) const;
    -
    - int32_t skipPadding(const UnicodeString& text, int32_t position) const;
    -
    - int32_t compareAffix(const UnicodeString& input,
    - int32_t pos,
    - UBool isNegative,
    - UBool isPrefix,
    - UChar* currency) const;
    -
    - static int32_t compareSimpleAffix(const UnicodeString& affix,
    - const UnicodeString& input,
    - int32_t pos,
    - UBool strict);
    -
    - static int32_t skipRuleWhiteSpace(const UnicodeString& text, int32_t pos);
    -
    - static int32_t skipUWhiteSpace(const UnicodeString& text, int32_t pos);
    -
    - int32_t compareComplexAffix(const UnicodeString& affixPat,
    - const UnicodeString& input,
    - int32_t pos,
    - UChar* currency) const;
    -
    - static int32_t match(const UnicodeString& text, int32_t pos, UChar32 ch);
    -
    - static int32_t match(const UnicodeString& text, int32_t pos, const UnicodeString& str);
    -
    - static UBool matchSymbol(const UnicodeString &text, int32_t position, int32_t length, const UnicodeString &symbol,
    - UnicodeSet *sset, UChar32 schar);
    -
    - /**
    - * Get a decimal format symbol.
    - * Returns a const reference to the symbol string.
    - * @internal
    - */
    - inline const UnicodeString &getConstSymbol(DecimalFormatSymbols::ENumberFormatSymbol symbol) const;
    -
    - int32_t appendAffix(UnicodeString& buf, double number,
    - UBool isNegative, UBool isPrefix) const;
    -
    - /**
    - * Append an affix to the given UnicodeString, using quotes if
    - * there are special characters. Single quotes themselves must be
    - * escaped in either case.
    - */
    - void appendAffixPattern(UnicodeString& appendTo, const UnicodeString& affix,
    - UBool localized) const;
    -
    - void appendAffixPattern(UnicodeString& appendTo,
    - const UnicodeString* affixPattern,
    - const UnicodeString& expAffix, UBool localized) const;
    -
    - void expandAffix(const UnicodeString& pattern,
    - UnicodeString& affix,
    - double number,
    - UBool doFormat) const;
    -
    - void expandAffixes();
    -
    - static double round(double a, ERoundingMode mode, UBool isNegative);
    -
    - void addPadding(UnicodeString& appendTo,
    - FieldPosition& fieldPosition,
    - int32_t prefixLen, int32_t suffixLen) const;
    -
    - UBool isGroupingPosition(int32_t pos) const;
    -
    - void setCurrencyForSymbols();
    -
    - /**
    - * Constants.
    - */
    - //static const int8_t fgMaxDigit; // The largest digit, in this case 9
    -
    - /*transient*/ //DigitList* fDigitList;
    -
    - UnicodeString fPositivePrefix;
    - UnicodeString fPositiveSuffix;
    - UnicodeString fNegativePrefix;
    - UnicodeString fNegativeSuffix;
    - UnicodeString* fPosPrefixPattern;
    - UnicodeString* fPosSuffixPattern;
    - UnicodeString* fNegPrefixPattern;
    - UnicodeString* fNegSuffixPattern;
    -
    - /**
    - * Formatter for ChoiceFormat-based currency names. If this field
    - * is not null, then delegate to it to format currency symbols.
    - * @since ICU 2.6
    - */
    - ChoiceFormat* fCurrencyChoice;
    -
    - int32_t fMultiplier;
    - int32_t fGroupingSize;
    - int32_t fGroupingSize2;
    - UBool fDecimalSeparatorAlwaysShown;
    - /*transient*/ UBool fIsCurrencyFormat;
    - DecimalFormatSymbols* fSymbols;
    -
    - UBool fUseSignificantDigits;
    - int32_t fMinSignificantDigits;
    - int32_t fMaxSignificantDigits;
    -
    - UBool fUseExponentialNotation;
    - int8_t fMinExponentDigits;
    - UBool fExponentSignAlwaysShown;
    -
    - /* If fRoundingIncrement is NULL, there is no rounding. Otherwise, round to
    - * fRoundingIncrement.getDouble(). Since this operation may be expensive,
    - * we cache the result in fRoundingDouble. All methods that update
    - * fRoundingIncrement also update fRoundingDouble. */
    - DigitList* fRoundingIncrement;
    - /*transient*/ double fRoundingDouble;
    - ERoundingMode fRoundingMode;
    -
    - UChar32 fPad;
    - int32_t fFormatWidth;
    - EPadPosition fPadPosition;
    -
    -protected:
    -
    - /**
    - * Returns the currency in effect for this formatter. Subclasses
    - * should override this method as needed. Unlike getCurrency(),
    - * this method should never return "".
    - * @result output parameter for null-terminated result, which must
    - * have a capacity of at least 4
    - * @internal
    - */
    - virtual void getEffectiveCurrency(UChar* result, UErrorCode& ec) const;
    -
    - /** number of integer digits
    - * @stable ICU 2.4
    - */
    - static const int32_t kDoubleIntegerDigits;
    - /** number of fraction digits
    - * @stable ICU 2.4
    - */
    - static const int32_t kDoubleFractionDigits;
    -
    - /**
    - * When someone turns on scientific mode, we assume that more than this
    - * number of digits is due to flipping from some other mode that didn't
    - * restrict the maximum, and so we force 1 integer digit. We don't bother
    - * to track and see if someone is using exponential notation with more than
    - * this number, it wouldn't make sense anyway, and this is just to make sure
    - * that someone turning on scientific mode with default settings doesn't
    - * end up with lots of zeroes.
    - * @stable ICU 2.8
    - */
    - static const int32_t kMaxScientificIntegerDigits;
    -};
    -
    -inline UnicodeString&
    -DecimalFormat::format(const Formattable& obj,
    - UnicodeString& appendTo,
    - UErrorCode& status) const {
    - // Don't use Format:: - use immediate base class only,
    - // in case immediate base modifies behavior later.
    - return NumberFormat::format(obj, appendTo, status);
    -}
    -
    -inline UnicodeString&
    -DecimalFormat::format(double number,
    - UnicodeString& appendTo) const {
    - FieldPosition pos(0);
    - return format(number, appendTo, pos);
    -}
    -
    -inline UnicodeString&
    -DecimalFormat::format(int32_t number,
    - UnicodeString& appendTo) const {
    - FieldPosition pos(0);
    - return format((int64_t)number, appendTo, pos);
    -}
    -
    -inline const UnicodeString &
    -DecimalFormat::getConstSymbol(DecimalFormatSymbols::ENumberFormatSymbol symbol) const {
    - return fSymbols->getConstSymbol(symbol);
    -}
    -
    -U_NAMESPACE_END
    -
    -#endif /* #if !UCONFIG_NO_FORMATTING */
    -
    -#endif // _DECIMFMT
    -//eof

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/docmain.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/docmain.h b/apps/couch_collate/platform/osx/icu/unicode/docmain.h
    deleted file mode 100644
    index 973ebea..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/docmain.h
    +++ /dev/null
    @@ -1,202 +0,0 @@
    -/********************************************************************
    - * COPYRIGHT:
    - * Copyright (c) 1997-2007, International Business Machines Corporation and
    - * others. All Rights Reserved.
    - *
    - * FILE NAME: DOCMAIN.h
    - *
    - * Date Name Description
    - * 12/11/2000 Ram Creation.
    - */
    -
    -/* This file contains documentation for Doxygen and doesnot have
    - * any significance with respect to C or C++ API
    - */
    -
    -/*! \mainpage
    - *
    - * \section API API Reference Usage
    - *
    - * <h3>C++ Programmers:</h3>
    - * <p>Use <a href="hierarchy.html">Class Hierarchy</a> or <a href="classes.html"> Alphabetical List </a>
    - * or <a href="annotated.html"> Compound List</a>
    - * to find the class you are interested in. For example, to find BreakIterator,
    - * you can go to the <a href="classes.html"> Alphabetical List</a>, then click on
    - * "BreakIterator". Once you are at the class, you will find an inheritance
    - * chart, a list of the public members, a detailed description of the class,
    - * then detailed member descriptions.</p>
    - *
    - * <h3>C Programmers:</h3>
    - * <p>Use <a href="#Module">Module List</a> or <a href="globals.html">File Members</a>
    - * to find a list of all the functions and constants.
    - * For example, to find BreakIterator functions you would click on
    - * <a href="files.html"> File List</a>,
    - * then find "ubrk.h" and click on it. You will find descriptions of Defines,
    - * Typedefs, Enumerations, and Functions, with detailed descriptions below.
    - * If you want to find a specific function, such as ubrk_next(), then click
    - * first on <a href="globals.html"> File Members</a>, then use your browser
    - * Find dialog to search for "ubrk_next()".</p>
    - *
    - *
    - * <h3>API References for Previous Releases</h3>
    - * <p>The API References for each release of ICU are also available as
    - * a zip file from the ICU
    - * <a href="http://icu-project.org/download/">download page</a>.</p>
    - *
    - * <hr>
    - *
    - * <h2>Architecture (User's Guide)</h2>
    - * <ul>
    - * <li><a href="http://icu-project.org/userguide/">Introduction</a></li>
    - * <li><a href="http://icu-project.org/userguide/i18n.html">Internationalization</a></li>
    - * <li><a href="http://icu-project.org/userguide/design.html">Locale Model</a></li>
    - * <li><a href="http://icu-project.org/userguide/design.html">Multithreading</a></li>
    - * <li><a href="http://icu-project.org/userguide/conversion.html">Conversion</a></li>
    - * <li><a href="http://icu-project.org/userguide/design.html">Error Handling</a></li>
    - * </ul>
    - *
    - * <hr>
    - *\htmlonly <h2><a NAME="Module">Module List</a></h2> \endhtmlonly
    - * <table border="1" cols="3" align="center">
    - * <tr>
    - * <td><strong>Module Name</strong></td>
    - * <td><strong>C</strong></td>
    - * <td><strong>C++</strong></td>
    - * </tr>
    - * <tr>
    - * <td>Basic Types and Constants</td>
    - * <td>utypes.h</td>
    - * <td>utypes.h</td>
    - * </tr>
    - * <tr>
    - * <td>Strings and Character Iteration</td>
    - * <td>ustring.h, utf.h</td>
    - * <td>UnicodeString, CharacterIterator</td>
    - * </tr>
    - * <tr>
    - * <td>Unicode Character<br>Properties and Names</td>
    - * <td>uchar.h</td>
    - * <td>uchar.h C API</td>
    - * </tr>
    - * <tr>
    - * <td>Codepage Conversion</td>
    - * <td>ucnv.h</td>
    - * <td>ucnv.h C API</td>
    - * </tr>
    - * <tr>
    - * <td>Unicode Text Compression</td>
    - * <td>ucnv.h <br> (encoding name "SCSU" or "BOCU-1")</td>
    - * <td>ucnv.h C API</td>
    - * </tr>
    - * <tr>
    - * <td>Locales </td>
    - * <td>uloc.h</a></td>
    - * <td>Locale</td>
    - * </tr>
    - * <tr>
    - * <td>Resource Bundles</td>
    - * <td>ures.h</td>
    - * <td>ResourceBundle</td>
    - * </tr>
    - * <tr>
    - * <td>Normalization</td>
    - * <td>unorm.h</td>
    - * <td>Normalizer</td>
    - * </tr>
    - * <tr>
    - * <td>Calendars</td>
    - * <td>ucal.h</td>
    - * <td>Calendar</td>
    - * </tr>
    - * <tr>
    - * <td>Date and Time Formatting</td>
    - * <td>udat.h</td>
    - * <td>DateFormat</td>
    - * </tr>
    - * <tr>
    - * <td>Message Formatting</td>
    - * <td>umsg.h</td>
    - * <td>MessageFormat</td>
    - * </tr>
    - * <tr>
    - * <td>Number Formatting</td>
    - * <td>unum.h</td>
    - * <td>NumberFormat</td>
    - * </tr>
    - * <tr>
    - * <td>Number Spellout <br> (Rule Based Number Formatting)</td>
    - * <td>unum.h <br> (use UNUM_SPELLOUT)</td>
    - * <td>RuleBasedNumberFormat</td>
    - * </tr>
    - * <tr>
    - * <td>Text Transformation <br> (Transliteration)</td>
    - * <td>utrans.h</td>
    - * <td>Transliterator</td>
    - * </tr>
    - * <tr>
    - * <td>Bidirectional Algorithm</td>
    - * <td>ubidi.h</td>
    - * <td>ubidi.h C API</td>
    - * </tr>
    - * <tr>
    - * <td>Arabic Shaping</td>
    - * <td>ushape.h</td>
    - * <td>ushape.h C API</td>
    - * </tr>
    - * <tr>
    - * <td>Collation</td>
    - * <td>ucol.h</td>
    - * <td>Collator</td>
    - * </tr>
    - * <tr>
    - * <td>String Searching</td>
    - * <td>usearch.h</td>
    - * <td>StringSearch</td>
    - * </tr>
    - * <tr>
    - * <td>Text Boundary Analysis <br> (Break Iteration)</td>
    - * <td>ubrk.h</td>
    - * <td>BreakIterator</td>
    - * </tr>
    - * <tr>
    - * <td>Unicode Set</td>
    - * <td>uset.h</td>
    - * <td>UnicodeSet</td>
    - * </tr>
    - * <tr>
    - * <td>Regular Expressions</td>
    - * <td>uregex.h</td>
    - * <td>RegexPattern, RegexMatcher</td>
    - * </tr>
    - * <tr>
    - * <td>StringPrep</td>
    - * <td>usprep.h</td>
    - * <td>usprep.h C API</td>
    - * </tr>
    - * <tr>
    - * <td>International Domain Names in Applications</td>
    - * <td>uidna.h</td>
    - * <td>uidna.h C API</td>
    - * </tr>
    - * <tr>
    - * <td>Universal Time Scale</td>
    - * <td>utmscale.h</td>
    - * <td>utmscale.h C API</td>
    - * </tr>
    - * <tr>
    - * <td>Basic Layout Engine Types and Constants</td>
    - * <td>(no C API)</td>
    - * <td>LETypes.h</td>
    - * </tr>
    - * <tr>
    - * <td>Complex Text Layout</td>
    - * <td>(no C API)</td>
    - * <td>LayoutEngine, ParagraphLayout</td>
    - * </tr>
    - * <tr>
    - * <td>ICU I/O</td>
    - * <td>ustdio.h</td>
    - * <td>ustream.h</td>
    - * </tr>
    - * </table>
    - */
  • Benoitc at Feb 13, 2014 at 6:14 pm
    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/ppalmos.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/ppalmos.h b/apps/couch_collate/platform/osx/icu/unicode/ppalmos.h
    deleted file mode 100644
    index c15b2ce..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/ppalmos.h
    +++ /dev/null
    @@ -1,273 +0,0 @@
    -/*
    -******************************************************************************
    -*
    -* Copyright (C) 1997-2006, International Business Machines
    -* Corporation and others. All Rights Reserved.
    -*
    -******************************************************************************
    -*
    -* FILE NAME : ppalmos.h
    -*
    -* Date Name Description
    -* 05/10/04 Ken Krugler Creation (copied from pwin32.h & modified).
    -******************************************************************************
    -*/
    -
    -#ifndef U_PPALMOS_H
    -#define U_PPALMOS_H
    -
    - /**
    - * \file
    - * \brief Configuration constants for the Palm OS platform
    - */
    -
    -/* Define the platform we're on. */
    -#ifndef U_PALMOS
    -#define U_PALMOS
    -#endif
    -
    -/* _MSC_VER is used to detect the Microsoft compiler. */
    -#if defined(_MSC_VER)
    -#define U_INT64_IS_LONG_LONG 0
    -#else
    -#define U_INT64_IS_LONG_LONG 1
    -#endif
    -
    -/* Define whether inttypes.h is available */
    -#ifndef U_HAVE_INTTYPES_H
    -#define U_HAVE_INTTYPES_H 1
    -#endif
    -
    -/*
    - * Define what support for C++ streams is available.
    - * If U_IOSTREAM_SOURCE is set to 199711, then <iostream> is available
    - * (1997711 is the date the ISO/IEC C++ FDIS was published), and then
    - * one should qualify streams using the std namespace in ICU header
    - * files.
    - * If U_IOSTREAM_SOURCE is set to 198506, then <iostream.h> is
    - * available instead (198506 is the date when Stroustrup published
    - * "An Extensible I/O Facility for C++" at the summer USENIX conference).
    - * If U_IOSTREAM_SOURCE is 0, then C++ streams are not available and
    - * support for them will be silently suppressed in ICU.
    - *
    - */
    -
    -#ifndef U_IOSTREAM_SOURCE
    -#define U_IOSTREAM_SOURCE 199711
    -#endif
    -
    -/* Determines whether specific types are available */
    -#ifndef U_HAVE_INT8_T
    -#define U_HAVE_INT8_T U_HAVE_INTTYPES_H
    -#endif
    -
    -#ifndef U_HAVE_UINT8_T
    -#define U_HAVE_UINT8_T U_HAVE_INTTYPES_H
    -#endif
    -
    -#ifndef U_HAVE_INT16_T
    -#define U_HAVE_INT16_T U_HAVE_INTTYPES_H
    -#endif
    -
    -#ifndef U_HAVE_UINT16_T
    -#define U_HAVE_UINT16_T U_HAVE_INTTYPES_H
    -#endif
    -
    -#ifndef U_HAVE_INT32_T
    -#define U_HAVE_INT32_T U_HAVE_INTTYPES_H
    -#endif
    -
    -#ifndef U_HAVE_UINT32_T
    -#define U_HAVE_UINT32_T U_HAVE_INTTYPES_H
    -#endif
    -
    -#ifndef U_HAVE_INT64_T
    -#define U_HAVE_INT64_T U_HAVE_INTTYPES_H
    -#endif
    -
    -#ifndef U_HAVE_UINT64_T
    -#define U_HAVE_UINT64_T U_HAVE_INTTYPES_H
    -#endif
    -
    -
    -/*===========================================================================*/
    -/* Generic data types */
    -/*===========================================================================*/
    -
    -/* If your platform does not have the <inttypes.h> header, you may
    - need to edit the typedefs below. */
    -#if U_HAVE_INTTYPES_H
    -#include <inttypes.h>
    -#else /* U_HAVE_INTTYPES_H */
    -
    -#if ! U_HAVE_INT8_T
    -typedef signed char int8_t;
    -#endif
    -
    -#if ! U_HAVE_UINT8_T
    -typedef unsigned char uint8_t;
    -#endif
    -
    -#if ! U_HAVE_INT16_T
    -typedef signed short int16_t;
    -#endif
    -
    -#if ! U_HAVE_UINT16_T
    -typedef unsigned short uint16_t;
    -#endif
    -
    -#if ! U_HAVE_INT32_T
    -typedef signed int int32_t;
    -#endif
    -
    -#if ! U_HAVE_UINT32_T
    -typedef unsigned int uint32_t;
    -#endif
    -
    -#if ! U_HAVE_INT64_T
    -#if U_INT64_IS_LONG_LONG
    - typedef signed long long int64_t;
    -#else
    - typedef signed __int64 int64_t;
    -#endif
    -#endif
    -
    -#if ! U_HAVE_UINT64_T
    -#if U_INT64_IS_LONG_LONG
    - typedef unsigned long long uint64_t;
    -#else
    - typedef unsigned __int64 uint64_t;
    -#endif
    -#endif
    -#endif
    -
    -/*===========================================================================*/
    -/* Compiler and environment features */
    -/*===========================================================================*/
    -
    -/* Define whether namespace is supported */
    -#ifndef U_HAVE_NAMESPACE
    -#define U_HAVE_NAMESPACE 1
    -#endif
    -
    -/* Determines the endianness of the platform */
    -#define U_IS_BIG_ENDIAN 0
    -
    -/* 1 or 0 to enable or disable threads. If undefined, default is: enable threads. */
    -#define ICU_USE_THREADS 1
    -
    -#ifndef U_DEBUG
    -#ifdef _DEBUG
    -#define U_DEBUG 1
    -#else
    -#define U_DEBUG 0
    -#endif
    -#endif
    -
    -#ifndef U_RELEASE
    -#ifdef NDEBUG
    -#define U_RELEASE 1
    -#else
    -#define U_RELEASE 0
    -#endif
    -#endif
    -
    -/* Determine whether to disable renaming or not. This overrides the
    - setting in umachine.h which is for all platforms. */
    -#ifndef U_DISABLE_RENAMING
    -#define U_DISABLE_RENAMING 0
    -#endif
    -
    -/* Determine whether to override new and delete. */
    -#ifndef U_OVERRIDE_CXX_ALLOCATION
    -#define U_OVERRIDE_CXX_ALLOCATION 1
    -#endif
    -/* Determine whether to override placement new and delete for STL. */
    -#ifndef U_HAVE_PLACEMENT_NEW
    -#define U_HAVE_PLACEMENT_NEW 0
    -#endif
    -/* Determine whether to override new and delete for MFC. */
    -#if !defined(U_HAVE_DEBUG_LOCATION_NEW) && defined(_MSC_VER)
    -#define U_HAVE_DEBUG_LOCATION_NEW 0
    -#endif
    -
    -/* Determine whether to enable tracing. */
    -#ifndef U_ENABLE_TRACING
    -#define U_ENABLE_TRACING 1
    -#endif
    -
    -/* Do we allow ICU users to use the draft APIs by default? */
    -#ifndef U_DEFAULT_SHOW_DRAFT
    -#define U_DEFAULT_SHOW_DRAFT 1
    -#endif
    -
    -/* Define the library suffix in a C syntax. */
    -#define U_HAVE_LIB_SUFFIX 0
    -#define U_LIB_SUFFIX_C_NAME
    -#define U_LIB_SUFFIX_C_NAME_STRING ""
    -
    -/*===========================================================================*/
    -/* Information about wchar support */
    -/*===========================================================================*/
    -
    -#define U_HAVE_WCHAR_H 1
    -#define U_SIZEOF_WCHAR_T 2
    -
    -#define U_HAVE_WCSCPY 0
    -
    -/*===========================================================================*/
    -/* Information about POSIX support */
    -/*===========================================================================*/
    -
    -
    -/* TODO: Fix Palm OS's determination of a timezone */
    -#if 0
    -#define U_TZSET _tzset
    -#endif
    -#if 0
    -#define U_TIMEZONE _timezone
    -#endif
    -#if 0
    -#define U_TZNAME _tzname
    -#endif
    -
    -#define U_HAVE_MMAP 0
    -#define U_HAVE_POPEN 0
    -
    -/*===========================================================================*/
    -/* Symbol import-export control */
    -/*===========================================================================*/
    -
    -#define U_EXPORT
    -#define U_EXPORT2
    -#define U_IMPORT
    -
    -/*===========================================================================*/
    -/* Code alignment and C function inlining */
    -/*===========================================================================*/
    -
    -#ifndef U_INLINE
    -# ifdef __cplusplus
    -# define U_INLINE inline
    -# else
    -# define U_INLINE __inline
    -# endif
    -#endif
    -
    -#if defined(_MSC_VER) && defined(_M_IX86)
    -#define U_ALIGN_CODE(val) __asm align val
    -#else
    -#define U_ALIGN_CODE(val)
    -#endif
    -
    -
    -/*===========================================================================*/
    -/* Programs used by ICU code */
    -/*===========================================================================*/
    -
    -#ifndef U_MAKE
    -#define U_MAKE "nmake"
    -#define U_MAKE_IS_NMAKE 1
    -#endif
    -
    -#endif

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/putil.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/putil.h b/apps/couch_collate/platform/osx/icu/unicode/putil.h
    deleted file mode 100644
    index 3304877..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/putil.h
    +++ /dev/null
    @@ -1,184 +0,0 @@
    -/*
    -******************************************************************************
    -*
    -* Copyright (C) 1997-2008, International Business Machines
    -* Corporation and others. All Rights Reserved.
    -*
    -******************************************************************************
    -*
    -* FILE NAME : putil.h
    -*
    -* Date Name Description
    -* 05/14/98 nos Creation (content moved here from utypes.h).
    -* 06/17/99 erm Added IEEE_754
    -* 07/22/98 stephen Added IEEEremainder, max, min, trunc
    -* 08/13/98 stephen Added isNegativeInfinity, isPositiveInfinity
    -* 08/24/98 stephen Added longBitsFromDouble
    -* 03/02/99 stephen Removed openFile(). Added AS400 support.
    -* 04/15/99 stephen Converted to C
    -* 11/15/99 helena Integrated S/390 changes for IEEE support.
    -* 01/11/00 helena Added u_getVersion.
    -******************************************************************************
    -*/
    -
    -#ifndef PUTIL_H
    -#define PUTIL_H
    -
    -#include "unicode/utypes.h"
    - /**
    - * \file
    - * \brief C API: Platform Utilities
    - */
    -
    -/* Define this to 1 if your platform supports IEEE 754 floating point,
    - to 0 if it does not. */
    -#ifndef IEEE_754
    -# define IEEE_754 1
    -#endif
    -
    -/*==========================================================================*/
    -/* Platform utilities */
    -/*==========================================================================*/
    -
    -/**
    - * Platform utilities isolates the platform dependencies of the
    - * libarary. For each platform which this code is ported to, these
    - * functions may have to be re-implemented.
    - */
    -
    -/**
    - * Return the ICU data directory.
    - * The data directory is where common format ICU data files (.dat files)
    - * are loaded from. Note that normal use of the built-in ICU
    - * facilities does not require loading of an external data file;
    - * unless you are adding custom data to ICU, the data directory
    - * does not need to be set.
    - *
    - * The data directory is determined as follows:
    - * If u_setDataDirectory() has been called, that is it, otherwise
    - * if the ICU_DATA environment variable is set, use that, otherwise
    - * If a data directory was specifed at ICU build time
    - * <code>( #define ICU_DATA_DIR "path" )</code>, use that,
    - * otherwise no data directory is available.
    - *
    - * @return the data directory, or an empty string ("") if no data directory has
    - * been specified.
    - *
    - * @stable ICU 2.0
    - */
    -U_STABLE const char* U_EXPORT2 u_getDataDirectory(void);
    -
    -/**
    - * Set the ICU data directory.
    - * The data directory is where common format ICU data files (.dat files)
    - * are loaded from. Note that normal use of the built-in ICU
    - * facilities does not require loading of an external data file;
    - * unless you are adding custom data to ICU, the data directory
    - * does not need to be set.
    - *
    - * This function should be called at most once in a process, before the
    - * first ICU operation (e.g., u_init()) that will require the loading of an
    - * ICU data file.
    - * This function is not thread-safe. Use it before calling ICU APIs from
    - * multiple threads.
    - *
    - * @param directory The directory to be set.
    - *
    - * @see u_init
    - * @stable ICU 2.0
    - */
    -U_STABLE void U_EXPORT2 u_setDataDirectory(const char *directory);
    -
    -/**
    - * Please use ucnv_getDefaultName() instead.
    - * Return the default codepage for this platform and locale.
    - * This function can call setlocale() on Unix platforms. Please read the
    - * platform documentation on setlocale() before calling this function.
    - * @return the default codepage for this platform
    - * @internal
    - */
    -U_INTERNAL const char* U_EXPORT2 uprv_getDefaultCodepage(void);
    -
    -/**
    - * Please use uloc_getDefault() instead.
    - * Return the default locale ID string by querying ths system, or
    - * zero if one cannot be found.
    - * This function can call setlocale() on Unix platforms. Please read the
    - * platform documentation on setlocale() before calling this function.
    - * @return the default locale ID string
    - * @internal
    - */
    -U_INTERNAL const char* U_EXPORT2 uprv_getDefaultLocaleID(void);
    -
    -/**
    - * Filesystem file and path separator characters.
    - * Example: '/' and ':' on Unix, '\\' and ';' on Windows.
    - * @stable ICU 2.0
    - */
    -#ifdef XP_MAC
    -# define U_FILE_SEP_CHAR ':'
    -# define U_FILE_ALT_SEP_CHAR ':'
    -# define U_PATH_SEP_CHAR ';'
    -# define U_FILE_SEP_STRING ":"
    -# define U_FILE_ALT_SEP_STRING ":"
    -# define U_PATH_SEP_STRING ";"
    -#elif defined(U_WINDOWS)
    -# define U_FILE_SEP_CHAR '\\'
    -# define U_FILE_ALT_SEP_CHAR '/'
    -# define U_PATH_SEP_CHAR ';'
    -# define U_FILE_SEP_STRING "\\"
    -# define U_FILE_ALT_SEP_STRING "/"
    -# define U_PATH_SEP_STRING ";"
    -#else
    -# define U_FILE_SEP_CHAR '/'
    -# define U_FILE_ALT_SEP_CHAR '/'
    -# define U_PATH_SEP_CHAR ':'
    -# define U_FILE_SEP_STRING "/"
    -# define U_FILE_ALT_SEP_STRING "/"
    -# define U_PATH_SEP_STRING ":"
    -#endif
    -
    -/**
    - * Convert char characters to UChar characters.
    - * This utility function is useful only for "invariant characters"
    - * that are encoded in the platform default encoding.
    - * They are a small, constant subset of the encoding and include
    - * just the latin letters, digits, and some punctuation.
    - * For details, see U_CHARSET_FAMILY.
    - *
    - * @param cs Input string, points to <code>length</code>
    - * character bytes from a subset of the platform encoding.
    - * @param us Output string, points to memory for <code>length</code>
    - * Unicode characters.
    - * @param length The number of characters to convert; this may
    - * include the terminating <code>NUL</code>.
    - *
    - * @see U_CHARSET_FAMILY
    - * @stable ICU 2.0
    - */
    -U_STABLE void U_EXPORT2
    -u_charsToUChars(const char *cs, UChar *us, int32_t length);
    -
    -/**
    - * Convert UChar characters to char characters.
    - * This utility function is useful only for "invariant characters"
    - * that can be encoded in the platform default encoding.
    - * They are a small, constant subset of the encoding and include
    - * just the latin letters, digits, and some punctuation.
    - * For details, see U_CHARSET_FAMILY.
    - *
    - * @param us Input string, points to <code>length</code>
    - * Unicode characters that can be encoded with the
    - * codepage-invariant subset of the platform encoding.
    - * @param cs Output string, points to memory for <code>length</code>
    - * character bytes.
    - * @param length The number of characters to convert; this may
    - * include the terminating <code>NUL</code>.
    - *
    - * @see U_CHARSET_FAMILY
    - * @stable ICU 2.0
    - */
    -U_STABLE void U_EXPORT2
    -u_UCharsToChars(const UChar *us, char *cs, int32_t length);
    -
    -#endif

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/pwin32.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/pwin32.h b/apps/couch_collate/platform/osx/icu/unicode/pwin32.h
    deleted file mode 100644
    index 9aad353..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/pwin32.h
    +++ /dev/null
    @@ -1,311 +0,0 @@
    -/*
    - ******************************************************************************
    - *
    - * Copyright (C) 1997-2007, International Business Machines
    - * Corporation and others. All Rights Reserved.
    - *
    - ******************************************************************************
    - *
    - * FILE NAME : platform.h
    - *
    - * Date Name Description
    - * 05/13/98 nos Creation (content moved here from ptypes.h).
    - * 03/02/99 stephen Added AS400 support.
    - * 03/30/99 stephen Added Linux support.
    - * 04/13/99 stephen Reworked for autoconf.
    - ******************************************************************************
    - */
    -
    - /**
    - * \file
    - * \brief Configuration constants for the Windows platform
    - */
    -
    -/* Define the platform we're on. */
    -#ifndef U_WINDOWS
    -#define U_WINDOWS
    -#endif
    -
    -#if defined(__BORLANDC__)
    -#define U_HAVE_PLACEMENT_NEW 0
    -#define U_HAVE_INTTYPES_H 1
    -#define __STDC_CONSTANT_MACROS
    -#endif
    -
    -/* _MSC_VER is used to detect the Microsoft compiler. */
    -#if defined(_MSC_VER)
    -#define U_INT64_IS_LONG_LONG 0
    -#else
    -#define U_INT64_IS_LONG_LONG 1
    -#endif
    -
    -/* Define whether inttypes.h is available */
    -#ifndef U_HAVE_INTTYPES_H
    -#define U_HAVE_INTTYPES_H 0
    -#endif
    -
    -/*
    - * Define what support for C++ streams is available.
    - * If U_IOSTREAM_SOURCE is set to 199711, then <iostream> is available
    - * (1997711 is the date the ISO/IEC C++ FDIS was published), and then
    - * one should qualify streams using the std namespace in ICU header
    - * files.
    - * If U_IOSTREAM_SOURCE is set to 198506, then <iostream.h> is
    - * available instead (198506 is the date when Stroustrup published
    - * "An Extensible I/O Facility for C++" at the summer USENIX conference).
    - * If U_IOSTREAM_SOURCE is 0, then C++ streams are not available and
    - * support for them will be silently suppressed in ICU.
    - *
    - */
    -
    -#ifndef U_IOSTREAM_SOURCE
    -#define U_IOSTREAM_SOURCE 199711
    -#endif
    -
    -/* Determines whether specific types are available */
    -#ifndef U_HAVE_INT8_T
    -#define U_HAVE_INT8_T U_HAVE_INTTYPES_H
    -#endif
    -
    -#ifndef U_HAVE_UINT8_T
    -#define U_HAVE_UINT8_T U_HAVE_INTTYPES_H
    -#endif
    -
    -#ifndef U_HAVE_INT16_T
    -#define U_HAVE_INT16_T U_HAVE_INTTYPES_H
    -#endif
    -
    -#ifndef U_HAVE_UINT16_T
    -#define U_HAVE_UINT16_T U_HAVE_INTTYPES_H
    -#endif
    -
    -#ifndef U_HAVE_INT32_T
    -#define U_HAVE_INT32_T U_HAVE_INTTYPES_H
    -#endif
    -
    -#ifndef U_HAVE_UINT32_T
    -#define U_HAVE_UINT32_T U_HAVE_INTTYPES_H
    -#endif
    -
    -#ifndef U_HAVE_INT64_T
    -#define U_HAVE_INT64_T U_HAVE_INTTYPES_H
    -#endif
    -
    -#ifndef U_HAVE_UINT64_T
    -#define U_HAVE_UINT64_T U_HAVE_INTTYPES_H
    -#endif
    -
    -/* Define 64 bit limits */
    -#if !U_INT64_IS_LONG_LONG
    -# ifndef INT64_C
    -# define INT64_C(x) ((int64_t)x)
    -# endif
    -# ifndef UINT64_C
    -# define UINT64_C(x) ((uint64_t)x)
    -# endif
    -/* else use the umachine.h definition */
    -#endif
    -
    -/*===========================================================================*/
    -/* Generic data types */
    -/*===========================================================================*/
    -
    -/* If your platform does not have the <inttypes.h> header, you may
    - need to edit the typedefs below. */
    -#if U_HAVE_INTTYPES_H
    -#include <inttypes.h>
    -#else /* U_HAVE_INTTYPES_H */
    -
    -#if ! U_HAVE_INT8_T
    -typedef signed char int8_t;
    -#endif
    -
    -#if ! U_HAVE_UINT8_T
    -typedef unsigned char uint8_t;
    -#endif
    -
    -#if ! U_HAVE_INT16_T
    -typedef signed short int16_t;
    -#endif
    -
    -#if ! U_HAVE_UINT16_T
    -typedef unsigned short uint16_t;
    -#endif
    -
    -#if ! U_HAVE_INT32_T
    -typedef signed int int32_t;
    -#endif
    -
    -#if ! U_HAVE_UINT32_T
    -typedef unsigned int uint32_t;
    -#endif
    -
    -#if ! U_HAVE_INT64_T
    -#if U_INT64_IS_LONG_LONG
    - typedef signed long long int64_t;
    -#else
    - typedef signed __int64 int64_t;
    -#endif
    -#endif
    -
    -#if ! U_HAVE_UINT64_T
    -#if U_INT64_IS_LONG_LONG
    - typedef unsigned long long uint64_t;
    -#else
    - typedef unsigned __int64 uint64_t;
    -#endif
    -#endif
    -#endif
    -
    -/*===========================================================================*/
    -/* Compiler and environment features */
    -/*===========================================================================*/
    -
    -/* Define whether namespace is supported */
    -#ifndef U_HAVE_NAMESPACE
    -#define U_HAVE_NAMESPACE 1
    -#endif
    -
    -/* Determines the endianness of the platform */
    -#define U_IS_BIG_ENDIAN 0
    -
    -/* 1 or 0 to enable or disable threads. If undefined, default is: enable threads. */
    -#define ICU_USE_THREADS 1
    -
    -/* On strong memory model CPUs (e.g. x86 CPUs), we use a safe & quick double check mutex lock. */
    -/*
    -Microsoft can define _M_IX86, _M_AMD64 (before Visual Studio 8) or _M_X64 (starting in Visual Studio 8).
    -Intel can define _M_IX86 or _M_X64
    -*/
    -#if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)))
    -#define UMTX_STRONG_MEMORY_MODEL 1
    -#endif
    -
    -#ifndef U_DEBUG
    -#ifdef _DEBUG
    -#define U_DEBUG 1
    -#else
    -#define U_DEBUG 0
    -#endif
    -#endif
    -
    -#ifndef U_RELEASE
    -#ifdef NDEBUG
    -#define U_RELEASE 1
    -#else
    -#define U_RELEASE 0
    -#endif
    -#endif
    -
    -/* Determine whether to disable renaming or not. This overrides the
    - setting in umachine.h which is for all platforms. */
    -#ifndef U_DISABLE_RENAMING
    -#define U_DISABLE_RENAMING 0
    -#endif
    -
    -/* Determine whether to override new and delete. */
    -#ifndef U_OVERRIDE_CXX_ALLOCATION
    -#define U_OVERRIDE_CXX_ALLOCATION 1
    -#endif
    -/* Determine whether to override placement new and delete for STL. */
    -#ifndef U_HAVE_PLACEMENT_NEW
    -#define U_HAVE_PLACEMENT_NEW 1
    -#endif
    -/* Determine whether to override new and delete for MFC. */
    -#if !defined(U_HAVE_DEBUG_LOCATION_NEW) && defined(_MSC_VER)
    -#define U_HAVE_DEBUG_LOCATION_NEW 1
    -#endif
    -
    -/* Determine whether to enable tracing. */
    -#ifndef U_ENABLE_TRACING
    -#define U_ENABLE_TRACING 0
    -#endif
    -
    -/* Do we allow ICU users to use the draft APIs by default? */
    -#ifndef U_DEFAULT_SHOW_DRAFT
    -#define U_DEFAULT_SHOW_DRAFT 1
    -#endif
    -
    -/* Define the library suffix in a C syntax. */
    -#define U_HAVE_LIB_SUFFIX 0
    -#define U_LIB_SUFFIX_C_NAME
    -#define U_LIB_SUFFIX_C_NAME_STRING ""
    -
    -/*===========================================================================*/
    -/* Information about wchar support */
    -/*===========================================================================*/
    -
    -#define U_HAVE_WCHAR_H 1
    -#define U_SIZEOF_WCHAR_T 2
    -
    -#define U_HAVE_WCSCPY 1
    -
    -/**
    - * \def U_DECLARE_UTF16
    - * Do not use this macro. Use the UNICODE_STRING or U_STRING_DECL macros
    - * instead.
    - * @internal
    - */
    -#if 1
    -#define U_DECLARE_UTF16(string) L ## string
    -#endif
    -
    -/*===========================================================================*/
    -/* Information about POSIX support */
    -/*===========================================================================*/
    -
    -#if 1
    -#define U_TZSET _tzset
    -#endif
    -#if 1
    -#define U_TIMEZONE _timezone
    -#endif
    -#if 1
    -#define U_TZNAME _tzname
    -#endif
    -#if 1
    -#define U_DAYLIGHT _daylight
    -#endif
    -
    -#define U_HAVE_MMAP 0
    -#define U_HAVE_POPEN 0
    -
    -/*===========================================================================*/
    -/* Symbol import-export control */
    -/*===========================================================================*/
    -
    -#ifdef U_STATIC_IMPLEMENTATION
    -#define U_EXPORT
    -#else
    -#define U_EXPORT __declspec(dllexport)
    -#endif
    -#define U_EXPORT2 __cdecl
    -#define U_IMPORT __declspec(dllimport)
    -
    -/*===========================================================================*/
    -/* Code alignment and C function inlining */
    -/*===========================================================================*/
    -
    -#ifndef U_INLINE
    -# ifdef __cplusplus
    -# define U_INLINE inline
    -# else
    -# define U_INLINE __inline
    -# endif
    -#endif
    -
    -#if defined(_MSC_VER) && defined(_M_IX86) && !defined(_MANAGED)
    -#define U_ALIGN_CODE(val) __asm align val
    -#else
    -#define U_ALIGN_CODE(val)
    -#endif
    -
    -
    -/*===========================================================================*/
    -/* Programs used by ICU code */
    -/*===========================================================================*/
    -
    -#ifndef U_MAKE
    -#define U_MAKE "nmake"
    -#define U_MAKE_IS_NMAKE 1
    -#endif

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/rbbi.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/rbbi.h b/apps/couch_collate/platform/osx/icu/unicode/rbbi.h
    deleted file mode 100644
    index 90ec6e6..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/rbbi.h
    +++ /dev/null
    @@ -1,722 +0,0 @@
    -/*
    -***************************************************************************
    -* Copyright (C) 1999-2008 International Business Machines Corporation *
    -* and others. All rights reserved. *
    -***************************************************************************
    -
    -**********************************************************************
    -* Date Name Description
    -* 10/22/99 alan Creation.
    -* 11/11/99 rgillam Complete port from Java.
    -**********************************************************************
    -*/
    -
    -#ifndef RBBI_H
    -#define RBBI_H
    -
    -#include "unicode/utypes.h"
    -
    -/**
    - * \file
    - * \brief C++ API: Rule Based Break Iterator
    - */
    -
    -#if !UCONFIG_NO_BREAK_ITERATION
    -
    -#include "unicode/brkiter.h"
    -#include "unicode/udata.h"
    -#include "unicode/parseerr.h"
    -#include "unicode/schriter.h"
    -#include "unicode/uchriter.h"
    -
    -
    -struct UTrie;
    -
    -U_NAMESPACE_BEGIN
    -
    -/** @internal */
    -struct RBBIDataHeader;
    -class RuleBasedBreakIteratorTables;
    -class BreakIterator;
    -class RBBIDataWrapper;
    -class UStack;
    -class LanguageBreakEngine;
    -class UnhandledEngine;
    -struct RBBIStateTable;
    -
    -
    -
    -
    -/**
    - *
    - * A subclass of BreakIterator whose behavior is specified using a list of rules.
    - * <p>Instances of this class are most commonly created by the factory methods of
    - * BreakIterator::createWordInstance(), BreakIterator::createLineInstance(), etc.,
    - * and then used via the abstract API in class BreakIterator</p>
    - *
    - * <p>See the ICU User Guide for information on Break Iterator Rules.</p>
    - *
    - * <p>This class is not intended to be subclassed. (Class DictionaryBasedBreakIterator
    - * is a subclass, but that relationship is effectively internal to the ICU
    - * implementation. The subclassing interface to RulesBasedBreakIterator is
    - * not part of the ICU API, and may not remain stable.</p>
    - *
    - */
    -class U_COMMON_API RuleBasedBreakIterator : public BreakIterator {
    -
    -protected:
    - /**
    - * The UText through which this BreakIterator accesses the text
    - * @internal
    - */
    - UText *fText;
    -
    - /**
    - * A character iterator that refers to the same text as the UText, above.
    - * Only included for compatibility with old API, which was based on CharacterIterators.
    - * Value may be adopted from outside, or one of fSCharIter or fDCharIter, below.
    - */
    - CharacterIterator *fCharIter;
    -
    - /**
    - * When the input text is provided by a UnicodeString, this will point to
    - * a characterIterator that wraps that data. Needed only for the
    - * implementation of getText(), a backwards compatibility issue.
    - */
    - StringCharacterIterator *fSCharIter;
    -
    - /**
    - * When the input text is provided by a UText, this
    - * dummy CharacterIterator over an empty string will
    - * be returned from getText()
    - */
    - UCharCharacterIterator *fDCharIter;
    -
    - /**
    - * The rule data for this BreakIterator instance
    - * @internal
    - */
    - RBBIDataWrapper *fData;
    -
    - /** Index of the Rule {tag} values for the most recent match.
    - * @internal
    - */
    - int32_t fLastRuleStatusIndex;
    -
    - /**
    - * Rule tag value valid flag.
    - * Some iterator operations don't intrinsically set the correct tag value.
    - * This flag lets us lazily compute the value if we are ever asked for it.
    - * @internal
    - */
    - UBool fLastStatusIndexValid;
    -
    - /**
    - * Counter for the number of characters encountered with the "dictionary"
    - * flag set.
    - * @internal
    - */
    - uint32_t fDictionaryCharCount;
    -
    - /**
    - * When a range of characters is divided up using the dictionary, the break
    - * positions that are discovered are stored here, preventing us from having
    - * to use either the dictionary or the state table again until the iterator
    - * leaves this range of text. Has the most impact for line breaking.
    - * @internal
    - */
    - int32_t* fCachedBreakPositions;
    -
    - /**
    - * The number of elements in fCachedBreakPositions
    - * @internal
    - */
    - int32_t fNumCachedBreakPositions;
    -
    - /**
    - * if fCachedBreakPositions is not null, this indicates which item in the
    - * cache the current iteration position refers to
    - * @internal
    - */
    - int32_t fPositionInCache;
    -
    - /**
    - *
    - * If present, UStack of LanguageBreakEngine objects that might handle
    - * dictionary characters. Searched from top to bottom to find an object to
    - * handle a given character.
    - * @internal
    - */
    - UStack *fLanguageBreakEngines;
    -
    - /**
    - *
    - * If present, the special LanguageBreakEngine used for handling
    - * characters that are in the dictionary set, but not handled by any
    - * LangugageBreakEngine.
    - * @internal
    - */
    - UnhandledEngine *fUnhandledBreakEngine;
    -
    - /**
    - *
    - * The type of the break iterator, or -1 if it has not been set.
    - * @internal
    - */
    - int32_t fBreakType;
    -
    -protected:
    - //=======================================================================
    - // constructors
    - //=======================================================================
    -
    - /**
    - * Constant to be used in the constructor
    - * RuleBasedBreakIterator(RBBIDataHeader*, EDontAdopt, UErrorCode &);
    - * which does not adopt the memory indicated by the RBBIDataHeader*
    - * parameter.
    - *
    - * @internal
    - */
    - enum EDontAdopt {
    - kDontAdopt
    - };
    -
    - /**
    - * Constructor from a flattened set of RBBI data in malloced memory.
    - * RulesBasedBreakIterators built from a custom set of rules
    - * are created via this constructor; the rules are compiled
    - * into memory, then the break iterator is constructed here.
    - *
    - * The break iterator adopts the memory, and will
    - * free it when done.
    - * @internal
    - */
    - RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode &status);
    -
    - /**
    - * Constructor from a flattened set of RBBI data in memory which need not
    - * be malloced (e.g. it may be a memory-mapped file, etc.).
    - *
    - * This version does not adopt the memory, and does not
    - * free it when done.
    - * @internal
    - */
    - RuleBasedBreakIterator(const RBBIDataHeader* data, enum EDontAdopt dontAdopt, UErrorCode &status);
    -
    -
    - friend class RBBIRuleBuilder;
    - /** @internal */
    - friend class BreakIterator;
    -
    -
    -
    -public:
    -
    - /** Default constructor. Creates an empty shell of an iterator, with no
    - * rules or text to iterate over. Object can subsequently be assigned to.
    - * @stable ICU 2.2
    - */
    - RuleBasedBreakIterator();
    -
    - /**
    - * Copy constructor. Will produce a break iterator with the same behavior,
    - * and which iterates over the same text, as the one passed in.
    - * @param that The RuleBasedBreakIterator passed to be copied
    - * @stable ICU 2.0
    - */
    - RuleBasedBreakIterator(const RuleBasedBreakIterator& that);
    -
    - /**
    - * Construct a RuleBasedBreakIterator from a set of rules supplied as a string.
    - * @param rules The break rules to be used.
    - * @param parseError In the event of a syntax error in the rules, provides the location
    - * within the rules of the problem.
    - * @param status Information on any errors encountered.
    - * @stable ICU 2.2
    - */
    - RuleBasedBreakIterator( const UnicodeString &rules,
    - UParseError &parseError,
    - UErrorCode &status);
    -
    -
    - /**
    - * This constructor uses the udata interface to create a BreakIterator
    - * whose internal tables live in a memory-mapped file. "image" is an
    - * ICU UDataMemory handle for the pre-compiled break iterator tables.
    - * @param image handle to the memory image for the break iterator data.
    - * Ownership of the UDataMemory handle passes to the Break Iterator,
    - * which will be responsible for closing it when it is no longer needed.
    - * @param status Information on any errors encountered.
    - * @see udata_open
    - * @see #getBinaryRules
    - * @stable ICU 2.8
    - */
    - RuleBasedBreakIterator(UDataMemory* image, UErrorCode &status);
    -
    - /**
    - * Destructor
    - * @stable ICU 2.0
    - */
    - virtual ~RuleBasedBreakIterator();
    -
    - /**
    - * Assignment operator. Sets this iterator to have the same behavior,
    - * and iterate over the same text, as the one passed in.
    - * @param that The RuleBasedBreakItertor passed in
    - * @return the newly created RuleBasedBreakIterator
    - * @stable ICU 2.0
    - */
    - RuleBasedBreakIterator& operator=(const RuleBasedBreakIterator& that);
    -
    - /**
    - * Equality operator. Returns TRUE if both BreakIterators are of the
    - * same class, have the same behavior, and iterate over the same text.
    - * @param that The BreakIterator to be compared for equality
    - * @return TRUE if both BreakIterators are of the
    - * same class, have the same behavior, and iterate over the same text.
    - * @stable ICU 2.0
    - */
    - virtual UBool operator==(const BreakIterator& that) const;
    -
    - /**
    - * Not-equal operator. If operator== returns TRUE, this returns FALSE,
    - * and vice versa.
    - * @param that The BreakIterator to be compared for inequality
    - * @return TRUE if both BreakIterators are not same.
    - * @stable ICU 2.0
    - */
    - UBool operator!=(const BreakIterator& that) const;
    -
    - /**
    - * Returns a newly-constructed RuleBasedBreakIterator with the same
    - * behavior, and iterating over the same text, as this one.
    - * Differs from the copy constructor in that it is polymorphic, and
    - * will correctly clone (copy) a derived class.
    - * clone() is thread safe. Multiple threads may simultaeneously
    - * clone the same source break iterator.
    - * @return a newly-constructed RuleBasedBreakIterator
    - * @stable ICU 2.0
    - */
    - virtual BreakIterator* clone() const;
    -
    - /**
    - * Compute a hash code for this BreakIterator
    - * @return A hash code
    - * @stable ICU 2.0
    - */
    - virtual int32_t hashCode(void) const;
    -
    - /**
    - * Returns the description used to create this iterator
    - * @return the description used to create this iterator
    - * @stable ICU 2.0
    - */
    - virtual const UnicodeString& getRules(void) const;
    -
    - //=======================================================================
    - // BreakIterator overrides
    - //=======================================================================
    -
    - /**
    - * <p>
    - * Return a CharacterIterator over the text being analyzed.
    - * The returned character iterator is owned by the break iterator, and must
    - * not be deleted by the caller. Repeated calls to this function may
    - * return the same CharacterIterator.
    - * </p>
    - * <p>
    - * The returned character iterator must not be used concurrently with
    - * the break iterator. If concurrent operation is needed, clone the
    - * returned character iterator first and operate on the clone.
    - * </p>
    - * <p>
    - * When the break iterator is operating on text supplied via a UText,
    - * this function will fail. Lacking any way to signal failures, it
    - * returns an CharacterIterator containing no text.
    - * The function getUText() provides similar functionality,
    - * is reliable, and is more efficient.
    - * </p>
    - *
    - * TODO: deprecate this function?
    - *
    - * @return An iterator over the text being analyzed.
    - * @stable ICU 2.0
    - */
    - virtual CharacterIterator& getText(void) const;
    -
    -
    - /**
    - * Get a UText for the text being analyzed.
    - * The returned UText is a shallow clone of the UText used internally
    - * by the break iterator implementation. It can safely be used to
    - * access the text without impacting any break iterator operations,
    - * but the underlying text itself must not be altered.
    - *
    - * @param fillIn A UText to be filled in. If NULL, a new UText will be
    - * allocated to hold the result.
    - * @param status receives any error codes.
    - * @return The current UText for this break iterator. If an input
    - * UText was provided, it will always be returned.
    - * @stable ICU 3.4
    - */
    - virtual UText *getUText(UText *fillIn, UErrorCode &status) const;
    -
    - /**
    - * Set the iterator to analyze a new piece of text. This function resets
    - * the current iteration position to the beginning of the text.
    - * @param newText An iterator over the text to analyze. The BreakIterator
    - * takes ownership of the character iterator. The caller MUST NOT delete it!
    - * @stable ICU 2.0
    - */
    - virtual void adoptText(CharacterIterator* newText);
    -
    - /**
    - * Set the iterator to analyze a new piece of text. This function resets
    - * the current iteration position to the beginning of the text.
    - * @param newText The text to analyze.
    - * @stable ICU 2.0
    - */
    - virtual void setText(const UnicodeString& newText);
    -
    - /**
    - * Reset the break iterator to operate over the text represented by
    - * the UText. The iterator position is reset to the start.
    - *
    - * This function makes a shallow clone of the supplied UText. This means
    - * that the caller is free to immediately close or otherwise reuse the
    - * Utext that was passed as a parameter, but that the underlying text itself
    - * must not be altered while being referenced by the break iterator.
    - *
    - * @param text The UText used to change the text.
    - * @param status Receives any error codes.
    - * @stable ICU 3.4
    - */
    - virtual void setText(UText *text, UErrorCode &status);
    -
    - /**
    - * Sets the current iteration position to the beginning of the text.
    - * @return The offset of the beginning of the text.
    - * @stable ICU 2.0
    - */
    - virtual int32_t first(void);
    -
    - /**
    - * Sets the current iteration position to the end of the text.
    - * @return The text's past-the-end offset.
    - * @stable ICU 2.0
    - */
    - virtual int32_t last(void);
    -
    - /**
    - * Advances the iterator either forward or backward the specified number of steps.
    - * Negative values move backward, and positive values move forward. This is
    - * equivalent to repeatedly calling next() or previous().
    - * @param n The number of steps to move. The sign indicates the direction
    - * (negative is backwards, and positive is forwards).
    - * @return The character offset of the boundary position n boundaries away from
    - * the current one.
    - * @stable ICU 2.0
    - */
    - virtual int32_t next(int32_t n);
    -
    - /**
    - * Advances the iterator to the next boundary position.
    - * @return The position of the first boundary after this one.
    - * @stable ICU 2.0
    - */
    - virtual int32_t next(void);
    -
    - /**
    - * Moves the iterator backwards, to the last boundary preceding this one.
    - * @return The position of the last boundary position preceding this one.
    - * @stable ICU 2.0
    - */
    - virtual int32_t previous(void);
    -
    - /**
    - * Sets the iterator to refer to the first boundary position following
    - * the specified position.
    - * @param offset The position from which to begin searching for a break position.
    - * @return The position of the first break after the current position.
    - * @stable ICU 2.0
    - */
    - virtual int32_t following(int32_t offset);
    -
    - /**
    - * Sets the iterator to refer to the last boundary position before the
    - * specified position.
    - * @param offset The position to begin searching for a break from.
    - * @return The position of the last boundary before the starting position.
    - * @stable ICU 2.0
    - */
    - virtual int32_t preceding(int32_t offset);
    -
    - /**
    - * Returns true if the specfied position is a boundary position. As a side
    - * effect, leaves the iterator pointing to the first boundary position at
    - * or after "offset".
    - * @param offset the offset to check.
    - * @return True if "offset" is a boundary position.
    - * @stable ICU 2.0
    - */
    - virtual UBool isBoundary(int32_t offset);
    -
    - /**
    - * Returns the current iteration position.
    - * @return The current iteration position.
    - * @stable ICU 2.0
    - */
    - virtual int32_t current(void) const;
    -
    -
    - /**
    - * Return the status tag from the break rule that determined the most recently
    - * returned break position. For break rules that do not specify a
    - * status, a default value of 0 is returned. If more than one break rule
    - * would cause a boundary to be located at some position in the text,
    - * the numerically largest of the applicable status values is returned.
    - * <p>
    - * Of the standard types of ICU break iterators, only word break and
    - * line break provide status values. The values are defined in
    - * the header file ubrk.h. For Word breaks, the status allows distinguishing between words
    - * that contain alphabetic letters, "words" that appear to be numbers,
    - * punctuation and spaces, words containing ideographic characters, and
    - * more. For Line Break, the status distinguishes between hard (mandatory) breaks
    - * and soft (potential) break positions.
    - * <p>
    - * <code>getRuleStatus()</code> can be called after obtaining a boundary
    - * position from <code>next()</code>, <code>previous()</code>, or
    - * any other break iterator functions that returns a boundary position.
    - * <p>
    - * When creating custom break rules, one is free to define whatever
    - * status values may be convenient for the application.
    - * <p>
    - * Note: this function is not thread safe. It should not have been
    - * declared const, and the const remains only for compatibility
    - * reasons. (The function is logically const, but not bit-wise const).
    - * <p>
    - * @return the status from the break rule that determined the most recently
    - * returned break position.
    - *
    - * @see UWordBreak
    - * @stable ICU 2.2
    - */
    - virtual int32_t getRuleStatus() const;
    -
    - /**
    - * Get the status (tag) values from the break rule(s) that determined the most
    - * recently returned break position.
    - * <p>
    - * The returned status value(s) are stored into an array provided by the caller.
    - * The values are stored in sorted (ascending) order.
    - * If the capacity of the output array is insufficient to hold the data,
    - * the output will be truncated to the available length, and a
    - * U_BUFFER_OVERFLOW_ERROR will be signaled.
    - *
    - * @param fillInVec an array to be filled in with the status values.
    - * @param capacity the length of the supplied vector. A length of zero causes
    - * the function to return the number of status values, in the
    - * normal way, without attemtping to store any values.
    - * @param status receives error codes.
    - * @return The number of rule status values from rules that determined
    - * the most recent boundary returned by the break iterator.
    - * In the event of a U_BUFFER_OVERFLOW_ERROR, the return value
    - * is the total number of status values that were available,
    - * not the reduced number that were actually returned.
    - * @see getRuleStatus
    - * @stable ICU 3.0
    - */
    - virtual int32_t getRuleStatusVec(int32_t *fillInVec, int32_t capacity, UErrorCode &status);
    -
    - /**
    - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override.
    - * This method is to implement a simple version of RTTI, since not all
    - * C++ compilers support genuine RTTI. Polymorphic operator==() and
    - * clone() methods call this method.
    - *
    - * @return The class ID for this object. All objects of a
    - * given class have the same class ID. Objects of
    - * other classes have different class IDs.
    - * @stable ICU 2.0
    - */
    - virtual UClassID getDynamicClassID(void) const;
    -
    - /**
    - * Returns the class ID for this class. This is useful only for
    - * comparing to a return value from getDynamicClassID(). For example:
    - *
    - * Base* polymorphic_pointer = createPolymorphicObject();
    - * if (polymorphic_pointer->getDynamicClassID() ==
    - * Derived::getStaticClassID()) ...
    - *
    - * @return The class ID for all objects of this class.
    - * @stable ICU 2.0
    - */
    - static UClassID U_EXPORT2 getStaticClassID(void);
    -
    - /*
    - * Create a clone (copy) of this break iterator in memory provided
    - * by the caller. The idea is to increase performance by avoiding
    - * a storage allocation. Use of this functoin is NOT RECOMMENDED.
    - * Performance gains are minimal, and correct buffer management is
    - * tricky. Use clone() instead.
    - *
    - * @param stackBuffer The pointer to the memory into which the cloned object
    - * should be placed. If NULL, allocate heap memory
    - * for the cloned object.
    - * @param BufferSize The size of the buffer. If zero, return the required
    - * buffer size, but do not clone the object. If the
    - * size was too small (but not zero), allocate heap
    - * storage for the cloned object.
    - *
    - * @param status Error status. U_SAFECLONE_ALLOCATED_WARNING will be
    - * returned if the the provided buffer was too small, and
    - * the clone was therefore put on the heap.
    - *
    - * @return Pointer to the clone object. This may differ from the stackBuffer
    - * address if the byte alignment of the stack buffer was not suitable
    - * or if the stackBuffer was too small to hold the clone.
    - * @stable ICU 2.0
    - */
    - virtual BreakIterator * createBufferClone(void *stackBuffer,
    - int32_t &BufferSize,
    - UErrorCode &status);
    -
    -
    - /**
    - * Return the binary form of compiled break rules,
    - * which can then be used to create a new break iterator at some
    - * time in the future. Creating a break iterator from pre-compiled rules
    - * is much faster than building one from the source form of the
    - * break rules.
    - *
    - * The binary data can only be used with the same version of ICU
    - * and on the same platform type (processor endian-ness)
    - *
    - * @param length Returns the length of the binary data. (Out paramter.)
    - *
    - * @return A pointer to the binary (compiled) rule data. The storage
    - * belongs to the RulesBasedBreakIterator object, not the
    - * caller, and must not be modified or deleted.
    - * @internal
    - */
    - virtual const uint8_t *getBinaryRules(uint32_t &length);
    -
    -
    -protected:
    - //=======================================================================
    - // implementation
    - //=======================================================================
    - /**
    - * Dumps caches and performs other actions associated with a complete change
    - * in text or iteration position.
    - * @internal
    - */
    - virtual void reset(void);
    -
    -#if 0
    - /**
    - * Return true if the category lookup for this char
    - * indicates that it is in the set of dictionary lookup chars.
    - * This function is intended for use by dictionary based break iterators.
    - * @return true if the category lookup for this char
    - * indicates that it is in the set of dictionary lookup chars.
    - * @internal
    - */
    - virtual UBool isDictionaryChar(UChar32);
    -
    - /**
    - * Get the type of the break iterator.
    - * @internal
    - */
    - virtual int32_t getBreakType() const;
    -#endif
    -
    - /**
    - * Set the type of the break iterator.
    - * @internal
    - */
    - virtual void setBreakType(int32_t type);
    -
    - /**
    - * Common initialization function, used by constructors and bufferClone.
    - * (Also used by DictionaryBasedBreakIterator::createBufferClone().)
    - * @internal
    - */
    - void init();
    -
    -private:
    -
    - /**
    - * This method backs the iterator back up to a "safe position" in the text.
    - * This is a position that we know, without any context, must be a break position.
    - * The various calling methods then iterate forward from this safe position to
    - * the appropriate position to return. (For more information, see the description
    - * of buildBackwardsStateTable() in RuleBasedBreakIterator.Builder.)
    - * @param statetable state table used of moving backwards
    - * @internal
    - */
    - int32_t handlePrevious(const RBBIStateTable *statetable);
    -
    - /**
    - * This method is the actual implementation of the next() method. All iteration
    - * vectors through here. This method initializes the state machine to state 1
    - * and advances through the text character by character until we reach the end
    - * of the text or the state machine transitions to state 0. We update our return
    - * value every time the state machine passes through a possible end state.
    - * @param statetable state table used of moving forwards
    - * @internal
    - */
    - int32_t handleNext(const RBBIStateTable *statetable);
    -
    -protected:
    -
    - /**
    - * This is the function that actually implements dictionary-based
    - * breaking. Covering at least the range from startPos to endPos,
    - * it checks for dictionary characters, and if it finds them determines
    - * the appropriate object to deal with them. It may cache found breaks in
    - * fCachedBreakPositions as it goes. It may well also look at text outside
    - * the range startPos to endPos.
    - * If going forward, endPos is the normal Unicode break result, and
    - * if goind in reverse, startPos is the normal Unicode break result
    - * @param startPos The start position of a range of text
    - * @param endPos The end position of a range of text
    - * @param reverse The call is for the reverse direction
    - * @internal
    - */
    - int32_t checkDictionary(int32_t startPos, int32_t endPos, UBool reverse);
    -
    -private:
    -
    - /**
    - * This function returns the appropriate LanguageBreakEngine for a
    - * given character c.
    - * @param c A character in the dictionary set
    - * @internal
    - */
    - const LanguageBreakEngine *getLanguageBreakEngine(UChar32 c);
    -
    - /**
    - * @internal
    - */
    - void makeRuleStatusValid();
    -
    -};
    -
    -//------------------------------------------------------------------------------
    -//
    -// Inline Functions Definitions ...
    -//
    -//------------------------------------------------------------------------------
    -
    -inline UBool RuleBasedBreakIterator::operator!=(const BreakIterator& that) const {
    - return !operator==(that);
    -}
    -
    -U_NAMESPACE_END
    -
    -#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
    -
    -#endif
  • Benoitc at Feb 13, 2014 at 6:14 pm
    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/urename.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/urename.h b/apps/couch_collate/platform/osx/icu/unicode/urename.h
    deleted file mode 100644
    index 5282958..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/urename.h
    +++ /dev/null
    @@ -1,1775 +0,0 @@
    -/*
    -*******************************************************************************
    -* Copyright (C) 2002-2008, International Business Machines
    -* Corporation and others. All Rights Reserved.
    -*******************************************************************************
    -*
    -* file name: urename.h
    -* encoding: US-ASCII
    -* tab size: 8 (not used)
    -* indentation:4
    -*
    -* Created by: Perl script written by Vladimir Weinstein
    -*
    -* Contains data for renaming ICU exports.
    -* Gets included by umachine.h
    -*
    -* THIS FILE IS MACHINE-GENERATED, DON'T PLAY WITH IT IF YOU DON'T KNOW WHAT
    -* YOU ARE DOING, OTHERWISE VERY BAD THINGS WILL HAPPEN!
    -*/
    -
    -#ifndef URENAME_H
    -#define URENAME_H
    -
    -/* Uncomment the following line to disable renaming on platforms
    - that do not use Autoconf. */
    -/* #define U_DISABLE_RENAMING 1 */
    -
    -#if !U_DISABLE_RENAMING
    -
    -/* C exports renaming data */
    -
    -#define T_CString_int64ToString T_CString_int64ToString_4_0
    -#define T_CString_integerToString T_CString_integerToString_4_0
    -#define T_CString_stricmp T_CString_stricmp_4_0
    -#define T_CString_stringToInteger T_CString_stringToInteger_4_0
    -#define T_CString_strnicmp T_CString_strnicmp_4_0
    -#define T_CString_toLowerCase T_CString_toLowerCase_4_0
    -#define T_CString_toUpperCase T_CString_toUpperCase_4_0
    -#define UCNV_FROM_U_CALLBACK_ESCAPE UCNV_FROM_U_CALLBACK_ESCAPE_4_0
    -#define UCNV_FROM_U_CALLBACK_SKIP UCNV_FROM_U_CALLBACK_SKIP_4_0
    -#define UCNV_FROM_U_CALLBACK_STOP UCNV_FROM_U_CALLBACK_STOP_4_0
    -#define UCNV_FROM_U_CALLBACK_SUBSTITUTE UCNV_FROM_U_CALLBACK_SUBSTITUTE_4_0
    -#define UCNV_TO_U_CALLBACK_ESCAPE UCNV_TO_U_CALLBACK_ESCAPE_4_0
    -#define UCNV_TO_U_CALLBACK_SKIP UCNV_TO_U_CALLBACK_SKIP_4_0
    -#define UCNV_TO_U_CALLBACK_STOP UCNV_TO_U_CALLBACK_STOP_4_0
    -#define UCNV_TO_U_CALLBACK_SUBSTITUTE UCNV_TO_U_CALLBACK_SUBSTITUTE_4_0
    -#define UDataMemory_createNewInstance UDataMemory_createNewInstance_4_0
    -#define UDataMemory_init UDataMemory_init_4_0
    -#define UDataMemory_isLoaded UDataMemory_isLoaded_4_0
    -#define UDataMemory_normalizeDataPointer UDataMemory_normalizeDataPointer_4_0
    -#define UDataMemory_setData UDataMemory_setData_4_0
    -#define UDatamemory_assign UDatamemory_assign_4_0
    -#define _ASCIIData _ASCIIData_4_0
    -#define _Bocu1Data _Bocu1Data_4_0
    -#define _CESU8Data _CESU8Data_4_0
    -#define _HZData _HZData_4_0
    -#define _IMAPData _IMAPData_4_0
    -#define _ISCIIData _ISCIIData_4_0
    -#define _ISO2022Data _ISO2022Data_4_0
    -#define _LMBCSData1 _LMBCSData1_4_0
    -#define _LMBCSData11 _LMBCSData11_4_0
    -#define _LMBCSData16 _LMBCSData16_4_0
    -#define _LMBCSData17 _LMBCSData17_4_0
    -#define _LMBCSData18 _LMBCSData18_4_0
    -#define _LMBCSData19 _LMBCSData19_4_0
    -#define _LMBCSData2 _LMBCSData2_4_0
    -#define _LMBCSData3 _LMBCSData3_4_0
    -#define _LMBCSData4 _LMBCSData4_4_0
    -#define _LMBCSData5 _LMBCSData5_4_0
    -#define _LMBCSData6 _LMBCSData6_4_0
    -#define _LMBCSData8 _LMBCSData8_4_0
    -#define _Latin1Data _Latin1Data_4_0
    -#define _MBCSData _MBCSData_4_0
    -#define _SCSUData _SCSUData_4_0
    -#define _UTF16BEData _UTF16BEData_4_0
    -#define _UTF16Data _UTF16Data_4_0
    -#define _UTF16LEData _UTF16LEData_4_0
    -#define _UTF32BEData _UTF32BEData_4_0
    -#define _UTF32Data _UTF32Data_4_0
    -#define _UTF32LEData _UTF32LEData_4_0
    -#define _UTF7Data _UTF7Data_4_0
    -#define _UTF8Data _UTF8Data_4_0
    -#define cmemory_cleanup cmemory_cleanup_4_0
    -#define cmemory_inUse cmemory_inUse_4_0
    -#define le_close le_close_4_0
    -#define le_create le_create_4_0
    -#define le_getCharIndices le_getCharIndices_4_0
    -#define le_getCharIndicesWithBase le_getCharIndicesWithBase_4_0
    -#define le_getGlyphCount le_getGlyphCount_4_0
    -#define le_getGlyphPosition le_getGlyphPosition_4_0
    -#define le_getGlyphPositions le_getGlyphPositions_4_0
    -#define le_getGlyphs le_getGlyphs_4_0
    -#define le_layoutChars le_layoutChars_4_0
    -#define le_reset le_reset_4_0
    -#define locale_getKeywords locale_getKeywords_4_0
    -#define locale_get_default locale_get_default_4_0
    -#define locale_set_default locale_set_default_4_0
    -#define pl_addFontRun pl_addFontRun_4_0
    -#define pl_addLocaleRun pl_addLocaleRun_4_0
    -#define pl_addValueRun pl_addValueRun_4_0
    -#define pl_close pl_close_4_0
    -#define pl_closeFontRuns pl_closeFontRuns_4_0
    -#define pl_closeLine pl_closeLine_4_0
    -#define pl_closeLocaleRuns pl_closeLocaleRuns_4_0
    -#define pl_closeValueRuns pl_closeValueRuns_4_0
    -#define pl_countLineRuns pl_countLineRuns_4_0
    -#define pl_create pl_create_4_0
    -#define pl_getAscent pl_getAscent_4_0
    -#define pl_getDescent pl_getDescent_4_0
    -#define pl_getFontRunCount pl_getFontRunCount_4_0
    -#define pl_getFontRunFont pl_getFontRunFont_4_0
    -#define pl_getFontRunLastLimit pl_getFontRunLastLimit_4_0
    -#define pl_getFontRunLimit pl_getFontRunLimit_4_0
    -#define pl_getLeading pl_getLeading_4_0
    -#define pl_getLineAscent pl_getLineAscent_4_0
    -#define pl_getLineDescent pl_getLineDescent_4_0
    -#define pl_getLineLeading pl_getLineLeading_4_0
    -#define pl_getLineVisualRun pl_getLineVisualRun_4_0
    -#define pl_getLineWidth pl_getLineWidth_4_0
    -#define pl_getLocaleRunCount pl_getLocaleRunCount_4_0
    -#define pl_getLocaleRunLastLimit pl_getLocaleRunLastLimit_4_0
    -#define pl_getLocaleRunLimit pl_getLocaleRunLimit_4_0
    -#define pl_getLocaleRunLocale pl_getLocaleRunLocale_4_0
    -#define pl_getParagraphLevel pl_getParagraphLevel_4_0
    -#define pl_getTextDirection pl_getTextDirection_4_0
    -#define pl_getValueRunCount pl_getValueRunCount_4_0
    -#define pl_getValueRunLastLimit pl_getValueRunLastLimit_4_0
    -#define pl_getValueRunLimit pl_getValueRunLimit_4_0
    -#define pl_getValueRunValue pl_getValueRunValue_4_0
    -#define pl_getVisualRunAscent pl_getVisualRunAscent_4_0
    -#define pl_getVisualRunDescent pl_getVisualRunDescent_4_0
    -#define pl_getVisualRunDirection pl_getVisualRunDirection_4_0
    -#define pl_getVisualRunFont pl_getVisualRunFont_4_0
    -#define pl_getVisualRunGlyphCount pl_getVisualRunGlyphCount_4_0
    -#define pl_getVisualRunGlyphToCharMap pl_getVisualRunGlyphToCharMap_4_0
    -#define pl_getVisualRunGlyphs pl_getVisualRunGlyphs_4_0
    -#define pl_getVisualRunLeading pl_getVisualRunLeading_4_0
    -#define pl_getVisualRunPositions pl_getVisualRunPositions_4_0
    -#define pl_isComplex pl_isComplex_4_0
    -#define pl_nextLine pl_nextLine_4_0
    -#define pl_openEmptyFontRuns pl_openEmptyFontRuns_4_0
    -#define pl_openEmptyLocaleRuns pl_openEmptyLocaleRuns_4_0
    -#define pl_openEmptyValueRuns pl_openEmptyValueRuns_4_0
    -#define pl_openFontRuns pl_openFontRuns_4_0
    -#define pl_openLocaleRuns pl_openLocaleRuns_4_0
    -#define pl_openValueRuns pl_openValueRuns_4_0
    -#define pl_reflow pl_reflow_4_0
    -#define pl_resetFontRuns pl_resetFontRuns_4_0
    -#define pl_resetLocaleRuns pl_resetLocaleRuns_4_0
    -#define pl_resetValueRuns pl_resetValueRuns_4_0
    -#define res_countArrayItems res_countArrayItems_4_0
    -#define res_findResource res_findResource_4_0
    -#define res_getAlias res_getAlias_4_0
    -#define res_getArrayItem res_getArrayItem_4_0
    -#define res_getBinary res_getBinary_4_0
    -#define res_getIntVector res_getIntVector_4_0
    -#define res_getResource res_getResource_4_0
    -#define res_getString res_getString_4_0
    -#define res_getTableItemByIndex res_getTableItemByIndex_4_0
    -#define res_getTableItemByKey res_getTableItemByKey_4_0
    -#define res_load res_load_4_0
    -#define res_unload res_unload_4_0
    -#define transliterator_cleanup transliterator_cleanup_4_0
    -#define triedict_swap triedict_swap_4_0
    -#define u_UCharsToChars u_UCharsToChars_4_0
    -#define u_austrcpy u_austrcpy_4_0
    -#define u_austrncpy u_austrncpy_4_0
    -#define u_catclose u_catclose_4_0
    -#define u_catgets u_catgets_4_0
    -#define u_catopen u_catopen_4_0
    -#define u_charAge u_charAge_4_0
    -#define u_charDigitValue u_charDigitValue_4_0
    -#define u_charDirection u_charDirection_4_0
    -#define u_charFromName u_charFromName_4_0
    -#define u_charMirror u_charMirror_4_0
    -#define u_charName u_charName_4_0
    -#define u_charType u_charType_4_0
    -#define u_charsToUChars u_charsToUChars_4_0
    -#define u_cleanup u_cleanup_4_0
    -#define u_countChar32 u_countChar32_4_0
    -#define u_digit u_digit_4_0
    -#define u_enumCharNames u_enumCharNames_4_0
    -#define u_enumCharTypes u_enumCharTypes_4_0
    -#define u_errorName u_errorName_4_0
    -#define u_fclose u_fclose_4_0
    -#define u_feof u_feof_4_0
    -#define u_fflush u_fflush_4_0
    -#define u_fgetConverter u_fgetConverter_4_0
    -#define u_fgetc u_fgetc_4_0
    -#define u_fgetcodepage u_fgetcodepage_4_0
    -#define u_fgetcx u_fgetcx_4_0
    -#define u_fgetfile u_fgetfile_4_0
    -#define u_fgetlocale u_fgetlocale_4_0
    -#define u_fgets u_fgets_4_0
    -#define u_file_read u_file_read_4_0
    -#define u_file_write u_file_write_4_0
    -#define u_file_write_flush u_file_write_flush_4_0
    -#define u_finit u_finit_4_0
    -#define u_foldCase u_foldCase_4_0
    -#define u_fopen u_fopen_4_0
    -#define u_forDigit u_forDigit_4_0
    -#define u_formatMessage u_formatMessage_4_0
    -#define u_formatMessageWithError u_formatMessageWithError_4_0
    -#define u_fprintf u_fprintf_4_0
    -#define u_fprintf_u u_fprintf_u_4_0
    -#define u_fputc u_fputc_4_0
    -#define u_fputs u_fputs_4_0
    -#define u_frewind u_frewind_4_0
    -#define u_fscanf u_fscanf_4_0
    -#define u_fscanf_u u_fscanf_u_4_0
    -#define u_fsetcodepage u_fsetcodepage_4_0
    -#define u_fsetlocale u_fsetlocale_4_0
    -#define u_fsettransliterator u_fsettransliterator_4_0
    -#define u_fstropen u_fstropen_4_0
    -#define u_fungetc u_fungetc_4_0
    -#define u_getCombiningClass u_getCombiningClass_4_0
    -#define u_getDataDirectory u_getDataDirectory_4_0
    -#define u_getDefaultConverter u_getDefaultConverter_4_0
    -#define u_getFC_NFKC_Closure u_getFC_NFKC_Closure_4_0
    -#define u_getISOComment u_getISOComment_4_0
    -#define u_getIntPropertyMaxValue u_getIntPropertyMaxValue_4_0
    -#define u_getIntPropertyMinValue u_getIntPropertyMinValue_4_0
    -#define u_getIntPropertyValue u_getIntPropertyValue_4_0
    -#define u_getNumericValue u_getNumericValue_4_0
    -#define u_getPropertyEnum u_getPropertyEnum_4_0
    -#define u_getPropertyName u_getPropertyName_4_0
    -#define u_getPropertyValueEnum u_getPropertyValueEnum_4_0
    -#define u_getPropertyValueName u_getPropertyValueName_4_0
    -#define u_getUnicodeProperties u_getUnicodeProperties_4_0
    -#define u_getUnicodeVersion u_getUnicodeVersion_4_0
    -#define u_getVersion u_getVersion_4_0
    -#define u_growBufferFromStatic u_growBufferFromStatic_4_0
    -#define u_hasBinaryProperty u_hasBinaryProperty_4_0
    -#define u_init u_init_4_0
    -#define u_isIDIgnorable u_isIDIgnorable_4_0
    -#define u_isIDPart u_isIDPart_4_0
    -#define u_isIDStart u_isIDStart_4_0
    -#define u_isISOControl u_isISOControl_4_0
    -#define u_isJavaIDPart u_isJavaIDPart_4_0
    -#define u_isJavaIDStart u_isJavaIDStart_4_0
    -#define u_isJavaSpaceChar u_isJavaSpaceChar_4_0
    -#define u_isMirrored u_isMirrored_4_0
    -#define u_isUAlphabetic u_isUAlphabetic_4_0
    -#define u_isULowercase u_isULowercase_4_0
    -#define u_isUUppercase u_isUUppercase_4_0
    -#define u_isUWhiteSpace u_isUWhiteSpace_4_0
    -#define u_isWhitespace u_isWhitespace_4_0
    -#define u_isalnum u_isalnum_4_0
    -#define u_isalnumPOSIX u_isalnumPOSIX_4_0
    -#define u_isalpha u_isalpha_4_0
    -#define u_isbase u_isbase_4_0
    -#define u_isblank u_isblank_4_0
    -#define u_iscntrl u_iscntrl_4_0
    -#define u_isdefined u_isdefined_4_0
    -#define u_isdigit u_isdigit_4_0
    -#define u_isgraph u_isgraph_4_0
    -#define u_isgraphPOSIX u_isgraphPOSIX_4_0
    -#define u_islower u_islower_4_0
    -#define u_isprint u_isprint_4_0
    -#define u_isprintPOSIX u_isprintPOSIX_4_0
    -#define u_ispunct u_ispunct_4_0
    -#define u_isspace u_isspace_4_0
    -#define u_istitle u_istitle_4_0
    -#define u_isupper u_isupper_4_0
    -#define u_isxdigit u_isxdigit_4_0
    -#define u_lengthOfIdenticalLevelRun u_lengthOfIdenticalLevelRun_4_0
    -#define u_locbund_close u_locbund_close_4_0
    -#define u_locbund_getNumberFormat u_locbund_getNumberFormat_4_0
    -#define u_locbund_init u_locbund_init_4_0
    -#define u_memcasecmp u_memcasecmp_4_0
    -#define u_memchr u_memchr_4_0
    -#define u_memchr32 u_memchr32_4_0
    -#define u_memcmp u_memcmp_4_0
    -#define u_memcmpCodePointOrder u_memcmpCodePointOrder_4_0
    -#define u_memcpy u_memcpy_4_0
    -#define u_memmove u_memmove_4_0
    -#define u_memrchr u_memrchr_4_0
    -#define u_memrchr32 u_memrchr32_4_0
    -#define u_memset u_memset_4_0
    -#define u_parseMessage u_parseMessage_4_0
    -#define u_parseMessageWithError u_parseMessageWithError_4_0
    -#define u_printf_parse u_printf_parse_4_0
    -#define u_releaseDefaultConverter u_releaseDefaultConverter_4_0
    -#define u_scanf_parse u_scanf_parse_4_0
    -#define u_setAtomicIncDecFunctions u_setAtomicIncDecFunctions_4_0
    -#define u_setDataDirectory u_setDataDirectory_4_0
    -#define u_setMemoryFunctions u_setMemoryFunctions_4_0
    -#define u_setMutexFunctions u_setMutexFunctions_4_0
    -#define u_shapeArabic u_shapeArabic_4_0
    -#define u_snprintf u_snprintf_4_0
    -#define u_snprintf_u u_snprintf_u_4_0
    -#define u_sprintf u_sprintf_4_0
    -#define u_sprintf_u u_sprintf_u_4_0
    -#define u_sscanf u_sscanf_4_0
    -#define u_sscanf_u u_sscanf_u_4_0
    -#define u_strCaseCompare u_strCaseCompare_4_0
    -#define u_strCompare u_strCompare_4_0
    -#define u_strCompareIter u_strCompareIter_4_0
    -#define u_strFindFirst u_strFindFirst_4_0
    -#define u_strFindLast u_strFindLast_4_0
    -#define u_strFoldCase u_strFoldCase_4_0
    -#define u_strFromPunycode u_strFromPunycode_4_0
    -#define u_strFromUTF32 u_strFromUTF32_4_0
    -#define u_strFromUTF8 u_strFromUTF8_4_0
    -#define u_strFromUTF8Lenient u_strFromUTF8Lenient_4_0
    -#define u_strFromUTF8WithSub u_strFromUTF8WithSub_4_0
    -#define u_strFromWCS u_strFromWCS_4_0
    -#define u_strHasMoreChar32Than u_strHasMoreChar32Than_4_0
    -#define u_strToLower u_strToLower_4_0
    -#define u_strToPunycode u_strToPunycode_4_0
    -#define u_strToTitle u_strToTitle_4_0
    -#define u_strToUTF32 u_strToUTF32_4_0
    -#define u_strToUTF8 u_strToUTF8_4_0
    -#define u_strToUTF8WithSub u_strToUTF8WithSub_4_0
    -#define u_strToUpper u_strToUpper_4_0
    -#define u_strToWCS u_strToWCS_4_0
    -#define u_strcasecmp u_strcasecmp_4_0
    -#define u_strcat u_strcat_4_0
    -#define u_strchr u_strchr_4_0
    -#define u_strchr32 u_strchr32_4_0
    -#define u_strcmp u_strcmp_4_0
    -#define u_strcmpCodePointOrder u_strcmpCodePointOrder_4_0
    -#define u_strcmpFold u_strcmpFold_4_0
    -#define u_strcpy u_strcpy_4_0
    -#define u_strcspn u_strcspn_4_0
    -#define u_strlen u_strlen_4_0
    -#define u_strncasecmp u_strncasecmp_4_0
    -#define u_strncat u_strncat_4_0
    -#define u_strncmp u_strncmp_4_0
    -#define u_strncmpCodePointOrder u_strncmpCodePointOrder_4_0
    -#define u_strncpy u_strncpy_4_0
    -#define u_strpbrk u_strpbrk_4_0
    -#define u_strrchr u_strrchr_4_0
    -#define u_strrchr32 u_strrchr32_4_0
    -#define u_strrstr u_strrstr_4_0
    -#define u_strspn u_strspn_4_0
    -#define u_strstr u_strstr_4_0
    -#define u_strtok_r u_strtok_r_4_0
    -#define u_terminateChars u_terminateChars_4_0
    -#define u_terminateUChar32s u_terminateUChar32s_4_0
    -#define u_terminateUChars u_terminateUChars_4_0
    -#define u_terminateWChars u_terminateWChars_4_0
    -#define u_tolower u_tolower_4_0
    -#define u_totitle u_totitle_4_0
    -#define u_toupper u_toupper_4_0
    -#define u_uastrcpy u_uastrcpy_4_0
    -#define u_uastrncpy u_uastrncpy_4_0
    -#define u_unescape u_unescape_4_0
    -#define u_unescapeAt u_unescapeAt_4_0
    -#define u_versionFromString u_versionFromString_4_0
    -#define u_versionToString u_versionToString_4_0
    -#define u_vformatMessage u_vformatMessage_4_0
    -#define u_vformatMessageWithError u_vformatMessageWithError_4_0
    -#define u_vfprintf u_vfprintf_4_0
    -#define u_vfprintf_u u_vfprintf_u_4_0
    -#define u_vfscanf u_vfscanf_4_0
    -#define u_vfscanf_u u_vfscanf_u_4_0
    -#define u_vparseMessage u_vparseMessage_4_0
    -#define u_vparseMessageWithError u_vparseMessageWithError_4_0
    -#define u_vsnprintf u_vsnprintf_4_0
    -#define u_vsnprintf_u u_vsnprintf_u_4_0
    -#define u_vsprintf u_vsprintf_4_0
    -#define u_vsprintf_u u_vsprintf_u_4_0
    -#define u_vsscanf u_vsscanf_4_0
    -#define u_vsscanf_u u_vsscanf_u_4_0
    -#define u_writeDiff u_writeDiff_4_0
    -#define u_writeIdenticalLevelRun u_writeIdenticalLevelRun_4_0
    -#define u_writeIdenticalLevelRunTwoChars u_writeIdenticalLevelRunTwoChars_4_0
    -#define ubidi_addPropertyStarts ubidi_addPropertyStarts_4_0
    -#define ubidi_close ubidi_close_4_0
    -#define ubidi_closeProps ubidi_closeProps_4_0
    -#define ubidi_countParagraphs ubidi_countParagraphs_4_0
    -#define ubidi_countRuns ubidi_countRuns_4_0
    -#define ubidi_getClass ubidi_getClass_4_0
    -#define ubidi_getClassCallback ubidi_getClassCallback_4_0
    -#define ubidi_getCustomizedClass ubidi_getCustomizedClass_4_0
    -#define ubidi_getDirection ubidi_getDirection_4_0
    -#define ubidi_getJoiningGroup ubidi_getJoiningGroup_4_0
    -#define ubidi_getJoiningType ubidi_getJoiningType_4_0
    -#define ubidi_getLength ubidi_getLength_4_0
    -#define ubidi_getLevelAt ubidi_getLevelAt_4_0
    -#define ubidi_getLevels ubidi_getLevels_4_0
    -#define ubidi_getLogicalIndex ubidi_getLogicalIndex_4_0
    -#define ubidi_getLogicalMap ubidi_getLogicalMap_4_0
    -#define ubidi_getLogicalRun ubidi_getLogicalRun_4_0
    -#define ubidi_getMaxValue ubidi_getMaxValue_4_0
    -#define ubidi_getMemory ubidi_getMemory_4_0
    -#define ubidi_getMirror ubidi_getMirror_4_0
    -#define ubidi_getParaLevel ubidi_getParaLevel_4_0
    -#define ubidi_getParagraph ubidi_getParagraph_4_0
    -#define ubidi_getParagraphByIndex ubidi_getParagraphByIndex_4_0
    -#define ubidi_getProcessedLength ubidi_getProcessedLength_4_0
    -#define ubidi_getReorderingMode ubidi_getReorderingMode_4_0
    -#define ubidi_getReorderingOptions ubidi_getReorderingOptions_4_0
    -#define ubidi_getResultLength ubidi_getResultLength_4_0
    -#define ubidi_getRuns ubidi_getRuns_4_0
    -#define ubidi_getSingleton ubidi_getSingleton_4_0
    -#define ubidi_getText ubidi_getText_4_0
    -#define ubidi_getVisualIndex ubidi_getVisualIndex_4_0
    -#define ubidi_getVisualMap ubidi_getVisualMap_4_0
    -#define ubidi_getVisualRun ubidi_getVisualRun_4_0
    -#define ubidi_invertMap ubidi_invertMap_4_0
    -#define ubidi_isBidiControl ubidi_isBidiControl_4_0
    -#define ubidi_isInverse ubidi_isInverse_4_0
    -#define ubidi_isJoinControl ubidi_isJoinControl_4_0
    -#define ubidi_isMirrored ubidi_isMirrored_4_0
    -#define ubidi_isOrderParagraphsLTR ubidi_isOrderParagraphsLTR_4_0
    -#define ubidi_open ubidi_open_4_0
    -#define ubidi_openSized ubidi_openSized_4_0
    -#define ubidi_orderParagraphsLTR ubidi_orderParagraphsLTR_4_0
    -#define ubidi_reorderLogical ubidi_reorderLogical_4_0
    -#define ubidi_reorderVisual ubidi_reorderVisual_4_0
    -#define ubidi_setClassCallback ubidi_setClassCallback_4_0
    -#define ubidi_setInverse ubidi_setInverse_4_0
    -#define ubidi_setLine ubidi_setLine_4_0
    -#define ubidi_setPara ubidi_setPara_4_0
    -#define ubidi_setReorderingMode ubidi_setReorderingMode_4_0
    -#define ubidi_setReorderingOptions ubidi_setReorderingOptions_4_0
    -#define ubidi_writeReordered ubidi_writeReordered_4_0
    -#define ubidi_writeReverse ubidi_writeReverse_4_0
    -#define ublock_getCode ublock_getCode_4_0
    -#define ubrk_close ubrk_close_4_0
    -#define ubrk_countAvailable ubrk_countAvailable_4_0
    -#define ubrk_current ubrk_current_4_0
    -#define ubrk_first ubrk_first_4_0
    -#define ubrk_following ubrk_following_4_0
    -#define ubrk_getAvailable ubrk_getAvailable_4_0
    -#define ubrk_getLocaleByType ubrk_getLocaleByType_4_0
    -#define ubrk_getRuleStatus ubrk_getRuleStatus_4_0
    -#define ubrk_getRuleStatusVec ubrk_getRuleStatusVec_4_0
    -#define ubrk_isBoundary ubrk_isBoundary_4_0
    -#define ubrk_last ubrk_last_4_0
    -#define ubrk_next ubrk_next_4_0
    -#define ubrk_open ubrk_open_4_0
    -#define ubrk_openRules ubrk_openRules_4_0
    -#define ubrk_preceding ubrk_preceding_4_0
    -#define ubrk_previous ubrk_previous_4_0
    -#define ubrk_safeClone ubrk_safeClone_4_0
    -#define ubrk_setText ubrk_setText_4_0
    -#define ubrk_setUText ubrk_setUText_4_0
    -#define ubrk_swap ubrk_swap_4_0
    -#define ucal_add ucal_add_4_0
    -#define ucal_clear ucal_clear_4_0
    -#define ucal_clearField ucal_clearField_4_0
    -#define ucal_clone ucal_clone_4_0
    -#define ucal_close ucal_close_4_0
    -#define ucal_countAvailable ucal_countAvailable_4_0
    -#define ucal_equivalentTo ucal_equivalentTo_4_0
    -#define ucal_get ucal_get_4_0
    -#define ucal_getAttribute ucal_getAttribute_4_0
    -#define ucal_getAvailable ucal_getAvailable_4_0
    -#define ucal_getCanonicalTimeZoneID ucal_getCanonicalTimeZoneID_4_0
    -#define ucal_getDSTSavings ucal_getDSTSavings_4_0
    -#define ucal_getDefaultTimeZone ucal_getDefaultTimeZone_4_0
    -#define ucal_getGregorianChange ucal_getGregorianChange_4_0
    -#define ucal_getLimit ucal_getLimit_4_0
    -#define ucal_getLocaleByType ucal_getLocaleByType_4_0
    -#define ucal_getMillis ucal_getMillis_4_0
    -#define ucal_getNow ucal_getNow_4_0
    -#define ucal_getTZDataVersion ucal_getTZDataVersion_4_0
    -#define ucal_getTimeZoneDisplayName ucal_getTimeZoneDisplayName_4_0
    -#define ucal_inDaylightTime ucal_inDaylightTime_4_0
    -#define ucal_isSet ucal_isSet_4_0
    -#define ucal_open ucal_open_4_0
    -#define ucal_openCountryTimeZones ucal_openCountryTimeZones_4_0
    -#define ucal_openTimeZones ucal_openTimeZones_4_0
    -#define ucal_roll ucal_roll_4_0
    -#define ucal_set ucal_set_4_0
    -#define ucal_setAttribute ucal_setAttribute_4_0
    -#define ucal_setDate ucal_setDate_4_0
    -#define ucal_setDateTime ucal_setDateTime_4_0
    -#define ucal_setDefaultTimeZone ucal_setDefaultTimeZone_4_0
    -#define ucal_setGregorianChange ucal_setGregorianChange_4_0
    -#define ucal_setMillis ucal_setMillis_4_0
    -#define ucal_setTimeZone ucal_setTimeZone_4_0
    -#define ucase_addCaseClosure ucase_addCaseClosure_4_0
    -#define ucase_addPropertyStarts ucase_addPropertyStarts_4_0
    -#define ucase_addStringCaseClosure ucase_addStringCaseClosure_4_0
    -#define ucase_close ucase_close_4_0
    -#define ucase_fold ucase_fold_4_0
    -#define ucase_getCaseLocale ucase_getCaseLocale_4_0
    -#define ucase_getSingleton ucase_getSingleton_4_0
    -#define ucase_getType ucase_getType_4_0
    -#define ucase_getTypeOrIgnorable ucase_getTypeOrIgnorable_4_0
    -#define ucase_hasBinaryProperty ucase_hasBinaryProperty_4_0
    -#define ucase_isCaseSensitive ucase_isCaseSensitive_4_0
    -#define ucase_isSoftDotted ucase_isSoftDotted_4_0
    -#define ucase_toFullFolding ucase_toFullFolding_4_0
    -#define ucase_toFullLower ucase_toFullLower_4_0
    -#define ucase_toFullTitle ucase_toFullTitle_4_0
    -#define ucase_toFullUpper ucase_toFullUpper_4_0
    -#define ucase_tolower ucase_tolower_4_0
    -#define ucase_totitle ucase_totitle_4_0
    -#define ucase_toupper ucase_toupper_4_0
    -#define ucasemap_close ucasemap_close_4_0
    -#define ucasemap_getBreakIterator ucasemap_getBreakIterator_4_0
    -#define ucasemap_getLocale ucasemap_getLocale_4_0
    -#define ucasemap_getOptions ucasemap_getOptions_4_0
    -#define ucasemap_open ucasemap_open_4_0
    -#define ucasemap_setBreakIterator ucasemap_setBreakIterator_4_0
    -#define ucasemap_setLocale ucasemap_setLocale_4_0
    -#define ucasemap_setOptions ucasemap_setOptions_4_0
    -#define ucasemap_toTitle ucasemap_toTitle_4_0
    -#define ucasemap_utf8FoldCase ucasemap_utf8FoldCase_4_0
    -#define ucasemap_utf8ToLower ucasemap_utf8ToLower_4_0
    -#define ucasemap_utf8ToTitle ucasemap_utf8ToTitle_4_0
    -#define ucasemap_utf8ToUpper ucasemap_utf8ToUpper_4_0
    -#define uchar_addPropertyStarts uchar_addPropertyStarts_4_0
    -#define uchar_getHST uchar_getHST_4_0
    -#define uchar_swapNames uchar_swapNames_4_0
    -#define ucln_common_registerCleanup ucln_common_registerCleanup_4_0
    -#define ucln_i18n_registerCleanup ucln_i18n_registerCleanup_4_0
    -#define ucln_io_registerCleanup ucln_io_registerCleanup_4_0
    -#define ucln_lib_cleanup ucln_lib_cleanup_4_0
    -#define ucln_registerCleanup ucln_registerCleanup_4_0
    -#define ucnv_MBCSFromUChar32 ucnv_MBCSFromUChar32_4_0
    -#define ucnv_MBCSFromUnicodeWithOffsets ucnv_MBCSFromUnicodeWithOffsets_4_0
    -#define ucnv_MBCSGetFilteredUnicodeSetForUnicode ucnv_MBCSGetFilteredUnicodeSetForUnicode_4_0
    -#define ucnv_MBCSGetType ucnv_MBCSGetType_4_0
    -#define ucnv_MBCSGetUnicodeSetForUnicode ucnv_MBCSGetUnicodeSetForUnicode_4_0
    -#define ucnv_MBCSIsLeadByte ucnv_MBCSIsLeadByte_4_0
    -#define ucnv_MBCSSimpleGetNextUChar ucnv_MBCSSimpleGetNextUChar_4_0
    -#define ucnv_MBCSToUnicodeWithOffsets ucnv_MBCSToUnicodeWithOffsets_4_0
    -#define ucnv_bld_countAvailableConverters ucnv_bld_countAvailableConverters_4_0
    -#define ucnv_bld_getAvailableConverter ucnv_bld_getAvailableConverter_4_0
    -#define ucnv_cbFromUWriteBytes ucnv_cbFromUWriteBytes_4_0
    -#define ucnv_cbFromUWriteSub ucnv_cbFromUWriteSub_4_0
    -#define ucnv_cbFromUWriteUChars ucnv_cbFromUWriteUChars_4_0
    -#define ucnv_cbToUWriteSub ucnv_cbToUWriteSub_4_0
    -#define ucnv_cbToUWriteUChars ucnv_cbToUWriteUChars_4_0
    -#define ucnv_close ucnv_close_4_0
    -#define ucnv_compareNames ucnv_compareNames_4_0
    -#define ucnv_convert ucnv_convert_4_0
    -#define ucnv_convertEx ucnv_convertEx_4_0
    -#define ucnv_countAliases ucnv_countAliases_4_0
    -#define ucnv_countAvailable ucnv_countAvailable_4_0
    -#define ucnv_countStandards ucnv_countStandards_4_0
    -#define ucnv_createAlgorithmicConverter ucnv_createAlgorithmicConverter_4_0
    -#define ucnv_createConverter ucnv_createConverter_4_0
    -#define ucnv_createConverterFromPackage ucnv_createConverterFromPackage_4_0
    -#define ucnv_createConverterFromSharedData ucnv_createConverterFromSharedData_4_0
    -#define ucnv_detectUnicodeSignature ucnv_detectUnicodeSignature_4_0
    -#define ucnv_extContinueMatchFromU ucnv_extContinueMatchFromU_4_0
    -#define ucnv_extContinueMatchToU ucnv_extContinueMatchToU_4_0
    -#define ucnv_extGetUnicodeSet ucnv_extGetUnicodeSet_4_0
    -#define ucnv_extInitialMatchFromU ucnv_extInitialMatchFromU_4_0
    -#define ucnv_extInitialMatchToU ucnv_extInitialMatchToU_4_0
    -#define ucnv_extSimpleMatchFromU ucnv_extSimpleMatchFromU_4_0
    -#define ucnv_extSimpleMatchToU ucnv_extSimpleMatchToU_4_0
    -#define ucnv_fixFileSeparator ucnv_fixFileSeparator_4_0
    -#define ucnv_flushCache ucnv_flushCache_4_0
    -#define ucnv_fromAlgorithmic ucnv_fromAlgorithmic_4_0
    -#define ucnv_fromUChars ucnv_fromUChars_4_0
    -#define ucnv_fromUCountPending ucnv_fromUCountPending_4_0
    -#define ucnv_fromUWriteBytes ucnv_fromUWriteBytes_4_0
    -#define ucnv_fromUnicode ucnv_fromUnicode_4_0
    -#define ucnv_fromUnicode_UTF8 ucnv_fromUnicode_UTF8_4_0
    -#define ucnv_fromUnicode_UTF8_OFFSETS_LOGIC ucnv_fromUnicode_UTF8_OFFSETS_LOGIC_4_0
    -#define ucnv_getAlias ucnv_getAlias_4_0
    -#define ucnv_getAliases ucnv_getAliases_4_0
    -#define ucnv_getAvailableName ucnv_getAvailableName_4_0
    -#define ucnv_getCCSID ucnv_getCCSID_4_0
    -#define ucnv_getCanonicalName ucnv_getCanonicalName_4_0
    -#define ucnv_getCompleteUnicodeSet ucnv_getCompleteUnicodeSet_4_0
    -#define ucnv_getDefaultName ucnv_getDefaultName_4_0
    -#define ucnv_getDisplayName ucnv_getDisplayName_4_0
    -#define ucnv_getFromUCallBack ucnv_getFromUCallBack_4_0
    -#define ucnv_getInvalidChars ucnv_getInvalidChars_4_0
    -#define ucnv_getInvalidUChars ucnv_getInvalidUChars_4_0
    -#define ucnv_getMaxCharSize ucnv_getMaxCharSize_4_0
    -#define ucnv_getMinCharSize ucnv_getMinCharSize_4_0
    -#define ucnv_getName ucnv_getName_4_0
    -#define ucnv_getNextUChar ucnv_getNextUChar_4_0
    -#define ucnv_getNonSurrogateUnicodeSet ucnv_getNonSurrogateUnicodeSet_4_0
    -#define ucnv_getPlatform ucnv_getPlatform_4_0
    -#define ucnv_getStandard ucnv_getStandard_4_0
    -#define ucnv_getStandardName ucnv_getStandardName_4_0
    -#define ucnv_getStarters ucnv_getStarters_4_0
    -#define ucnv_getSubstChars ucnv_getSubstChars_4_0
    -#define ucnv_getToUCallBack ucnv_getToUCallBack_4_0
    -#define ucnv_getType ucnv_getType_4_0
    -#define ucnv_getUnicodeSet ucnv_getUnicodeSet_4_0
    -#define ucnv_incrementRefCount ucnv_incrementRefCount_4_0
    -#define ucnv_io_countKnownConverters ucnv_io_countKnownConverters_4_0
    -#define ucnv_io_getConverterName ucnv_io_getConverterName_4_0
    -#define ucnv_io_stripASCIIForCompare ucnv_io_stripASCIIForCompare_4_0
    -#define ucnv_io_stripEBCDICForCompare ucnv_io_stripEBCDICForCompare_4_0
    -#define ucnv_isAmbiguous ucnv_isAmbiguous_4_0
    -#define ucnv_load ucnv_load_4_0
    -#define ucnv_loadSharedData ucnv_loadSharedData_4_0
    -#define ucnv_open ucnv_open_4_0
    -#define ucnv_openAllNames ucnv_openAllNames_4_0
    -#define ucnv_openCCSID ucnv_openCCSID_4_0
    -#define ucnv_openPackage ucnv_openPackage_4_0
    -#define ucnv_openStandardNames ucnv_openStandardNames_4_0
    -#define ucnv_openU ucnv_openU_4_0
    -#define ucnv_reset ucnv_reset_4_0
    -#define ucnv_resetFromUnicode ucnv_resetFromUnicode_4_0
    -#define ucnv_resetToUnicode ucnv_resetToUnicode_4_0
    -#define ucnv_safeClone ucnv_safeClone_4_0
    -#define ucnv_setDefaultName ucnv_setDefaultName_4_0
    -#define ucnv_setFallback ucnv_setFallback_4_0
    -#define ucnv_setFromUCallBack ucnv_setFromUCallBack_4_0
    -#define ucnv_setSubstChars ucnv_setSubstChars_4_0
    -#define ucnv_setSubstString ucnv_setSubstString_4_0
    -#define ucnv_setToUCallBack ucnv_setToUCallBack_4_0
    -#define ucnv_swap ucnv_swap_4_0
    -#define ucnv_swapAliases ucnv_swapAliases_4_0
    -#define ucnv_toAlgorithmic ucnv_toAlgorithmic_4_0
    -#define ucnv_toUChars ucnv_toUChars_4_0
    -#define ucnv_toUCountPending ucnv_toUCountPending_4_0
    -#define ucnv_toUWriteCodePoint ucnv_toUWriteCodePoint_4_0
    -#define ucnv_toUWriteUChars ucnv_toUWriteUChars_4_0
    -#define ucnv_toUnicode ucnv_toUnicode_4_0
    -#define ucnv_unload ucnv_unload_4_0
    -#define ucnv_unloadSharedDataIfReady ucnv_unloadSharedDataIfReady_4_0
    -#define ucnv_usesFallback ucnv_usesFallback_4_0
    -#define ucol_allocWeights ucol_allocWeights_4_0
    -#define ucol_assembleTailoringTable ucol_assembleTailoringTable_4_0
    -#define ucol_calcSortKey ucol_calcSortKey_4_0
    -#define ucol_calcSortKeySimpleTertiary ucol_calcSortKeySimpleTertiary_4_0
    -#define ucol_cloneBinary ucol_cloneBinary_4_0
    -#define ucol_cloneRuleData ucol_cloneRuleData_4_0
    -#define ucol_close ucol_close_4_0
    -#define ucol_closeElements ucol_closeElements_4_0
    -#define ucol_countAvailable ucol_countAvailable_4_0
    -#define ucol_createElements ucol_createElements_4_0
    -#define ucol_doCE ucol_doCE_4_0
    -#define ucol_equal ucol_equal_4_0
    -#define ucol_equals ucol_equals_4_0
    -#define ucol_forgetUCA ucol_forgetUCA_4_0
    -#define ucol_getAttribute ucol_getAttribute_4_0
    -#define ucol_getAttributeOrDefault ucol_getAttributeOrDefault_4_0
    -#define ucol_getAvailable ucol_getAvailable_4_0
    -#define ucol_getBound ucol_getBound_4_0
    -#define ucol_getCEStrengthDifference ucol_getCEStrengthDifference_4_0
    -#define ucol_getContractions ucol_getContractions_4_0
    -#define ucol_getContractionsAndExpansions ucol_getContractionsAndExpansions_4_0
    -#define ucol_getDisplayName ucol_getDisplayName_4_0
    -#define ucol_getFirstCE ucol_getFirstCE_4_0
    -#define ucol_getFunctionalEquivalent ucol_getFunctionalEquivalent_4_0
    -#define ucol_getKeywordValues ucol_getKeywordValues_4_0
    -#define ucol_getKeywords ucol_getKeywords_4_0
    -#define ucol_getLocale ucol_getLocale_4_0
    -#define ucol_getLocaleByType ucol_getLocaleByType_4_0
    -#define ucol_getMaxExpansion ucol_getMaxExpansion_4_0
    -#define ucol_getNextCE ucol_getNextCE_4_0
    -#define ucol_getOffset ucol_getOffset_4_0
    -#define ucol_getPrevCE ucol_getPrevCE_4_0
    -#define ucol_getRules ucol_getRules_4_0
    -#define ucol_getRulesEx ucol_getRulesEx_4_0
    -#define ucol_getShortDefinitionString ucol_getShortDefinitionString_4_0
    -#define ucol_getSortKey ucol_getSortKey_4_0
    -#define ucol_getSortKeySize ucol_getSortKeySize_4_0
    -#define ucol_getSortKeyWithAllocation ucol_getSortKeyWithAllocation_4_0
    -#define ucol_getStrength ucol_getStrength_4_0
    -#define ucol_getTailoredSet ucol_getTailoredSet_4_0
    -#define ucol_getUCAVersion ucol_getUCAVersion_4_0
    -#define ucol_getUnsafeSet ucol_getUnsafeSet_4_0
    -#define ucol_getVariableTop ucol_getVariableTop_4_0
    -#define ucol_getVersion ucol_getVersion_4_0
    -#define ucol_greater ucol_greater_4_0
    -#define ucol_greaterOrEqual ucol_greaterOrEqual_4_0
    -#define ucol_initBuffers ucol_initBuffers_4_0
    -#define ucol_initCollator ucol_initCollator_4_0
    -#define ucol_initInverseUCA ucol_initInverseUCA_4_0
    -#define ucol_initUCA ucol_initUCA_4_0
    -#define ucol_inv_getNextCE ucol_inv_getNextCE_4_0
    -#define ucol_inv_getPrevCE ucol_inv_getPrevCE_4_0
    -#define ucol_isTailored ucol_isTailored_4_0
    -#define ucol_keyHashCode ucol_keyHashCode_4_0
    -#define ucol_mergeSortkeys ucol_mergeSortkeys_4_0
    -#define ucol_next ucol_next_4_0
    -#define ucol_nextProcessed ucol_nextProcessed_4_0
    -#define ucol_nextSortKeyPart ucol_nextSortKeyPart_4_0
    -#define ucol_nextWeight ucol_nextWeight_4_0
    -#define ucol_normalizeShortDefinitionString ucol_normalizeShortDefinitionString_4_0
    -#define ucol_open ucol_open_4_0
    -#define ucol_openAvailableLocales ucol_openAvailableLocales_4_0
    -#define ucol_openBinary ucol_openBinary_4_0
    -#define ucol_openElements ucol_openElements_4_0
    -#define ucol_openFromShortString ucol_openFromShortString_4_0
    -#define ucol_openRules ucol_openRules_4_0
    -#define ucol_open_internal ucol_open_internal_4_0
    -#define ucol_prepareShortStringOpen ucol_prepareShortStringOpen_4_0
    -#define ucol_previous ucol_previous_4_0
    -#define ucol_previousProcessed ucol_previousProcessed_4_0
    -#define ucol_primaryOrder ucol_primaryOrder_4_0
    -#define ucol_prv_getSpecialCE ucol_prv_getSpecialCE_4_0
    -#define ucol_prv_getSpecialPrevCE ucol_prv_getSpecialPrevCE_4_0
    -#define ucol_reset ucol_reset_4_0
    -#define ucol_restoreVariableTop ucol_restoreVariableTop_4_0
    -#define ucol_safeClone ucol_safeClone_4_0
    -#define ucol_secondaryOrder ucol_secondaryOrder_4_0
    -#define ucol_setAttribute ucol_setAttribute_4_0
    -#define ucol_setOffset ucol_setOffset_4_0
    -#define ucol_setOptionsFromHeader ucol_setOptionsFromHeader_4_0
    -#define ucol_setReqValidLocales ucol_setReqValidLocales_4_0
    -#define ucol_setStrength ucol_setStrength_4_0
    -#define ucol_setText ucol_setText_4_0
    -#define ucol_setVariableTop ucol_setVariableTop_4_0
    -#define ucol_strcoll ucol_strcoll_4_0
    -#define ucol_strcollIter ucol_strcollIter_4_0
    -#define ucol_swap ucol_swap_4_0
    -#define ucol_swapBinary ucol_swapBinary_4_0
    -#define ucol_swapInverseUCA ucol_swapInverseUCA_4_0
    -#define ucol_tertiaryOrder ucol_tertiaryOrder_4_0
    -#define ucol_tok_assembleTokenList ucol_tok_assembleTokenList_4_0
    -#define ucol_tok_closeTokenList ucol_tok_closeTokenList_4_0
    -#define ucol_tok_getNextArgument ucol_tok_getNextArgument_4_0
    -#define ucol_tok_initTokenList ucol_tok_initTokenList_4_0
    -#define ucol_tok_parseNextToken ucol_tok_parseNextToken_4_0
    -#define ucol_updateInternalState ucol_updateInternalState_4_0
    -#define ucsdet_close ucsdet_close_4_0
    -#define ucsdet_detect ucsdet_detect_4_0
    -#define ucsdet_detectAll ucsdet_detectAll_4_0
    -#define ucsdet_enableInputFilter ucsdet_enableInputFilter_4_0
    -#define ucsdet_getAllDetectableCharsets ucsdet_getAllDetectableCharsets_4_0
    -#define ucsdet_getConfidence ucsdet_getConfidence_4_0
    -#define ucsdet_getLanguage ucsdet_getLanguage_4_0
    -#define ucsdet_getName ucsdet_getName_4_0
    -#define ucsdet_getUChars ucsdet_getUChars_4_0
    -#define ucsdet_isInputFilterEnabled ucsdet_isInputFilterEnabled_4_0
    -#define ucsdet_open ucsdet_open_4_0
    -#define ucsdet_setDeclaredEncoding ucsdet_setDeclaredEncoding_4_0
    -#define ucsdet_setText ucsdet_setText_4_0
    -#define ucurr_countCurrencies ucurr_countCurrencies_4_0
    -#define ucurr_forLocale ucurr_forLocale_4_0
    -#define ucurr_forLocaleAndDate ucurr_forLocaleAndDate_4_0
    -#define ucurr_getDefaultFractionDigits ucurr_getDefaultFractionDigits_4_0
    -#define ucurr_getName ucurr_getName_4_0
    -#define ucurr_getRoundingIncrement ucurr_getRoundingIncrement_4_0
    -#define ucurr_openISOCurrencies ucurr_openISOCurrencies_4_0
    -#define ucurr_register ucurr_register_4_0
    -#define ucurr_unregister ucurr_unregister_4_0
    -#define udat_applyPattern udat_applyPattern_4_0
    -#define udat_clone udat_clone_4_0
    -#define udat_close udat_close_4_0
    -#define udat_countAvailable udat_countAvailable_4_0
    -#define udat_countSymbols udat_countSymbols_4_0
    -#define udat_format udat_format_4_0
    -#define udat_get2DigitYearStart udat_get2DigitYearStart_4_0
    -#define udat_getAvailable udat_getAvailable_4_0
    -#define udat_getCalendar udat_getCalendar_4_0
    -#define udat_getLocaleByType udat_getLocaleByType_4_0
    -#define udat_getNumberFormat udat_getNumberFormat_4_0
    -#define udat_getSymbols udat_getSymbols_4_0
    -#define udat_isLenient udat_isLenient_4_0
    -#define udat_open udat_open_4_0
    -#define udat_parse udat_parse_4_0
    -#define udat_parseCalendar udat_parseCalendar_4_0
    -#define udat_set2DigitYearStart udat_set2DigitYearStart_4_0
    -#define udat_setCalendar udat_setCalendar_4_0
    -#define udat_setLenient udat_setLenient_4_0
    -#define udat_setNumberFormat udat_setNumberFormat_4_0
    -#define udat_setSymbols udat_setSymbols_4_0
    -#define udat_toPattern udat_toPattern_4_0
    -#define udata_checkCommonData udata_checkCommonData_4_0
    -#define udata_close udata_close_4_0
    -#define udata_closeSwapper udata_closeSwapper_4_0
    -#define udata_getHeaderSize udata_getHeaderSize_4_0
    -#define udata_getInfo udata_getInfo_4_0
    -#define udata_getInfoSize udata_getInfoSize_4_0
    -#define udata_getLength udata_getLength_4_0
    -#define udata_getMemory udata_getMemory_4_0
    -#define udata_getRawMemory udata_getRawMemory_4_0
    -#define udata_open udata_open_4_0
    -#define udata_openChoice udata_openChoice_4_0
    -#define udata_openSwapper udata_openSwapper_4_0
    -#define udata_openSwapperForInputData udata_openSwapperForInputData_4_0
    -#define udata_printError udata_printError_4_0
    -#define udata_readInt16 udata_readInt16_4_0
    -#define udata_readInt32 udata_readInt32_4_0
    -#define udata_setAppData udata_setAppData_4_0
    -#define udata_setCommonData udata_setCommonData_4_0
    -#define udata_setFileAccess udata_setFileAccess_4_0
    -#define udata_swapDataHeader udata_swapDataHeader_4_0
    -#define udata_swapInvStringBlock udata_swapInvStringBlock_4_0
    -#define udatpg_addPattern udatpg_addPattern_4_0
    -#define udatpg_clone udatpg_clone_4_0
    -#define udatpg_close udatpg_close_4_0
    -#define udatpg_getAppendItemFormat udatpg_getAppendItemFormat_4_0
    -#define udatpg_getAppendItemName udatpg_getAppendItemName_4_0
    -#define udatpg_getBaseSkeleton udatpg_getBaseSkeleton_4_0
    -#define udatpg_getBestPattern udatpg_getBestPattern_4_0
    -#define udatpg_getDateTimeFormat udatpg_getDateTimeFormat_4_0
    -#define udatpg_getDecimal udatpg_getDecimal_4_0
    -#define udatpg_getPatternForSkeleton udatpg_getPatternForSkeleton_4_0
    -#define udatpg_getSkeleton udatpg_getSkeleton_4_0
    -#define udatpg_open udatpg_open_4_0
    -#define udatpg_openBaseSkeletons udatpg_openBaseSkeletons_4_0
    -#define udatpg_openEmpty udatpg_openEmpty_4_0
    -#define udatpg_openSkeletons udatpg_openSkeletons_4_0
    -#define udatpg_replaceFieldTypes udatpg_replaceFieldTypes_4_0
    -#define udatpg_setAppendItemFormat udatpg_setAppendItemFormat_4_0
    -#define udatpg_setAppendItemName udatpg_setAppendItemName_4_0
    -#define udatpg_setDateTimeFormat udatpg_setDateTimeFormat_4_0
    -#define udatpg_setDecimal udatpg_setDecimal_4_0
    -#define uenum_close uenum_close_4_0
    -#define uenum_count uenum_count_4_0
    -#define uenum_next uenum_next_4_0
    -#define uenum_nextDefault uenum_nextDefault_4_0
    -#define uenum_openCharStringsEnumeration uenum_openCharStringsEnumeration_4_0
    -#define uenum_openStringEnumeration uenum_openStringEnumeration_4_0
    -#define uenum_reset uenum_reset_4_0
    -#define uenum_unext uenum_unext_4_0
    -#define uenum_unextDefault uenum_unextDefault_4_0
    -#define ufile_close_translit ufile_close_translit_4_0
    -#define ufile_fill_uchar_buffer ufile_fill_uchar_buffer_4_0
    -#define ufile_flush_translit ufile_flush_translit_4_0
    -#define ufile_getch ufile_getch_4_0
    -#define ufile_getch32 ufile_getch32_4_0
    -#define ufmt_64tou ufmt_64tou_4_0
    -#define ufmt_defaultCPToUnicode ufmt_defaultCPToUnicode_4_0
    -#define ufmt_digitvalue ufmt_digitvalue_4_0
    -#define ufmt_isdigit ufmt_isdigit_4_0
    -#define ufmt_ptou ufmt_ptou_4_0
    -#define ufmt_uto64 ufmt_uto64_4_0
    -#define ufmt_utop ufmt_utop_4_0
    -#define uhash_close uhash_close_4_0
    -#define uhash_compareCaselessUnicodeString uhash_compareCaselessUnicodeString_4_0
    -#define uhash_compareChars uhash_compareChars_4_0
    -#define uhash_compareIChars uhash_compareIChars_4_0
    -#define uhash_compareLong uhash_compareLong_4_0
    -#define uhash_compareUChars uhash_compareUChars_4_0
    -#define uhash_compareUnicodeString uhash_compareUnicodeString_4_0
    -#define uhash_count uhash_count_4_0
    -#define uhash_deleteHashtable uhash_deleteHashtable_4_0
    -#define uhash_deleteUVector uhash_deleteUVector_4_0
    -#define uhash_deleteUnicodeString uhash_deleteUnicodeString_4_0
    -#define uhash_equals uhash_equals_4_0
    -#define uhash_find uhash_find_4_0
    -#define uhash_freeBlock uhash_freeBlock_4_0
    -#define uhash_get uhash_get_4_0
    -#define uhash_geti uhash_geti_4_0
    -#define uhash_hashCaselessUnicodeString uhash_hashCaselessUnicodeString_4_0
    -#define uhash_hashChars uhash_hashChars_4_0
    -#define uhash_hashIChars uhash_hashIChars_4_0
    -#define uhash_hashLong uhash_hashLong_4_0
    -#define uhash_hashUChars uhash_hashUChars_4_0
    -#define uhash_hashUCharsN uhash_hashUCharsN_4_0
    -#define uhash_hashUnicodeString uhash_hashUnicodeString_4_0
    -#define uhash_iget uhash_iget_4_0
    -#define uhash_igeti uhash_igeti_4_0
    -#define uhash_init uhash_init_4_0
    -#define uhash_iput uhash_iput_4_0
    -#define uhash_iputi uhash_iputi_4_0
    -#define uhash_iremove uhash_iremove_4_0
    -#define uhash_iremovei uhash_iremovei_4_0
    -#define uhash_nextElement uhash_nextElement_4_0
    -#define uhash_open uhash_open_4_0
    -#define uhash_openSize uhash_openSize_4_0
    -#define uhash_put uhash_put_4_0
    -#define uhash_puti uhash_puti_4_0
    -#define uhash_remove uhash_remove_4_0
    -#define uhash_removeAll uhash_removeAll_4_0
    -#define uhash_removeElement uhash_removeElement_4_0
    -#define uhash_removei uhash_removei_4_0
    -#define uhash_setKeyComparator uhash_setKeyComparator_4_0
    -#define uhash_setKeyDeleter uhash_setKeyDeleter_4_0
    -#define uhash_setKeyHasher uhash_setKeyHasher_4_0
    -#define uhash_setResizePolicy uhash_setResizePolicy_4_0
    -#define uhash_setValueComparator uhash_setValueComparator_4_0
    -#define uhash_setValueDeleter uhash_setValueDeleter_4_0
    -#define uhst_addPropertyStarts uhst_addPropertyStarts_4_0
    -#define uidna_IDNToASCII uidna_IDNToASCII_4_0
    -#define uidna_IDNToUnicode uidna_IDNToUnicode_4_0
    -#define uidna_compare uidna_compare_4_0
    -#define uidna_toASCII uidna_toASCII_4_0
    -#define uidna_toUnicode uidna_toUnicode_4_0
    -#define uiter_current32 uiter_current32_4_0
    -#define uiter_getState uiter_getState_4_0
    -#define uiter_next32 uiter_next32_4_0
    -#define uiter_previous32 uiter_previous32_4_0
    -#define uiter_setCharacterIterator uiter_setCharacterIterator_4_0
    -#define uiter_setReplaceable uiter_setReplaceable_4_0
    -#define uiter_setState uiter_setState_4_0
    -#define uiter_setString uiter_setString_4_0
    -#define uiter_setUTF16BE uiter_setUTF16BE_4_0
    -#define uiter_setUTF8 uiter_setUTF8_4_0
    -#define uloc_acceptLanguage uloc_acceptLanguage_4_0
    -#define uloc_acceptLanguageFromHTTP uloc_acceptLanguageFromHTTP_4_0
    -#define uloc_addLikelySubtags uloc_addLikelySubtags_4_0
    -#define uloc_canonicalize uloc_canonicalize_4_0
    -#define uloc_countAvailable uloc_countAvailable_4_0
    -#define uloc_getAvailable uloc_getAvailable_4_0
    -#define uloc_getBaseName uloc_getBaseName_4_0
    -#define uloc_getCharacterOrientation uloc_getCharacterOrientation_4_0
    -#define uloc_getCountry uloc_getCountry_4_0
    -#define uloc_getDefault uloc_getDefault_4_0
    -#define uloc_getDisplayCountry uloc_getDisplayCountry_4_0
    -#define uloc_getDisplayKeyword uloc_getDisplayKeyword_4_0
    -#define uloc_getDisplayKeywordValue uloc_getDisplayKeywordValue_4_0
    -#define uloc_getDisplayLanguage uloc_getDisplayLanguage_4_0
    -#define uloc_getDisplayName uloc_getDisplayName_4_0
    -#define uloc_getDisplayScript uloc_getDisplayScript_4_0
    -#define uloc_getDisplayVariant uloc_getDisplayVariant_4_0
    -#define uloc_getISO3Country uloc_getISO3Country_4_0
    -#define uloc_getISO3Language uloc_getISO3Language_4_0
    -#define uloc_getISOCountries uloc_getISOCountries_4_0
    -#define uloc_getISOLanguages uloc_getISOLanguages_4_0
    -#define uloc_getKeywordValue uloc_getKeywordValue_4_0
    -#define uloc_getLCID uloc_getLCID_4_0
    -#define uloc_getLanguage uloc_getLanguage_4_0
    -#define uloc_getLineOrientation uloc_getLineOrientation_4_0
    -#define uloc_getLocaleForLCID uloc_getLocaleForLCID_4_0
    -#define uloc_getName uloc_getName_4_0
    -#define uloc_getParent uloc_getParent_4_0
    -#define uloc_getScript uloc_getScript_4_0
    -#define uloc_getVariant uloc_getVariant_4_0
    -#define uloc_minimizeSubtags uloc_minimizeSubtags_4_0
    -#define uloc_openKeywordList uloc_openKeywordList_4_0
    -#define uloc_openKeywords uloc_openKeywords_4_0
    -#define uloc_setDefault uloc_setDefault_4_0
    -#define uloc_setKeywordValue uloc_setKeywordValue_4_0
    -#define ulocdata_close ulocdata_close_4_0
    -#define ulocdata_getDelimiter ulocdata_getDelimiter_4_0
    -#define ulocdata_getExemplarSet ulocdata_getExemplarSet_4_0
    -#define ulocdata_getMeasurementSystem ulocdata_getMeasurementSystem_4_0
    -#define ulocdata_getNoSubstitute ulocdata_getNoSubstitute_4_0
    -#define ulocdata_getPaperSize ulocdata_getPaperSize_4_0
    -#define ulocdata_open ulocdata_open_4_0
    -#define ulocdata_setNoSubstitute ulocdata_setNoSubstitute_4_0
    -#define umsg_applyPattern umsg_applyPattern_4_0
    -#define umsg_autoQuoteApostrophe umsg_autoQuoteApostrophe_4_0
    -#define umsg_clone umsg_clone_4_0
    -#define umsg_close umsg_close_4_0
    -#define umsg_format umsg_format_4_0
    -#define umsg_getLocale umsg_getLocale_4_0
    -#define umsg_open umsg_open_4_0
    -#define umsg_parse umsg_parse_4_0
    -#define umsg_setLocale umsg_setLocale_4_0
    -#define umsg_toPattern umsg_toPattern_4_0
    -#define umsg_vformat umsg_vformat_4_0
    -#define umsg_vparse umsg_vparse_4_0
    -#define umtx_atomic_dec umtx_atomic_dec_4_0
    -#define umtx_atomic_inc umtx_atomic_inc_4_0
    -#define umtx_cleanup umtx_cleanup_4_0
    -#define umtx_destroy umtx_destroy_4_0
    -#define umtx_init umtx_init_4_0
    -#define umtx_lock umtx_lock_4_0
    -#define umtx_unlock umtx_unlock_4_0
    -#define unorm_addPropertyStarts unorm_addPropertyStarts_4_0
    -#define unorm_closeIter unorm_closeIter_4_0
    -#define unorm_compare unorm_compare_4_0
    -#define unorm_compose unorm_compose_4_0
    -#define unorm_concatenate unorm_concatenate_4_0
    -#define unorm_decompose unorm_decompose_4_0
    -#define unorm_getCanonStartSet unorm_getCanonStartSet_4_0
    -#define unorm_getCanonicalDecomposition unorm_getCanonicalDecomposition_4_0
    -#define unorm_getDecomposition unorm_getDecomposition_4_0
    -#define unorm_getFCD16FromCodePoint unorm_getFCD16FromCodePoint_4_0
    -#define unorm_getFCDTrie unorm_getFCDTrie_4_0
    -#define unorm_getNX unorm_getNX_4_0
    -#define unorm_getQuickCheck unorm_getQuickCheck_4_0
    -#define unorm_getUnicodeVersion unorm_getUnicodeVersion_4_0
    -#define unorm_haveData unorm_haveData_4_0
    -#define unorm_internalIsFullCompositionExclusion unorm_internalIsFullCompositionExclusion_4_0
    -#define unorm_internalNormalize unorm_internalNormalize_4_0
    -#define unorm_internalNormalizeWithNX unorm_internalNormalizeWithNX_4_0
    -#define unorm_internalQuickCheck unorm_internalQuickCheck_4_0
    -#define unorm_isCanonSafeStart unorm_isCanonSafeStart_4_0
    -#define unorm_isNFSkippable unorm_isNFSkippable_4_0
    -#define unorm_isNormalized unorm_isNormalized_4_0
    -#define unorm_isNormalizedWithOptions unorm_isNormalizedWithOptions_4_0
    -#define unorm_next unorm_next_4_0
    -#define unorm_normalize unorm_normalize_4_0
    -#define unorm_openIter unorm_openIter_4_0
    -#define unorm_previous unorm_previous_4_0
    -#define unorm_quickCheck unorm_quickCheck_4_0
    -#define unorm_quickCheckWithOptions unorm_quickCheckWithOptions_4_0
    -#define unorm_setIter unorm_setIter_4_0
    -#define unum_applyPattern unum_applyPattern_4_0
    -#define unum_clone unum_clone_4_0
    -#define unum_close unum_close_4_0
    -#define unum_countAvailable unum_countAvailable_4_0
    -#define unum_format unum_format_4_0
    -#define unum_formatDouble unum_formatDouble_4_0
    -#define unum_formatDoubleCurrency unum_formatDoubleCurrency_4_0
    -#define unum_formatInt64 unum_formatInt64_4_0
    -#define unum_getAttribute unum_getAttribute_4_0
    -#define unum_getAvailable unum_getAvailable_4_0
    -#define unum_getDoubleAttribute unum_getDoubleAttribute_4_0
    -#define unum_getLocaleByType unum_getLocaleByType_4_0
    -#define unum_getSymbol unum_getSymbol_4_0
    -#define unum_getTextAttribute unum_getTextAttribute_4_0
    -#define unum_open unum_open_4_0
    -#define unum_parse unum_parse_4_0
    -#define unum_parseDouble unum_parseDouble_4_0
    -#define unum_parseDoubleCurrency unum_parseDoubleCurrency_4_0
    -#define unum_parseInt64 unum_parseInt64_4_0
    -#define unum_setAttribute unum_setAttribute_4_0
    -#define unum_setDoubleAttribute unum_setDoubleAttribute_4_0
    -#define unum_setSymbol unum_setSymbol_4_0
    -#define unum_setTextAttribute unum_setTextAttribute_4_0
    -#define unum_toPattern unum_toPattern_4_0
    -#define upname_swap upname_swap_4_0
    -#define uprops_getSource uprops_getSource_4_0
    -#define upropsvec_addPropertyStarts upropsvec_addPropertyStarts_4_0
    -#define uprv_asciiFromEbcdic uprv_asciiFromEbcdic_4_0
    -#define uprv_asciitolower uprv_asciitolower_4_0
    -#define uprv_ceil uprv_ceil_4_0
    -#define uprv_cnttab_addContraction uprv_cnttab_addContraction_4_0
    -#define uprv_cnttab_changeContraction uprv_cnttab_changeContraction_4_0
    -#define uprv_cnttab_changeLastCE uprv_cnttab_changeLastCE_4_0
    -#define uprv_cnttab_clone uprv_cnttab_clone_4_0
    -#define uprv_cnttab_close uprv_cnttab_close_4_0
    -#define uprv_cnttab_constructTable uprv_cnttab_constructTable_4_0
    -#define uprv_cnttab_findCE uprv_cnttab_findCE_4_0
    -#define uprv_cnttab_findCP uprv_cnttab_findCP_4_0
    -#define uprv_cnttab_getCE uprv_cnttab_getCE_4_0
    -#define uprv_cnttab_insertContraction uprv_cnttab_insertContraction_4_0
    -#define uprv_cnttab_isTailored uprv_cnttab_isTailored_4_0
    -#define uprv_cnttab_open uprv_cnttab_open_4_0
    -#define uprv_cnttab_setContraction uprv_cnttab_setContraction_4_0
    -#define uprv_compareASCIIPropertyNames uprv_compareASCIIPropertyNames_4_0
    -#define uprv_compareEBCDICPropertyNames uprv_compareEBCDICPropertyNames_4_0
    -#define uprv_compareInvAscii uprv_compareInvAscii_4_0
    -#define uprv_compareInvEbcdic uprv_compareInvEbcdic_4_0
    -#define uprv_convertToLCID uprv_convertToLCID_4_0
    -#define uprv_convertToPosix uprv_convertToPosix_4_0
    -#define uprv_copyAscii uprv_copyAscii_4_0
    -#define uprv_copyEbcdic uprv_copyEbcdic_4_0
    -#define uprv_ebcdicFromAscii uprv_ebcdicFromAscii_4_0
    -#define uprv_ebcdictolower uprv_ebcdictolower_4_0
    -#define uprv_fabs uprv_fabs_4_0
    -#define uprv_floor uprv_floor_4_0
    -#define uprv_fmax uprv_fmax_4_0
    -#define uprv_fmin uprv_fmin_4_0
    -#define uprv_fmod uprv_fmod_4_0
    -#define uprv_free uprv_free_4_0
    -#define uprv_getCharNameCharacters uprv_getCharNameCharacters_4_0
    -#define uprv_getDefaultCodepage uprv_getDefaultCodepage_4_0
    -#define uprv_getDefaultLocaleID uprv_getDefaultLocaleID_4_0
    -#define uprv_getInfinity uprv_getInfinity_4_0
    -#define uprv_getMaxCharNameLength uprv_getMaxCharNameLength_4_0
    -#define uprv_getMaxValues uprv_getMaxValues_4_0
    -#define uprv_getNaN uprv_getNaN_4_0
    -#define uprv_getStaticCurrencyName uprv_getStaticCurrencyName_4_0
    -#define uprv_getUTCtime uprv_getUTCtime_4_0
    -#define uprv_haveProperties uprv_haveProperties_4_0
    -#define uprv_init_collIterate uprv_init_collIterate_4_0
    -#define uprv_init_pce uprv_init_pce_4_0
    -#define uprv_int32Comparator uprv_int32Comparator_4_0
    -#define uprv_isInfinite uprv_isInfinite_4_0
    -#define uprv_isInvariantString uprv_isInvariantString_4_0
    -#define uprv_isInvariantUString uprv_isInvariantUString_4_0
    -#define uprv_isNaN uprv_isNaN_4_0
    -#define uprv_isNegativeInfinity uprv_isNegativeInfinity_4_0
    -#define uprv_isPositiveInfinity uprv_isPositiveInfinity_4_0
    -#define uprv_isRuleWhiteSpace uprv_isRuleWhiteSpace_4_0
    -#define uprv_itou uprv_itou_4_0
    -#define uprv_log uprv_log_4_0
    -#define uprv_malloc uprv_malloc_4_0
    -#define uprv_mapFile uprv_mapFile_4_0
    -#define uprv_max uprv_max_4_0
    -#define uprv_maxMantissa uprv_maxMantissa_4_0
    -#define uprv_maximumPtr uprv_maximumPtr_4_0
    -#define uprv_min uprv_min_4_0
    -#define uprv_modf uprv_modf_4_0
    -#define uprv_openRuleWhiteSpaceSet uprv_openRuleWhiteSpaceSet_4_0
    -#define uprv_parseCurrency uprv_parseCurrency_4_0
    -#define uprv_pathIsAbsolute uprv_pathIsAbsolute_4_0
    -#define uprv_pow uprv_pow_4_0
    -#define uprv_pow10 uprv_pow10_4_0
    -#define uprv_realloc uprv_realloc_4_0
    -#define uprv_round uprv_round_4_0
    -#define uprv_sortArray uprv_sortArray_4_0
    -#define uprv_strCompare uprv_strCompare_4_0
    -#define uprv_strdup uprv_strdup_4_0
    -#define uprv_strndup uprv_strndup_4_0
    -#define uprv_syntaxError uprv_syntaxError_4_0
    -#define uprv_timezone uprv_timezone_4_0
    -#define uprv_toupper uprv_toupper_4_0
    -#define uprv_trunc uprv_trunc_4_0
    -#define uprv_tzname uprv_tzname_4_0
    -#define uprv_tzset uprv_tzset_4_0
    -#define uprv_uca_addAnElement uprv_uca_addAnElement_4_0
    -#define uprv_uca_assembleTable uprv_uca_assembleTable_4_0
    -#define uprv_uca_canonicalClosure uprv_uca_canonicalClosure_4_0
    -#define uprv_uca_closeTempTable uprv_uca_closeTempTable_4_0
    -#define uprv_uca_getCodePointFromRaw uprv_uca_getCodePointFromRaw_4_0
    -#define uprv_uca_getImplicitFromRaw uprv_uca_getImplicitFromRaw_4_0
    -#define uprv_uca_getRawFromCodePoint uprv_uca_getRawFromCodePoint_4_0
    -#define uprv_uca_getRawFromImplicit uprv_uca_getRawFromImplicit_4_0
    -#define uprv_uca_initImplicitConstants uprv_uca_initImplicitConstants_4_0
    -#define uprv_uca_initTempTable uprv_uca_initTempTable_4_0
    -#define uprv_uint16Comparator uprv_uint16Comparator_4_0
    -#define uprv_uint32Comparator uprv_uint32Comparator_4_0
    -#define uprv_unmapFile uprv_unmapFile_4_0
    -#define uregex_appendReplacement uregex_appendReplacement_4_0
    -#define uregex_appendTail uregex_appendTail_4_0
    -#define uregex_clone uregex_clone_4_0
    -#define uregex_close uregex_close_4_0
    -#define uregex_end uregex_end_4_0
    -#define uregex_find uregex_find_4_0
    -#define uregex_findNext uregex_findNext_4_0
    -#define uregex_flags uregex_flags_4_0
    -#define uregex_getMatchCallback uregex_getMatchCallback_4_0
    -#define uregex_getStackLimit uregex_getStackLimit_4_0
    -#define uregex_getText uregex_getText_4_0
    -#define uregex_getTimeLimit uregex_getTimeLimit_4_0
    -#define uregex_group uregex_group_4_0
    -#define uregex_groupCount uregex_groupCount_4_0
    -#define uregex_hasAnchoringBounds uregex_hasAnchoringBounds_4_0
    -#define uregex_hasTransparentBounds uregex_hasTransparentBounds_4_0
    -#define uregex_hitEnd uregex_hitEnd_4_0
    -#define uregex_lookingAt uregex_lookingAt_4_0
    -#define uregex_matches uregex_matches_4_0
    -#define uregex_open uregex_open_4_0
    -#define uregex_openC uregex_openC_4_0
    -#define uregex_pattern uregex_pattern_4_0
    -#define uregex_regionEnd uregex_regionEnd_4_0
    -#define uregex_regionStart uregex_regionStart_4_0
    -#define uregex_replaceAll uregex_replaceAll_4_0
    -#define uregex_replaceFirst uregex_replaceFirst_4_0
    -#define uregex_requireEnd uregex_requireEnd_4_0
    -#define uregex_reset uregex_reset_4_0
    -#define uregex_setMatchCallback uregex_setMatchCallback_4_0
    -#define uregex_setRegion uregex_setRegion_4_0
    -#define uregex_setStackLimit uregex_setStackLimit_4_0
    -#define uregex_setText uregex_setText_4_0
    -#define uregex_setTimeLimit uregex_setTimeLimit_4_0
    -#define uregex_split uregex_split_4_0
    -#define uregex_start uregex_start_4_0
    -#define uregex_useAnchoringBounds uregex_useAnchoringBounds_4_0
    -#define uregex_useTransparentBounds uregex_useTransparentBounds_4_0
    -#define ures_close ures_close_4_0
    -#define ures_copyResb ures_copyResb_4_0
    -#define ures_countArrayItems ures_countArrayItems_4_0
    -#define ures_findResource ures_findResource_4_0
    -#define ures_findSubResource ures_findSubResource_4_0
    -#define ures_getBinary ures_getBinary_4_0
    -#define ures_getByIndex ures_getByIndex_4_0
    -#define ures_getByKey ures_getByKey_4_0
    -#define ures_getByKeyWithFallback ures_getByKeyWithFallback_4_0
    -#define ures_getFunctionalEquivalent ures_getFunctionalEquivalent_4_0
    -#define ures_getInt ures_getInt_4_0
    -#define ures_getIntVector ures_getIntVector_4_0
    -#define ures_getKey ures_getKey_4_0
    -#define ures_getKeywordValues ures_getKeywordValues_4_0
    -#define ures_getLocale ures_getLocale_4_0
    -#define ures_getLocaleByType ures_getLocaleByType_4_0
    -#define ures_getName ures_getName_4_0
    -#define ures_getNextResource ures_getNextResource_4_0
    -#define ures_getNextString ures_getNextString_4_0
    -#define ures_getSize ures_getSize_4_0
    -#define ures_getString ures_getString_4_0
    -#define ures_getStringByIndex ures_getStringByIndex_4_0
    -#define ures_getStringByKey ures_getStringByKey_4_0
    -#define ures_getStringByKeyWithFallback ures_getStringByKeyWithFallback_4_0
    -#define ures_getType ures_getType_4_0
    -#define ures_getUInt ures_getUInt_4_0
    -#define ures_getUTF8String ures_getUTF8String_4_0
    -#define ures_getUTF8StringByIndex ures_getUTF8StringByIndex_4_0
    -#define ures_getUTF8StringByKey ures_getUTF8StringByKey_4_0
    -#define ures_getVersion ures_getVersion_4_0
    -#define ures_getVersionNumber ures_getVersionNumber_4_0
    -#define ures_hasNext ures_hasNext_4_0
    -#define ures_initStackObject ures_initStackObject_4_0
    -#define ures_open ures_open_4_0
    -#define ures_openAvailableLocales ures_openAvailableLocales_4_0
    -#define ures_openDirect ures_openDirect_4_0
    -#define ures_openFillIn ures_openFillIn_4_0
    -#define ures_openU ures_openU_4_0
    -#define ures_resetIterator ures_resetIterator_4_0
    -#define ures_swap ures_swap_4_0
    -#define uscript_closeRun uscript_closeRun_4_0
    -#define uscript_getCode uscript_getCode_4_0
    -#define uscript_getName uscript_getName_4_0
    -#define uscript_getScript uscript_getScript_4_0
    -#define uscript_getShortName uscript_getShortName_4_0
    -#define uscript_nextRun uscript_nextRun_4_0
    -#define uscript_openRun uscript_openRun_4_0
    -#define uscript_resetRun uscript_resetRun_4_0
    -#define uscript_setRunText uscript_setRunText_4_0
    -#define usearch_close usearch_close_4_0
    -#define usearch_first usearch_first_4_0
    -#define usearch_following usearch_following_4_0
    -#define usearch_getAttribute usearch_getAttribute_4_0
    -#define usearch_getBreakIterator usearch_getBreakIterator_4_0
    -#define usearch_getCollator usearch_getCollator_4_0
    -#define usearch_getMatchedLength usearch_getMatchedLength_4_0
    -#define usearch_getMatchedStart usearch_getMatchedStart_4_0
    -#define usearch_getMatchedText usearch_getMatchedText_4_0
    -#define usearch_getOffset usearch_getOffset_4_0
    -#define usearch_getPattern usearch_getPattern_4_0
    -#define usearch_getText usearch_getText_4_0
    -#define usearch_handleNextCanonical usearch_handleNextCanonical_4_0
    -#define usearch_handleNextExact usearch_handleNextExact_4_0
    -#define usearch_handlePreviousCanonical usearch_handlePreviousCanonical_4_0
    -#define usearch_handlePreviousExact usearch_handlePreviousExact_4_0
    -#define usearch_last usearch_last_4_0
    -#define usearch_next usearch_next_4_0
    -#define usearch_open usearch_open_4_0
    -#define usearch_openFromCollator usearch_openFromCollator_4_0
    -#define usearch_preceding usearch_preceding_4_0
    -#define usearch_previous usearch_previous_4_0
    -#define usearch_reset usearch_reset_4_0
    -#define usearch_search usearch_search_4_0
    -#define usearch_searchBackwards usearch_searchBackwards_4_0
    -#define usearch_setAttribute usearch_setAttribute_4_0
    -#define usearch_setBreakIterator usearch_setBreakIterator_4_0
    -#define usearch_setCollator usearch_setCollator_4_0
    -#define usearch_setOffset usearch_setOffset_4_0
    -#define usearch_setPattern usearch_setPattern_4_0
    -#define usearch_setText usearch_setText_4_0
    -#define uset_add uset_add_4_0
    -#define uset_addAll uset_addAll_4_0
    -#define uset_addAllCodePoints uset_addAllCodePoints_4_0
    -#define uset_addRange uset_addRange_4_0
    -#define uset_addString uset_addString_4_0
    -#define uset_applyIntPropertyValue uset_applyIntPropertyValue_4_0
    -#define uset_applyPattern uset_applyPattern_4_0
    -#define uset_applyPropertyAlias uset_applyPropertyAlias_4_0
    -#define uset_charAt uset_charAt_4_0
    -#define uset_clear uset_clear_4_0
    -#define uset_clone uset_clone_4_0
    -#define uset_cloneAsThawed uset_cloneAsThawed_4_0
    -#define uset_close uset_close_4_0
    -#define uset_compact uset_compact_4_0
    -#define uset_complement uset_complement_4_0
    -#define uset_complementAll uset_complementAll_4_0
    -#define uset_contains uset_contains_4_0
    -#define uset_containsAll uset_containsAll_4_0
    -#define uset_containsAllCodePoints uset_containsAllCodePoints_4_0
    -#define uset_containsNone uset_containsNone_4_0
    -#define uset_containsRange uset_containsRange_4_0
    -#define uset_containsSome uset_containsSome_4_0
    -#define uset_containsString uset_containsString_4_0
    -#define uset_equals uset_equals_4_0
    -#define uset_freeze uset_freeze_4_0
    -#define uset_getItem uset_getItem_4_0
    -#define uset_getItemCount uset_getItemCount_4_0
    -#define uset_getSerializedRange uset_getSerializedRange_4_0
    -#define uset_getSerializedRangeCount uset_getSerializedRangeCount_4_0
    -#define uset_getSerializedSet uset_getSerializedSet_4_0
    -#define uset_indexOf uset_indexOf_4_0
    -#define uset_isEmpty uset_isEmpty_4_0
    -#define uset_isFrozen uset_isFrozen_4_0
    -#define uset_open uset_open_4_0
    -#define uset_openPattern uset_openPattern_4_0
    -#define uset_openPatternOptions uset_openPatternOptions_4_0
    -#define uset_remove uset_remove_4_0
    -#define uset_removeAll uset_removeAll_4_0
    -#define uset_removeRange uset_removeRange_4_0
    -#define uset_removeString uset_removeString_4_0
    -#define uset_resemblesPattern uset_resemblesPattern_4_0
    -#define uset_retain uset_retain_4_0
    -#define uset_retainAll uset_retainAll_4_0
    -#define uset_serialize uset_serialize_4_0
    -#define uset_serializedContains uset_serializedContains_4_0
    -#define uset_set uset_set_4_0
    -#define uset_setSerializedToOne uset_setSerializedToOne_4_0
    -#define uset_size uset_size_4_0
    -#define uset_span uset_span_4_0
    -#define uset_spanBack uset_spanBack_4_0
    -#define uset_spanBackUTF8 uset_spanBackUTF8_4_0
    -#define uset_spanUTF8 uset_spanUTF8_4_0
    -#define uset_toPattern uset_toPattern_4_0
    -#define usprep_close usprep_close_4_0
    -#define usprep_open usprep_open_4_0
    -#define usprep_prepare usprep_prepare_4_0
    -#define usprep_swap usprep_swap_4_0
    -#define ustr_foldCase ustr_foldCase_4_0
    -#define ustr_toLower ustr_toLower_4_0
    -#define ustr_toTitle ustr_toTitle_4_0
    -#define ustr_toUpper ustr_toUpper_4_0
    -#define utext_char32At utext_char32At_4_0
    -#define utext_clone utext_clone_4_0
    -#define utext_close utext_close_4_0
    -#define utext_copy utext_copy_4_0
    -#define utext_current32 utext_current32_4_0
    -#define utext_equals utext_equals_4_0
    -#define utext_extract utext_extract_4_0
    -#define utext_freeze utext_freeze_4_0
    -#define utext_getNativeIndex utext_getNativeIndex_4_0
    -#define utext_getPreviousNativeIndex utext_getPreviousNativeIndex_4_0
    -#define utext_hasMetaData utext_hasMetaData_4_0
    -#define utext_isLengthExpensive utext_isLengthExpensive_4_0
    -#define utext_isWritable utext_isWritable_4_0
    -#define utext_moveIndex32 utext_moveIndex32_4_0
    -#define utext_nativeLength utext_nativeLength_4_0
    -#define utext_next32 utext_next32_4_0
    -#define utext_next32From utext_next32From_4_0
    -#define utext_openCharacterIterator utext_openCharacterIterator_4_0
    -#define utext_openConstUnicodeString utext_openConstUnicodeString_4_0
    -#define utext_openReplaceable utext_openReplaceable_4_0
    -#define utext_openUChars utext_openUChars_4_0
    -#define utext_openUTF8 utext_openUTF8_4_0
    -#define utext_openUnicodeString utext_openUnicodeString_4_0
    -#define utext_previous32 utext_previous32_4_0
    -#define utext_previous32From utext_previous32From_4_0
    -#define utext_replace utext_replace_4_0
    -#define utext_setNativeIndex utext_setNativeIndex_4_0
    -#define utext_setup utext_setup_4_0
    -#define utf8_appendCharSafeBody utf8_appendCharSafeBody_4_0
    -#define utf8_back1SafeBody utf8_back1SafeBody_4_0
    -#define utf8_countTrailBytes utf8_countTrailBytes_4_0
    -#define utf8_nextCharSafeBody utf8_nextCharSafeBody_4_0
    -#define utf8_prevCharSafeBody utf8_prevCharSafeBody_4_0
    -#define utmscale_fromInt64 utmscale_fromInt64_4_0
    -#define utmscale_getTimeScaleValue utmscale_getTimeScaleValue_4_0
    -#define utmscale_toInt64 utmscale_toInt64_4_0
    -#define utrace_cleanup utrace_cleanup_4_0
    -#define utrace_data utrace_data_4_0
    -#define utrace_entry utrace_entry_4_0
    -#define utrace_exit utrace_exit_4_0
    -#define utrace_format utrace_format_4_0
    -#define utrace_functionName utrace_functionName_4_0
    -#define utrace_getFunctions utrace_getFunctions_4_0
    -#define utrace_getLevel utrace_getLevel_4_0
    -#define utrace_level utrace_level_4_0
    -#define utrace_setFunctions utrace_setFunctions_4_0
    -#define utrace_setLevel utrace_setLevel_4_0
    -#define utrace_vformat utrace_vformat_4_0
    -#define utrans_clone utrans_clone_4_0
    -#define utrans_close utrans_close_4_0
    -#define utrans_countAvailableIDs utrans_countAvailableIDs_4_0
    -#define utrans_getAvailableID utrans_getAvailableID_4_0
    -#define utrans_getID utrans_getID_4_0
    -#define utrans_getUnicodeID utrans_getUnicodeID_4_0
    -#define utrans_open utrans_open_4_0
    -#define utrans_openIDs utrans_openIDs_4_0
    -#define utrans_openInverse utrans_openInverse_4_0
    -#define utrans_openU utrans_openU_4_0
    -#define utrans_register utrans_register_4_0
    -#define utrans_rep_caseContextIterator utrans_rep_caseContextIterator_4_0
    -#define utrans_setFilter utrans_setFilter_4_0
    -#define utrans_stripRules utrans_stripRules_4_0
    -#define utrans_trans utrans_trans_4_0
    -#define utrans_transIncremental utrans_transIncremental_4_0
    -#define utrans_transIncrementalUChars utrans_transIncrementalUChars_4_0
    -#define utrans_transUChars utrans_transUChars_4_0
    -#define utrans_unregister utrans_unregister_4_0
    -#define utrans_unregisterID utrans_unregisterID_4_0
    -#define utrie_clone utrie_clone_4_0
    -#define utrie_close utrie_close_4_0
    -#define utrie_defaultGetFoldingOffset utrie_defaultGetFoldingOffset_4_0
    -#define utrie_enum utrie_enum_4_0
    -#define utrie_get32 utrie_get32_4_0
    -#define utrie_getData utrie_getData_4_0
    -#define utrie_open utrie_open_4_0
    -#define utrie_serialize utrie_serialize_4_0
    -#define utrie_set32 utrie_set32_4_0
    -#define utrie_setRange32 utrie_setRange32_4_0
    -#define utrie_swap utrie_swap_4_0
    -#define utrie_unserialize utrie_unserialize_4_0
    -#define utrie_unserializeDummy utrie_unserializeDummy_4_0
    -/* C++ class names renaming defines */
    -
    -#ifdef XP_CPLUSPLUS
    -#if !U_HAVE_NAMESPACE
    -
    -#define AbsoluteValueSubstitution AbsoluteValueSubstitution_4_0
    -#define AlternateSubstitutionSubtable AlternateSubstitutionSubtable_4_0
    -#define AnchorTable AnchorTable_4_0
    -#define AndConstraint AndConstraint_4_0
    -#define AnnualTimeZoneRule AnnualTimeZoneRule_4_0
    -#define AnyTransliterator AnyTransliterator_4_0
    -#define ArabicOpenTypeLayoutEngine ArabicOpenTypeLayoutEngine_4_0
    -#define ArabicShaping ArabicShaping_4_0
    -#define BMPSet BMPSet_4_0
    -#define BasicCalendarFactory BasicCalendarFactory_4_0
    -#define BasicTimeZone BasicTimeZone_4_0
    -#define BinarySearchLookupTable BinarySearchLookupTable_4_0
    -#define BreakIterator BreakIterator_4_0
    -#define BreakTransliterator BreakTransliterator_4_0
    -#define BuddhistCalendar BuddhistCalendar_4_0
    -#define BuildCompactTrieHorizontalNode BuildCompactTrieHorizontalNode_4_0
    -#define BuildCompactTrieNode BuildCompactTrieNode_4_0
    -#define BuildCompactTrieVerticalNode BuildCompactTrieVerticalNode_4_0
    -#define CEBuffer CEBuffer_4_0
    -#define CECalendar CECalendar_4_0
    -#define CFactory CFactory_4_0
    -#define Calendar Calendar_4_0
    -#define CalendarAstronomer CalendarAstronomer_4_0
    -#define CalendarCache CalendarCache_4_0
    -#define CalendarData CalendarData_4_0
    -#define CalendarService CalendarService_4_0
    -#define CanonMarkFilter CanonMarkFilter_4_0
    -#define CanonShaping CanonShaping_4_0
    -#define CanonicalIterator CanonicalIterator_4_0
    -#define CaseMapTransliterator CaseMapTransliterator_4_0
    -#define ChainingContextualSubstitutionFormat1Subtable ChainingContextualSubstitutionFormat1Subtable_4_0
    -#define ChainingContextualSubstitutionFormat2Subtable ChainingContextualSubstitutionFormat2Subtable_4_0
    -#define ChainingContextualSubstitutionFormat3Subtable ChainingContextualSubstitutionFormat3Subtable_4_0
    -#define ChainingContextualSubstitutionSubtable ChainingContextualSubstitutionSubtable_4_0
    -#define CharSubstitutionFilter CharSubstitutionFilter_4_0
    -#define CharacterIterator CharacterIterator_4_0
    -#define CharacterNode CharacterNode_4_0
    -#define CharsetDetector CharsetDetector_4_0
    -#define CharsetMatch CharsetMatch_4_0
    -#define CharsetRecog_2022 CharsetRecog_2022_4_0
    -#define CharsetRecog_2022CN CharsetRecog_2022CN_4_0
    -#define CharsetRecog_2022JP CharsetRecog_2022JP_4_0
    -#define CharsetRecog_2022KR CharsetRecog_2022KR_4_0
    -#define CharsetRecog_8859_1 CharsetRecog_8859_1_4_0
    -#define CharsetRecog_8859_1_da CharsetRecog_8859_1_da_4_0
    -#define CharsetRecog_8859_1_de CharsetRecog_8859_1_de_4_0
    -#define CharsetRecog_8859_1_en CharsetRecog_8859_1_en_4_0
    -#define CharsetRecog_8859_1_es CharsetRecog_8859_1_es_4_0
    -#define CharsetRecog_8859_1_fr CharsetRecog_8859_1_fr_4_0
    -#define CharsetRecog_8859_1_it CharsetRecog_8859_1_it_4_0
    -#define CharsetRecog_8859_1_nl CharsetRecog_8859_1_nl_4_0
    -#define CharsetRecog_8859_1_no CharsetRecog_8859_1_no_4_0
    -#define CharsetRecog_8859_1_pt CharsetRecog_8859_1_pt_4_0
    -#define CharsetRecog_8859_1_sv CharsetRecog_8859_1_sv_4_0
    -#define CharsetRecog_8859_2 CharsetRecog_8859_2_4_0
    -#define CharsetRecog_8859_2_cs CharsetRecog_8859_2_cs_4_0
    -#define CharsetRecog_8859_2_hu CharsetRecog_8859_2_hu_4_0
    -#define CharsetRecog_8859_2_pl CharsetRecog_8859_2_pl_4_0
    -#define CharsetRecog_8859_2_ro CharsetRecog_8859_2_ro_4_0
    -#define CharsetRecog_8859_5 CharsetRecog_8859_5_4_0
    -#define CharsetRecog_8859_5_ru CharsetRecog_8859_5_ru_4_0
    -#define CharsetRecog_8859_6 CharsetRecog_8859_6_4_0
    -#define CharsetRecog_8859_6_ar CharsetRecog_8859_6_ar_4_0
    -#define CharsetRecog_8859_7 CharsetRecog_8859_7_4_0
    -#define CharsetRecog_8859_7_el CharsetRecog_8859_7_el_4_0
    -#define CharsetRecog_8859_8 CharsetRecog_8859_8_4_0
    -#define CharsetRecog_8859_8_I_he CharsetRecog_8859_8_I_he_4_0
    -#define CharsetRecog_8859_8_he CharsetRecog_8859_8_he_4_0
    -#define CharsetRecog_8859_9 CharsetRecog_8859_9_4_0
    -#define CharsetRecog_8859_9_tr CharsetRecog_8859_9_tr_4_0
    -#define CharsetRecog_KOI8_R CharsetRecog_KOI8_R_4_0
    -#define CharsetRecog_UTF8 CharsetRecog_UTF8_4_0
    -#define CharsetRecog_UTF_16_BE CharsetRecog_UTF_16_BE_4_0
    -#define CharsetRecog_UTF_16_LE CharsetRecog_UTF_16_LE_4_0
    -#define CharsetRecog_UTF_32 CharsetRecog_UTF_32_4_0
    -#define CharsetRecog_UTF_32_BE CharsetRecog_UTF_32_BE_4_0
    -#define CharsetRecog_UTF_32_LE CharsetRecog_UTF_32_LE_4_0
    -#define CharsetRecog_Unicode CharsetRecog_Unicode_4_0
    -#define CharsetRecog_big5 CharsetRecog_big5_4_0
    -#define CharsetRecog_euc CharsetRecog_euc_4_0
    -#define CharsetRecog_euc_jp CharsetRecog_euc_jp_4_0
    -#define CharsetRecog_euc_kr CharsetRecog_euc_kr_4_0
    -#define CharsetRecog_gb_18030 CharsetRecog_gb_18030_4_0
    -#define CharsetRecog_mbcs CharsetRecog_mbcs_4_0
    -#define CharsetRecog_sbcs CharsetRecog_sbcs_4_0
    -#define CharsetRecog_sjis CharsetRecog_sjis_4_0
    -#define CharsetRecog_windows_1251 CharsetRecog_windows_1251_4_0
    -#define CharsetRecog_windows_1256 CharsetRecog_windows_1256_4_0
    -#define CharsetRecognizer CharsetRecognizer_4_0
    -#define ChineseCalendar ChineseCalendar_4_0
    -#define ChoiceFormat ChoiceFormat_4_0
    -#define ClassDefFormat1Table ClassDefFormat1Table_4_0
    -#define ClassDefFormat2Table ClassDefFormat2Table_4_0
    -#define ClassDefinitionTable ClassDefinitionTable_4_0
    -#define CollationElementIterator CollationElementIterator_4_0
    -#define CollationKey CollationKey_4_0
    -#define CollationLocaleListEnumeration CollationLocaleListEnumeration_4_0
    -#define Collator Collator_4_0
    -#define CollatorFactory CollatorFactory_4_0
    -#define CompactTrieDictionary CompactTrieDictionary_4_0
    -#define CompactTrieEnumeration CompactTrieEnumeration_4_0
    -#define CompoundTransliterator CompoundTransliterator_4_0
    -#define ContextualGlyphSubstitutionProcessor ContextualGlyphSubstitutionProcessor_4_0
    -#define ContextualSubstitutionBase ContextualSubstitutionBase_4_0
    -#define ContextualSubstitutionFormat1Subtable ContextualSubstitutionFormat1Subtable_4_0
    -#define ContextualSubstitutionFormat2Subtable ContextualSubstitutionFormat2Subtable_4_0
    -#define ContextualSubstitutionFormat3Subtable ContextualSubstitutionFormat3Subtable_4_0
    -#define ContextualSubstitutionSubtable ContextualSubstitutionSubtable_4_0
    -#define CopticCalendar CopticCalendar_4_0
    -#define CoverageFormat1Table CoverageFormat1Table_4_0
    -#define CoverageFormat2Table CoverageFormat2Table_4_0
    -#define CoverageTable CoverageTable_4_0
    -#define CurrencyAmount CurrencyAmount_4_0
    -#define CurrencyFormat CurrencyFormat_4_0
    -#define CurrencyUnit CurrencyUnit_4_0
    -#define CursiveAttachmentSubtable CursiveAttachmentSubtable_4_0
    -#define DTRedundantEnumeration DTRedundantEnumeration_4_0
    -#define DTSkeletonEnumeration DTSkeletonEnumeration_4_0
    -#define DateFormat DateFormat_4_0
    -#define DateFormatSymbols DateFormatSymbols_4_0
    -#define DateInterval DateInterval_4_0
    -#define DateIntervalFormat DateIntervalFormat_4_0
    -#define DateIntervalInfo DateIntervalInfo_4_0
    -#define DateTimeMatcher DateTimeMatcher_4_0
    -#define DateTimePatternGenerator DateTimePatternGenerator_4_0
    -#define DateTimeRule DateTimeRule_4_0
    -#define DecimalFormat DecimalFormat_4_0
    -#define DecimalFormatSymbols DecimalFormatSymbols_4_0
    -#define DefaultCalendarFactory DefaultCalendarFactory_4_0
    -#define DefaultCharMapper DefaultCharMapper_4_0
    -#define DeviceTable DeviceTable_4_0
    -#define DictionaryBreakEngine DictionaryBreakEngine_4_0
    -#define DigitList DigitList_4_0
    -#define DistanceInfo DistanceInfo_4_0
    -#define Entry Entry_4_0
    -#define EnumToOffset EnumToOffset_4_0
    -#define EscapeTransliterator EscapeTransliterator_4_0
    -#define EthiopicCalendar EthiopicCalendar_4_0
    -#define EventListener EventListener_4_0
    -#define ExtensionSubtable ExtensionSubtable_4_0
    -#define FeatureListTable FeatureListTable_4_0
    -#define FieldPosition FieldPosition_4_0
    -#define FontRuns FontRuns_4_0
    -#define Format Format_4_0
    -#define Format1AnchorTable Format1AnchorTable_4_0
    -#define Format2AnchorTable Format2AnchorTable_4_0
    -#define Format3AnchorTable Format3AnchorTable_4_0
    -#define FormatNameEnumeration FormatNameEnumeration_4_0
    -#define FormatParser FormatParser_4_0
    -#define Formattable Formattable_4_0
    -#define ForwardCharacterIterator ForwardCharacterIterator_4_0
    -#define FractionalPartSubstitution FractionalPartSubstitution_4_0
    -#define FunctionReplacer FunctionReplacer_4_0
    -#define GDEFMarkFilter GDEFMarkFilter_4_0
    -#define GXLayoutEngine GXLayoutEngine_4_0
    -#define GlyphDefinitionTableHeader GlyphDefinitionTableHeader_4_0
    -#define GlyphIterator GlyphIterator_4_0
    -#define GlyphLookupTableHeader GlyphLookupTableHeader_4_0
    -#define GlyphPositionAdjustments GlyphPositionAdjustments_4_0
    -#define GlyphPositioningLookupProcessor GlyphPositioningLookupProcessor_4_0
    -#define GlyphPositioningTableHeader GlyphPositioningTableHeader_4_0
    -#define GlyphSubstitutionLookupProcessor GlyphSubstitutionLookupProcessor_4_0
    -#define GlyphSubstitutionTableHeader GlyphSubstitutionTableHeader_4_0
    -#define Grego Grego_4_0
    -#define GregorianCalendar GregorianCalendar_4_0
    -#define HanOpenTypeLayoutEngine HanOpenTypeLayoutEngine_4_0
    -#define HangulOpenTypeLayoutEngine HangulOpenTypeLayoutEngine_4_0
    -#define HebrewCalendar HebrewCalendar_4_0
    -#define ICUBreakIteratorFactory ICUBreakIteratorFactory_4_0
    -#define ICUBreakIteratorService ICUBreakIteratorService_4_0
    -#define ICUCollatorFactory ICUCollatorFactory_4_0
    -#define ICUCollatorService ICUCollatorService_4_0
    -#define ICULanguageBreakFactory ICULanguageBreakFactory_4_0
    -#define ICULocaleService ICULocaleService_4_0
    -#define ICUNotifier ICUNotifier_4_0
    -#define ICUNumberFormatFactory ICUNumberFormatFactory_4_0
    -#define ICUNumberFormatService ICUNumberFormatService_4_0
    -#define ICUResourceBundleFactory ICUResourceBundleFactory_4_0
    -#define ICUService ICUService_4_0
    -#define ICUServiceFactory ICUServiceFactory_4_0
    -#define ICUServiceKey ICUServiceKey_4_0
    -#define ICU_Utility ICU_Utility_4_0
    -#define IndianCalendar IndianCalendar_4_0
    -#define IndicClassTable IndicClassTable_4_0
    -#define IndicOpenTypeLayoutEngine IndicOpenTypeLayoutEngine_4_0
    -#define IndicRearrangementProcessor IndicRearrangementProcessor_4_0
    -#define IndicReordering IndicReordering_4_0
    -#define InitialTimeZoneRule InitialTimeZoneRule_4_0
    -#define InputText InputText_4_0
    -#define IntegralPartSubstitution IntegralPartSubstitution_4_0
    -#define IslamicCalendar IslamicCalendar_4_0
    -#define IteratedChar IteratedChar_4_0
    -#define JapaneseCalendar JapaneseCalendar_4_0
    -#define KernTable KernTable_4_0
    -#define KeywordEnumeration KeywordEnumeration_4_0
    -#define KhmerClassTable KhmerClassTable_4_0
    -#define KhmerOpenTypeLayoutEngine KhmerOpenTypeLayoutEngine_4_0
    -#define KhmerReordering KhmerReordering_4_0
    -#define LECharMapper LECharMapper_4_0
    -#define LEFontInstance LEFontInstance_4_0
    -#define LEGlyphFilter LEGlyphFilter_4_0
    -#define LEGlyphStorage LEGlyphStorage_4_0
    -#define LEInsertionCallback LEInsertionCallback_4_0
    -#define LEInsertionList LEInsertionList_4_0
    -#define LXUtilities LXUtilities_4_0
    -#define LanguageBreakEngine LanguageBreakEngine_4_0
    -#define LanguageBreakFactory LanguageBreakFactory_4_0
    -#define LayoutEngine LayoutEngine_4_0
    -#define LigatureSubstitutionProcessor LigatureSubstitutionProcessor_4_0
    -#define LigatureSubstitutionSubtable LigatureSubstitutionSubtable_4_0
    -#define LocDataParser LocDataParser_4_0
    -#define Locale Locale_4_0
    -#define LocaleBased LocaleBased_4_0
    -#define LocaleKey LocaleKey_4_0
    -#define LocaleKeyFactory LocaleKeyFactory_4_0
    -#define LocaleRuns LocaleRuns_4_0
    -#define LocaleUtility LocaleUtility_4_0
    -#define LocalizationInfo LocalizationInfo_4_0
    -#define LookupListTable LookupListTable_4_0
    -#define LookupProcessor LookupProcessor_4_0
    -#define LookupSubtable LookupSubtable_4_0
    -#define LookupTable LookupTable_4_0
    -#define LowercaseTransliterator LowercaseTransliterator_4_0
    -#define MPreFixups MPreFixups_4_0
    -#define MarkArray MarkArray_4_0
    -#define MarkToBasePositioningSubtable MarkToBasePositioningSubtable_4_0
    -#define MarkToLigaturePositioningSubtable MarkToLigaturePositioningSubtable_4_0
    -#define MarkToMarkPositioningSubtable MarkToMarkPositioningSubtable_4_0
    -#define Math Math_4_0
    -#define Measure Measure_4_0
    -#define MeasureFormat MeasureFormat_4_0
    -#define MeasureUnit MeasureUnit_4_0
    -#define MessageFormat MessageFormat_4_0
    -#define MessageFormatAdapter MessageFormatAdapter_4_0
    -#define ModulusSubstitution ModulusSubstitution_4_0
    -#define MoonRiseSetCoordFunc MoonRiseSetCoordFunc_4_0
    -#define MoonTimeAngleFunc MoonTimeAngleFunc_4_0
    -#define MorphSubtableHeader MorphSubtableHeader_4_0
    -#define MorphTableHeader MorphTableHeader_4_0
    -#define MultipleSubstitutionSubtable MultipleSubstitutionSubtable_4_0
    -#define MultiplierSubstitution MultiplierSubstitution_4_0
    -#define MutableTrieDictionary MutableTrieDictionary_4_0
    -#define MutableTrieEnumeration MutableTrieEnumeration_4_0
    -#define NFFactory NFFactory_4_0
    -#define NFRule NFRule_4_0
    -#define NFRuleSet NFRuleSet_4_0
    -#define NFSubstitution NFSubstitution_4_0
    -#define NGramParser NGramParser_4_0
    -#define NameToEnum NameToEnum_4_0
    -#define NameUnicodeTransliterator NameUnicodeTransliterator_4_0
    -#define NonContextualGlyphSubstitutionProcessor NonContextualGlyphSubstitutionProcessor_4_0
    -#define NonContiguousEnumToOffset NonContiguousEnumToOffset_4_0
    -#define NormalizationTransliterator NormalizationTransliterator_4_0
    -#define Normalizer Normalizer_4_0
    -#define NullSubstitution NullSubstitution_4_0
    -#define NullTransliterator NullTransliterator_4_0
    -#define NumberFormat NumberFormat_4_0
    -#define NumberFormatFactory NumberFormatFactory_4_0
    -#define NumeratorSubstitution NumeratorSubstitution_4_0
    -#define OlsonTimeZone OlsonTimeZone_4_0
    -#define OpenTypeLayoutEngine OpenTypeLayoutEngine_4_0
    -#define OpenTypeUtilities OpenTypeUtilities_4_0
    -#define OrConstraint OrConstraint_4_0
    -#define PCEBuffer PCEBuffer_4_0
    -#define PairPositioningFormat1Subtable PairPositioningFormat1Subtable_4_0
    -#define PairPositioningFormat2Subtable PairPositioningFormat2Subtable_4_0
    -#define PairPositioningSubtable PairPositioningSubtable_4_0
    -#define ParagraphLayout ParagraphLayout_4_0
    -#define ParseData ParseData_4_0
    -#define ParsePosition ParsePosition_4_0
    -#define PatternMap PatternMap_4_0
    -#define PatternMapIterator PatternMapIterator_4_0
    -#define PersianCalendar PersianCalendar_4_0
    -#define PluralFormat PluralFormat_4_0
    -#define PluralKeywordEnumeration PluralKeywordEnumeration_4_0
    -#define PluralRules PluralRules_4_0
    -#define PropertyAliases PropertyAliases_4_0
    -#define PtnElem PtnElem_4_0
    -#define PtnSkeleton PtnSkeleton_4_0
    -#define Quantifier Quantifier_4_0
    -#define RBBIDataWrapper RBBIDataWrapper_4_0
    -#define RBBINode RBBINode_4_0
    -#define RBBIRuleBuilder RBBIRuleBuilder_4_0
    -#define RBBIRuleScanner RBBIRuleScanner_4_0
    -#define RBBISetBuilder RBBISetBuilder_4_0
    -#define RBBIStateDescriptor RBBIStateDescriptor_4_0
    -#define RBBISymbolTable RBBISymbolTable_4_0
    -#define RBBISymbolTableEntry RBBISymbolTableEntry_4_0
    -#define RBBITableBuilder RBBITableBuilder_4_0
    -#define RCEBuffer RCEBuffer_4_0
    -#define RangeDescriptor RangeDescriptor_4_0
    -#define RegexCImpl RegexCImpl_4_0
    -#define RegexCompile RegexCompile_4_0
    -#define RegexMatcher RegexMatcher_4_0
    -#define RegexPattern RegexPattern_4_0
    -#define RegexStaticSets RegexStaticSets_4_0
    -#define RelativeDateFormat RelativeDateFormat_4_0
    -#define RemoveTransliterator RemoveTransliterator_4_0
    -#define Replaceable Replaceable_4_0
    -#define ReplaceableGlue ReplaceableGlue_4_0
    -#define ResourceBundle ResourceBundle_4_0
    -#define RiseSetCoordFunc RiseSetCoordFunc_4_0
    -#define RuleBasedBreakIterator RuleBasedBreakIterator_4_0
    -#define RuleBasedCollator RuleBasedCollator_4_0
    -#define RuleBasedNumberFormat RuleBasedNumberFormat_4_0
    -#define RuleBasedTimeZone RuleBasedTimeZone_4_0
    -#define RuleBasedTransliterator RuleBasedTransliterator_4_0
    -#define RuleChain RuleChain_4_0
    -#define RuleCharacterIterator RuleCharacterIterator_4_0
    -#define RuleHalf RuleHalf_4_0
    -#define RuleParser RuleParser_4_0
    -#define RunArray RunArray_4_0
    -#define SafeZoneStringFormatPtr SafeZoneStringFormatPtr_4_0
    -#define SameValueSubstitution SameValueSubstitution_4_0
    -#define ScriptListTable ScriptListTable_4_0
    -#define ScriptRunIterator ScriptRunIterator_4_0
    -#define ScriptTable ScriptTable_4_0
    -#define SearchIterator SearchIterator_4_0
    -#define SegmentArrayProcessor SegmentArrayProcessor_4_0
    -#define SegmentSingleProcessor SegmentSingleProcessor_4_0
    -#define ServiceEnumeration ServiceEnumeration_4_0
    -#define ServiceListener ServiceListener_4_0
    -#define SimpleArrayProcessor SimpleArrayProcessor_4_0
    -#define SimpleDateFormat SimpleDateFormat_4_0
    -#define SimpleFactory SimpleFactory_4_0
    -#define SimpleLocaleKeyFactory SimpleLocaleKeyFactory_4_0
    -#define SimpleNumberFormatFactory SimpleNumberFormatFactory_4_0
    -#define SimpleTimeZone SimpleTimeZone_4_0
    -#define SinglePositioningFormat1Subtable SinglePositioningFormat1Subtable_4_0
    -#define SinglePositioningFormat2Subtable SinglePositioningFormat2Subtable_4_0
    -#define SinglePositioningSubtable SinglePositioningSubtable_4_0
    -#define SingleSubstitutionFormat1Subtable SingleSubstitutionFormat1Subtable_4_0
    -#define SingleSubstitutionFormat2Subtable SingleSubstitutionFormat2Subtable_4_0
    -#define SingleSubstitutionSubtable SingleSubstitutionSubtable_4_0
    -#define SingleTableProcessor SingleTableProcessor_4_0
    -#define Spec Spec_4_0
    -#define StateTableProcessor StateTableProcessor_4_0
    -#define StringCharacterIterator StringCharacterIterator_4_0
    -#define StringEnumeration StringEnumeration_4_0
    -#define StringLocalizationInfo StringLocalizationInfo_4_0
    -#define StringMatcher StringMatcher_4_0
    -#define StringPair StringPair_4_0
    -#define StringReplacer StringReplacer_4_0
    -#define StringSearch StringSearch_4_0
    -#define StyleRuns StyleRuns_4_0
    -#define SubstitutionLookup SubstitutionLookup_4_0
    -#define SubtableProcessor SubtableProcessor_4_0
    -#define SunTimeAngleFunc SunTimeAngleFunc_4_0
    -#define SymbolTable SymbolTable_4_0
    -#define TZEnumeration TZEnumeration_4_0
    -#define TaiwanCalendar TaiwanCalendar_4_0
    -#define TernaryNode TernaryNode_4_0
    -#define TextTrieMap TextTrieMap_4_0
    -#define TextTrieMapSearchResultHandler TextTrieMapSearchResultHandler_4_0
    -#define ThaiBreakEngine ThaiBreakEngine_4_0
    -#define ThaiLayoutEngine ThaiLayoutEngine_4_0
    -#define ThaiShaping ThaiShaping_4_0
    -#define TibetanClassTable TibetanClassTable_4_0
    -#define TibetanOpenTypeLayoutEngine TibetanOpenTypeLayoutEngine_4_0
    -#define TibetanReordering TibetanReordering_4_0
    -#define TimeArrayTimeZoneRule TimeArrayTimeZoneRule_4_0
    -#define TimeZone TimeZone_4_0
    -#define TimeZoneRule TimeZoneRule_4_0
    -#define TimeZoneTransition TimeZoneTransition_4_0
    -#define TitlecaseTransliterator TitlecaseTransliterator_4_0
    -#define TransliterationRule TransliterationRule_4_0
    -#define TransliterationRuleData TransliterationRuleData_4_0
    -#define TransliterationRuleSet TransliterationRuleSet_4_0
    -#define Transliterator Transliterator_4_0
    -#define TransliteratorAlias TransliteratorAlias_4_0
    -#define TransliteratorIDParser TransliteratorIDParser_4_0
    -#define TransliteratorParser TransliteratorParser_4_0
    -#define TransliteratorRegistry TransliteratorRegistry_4_0
    -#define TrieWordDictionary TrieWordDictionary_4_0
    -#define TrimmedArrayProcessor TrimmedArrayProcessor_4_0
    -#define UCharCharacterIterator UCharCharacterIterator_4_0
    -#define UCollationPCE UCollationPCE_4_0
    -#define ULocRuns ULocRuns_4_0
    -#define UMemory UMemory_4_0
    -#define UObject UObject_4_0
    -#define URegularExpression URegularExpression_4_0
    -#define UStack UStack_4_0
    -#define UStringEnumeration UStringEnumeration_4_0
    -#define UVector UVector_4_0
    -#define UVector32 UVector32_4_0
    -#define UnescapeTransliterator UnescapeTransliterator_4_0
    -#define UnhandledEngine UnhandledEngine_4_0
    -#define UnicodeArabicOpenTypeLayoutEngine UnicodeArabicOpenTypeLayoutEngine_4_0
    -#define UnicodeFilter UnicodeFilter_4_0
    -#define UnicodeFunctor UnicodeFunctor_4_0
    -#define UnicodeMatcher UnicodeMatcher_4_0
    -#define UnicodeNameTransliterator UnicodeNameTransliterator_4_0
    -#define UnicodeReplacer UnicodeReplacer_4_0
    -#define UnicodeSet UnicodeSet_4_0
    -#define UnicodeSetIterator UnicodeSetIterator_4_0
    -#define UnicodeSetStringSpan UnicodeSetStringSpan_4_0
    -#define UnicodeString UnicodeString_4_0
    -#define UppercaseTransliterator UppercaseTransliterator_4_0
    -#define VTZReader VTZReader_4_0
    -#define VTZWriter VTZWriter_4_0
    -#define VTimeZone VTimeZone_4_0
    -#define ValueRecord ValueRecord_4_0
    -#define ValueRuns ValueRuns_4_0
    -#define ZSFCache ZSFCache_4_0
    -#define ZSFCacheEntry ZSFCacheEntry_4_0
    -#define ZoneMeta ZoneMeta_4_0
    -#define ZoneStringFormat ZoneStringFormat_4_0
    -#define ZoneStringInfo ZoneStringInfo_4_0
    -#define ZoneStringSearchResultHandler ZoneStringSearchResultHandler_4_0
    -#define ZoneStrings ZoneStrings_4_0
    -#define locale_set_default_internal locale_set_default_internal_4_0
    -#define util64_fromDouble util64_fromDouble_4_0
    -#define util64_pow util64_pow_4_0
    -#define util64_tou util64_tou_4_0
    -
    -#endif
    -#endif
    -
    -#endif
    -
    -#endif
  • Benoitc at Feb 13, 2014 at 6:14 pm
    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/unistr.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/unistr.h b/apps/couch_collate/platform/osx/icu/unicode/unistr.h
    deleted file mode 100644
    index 9a96bdc..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/unistr.h
    +++ /dev/null
    @@ -1,4230 +0,0 @@
    -/*
    -**********************************************************************
    -* Copyright (C) 1998-2008, International Business Machines
    -* Corporation and others. All Rights Reserved.
    -**********************************************************************
    -*
    -* File unistr.h
    -*
    -* Modification History:
    -*
    -* Date Name Description
    -* 09/25/98 stephen Creation.
    -* 11/11/98 stephen Changed per 11/9 code review.
    -* 04/20/99 stephen Overhauled per 4/16 code review.
    -* 11/18/99 aliu Made to inherit from Replaceable. Added method
    -* handleReplaceBetween(); other methods unchanged.
    -* 06/25/01 grhoten Remove dependency on iostream.
    -******************************************************************************
    -*/
    -
    -#ifndef UNISTR_H
    -#define UNISTR_H
    -
    -/**
    - * \file
    - * \brief C++ API: Unicode String
    - */
    -
    -#include "unicode/rep.h"
    -
    -struct UConverter; // unicode/ucnv.h
    -class StringThreadTest;
    -
    -#ifndef U_COMPARE_CODE_POINT_ORDER
    -/* see also ustring.h and unorm.h */
    -/**
    - * Option bit for u_strCaseCompare, u_strcasecmp, unorm_compare, etc:
    - * Compare strings in code point order instead of code unit order.
    - * @stable ICU 2.2
    - */
    -#define U_COMPARE_CODE_POINT_ORDER 0x8000
    -#endif
    -
    -#ifndef USTRING_H
    -/**
    - * \ingroup ustring_ustrlen
    - */
    -U_STABLE int32_t U_EXPORT2
    -u_strlen(const UChar *s);
    -#endif
    -
    -U_NAMESPACE_BEGIN
    -
    -class Locale; // unicode/locid.h
    -class StringCharacterIterator;
    -class BreakIterator; // unicode/brkiter.h
    -
    -/* The <iostream> include has been moved to unicode/ustream.h */
    -
    -/**
    - * Constant to be used in the UnicodeString(char *, int32_t, EInvariant) constructor
    - * which constructs a Unicode string from an invariant-character char * string.
    - * About invariant characters see utypes.h.
    - * This constructor has no runtime dependency on conversion code and is
    - * therefore recommended over ones taking a charset name string
    - * (where the empty string "" indicates invariant-character conversion).
    - *
    - * @stable ICU 3.2
    - */
    -#define US_INV U_NAMESPACE_QUALIFIER UnicodeString::kInvariant
    -
    -/**
    - * Unicode String literals in C++.
    - * Dependent on the platform properties, different UnicodeString
    - * constructors should be used to create a UnicodeString object from
    - * a string literal.
    - * The macros are defined for maximum performance.
    - * They work only for strings that contain "invariant characters", i.e.,
    - * only latin letters, digits, and some punctuation.
    - * See utypes.h for details.
    - *
    - * The string parameter must be a C string literal.
    - * The length of the string, not including the terminating
    - * <code>NUL</code>, must be specified as a constant.
    - * The U_STRING_DECL macro should be invoked exactly once for one
    - * such string variable before it is used.
    - * @stable ICU 2.0
    - */
    -#if defined(U_DECLARE_UTF16)
    -# define UNICODE_STRING(cs, _length) U_NAMESPACE_QUALIFIER UnicodeString(TRUE, (const UChar *)U_DECLARE_UTF16(cs), _length)
    -#elif U_SIZEOF_WCHAR_T==U_SIZEOF_UCHAR && (U_CHARSET_FAMILY==U_ASCII_FAMILY || (U_SIZEOF_UCHAR == 2 && defined(U_WCHAR_IS_UTF16)))
    -# define UNICODE_STRING(cs, _length) U_NAMESPACE_QUALIFIER UnicodeString(TRUE, (const UChar *)L ## cs, _length)
    -#elif U_SIZEOF_UCHAR==1 && U_CHARSET_FAMILY==U_ASCII_FAMILY
    -# define UNICODE_STRING(cs, _length) U_NAMESPACE_QUALIFIER UnicodeString(TRUE, (const UChar *)cs, _length)
    -#else
    -# define UNICODE_STRING(cs, _length) U_NAMESPACE_QUALIFIER UnicodeString(cs, _length, US_INV)
    -#endif
    -
    -/**
    - * Unicode String literals in C++.
    - * Dependent on the platform properties, different UnicodeString
    - * constructors should be used to create a UnicodeString object from
    - * a string literal.
    - * The macros are defined for improved performance.
    - * They work only for strings that contain "invariant characters", i.e.,
    - * only latin letters, digits, and some punctuation.
    - * See utypes.h for details.
    - *
    - * The string parameter must be a C string literal.
    - * @stable ICU 2.0
    - */
    -#define UNICODE_STRING_SIMPLE(cs) UNICODE_STRING(cs, -1)
    -
    -/**
    - * UnicodeString is a string class that stores Unicode characters directly and provides
    - * similar functionality as the Java String and StringBuffer classes.
    - * It is a concrete implementation of the abstract class Replaceable (for transliteration).
    - *
    - * The UnicodeString class is not suitable for subclassing.
    - *
    - * <p>For an overview of Unicode strings in C and C++ see the
    - * <a href="http://icu-project.org/userguide/strings.html">User Guide Strings chapter</a>.</p>
    - *
    - * <p>In ICU, a Unicode string consists of 16-bit Unicode <em>code units</em>.
    - * A Unicode character may be stored with either one code unit
    - * (the most common case) or with a matched pair of special code units
    - * ("surrogates"). The data type for code units is UChar.
    - * For single-character handling, a Unicode character code <em>point</em> is a value
    - * in the range 0..0x10ffff. ICU uses the UChar32 type for code points.</p>
    - *
    - * <p>Indexes and offsets into and lengths of strings always count code units, not code points.
    - * This is the same as with multi-byte char* strings in traditional string handling.
    - * Operations on partial strings typically do not test for code point boundaries.
    - * If necessary, the user needs to take care of such boundaries by testing for the code unit
    - * values or by using functions like
    - * UnicodeString::getChar32Start() and UnicodeString::getChar32Limit()
    - * (or, in C, the equivalent macros U16_SET_CP_START() and U16_SET_CP_LIMIT(), see utf.h).</p>
    - *
    - * UnicodeString methods are more lenient with regard to input parameter values
    - * than other ICU APIs. In particular:
    - * - If indexes are out of bounds for a UnicodeString object
    - * (<0 or >length()) then they are "pinned" to the nearest boundary.
    - * - If primitive string pointer values (e.g., const UChar * or char *)
    - * for input strings are NULL, then those input string parameters are treated
    - * as if they pointed to an empty string.
    - * However, this is <em>not</em> the case for char * parameters for charset names
    - * or other IDs.
    - * - Most UnicodeString methods do not take a UErrorCode parameter because
    - * there are usually very few opportunities for failure other than a shortage
    - * of memory, error codes in low-level C++ string methods would be inconvenient,
    - * and the error code as the last parameter (ICU convention) would prevent
    - * the use of default parameter values.
    - * Instead, such methods set the UnicodeString into a "bogus" state
    - * (see isBogus()) if an error occurs.
    - *
    - * In string comparisons, two UnicodeString objects that are both "bogus"
    - * compare equal (to be transitive and prevent endless loops in sorting),
    - * and a "bogus" string compares less than any non-"bogus" one.
    - *
    - * Const UnicodeString methods are thread-safe. Multiple threads can use
    - * const methods on the same UnicodeString object simultaneously,
    - * but non-const methods must not be called concurrently (in multiple threads)
    - * with any other (const or non-const) methods.
    - *
    - * Similarly, const UnicodeString & parameters are thread-safe.
    - * One object may be passed in as such a parameter concurrently in multiple threads.
    - * This includes the const UnicodeString & parameters for
    - * copy construction, assignment, and cloning.
    - *
    - * <p>UnicodeString uses several storage methods.
    - * String contents can be stored inside the UnicodeString object itself,
    - * in an allocated and shared buffer, or in an outside buffer that is "aliased".
    - * Most of this is done transparently, but careful aliasing in particular provides
    - * significant performance improvements.
    - * Also, the internal buffer is accessible via special functions.
    - * For details see the
    - * <a href="http://icu-project.org/userguide/strings.html">User Guide Strings chapter</a>.</p>
    - *
    - * @see utf.h
    - * @see CharacterIterator
    - * @stable ICU 2.0
    - */
    -class U_COMMON_API UnicodeString : public Replaceable
    -{
    -public:
    -
    - /**
    - * Constant to be used in the UnicodeString(char *, int32_t, EInvariant) constructor
    - * which constructs a Unicode string from an invariant-character char * string.
    - * Use the macro US_INV instead of the full qualification for this value.
    - *
    - * @see US_INV
    - * @stable ICU 3.2
    - */
    - enum EInvariant {
    - /**
    - * @see EInvariant
    - * @stable ICU 3.2
    - */
    - kInvariant
    - };
    -
    - //========================================
    - // Read-only operations
    - //========================================
    -
    - /* Comparison - bitwise only - for international comparison use collation */
    -
    - /**
    - * Equality operator. Performs only bitwise comparison.
    - * @param text The UnicodeString to compare to this one.
    - * @return TRUE if <TT>text</TT> contains the same characters as this one,
    - * FALSE otherwise.
    - * @stable ICU 2.0
    - */
    - inline UBool operator== (const UnicodeString& text) const;
    -
    - /**
    - * Inequality operator. Performs only bitwise comparison.
    - * @param text The UnicodeString to compare to this one.
    - * @return FALSE if <TT>text</TT> contains the same characters as this one,
    - * TRUE otherwise.
    - * @stable ICU 2.0
    - */
    - inline UBool operator!= (const UnicodeString& text) const;
    -
    - /**
    - * Greater than operator. Performs only bitwise comparison.
    - * @param text The UnicodeString to compare to this one.
    - * @return TRUE if the characters in this are bitwise
    - * greater than the characters in <code>text</code>, FALSE otherwise
    - * @stable ICU 2.0
    - */
    - inline UBool operator> (const UnicodeString& text) const;
    -
    - /**
    - * Less than operator. Performs only bitwise comparison.
    - * @param text The UnicodeString to compare to this one.
    - * @return TRUE if the characters in this are bitwise
    - * less than the characters in <code>text</code>, FALSE otherwise
    - * @stable ICU 2.0
    - */
    - inline UBool operator< (const UnicodeString& text) const;
    -
    - /**
    - * Greater than or equal operator. Performs only bitwise comparison.
    - * @param text The UnicodeString to compare to this one.
    - * @return TRUE if the characters in this are bitwise
    - * greater than or equal to the characters in <code>text</code>, FALSE otherwise
    - * @stable ICU 2.0
    - */
    - inline UBool operator>= (const UnicodeString& text) const;
    -
    - /**
    - * Less than or equal operator. Performs only bitwise comparison.
    - * @param text The UnicodeString to compare to this one.
    - * @return TRUE if the characters in this are bitwise
    - * less than or equal to the characters in <code>text</code>, FALSE otherwise
    - * @stable ICU 2.0
    - */
    - inline UBool operator<= (const UnicodeString& text) const;
    -
    - /**
    - * Compare the characters bitwise in this UnicodeString to
    - * the characters in <code>text</code>.
    - * @param text The UnicodeString to compare to this one.
    - * @return The result of bitwise character comparison: 0 if this
    - * contains the same characters as <code>text</code>, -1 if the characters in
    - * this are bitwise less than the characters in <code>text</code>, +1 if the
    - * characters in this are bitwise greater than the characters
    - * in <code>text</code>.
    - * @stable ICU 2.0
    - */
    - inline int8_t compare(const UnicodeString& text) const;
    -
    - /**
    - * Compare the characters bitwise in the range
    - * [<TT>start</TT>, <TT>start + length</TT>) with the characters
    - * in <TT>text</TT>
    - * @param start the offset at which the compare operation begins
    - * @param length the number of characters of text to compare.
    - * @param text the other text to be compared against this string.
    - * @return The result of bitwise character comparison: 0 if this
    - * contains the same characters as <code>text</code>, -1 if the characters in
    - * this are bitwise less than the characters in <code>text</code>, +1 if the
    - * characters in this are bitwise greater than the characters
    - * in <code>text</code>.
    - * @stable ICU 2.0
    - */
    - inline int8_t compare(int32_t start,
    - int32_t length,
    - const UnicodeString& text) const;
    -
    - /**
    - * Compare the characters bitwise in the range
    - * [<TT>start</TT>, <TT>start + length</TT>) with the characters
    - * in <TT>srcText</TT> in the range
    - * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>).
    - * @param start the offset at which the compare operation begins
    - * @param length the number of characters in this to compare.
    - * @param srcText the text to be compared
    - * @param srcStart the offset into <TT>srcText</TT> to start comparison
    - * @param srcLength the number of characters in <TT>src</TT> to compare
    - * @return The result of bitwise character comparison: 0 if this
    - * contains the same characters as <code>srcText</code>, -1 if the characters in
    - * this are bitwise less than the characters in <code>srcText</code>, +1 if the
    - * characters in this are bitwise greater than the characters
    - * in <code>srcText</code>.
    - * @stable ICU 2.0
    - */
    - inline int8_t compare(int32_t start,
    - int32_t length,
    - const UnicodeString& srcText,
    - int32_t srcStart,
    - int32_t srcLength) const;
    -
    - /**
    - * Compare the characters bitwise in this UnicodeString with the first
    - * <TT>srcLength</TT> characters in <TT>srcChars</TT>.
    - * @param srcChars The characters to compare to this UnicodeString.
    - * @param srcLength the number of characters in <TT>srcChars</TT> to compare
    - * @return The result of bitwise character comparison: 0 if this
    - * contains the same characters as <code>srcChars</code>, -1 if the characters in
    - * this are bitwise less than the characters in <code>srcChars</code>, +1 if the
    - * characters in this are bitwise greater than the characters
    - * in <code>srcChars</code>.
    - * @stable ICU 2.0
    - */
    - inline int8_t compare(const UChar *srcChars,
    - int32_t srcLength) const;
    -
    - /**
    - * Compare the characters bitwise in the range
    - * [<TT>start</TT>, <TT>start + length</TT>) with the first
    - * <TT>length</TT> characters in <TT>srcChars</TT>
    - * @param start the offset at which the compare operation begins
    - * @param length the number of characters to compare.
    - * @param srcChars the characters to be compared
    - * @return The result of bitwise character comparison: 0 if this
    - * contains the same characters as <code>srcChars</code>, -1 if the characters in
    - * this are bitwise less than the characters in <code>srcChars</code>, +1 if the
    - * characters in this are bitwise greater than the characters
    - * in <code>srcChars</code>.
    - * @stable ICU 2.0
    - */
    - inline int8_t compare(int32_t start,
    - int32_t length,
    - const UChar *srcChars) const;
    -
    - /**
    - * Compare the characters bitwise in the range
    - * [<TT>start</TT>, <TT>start + length</TT>) with the characters
    - * in <TT>srcChars</TT> in the range
    - * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>).
    - * @param start the offset at which the compare operation begins
    - * @param length the number of characters in this to compare
    - * @param srcChars the characters to be compared
    - * @param srcStart the offset into <TT>srcChars</TT> to start comparison
    - * @param srcLength the number of characters in <TT>srcChars</TT> to compare
    - * @return The result of bitwise character comparison: 0 if this
    - * contains the same characters as <code>srcChars</code>, -1 if the characters in
    - * this are bitwise less than the characters in <code>srcChars</code>, +1 if the
    - * characters in this are bitwise greater than the characters
    - * in <code>srcChars</code>.
    - * @stable ICU 2.0
    - */
    - inline int8_t compare(int32_t start,
    - int32_t length,
    - const UChar *srcChars,
    - int32_t srcStart,
    - int32_t srcLength) const;
    -
    - /**
    - * Compare the characters bitwise in the range
    - * [<TT>start</TT>, <TT>limit</TT>) with the characters
    - * in <TT>srcText</TT> in the range
    - * [<TT>srcStart</TT>, <TT>srcLimit</TT>).
    - * @param start the offset at which the compare operation begins
    - * @param limit the offset immediately following the compare operation
    - * @param srcText the text to be compared
    - * @param srcStart the offset into <TT>srcText</TT> to start comparison
    - * @param srcLimit the offset into <TT>srcText</TT> to limit comparison
    - * @return The result of bitwise character comparison: 0 if this
    - * contains the same characters as <code>srcText</code>, -1 if the characters in
    - * this are bitwise less than the characters in <code>srcText</code>, +1 if the
    - * characters in this are bitwise greater than the characters
    - * in <code>srcText</code>.
    - * @stable ICU 2.0
    - */
    - inline int8_t compareBetween(int32_t start,
    - int32_t limit,
    - const UnicodeString& srcText,
    - int32_t srcStart,
    - int32_t srcLimit) const;
    -
    - /**
    - * Compare two Unicode strings in code point order.
    - * The result may be different from the results of compare(), operator<, etc.
    - * if supplementary characters are present:
    - *
    - * In UTF-16, supplementary characters (with code points U+10000 and above) are
    - * stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff,
    - * which means that they compare as less than some other BMP characters like U+feff.
    - * This function compares Unicode strings in code point order.
    - * If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined.
    - *
    - * @param text Another string to compare this one to.
    - * @return a negative/zero/positive integer corresponding to whether
    - * this string is less than/equal to/greater than the second one
    - * in code point order
    - * @stable ICU 2.0
    - */
    - inline int8_t compareCodePointOrder(const UnicodeString& text) const;
    -
    - /**
    - * Compare two Unicode strings in code point order.
    - * The result may be different from the results of compare(), operator<, etc.
    - * if supplementary characters are present:
    - *
    - * In UTF-16, supplementary characters (with code points U+10000 and above) are
    - * stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff,
    - * which means that they compare as less than some other BMP characters like U+feff.
    - * This function compares Unicode strings in code point order.
    - * If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined.
    - *
    - * @param start The start offset in this string at which the compare operation begins.
    - * @param length The number of code units from this string to compare.
    - * @param srcText Another string to compare this one to.
    - * @return a negative/zero/positive integer corresponding to whether
    - * this string is less than/equal to/greater than the second one
    - * in code point order
    - * @stable ICU 2.0
    - */
    - inline int8_t compareCodePointOrder(int32_t start,
    - int32_t length,
    - const UnicodeString& srcText) const;
    -
    - /**
    - * Compare two Unicode strings in code point order.
    - * The result may be different from the results of compare(), operator<, etc.
    - * if supplementary characters are present:
    - *
    - * In UTF-16, supplementary characters (with code points U+10000 and above) are
    - * stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff,
    - * which means that they compare as less than some other BMP characters like U+feff.
    - * This function compares Unicode strings in code point order.
    - * If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined.
    - *
    - * @param start The start offset in this string at which the compare operation begins.
    - * @param length The number of code units from this string to compare.
    - * @param srcText Another string to compare this one to.
    - * @param srcStart The start offset in that string at which the compare operation begins.
    - * @param srcLength The number of code units from that string to compare.
    - * @return a negative/zero/positive integer corresponding to whether
    - * this string is less than/equal to/greater than the second one
    - * in code point order
    - * @stable ICU 2.0
    - */
    - inline int8_t compareCodePointOrder(int32_t start,
    - int32_t length,
    - const UnicodeString& srcText,
    - int32_t srcStart,
    - int32_t srcLength) const;
    -
    - /**
    - * Compare two Unicode strings in code point order.
    - * The result may be different from the results of compare(), operator<, etc.
    - * if supplementary characters are present:
    - *
    - * In UTF-16, supplementary characters (with code points U+10000 and above) are
    - * stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff,
    - * which means that they compare as less than some other BMP characters like U+feff.
    - * This function compares Unicode strings in code point order.
    - * If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined.
    - *
    - * @param srcChars A pointer to another string to compare this one to.
    - * @param srcLength The number of code units from that string to compare.
    - * @return a negative/zero/positive integer corresponding to whether
    - * this string is less than/equal to/greater than the second one
    - * in code point order
    - * @stable ICU 2.0
    - */
    - inline int8_t compareCodePointOrder(const UChar *srcChars,
    - int32_t srcLength) const;
    -
    - /**
    - * Compare two Unicode strings in code point order.
    - * The result may be different from the results of compare(), operator<, etc.
    - * if supplementary characters are present:
    - *
    - * In UTF-16, supplementary characters (with code points U+10000 and above) are
    - * stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff,
    - * which means that they compare as less than some other BMP characters like U+feff.
    - * This function compares Unicode strings in code point order.
    - * If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined.
    - *
    - * @param start The start offset in this string at which the compare operation begins.
    - * @param length The number of code units from this string to compare.
    - * @param srcChars A pointer to another string to compare this one to.
    - * @return a negative/zero/positive integer corresponding to whether
    - * this string is less than/equal to/greater than the second one
    - * in code point order
    - * @stable ICU 2.0
    - */
    - inline int8_t compareCodePointOrder(int32_t start,
    - int32_t length,
    - const UChar *srcChars) const;
    -
    - /**
    - * Compare two Unicode strings in code point order.
    - * The result may be different from the results of compare(), operator<, etc.
    - * if supplementary characters are present:
    - *
    - * In UTF-16, supplementary characters (with code points U+10000 and above) are
    - * stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff,
    - * which means that they compare as less than some other BMP characters like U+feff.
    - * This function compares Unicode strings in code point order.
    - * If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined.
    - *
    - * @param start The start offset in this string at which the compare operation begins.
    - * @param length The number of code units from this string to compare.
    - * @param srcChars A pointer to another string to compare this one to.
    - * @param srcStart The start offset in that string at which the compare operation begins.
    - * @param srcLength The number of code units from that string to compare.
    - * @return a negative/zero/positive integer corresponding to whether
    - * this string is less than/equal to/greater than the second one
    - * in code point order
    - * @stable ICU 2.0
    - */
    - inline int8_t compareCodePointOrder(int32_t start,
    - int32_t length,
    - const UChar *srcChars,
    - int32_t srcStart,
    - int32_t srcLength) const;
    -
    - /**
    - * Compare two Unicode strings in code point order.
    - * The result may be different from the results of compare(), operator<, etc.
    - * if supplementary characters are present:
    - *
    - * In UTF-16, supplementary characters (with code points U+10000 and above) are
    - * stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff,
    - * which means that they compare as less than some other BMP characters like U+feff.
    - * This function compares Unicode strings in code point order.
    - * If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined.
    - *
    - * @param start The start offset in this string at which the compare operation begins.
    - * @param limit The offset after the last code unit from this string to compare.
    - * @param srcText Another string to compare this one to.
    - * @param srcStart The start offset in that string at which the compare operation begins.
    - * @param srcLimit The offset after the last code unit from that string to compare.
    - * @return a negative/zero/positive integer corresponding to whether
    - * this string is less than/equal to/greater than the second one
    - * in code point order
    - * @stable ICU 2.0
    - */
    - inline int8_t compareCodePointOrderBetween(int32_t start,
    - int32_t limit,
    - const UnicodeString& srcText,
    - int32_t srcStart,
    - int32_t srcLimit) const;
    -
    - /**
    - * Compare two strings case-insensitively using full case folding.
    - * This is equivalent to this->foldCase(options).compare(text.foldCase(options)).
    - *
    - * @param text Another string to compare this one to.
    - * @param options A bit set of options:
    - * - U_FOLD_CASE_DEFAULT or 0 is used for default options:
    - * Comparison in code unit order with default case folding.
    - *
    - * - U_COMPARE_CODE_POINT_ORDER
    - * Set to choose code point order instead of code unit order
    - * (see u_strCompare for details).
    - *
    - * - U_FOLD_CASE_EXCLUDE_SPECIAL_I
    - *
    - * @return A negative, zero, or positive integer indicating the comparison result.
    - * @stable ICU 2.0
    - */
    - inline int8_t caseCompare(const UnicodeString& text, uint32_t options) const;
    -
    - /**
    - * Compare two strings case-insensitively using full case folding.
    - * This is equivalent to this->foldCase(options).compare(srcText.foldCase(options)).
    - *
    - * @param start The start offset in this string at which the compare operation begins.
    - * @param length The number of code units from this string to compare.
    - * @param srcText Another string to compare this one to.
    - * @param options A bit set of options:
    - * - U_FOLD_CASE_DEFAULT or 0 is used for default options:
    - * Comparison in code unit order with default case folding.
    - *
    - * - U_COMPARE_CODE_POINT_ORDER
    - * Set to choose code point order instead of code unit order
    - * (see u_strCompare for details).
    - *
    - * - U_FOLD_CASE_EXCLUDE_SPECIAL_I
    - *
    - * @return A negative, zero, or positive integer indicating the comparison result.
    - * @stable ICU 2.0
    - */
    - inline int8_t caseCompare(int32_t start,
    - int32_t length,
    - const UnicodeString& srcText,
    - uint32_t options) const;
    -
    - /**
    - * Compare two strings case-insensitively using full case folding.
    - * This is equivalent to this->foldCase(options).compare(srcText.foldCase(options)).
    - *
    - * @param start The start offset in this string at which the compare operation begins.
    - * @param length The number of code units from this string to compare.
    - * @param srcText Another string to compare this one to.
    - * @param srcStart The start offset in that string at which the compare operation begins.
    - * @param srcLength The number of code units from that string to compare.
    - * @param options A bit set of options:
    - * - U_FOLD_CASE_DEFAULT or 0 is used for default options:
    - * Comparison in code unit order with default case folding.
    - *
    - * - U_COMPARE_CODE_POINT_ORDER
    - * Set to choose code point order instead of code unit order
    - * (see u_strCompare for details).
    - *
    - * - U_FOLD_CASE_EXCLUDE_SPECIAL_I
    - *
    - * @return A negative, zero, or positive integer indicating the comparison result.
    - * @stable ICU 2.0
    - */
    - inline int8_t caseCompare(int32_t start,
    - int32_t length,
    - const UnicodeString& srcText,
    - int32_t srcStart,
    - int32_t srcLength,
    - uint32_t options) const;
    -
    - /**
    - * Compare two strings case-insensitively using full case folding.
    - * This is equivalent to this->foldCase(options).compare(srcChars.foldCase(options)).
    - *
    - * @param srcChars A pointer to another string to compare this one to.
    - * @param srcLength The number of code units from that string to compare.
    - * @param options A bit set of options:
    - * - U_FOLD_CASE_DEFAULT or 0 is used for default options:
    - * Comparison in code unit order with default case folding.
    - *
    - * - U_COMPARE_CODE_POINT_ORDER
    - * Set to choose code point order instead of code unit order
    - * (see u_strCompare for details).
    - *
    - * - U_FOLD_CASE_EXCLUDE_SPECIAL_I
    - *
    - * @return A negative, zero, or positive integer indicating the comparison result.
    - * @stable ICU 2.0
    - */
    - inline int8_t caseCompare(const UChar *srcChars,
    - int32_t srcLength,
    - uint32_t options) const;
    -
    - /**
    - * Compare two strings case-insensitively using full case folding.
    - * This is equivalent to this->foldCase(options).compare(srcChars.foldCase(options)).
    - *
    - * @param start The start offset in this string at which the compare operation begins.
    - * @param length The number of code units from this string to compare.
    - * @param srcChars A pointer to another string to compare this one to.
    - * @param options A bit set of options:
    - * - U_FOLD_CASE_DEFAULT or 0 is used for default options:
    - * Comparison in code unit order with default case folding.
    - *
    - * - U_COMPARE_CODE_POINT_ORDER
    - * Set to choose code point order instead of code unit order
    - * (see u_strCompare for details).
    - *
    - * - U_FOLD_CASE_EXCLUDE_SPECIAL_I
    - *
    - * @return A negative, zero, or positive integer indicating the comparison result.
    - * @stable ICU 2.0
    - */
    - inline int8_t caseCompare(int32_t start,
    - int32_t length,
    - const UChar *srcChars,
    - uint32_t options) const;
    -
    - /**
    - * Compare two strings case-insensitively using full case folding.
    - * This is equivalent to this->foldCase(options).compare(srcChars.foldCase(options)).
    - *
    - * @param start The start offset in this string at which the compare operation begins.
    - * @param length The number of code units from this string to compare.
    - * @param srcChars A pointer to another string to compare this one to.
    - * @param srcStart The start offset in that string at which the compare operation begins.
    - * @param srcLength The number of code units from that string to compare.
    - * @param options A bit set of options:
    - * - U_FOLD_CASE_DEFAULT or 0 is used for default options:
    - * Comparison in code unit order with default case folding.
    - *
    - * - U_COMPARE_CODE_POINT_ORDER
    - * Set to choose code point order instead of code unit order
    - * (see u_strCompare for details).
    - *
    - * - U_FOLD_CASE_EXCLUDE_SPECIAL_I
    - *
    - * @return A negative, zero, or positive integer indicating the comparison result.
    - * @stable ICU 2.0
    - */
    - inline int8_t caseCompare(int32_t start,
    - int32_t length,
    - const UChar *srcChars,
    - int32_t srcStart,
    - int32_t srcLength,
    - uint32_t options) const;
    -
    - /**
    - * Compare two strings case-insensitively using full case folding.
    - * This is equivalent to this->foldCase(options).compareBetween(text.foldCase(options)).
    - *
    - * @param start The start offset in this string at which the compare operation begins.
    - * @param limit The offset after the last code unit from this string to compare.
    - * @param srcText Another string to compare this one to.
    - * @param srcStart The start offset in that string at which the compare operation begins.
    - * @param srcLimit The offset after the last code unit from that string to compare.
    - * @param options A bit set of options:
    - * - U_FOLD_CASE_DEFAULT or 0 is used for default options:
    - * Comparison in code unit order with default case folding.
    - *
    - * - U_COMPARE_CODE_POINT_ORDER
    - * Set to choose code point order instead of code unit order
    - * (see u_strCompare for details).
    - *
    - * - U_FOLD_CASE_EXCLUDE_SPECIAL_I
    - *
    - * @return A negative, zero, or positive integer indicating the comparison result.
    - * @stable ICU 2.0
    - */
    - inline int8_t caseCompareBetween(int32_t start,
    - int32_t limit,
    - const UnicodeString& srcText,
    - int32_t srcStart,
    - int32_t srcLimit,
    - uint32_t options) const;
    -
    - /**
    - * Determine if this starts with the characters in <TT>text</TT>
    - * @param text The text to match.
    - * @return TRUE if this starts with the characters in <TT>text</TT>,
    - * FALSE otherwise
    - * @stable ICU 2.0
    - */
    - inline UBool startsWith(const UnicodeString& text) const;
    -
    - /**
    - * Determine if this starts with the characters in <TT>srcText</TT>
    - * in the range [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>).
    - * @param srcText The text to match.
    - * @param srcStart the offset into <TT>srcText</TT> to start matching
    - * @param srcLength the number of characters in <TT>srcText</TT> to match
    - * @return TRUE if this starts with the characters in <TT>text</TT>,
    - * FALSE otherwise
    - * @stable ICU 2.0
    - */
    - inline UBool startsWith(const UnicodeString& srcText,
    - int32_t srcStart,
    - int32_t srcLength) const;
    -
    - /**
    - * Determine if this starts with the characters in <TT>srcChars</TT>
    - * @param srcChars The characters to match.
    - * @param srcLength the number of characters in <TT>srcChars</TT>
    - * @return TRUE if this starts with the characters in <TT>srcChars</TT>,
    - * FALSE otherwise
    - * @stable ICU 2.0
    - */
    - inline UBool startsWith(const UChar *srcChars,
    - int32_t srcLength) const;
    -
    - /**
    - * Determine if this ends with the characters in <TT>srcChars</TT>
    - * in the range [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>).
    - * @param srcChars The characters to match.
    - * @param srcStart the offset into <TT>srcText</TT> to start matching
    - * @param srcLength the number of characters in <TT>srcChars</TT> to match
    - * @return TRUE if this ends with the characters in <TT>srcChars</TT>, FALSE otherwise
    - * @stable ICU 2.0
    - */
    - inline UBool startsWith(const UChar *srcChars,
    - int32_t srcStart,
    - int32_t srcLength) const;
    -
    - /**
    - * Determine if this ends with the characters in <TT>text</TT>
    - * @param text The text to match.
    - * @return TRUE if this ends with the characters in <TT>text</TT>,
    - * FALSE otherwise
    - * @stable ICU 2.0
    - */
    - inline UBool endsWith(const UnicodeString& text) const;
    -
    - /**
    - * Determine if this ends with the characters in <TT>srcText</TT>
    - * in the range [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>).
    - * @param srcText The text to match.
    - * @param srcStart the offset into <TT>srcText</TT> to start matching
    - * @param srcLength the number of characters in <TT>srcText</TT> to match
    - * @return TRUE if this ends with the characters in <TT>text</TT>,
    - * FALSE otherwise
    - * @stable ICU 2.0
    - */
    - inline UBool endsWith(const UnicodeString& srcText,
    - int32_t srcStart,
    - int32_t srcLength) const;
    -
    - /**
    - * Determine if this ends with the characters in <TT>srcChars</TT>
    - * @param srcChars The characters to match.
    - * @param srcLength the number of characters in <TT>srcChars</TT>
    - * @return TRUE if this ends with the characters in <TT>srcChars</TT>,
    - * FALSE otherwise
    - * @stable ICU 2.0
    - */
    - inline UBool endsWith(const UChar *srcChars,
    - int32_t srcLength) const;
    -
    - /**
    - * Determine if this ends with the characters in <TT>srcChars</TT>
    - * in the range [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>).
    - * @param srcChars The characters to match.
    - * @param srcStart the offset into <TT>srcText</TT> to start matching
    - * @param srcLength the number of characters in <TT>srcChars</TT> to match
    - * @return TRUE if this ends with the characters in <TT>srcChars</TT>,
    - * FALSE otherwise
    - * @stable ICU 2.0
    - */
    - inline UBool endsWith(const UChar *srcChars,
    - int32_t srcStart,
    - int32_t srcLength) const;
    -
    -
    - /* Searching - bitwise only */
    -
    - /**
    - * Locate in this the first occurrence of the characters in <TT>text</TT>,
    - * using bitwise comparison.
    - * @param text The text to search for.
    - * @return The offset into this of the start of <TT>text</TT>,
    - * or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t indexOf(const UnicodeString& text) const;
    -
    - /**
    - * Locate in this the first occurrence of the characters in <TT>text</TT>
    - * starting at offset <TT>start</TT>, using bitwise comparison.
    - * @param text The text to search for.
    - * @param start The offset at which searching will start.
    - * @return The offset into this of the start of <TT>text</TT>,
    - * or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t indexOf(const UnicodeString& text,
    - int32_t start) const;
    -
    - /**
    - * Locate in this the first occurrence in the range
    - * [<TT>start</TT>, <TT>start + length</TT>) of the characters
    - * in <TT>text</TT>, using bitwise comparison.
    - * @param text The text to search for.
    - * @param start The offset at which searching will start.
    - * @param length The number of characters to search
    - * @return The offset into this of the start of <TT>text</TT>,
    - * or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t indexOf(const UnicodeString& text,
    - int32_t start,
    - int32_t length) const;
    -
    - /**
    - * Locate in this the first occurrence in the range
    - * [<TT>start</TT>, <TT>start + length</TT>) of the characters
    - * in <TT>srcText</TT> in the range
    - * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>),
    - * using bitwise comparison.
    - * @param srcText The text to search for.
    - * @param srcStart the offset into <TT>srcText</TT> at which
    - * to start matching
    - * @param srcLength the number of characters in <TT>srcText</TT> to match
    - * @param start the offset into this at which to start matching
    - * @param length the number of characters in this to search
    - * @return The offset into this of the start of <TT>text</TT>,
    - * or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t indexOf(const UnicodeString& srcText,
    - int32_t srcStart,
    - int32_t srcLength,
    - int32_t start,
    - int32_t length) const;
    -
    - /**
    - * Locate in this the first occurrence of the characters in
    - * <TT>srcChars</TT>
    - * starting at offset <TT>start</TT>, using bitwise comparison.
    - * @param srcChars The text to search for.
    - * @param srcLength the number of characters in <TT>srcChars</TT> to match
    - * @param start the offset into this at which to start matching
    - * @return The offset into this of the start of <TT>text</TT>,
    - * or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t indexOf(const UChar *srcChars,
    - int32_t srcLength,
    - int32_t start) const;
    -
    - /**
    - * Locate in this the first occurrence in the range
    - * [<TT>start</TT>, <TT>start + length</TT>) of the characters
    - * in <TT>srcChars</TT>, using bitwise comparison.
    - * @param srcChars The text to search for.
    - * @param srcLength the number of characters in <TT>srcChars</TT>
    - * @param start The offset at which searching will start.
    - * @param length The number of characters to search
    - * @return The offset into this of the start of <TT>srcChars</TT>,
    - * or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t indexOf(const UChar *srcChars,
    - int32_t srcLength,
    - int32_t start,
    - int32_t length) const;
    -
    - /**
    - * Locate in this the first occurrence in the range
    - * [<TT>start</TT>, <TT>start + length</TT>) of the characters
    - * in <TT>srcChars</TT> in the range
    - * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>),
    - * using bitwise comparison.
    - * @param srcChars The text to search for.
    - * @param srcStart the offset into <TT>srcChars</TT> at which
    - * to start matching
    - * @param srcLength the number of characters in <TT>srcChars</TT> to match
    - * @param start the offset into this at which to start matching
    - * @param length the number of characters in this to search
    - * @return The offset into this of the start of <TT>text</TT>,
    - * or -1 if not found.
    - * @stable ICU 2.0
    - */
    - int32_t indexOf(const UChar *srcChars,
    - int32_t srcStart,
    - int32_t srcLength,
    - int32_t start,
    - int32_t length) const;
    -
    - /**
    - * Locate in this the first occurrence of the BMP code point <code>c</code>,
    - * using bitwise comparison.
    - * @param c The code unit to search for.
    - * @return The offset into this of <TT>c</TT>, or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t indexOf(UChar c) const;
    -
    - /**
    - * Locate in this the first occurrence of the code point <TT>c</TT>,
    - * using bitwise comparison.
    - *
    - * @param c The code point to search for.
    - * @return The offset into this of <TT>c</TT>, or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t indexOf(UChar32 c) const;
    -
    - /**
    - * Locate in this the first occurrence of the BMP code point <code>c</code>,
    - * starting at offset <TT>start</TT>, using bitwise comparison.
    - * @param c The code unit to search for.
    - * @param start The offset at which searching will start.
    - * @return The offset into this of <TT>c</TT>, or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t indexOf(UChar c,
    - int32_t start) const;
    -
    - /**
    - * Locate in this the first occurrence of the code point <TT>c</TT>
    - * starting at offset <TT>start</TT>, using bitwise comparison.
    - *
    - * @param c The code point to search for.
    - * @param start The offset at which searching will start.
    - * @return The offset into this of <TT>c</TT>, or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t indexOf(UChar32 c,
    - int32_t start) const;
    -
    - /**
    - * Locate in this the first occurrence of the BMP code point <code>c</code>
    - * in the range [<TT>start</TT>, <TT>start + length</TT>),
    - * using bitwise comparison.
    - * @param c The code unit to search for.
    - * @param start the offset into this at which to start matching
    - * @param length the number of characters in this to search
    - * @return The offset into this of <TT>c</TT>, or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t indexOf(UChar c,
    - int32_t start,
    - int32_t length) const;
    -
    - /**
    - * Locate in this the first occurrence of the code point <TT>c</TT>
    - * in the range [<TT>start</TT>, <TT>start + length</TT>),
    - * using bitwise comparison.
    - *
    - * @param c The code point to search for.
    - * @param start the offset into this at which to start matching
    - * @param length the number of characters in this to search
    - * @return The offset into this of <TT>c</TT>, or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t indexOf(UChar32 c,
    - int32_t start,
    - int32_t length) const;
    -
    - /**
    - * Locate in this the last occurrence of the characters in <TT>text</TT>,
    - * using bitwise comparison.
    - * @param text The text to search for.
    - * @return The offset into this of the start of <TT>text</TT>,
    - * or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t lastIndexOf(const UnicodeString& text) const;
    -
    - /**
    - * Locate in this the last occurrence of the characters in <TT>text</TT>
    - * starting at offset <TT>start</TT>, using bitwise comparison.
    - * @param text The text to search for.
    - * @param start The offset at which searching will start.
    - * @return The offset into this of the start of <TT>text</TT>,
    - * or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t lastIndexOf(const UnicodeString& text,
    - int32_t start) const;
    -
    - /**
    - * Locate in this the last occurrence in the range
    - * [<TT>start</TT>, <TT>start + length</TT>) of the characters
    - * in <TT>text</TT>, using bitwise comparison.
    - * @param text The text to search for.
    - * @param start The offset at which searching will start.
    - * @param length The number of characters to search
    - * @return The offset into this of the start of <TT>text</TT>,
    - * or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t lastIndexOf(const UnicodeString& text,
    - int32_t start,
    - int32_t length) const;
    -
    - /**
    - * Locate in this the last occurrence in the range
    - * [<TT>start</TT>, <TT>start + length</TT>) of the characters
    - * in <TT>srcText</TT> in the range
    - * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>),
    - * using bitwise comparison.
    - * @param srcText The text to search for.
    - * @param srcStart the offset into <TT>srcText</TT> at which
    - * to start matching
    - * @param srcLength the number of characters in <TT>srcText</TT> to match
    - * @param start the offset into this at which to start matching
    - * @param length the number of characters in this to search
    - * @return The offset into this of the start of <TT>text</TT>,
    - * or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t lastIndexOf(const UnicodeString& srcText,
    - int32_t srcStart,
    - int32_t srcLength,
    - int32_t start,
    - int32_t length) const;
    -
    - /**
    - * Locate in this the last occurrence of the characters in <TT>srcChars</TT>
    - * starting at offset <TT>start</TT>, using bitwise comparison.
    - * @param srcChars The text to search for.
    - * @param srcLength the number of characters in <TT>srcChars</TT> to match
    - * @param start the offset into this at which to start matching
    - * @return The offset into this of the start of <TT>text</TT>,
    - * or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t lastIndexOf(const UChar *srcChars,
    - int32_t srcLength,
    - int32_t start) const;
    -
    - /**
    - * Locate in this the last occurrence in the range
    - * [<TT>start</TT>, <TT>start + length</TT>) of the characters
    - * in <TT>srcChars</TT>, using bitwise comparison.
    - * @param srcChars The text to search for.
    - * @param srcLength the number of characters in <TT>srcChars</TT>
    - * @param start The offset at which searching will start.
    - * @param length The number of characters to search
    - * @return The offset into this of the start of <TT>srcChars</TT>,
    - * or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t lastIndexOf(const UChar *srcChars,
    - int32_t srcLength,
    - int32_t start,
    - int32_t length) const;
    -
    - /**
    - * Locate in this the last occurrence in the range
    - * [<TT>start</TT>, <TT>start + length</TT>) of the characters
    - * in <TT>srcChars</TT> in the range
    - * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>),
    - * using bitwise comparison.
    - * @param srcChars The text to search for.
    - * @param srcStart the offset into <TT>srcChars</TT> at which
    - * to start matching
    - * @param srcLength the number of characters in <TT>srcChars</TT> to match
    - * @param start the offset into this at which to start matching
    - * @param length the number of characters in this to search
    - * @return The offset into this of the start of <TT>text</TT>,
    - * or -1 if not found.
    - * @stable ICU 2.0
    - */
    - int32_t lastIndexOf(const UChar *srcChars,
    - int32_t srcStart,
    - int32_t srcLength,
    - int32_t start,
    - int32_t length) const;
    -
    - /**
    - * Locate in this the last occurrence of the BMP code point <code>c</code>,
    - * using bitwise comparison.
    - * @param c The code unit to search for.
    - * @return The offset into this of <TT>c</TT>, or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t lastIndexOf(UChar c) const;
    -
    - /**
    - * Locate in this the last occurrence of the code point <TT>c</TT>,
    - * using bitwise comparison.
    - *
    - * @param c The code point to search for.
    - * @return The offset into this of <TT>c</TT>, or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t lastIndexOf(UChar32 c) const;
    -
    - /**
    - * Locate in this the last occurrence of the BMP code point <code>c</code>
    - * starting at offset <TT>start</TT>, using bitwise comparison.
    - * @param c The code unit to search for.
    - * @param start The offset at which searching will start.
    - * @return The offset into this of <TT>c</TT>, or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t lastIndexOf(UChar c,
    - int32_t start) const;
    -
    - /**
    - * Locate in this the last occurrence of the code point <TT>c</TT>
    - * starting at offset <TT>start</TT>, using bitwise comparison.
    - *
    - * @param c The code point to search for.
    - * @param start The offset at which searching will start.
    - * @return The offset into this of <TT>c</TT>, or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t lastIndexOf(UChar32 c,
    - int32_t start) const;
    -
    - /**
    - * Locate in this the last occurrence of the BMP code point <code>c</code>
    - * in the range [<TT>start</TT>, <TT>start + length</TT>),
    - * using bitwise comparison.
    - * @param c The code unit to search for.
    - * @param start the offset into this at which to start matching
    - * @param length the number of characters in this to search
    - * @return The offset into this of <TT>c</TT>, or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t lastIndexOf(UChar c,
    - int32_t start,
    - int32_t length) const;
    -
    - /**
    - * Locate in this the last occurrence of the code point <TT>c</TT>
    - * in the range [<TT>start</TT>, <TT>start + length</TT>),
    - * using bitwise comparison.
    - *
    - * @param c The code point to search for.
    - * @param start the offset into this at which to start matching
    - * @param length the number of characters in this to search
    - * @return The offset into this of <TT>c</TT>, or -1 if not found.
    - * @stable ICU 2.0
    - */
    - inline int32_t lastIndexOf(UChar32 c,
    - int32_t start,
    - int32_t length) const;
    -
    -
    - /* Character access */
    -
    - /**
    - * Return the code unit at offset <tt>offset</tt>.
    - * If the offset is not valid (0..length()-1) then U+ffff is returned.
    - * @param offset a valid offset into the text
    - * @return the code unit at offset <tt>offset</tt>
    - * or 0xffff if the offset is not valid for this string
    - * @stable ICU 2.0
    - */
    - inline UChar charAt(int32_t offset) const;
    -
    - /**
    - * Return the code unit at offset <tt>offset</tt>.
    - * If the offset is not valid (0..length()-1) then U+ffff is returned.
    - * @param offset a valid offset into the text
    - * @return the code unit at offset <tt>offset</tt>
    - * @stable ICU 2.0
    - */
    - inline UChar operator[] (int32_t offset) const;
    -
    - /**
    - * Return the code point that contains the code unit
    - * at offset <tt>offset</tt>.
    - * If the offset is not valid (0..length()-1) then U+ffff is returned.
    - * @param offset a valid offset into the text
    - * that indicates the text offset of any of the code units
    - * that will be assembled into a code point (21-bit value) and returned
    - * @return the code point of text at <tt>offset</tt>
    - * or 0xffff if the offset is not valid for this string
    - * @stable ICU 2.0
    - */
    - inline UChar32 char32At(int32_t offset) const;
    -
    - /**
    - * Adjust a random-access offset so that
    - * it points to the beginning of a Unicode character.
    - * The offset that is passed in points to
    - * any code unit of a code point,
    - * while the returned offset will point to the first code unit
    - * of the same code point.
    - * In UTF-16, if the input offset points to a second surrogate
    - * of a surrogate pair, then the returned offset will point
    - * to the first surrogate.
    - * @param offset a valid offset into one code point of the text
    - * @return offset of the first code unit of the same code point
    - * @see U16_SET_CP_START
    - * @stable ICU 2.0
    - */
    - inline int32_t getChar32Start(int32_t offset) const;
    -
    - /**
    - * Adjust a random-access offset so that
    - * it points behind a Unicode character.
    - * The offset that is passed in points behind
    - * any code unit of a code point,
    - * while the returned offset will point behind the last code unit
    - * of the same code point.
    - * In UTF-16, if the input offset points behind the first surrogate
    - * (i.e., to the second surrogate)
    - * of a surrogate pair, then the returned offset will point
    - * behind the second surrogate (i.e., to the first surrogate).
    - * @param offset a valid offset after any code unit of a code point of the text
    - * @return offset of the first code unit after the same code point
    - * @see U16_SET_CP_LIMIT
    - * @stable ICU 2.0
    - */
    - inline int32_t getChar32Limit(int32_t offset) const;
    -
    - /**
    - * Move the code unit index along the string by delta code points.
    - * Interpret the input index as a code unit-based offset into the string,
    - * move the index forward or backward by delta code points, and
    - * return the resulting index.
    - * The input index should point to the first code unit of a code point,
    - * if there is more than one.
    - *
    - * Both input and output indexes are code unit-based as for all
    - * string indexes/offsets in ICU (and other libraries, like MBCS char*).
    - * If delta<0 then the index is moved backward (toward the start of the string).
    - * If delta>0 then the index is moved forward (toward the end of the string).
    - *
    - * This behaves like CharacterIterator::move32(delta, kCurrent).
    - *
    - * Behavior for out-of-bounds indexes:
    - * <code>moveIndex32</code> pins the input index to 0..length(), i.e.,
    - * if the input index<0 then it is pinned to 0;
    - * if it is index>length() then it is pinned to length().
    - * Afterwards, the index is moved by <code>delta</code> code points
    - * forward or backward,
    - * but no further backward than to 0 and no further forward than to length().
    - * The resulting index return value will be in between 0 and length(), inclusively.
    - *
    - * Examples:
    - * <pre>
    - * // s has code points 'a' U+10000 'b' U+10ffff U+2029
    - * UnicodeString s=UNICODE_STRING("a\\U00010000b\\U0010ffff\\u2029", 31).unescape();
    - *
    - * // initial index: position of U+10000
    - * int32_t index=1;
    - *
    - * // the following examples will all result in index==4, position of U+10ffff
    - *
    - * // skip 2 code points from some position in the string
    - * index=s.moveIndex32(index, 2); // skips U+10000 and 'b'
    - *
    - * // go to the 3rd code point from the start of s (0-based)
    - * index=s.moveIndex32(0, 3); // skips 'a', U+10000, and 'b'
    - *
    - * // go to the next-to-last code point of s
    - * index=s.moveIndex32(s.length(), -2); // backward-skips U+2029 and U+10ffff
    - * </pre>
    - *
    - * @param index input code unit index
    - * @param delta (signed) code point count to move the index forward or backward
    - * in the string
    - * @return the resulting code unit index
    - * @stable ICU 2.0
    - */
    - int32_t moveIndex32(int32_t index, int32_t delta) const;
    -
    - /* Substring extraction */
    -
    - /**
    - * Copy the characters in the range
    - * [<tt>start</tt>, <tt>start + length</tt>) into the array <tt>dst</tt>,
    - * beginning at <tt>dstStart</tt>.
    - * If the string aliases to <code>dst</code> itself as an external buffer,
    - * then extract() will not copy the contents.
    - *
    - * @param start offset of first character which will be copied into the array
    - * @param length the number of characters to extract
    - * @param dst array in which to copy characters. The length of <tt>dst</tt>
    - * must be at least (<tt>dstStart + length</tt>).
    - * @param dstStart the offset in <TT>dst</TT> where the first character
    - * will be extracted
    - * @stable ICU 2.0
    - */
    - inline void extract(int32_t start,
    - int32_t length,
    - UChar *dst,
    - int32_t dstStart = 0) const;
    -
    - /**
    - * Copy the contents of the string into dest.
    - * This is a convenience function that
    - * checks if there is enough space in dest,
    - * extracts the entire string if possible,
    - * and NUL-terminates dest if possible.
    - *
    - * If the string fits into dest but cannot be NUL-terminated
    - * (length()==destCapacity) then the error code is set to U_STRING_NOT_TERMINATED_WARNING.
    - * If the string itself does not fit into dest
    - * (length()>destCapacity) then the error code is set to U_BUFFER_OVERFLOW_ERROR.
    - *
    - * If the string aliases to <code>dest</code> itself as an external buffer,
    - * then extract() will not copy the contents.
    - *
    - * @param dest Destination string buffer.
    - * @param destCapacity Number of UChars available at dest.
    - * @param errorCode ICU error code.
    - * @return length()
    - * @stable ICU 2.0
    - */
    - int32_t
    - extract(UChar *dest, int32_t destCapacity,
    - UErrorCode &errorCode) const;
    -
    - /**
    - * Copy the characters in the range
    - * [<tt>start</tt>, <tt>start + length</tt>) into the UnicodeString
    - * <tt>target</tt>.
    - * @param start offset of first character which will be copied
    - * @param length the number of characters to extract
    - * @param target UnicodeString into which to copy characters.
    - * @return A reference to <TT>target</TT>
    - * @stable ICU 2.0
    - */
    - inline void extract(int32_t start,
    - int32_t length,
    - UnicodeString& target) const;
    -
    - /**
    - * Copy the characters in the range [<tt>start</tt>, <tt>limit</tt>)
    - * into the array <tt>dst</tt>, beginning at <tt>dstStart</tt>.
    - * @param start offset of first character which will be copied into the array
    - * @param limit offset immediately following the last character to be copied
    - * @param dst array in which to copy characters. The length of <tt>dst</tt>
    - * must be at least (<tt>dstStart + (limit - start)</tt>).
    - * @param dstStart the offset in <TT>dst</TT> where the first character
    - * will be extracted
    - * @stable ICU 2.0
    - */
    - inline void extractBetween(int32_t start,
    - int32_t limit,
    - UChar *dst,
    - int32_t dstStart = 0) const;
    -
    - /**
    - * Copy the characters in the range [<tt>start</tt>, <tt>limit</tt>)
    - * into the UnicodeString <tt>target</tt>. Replaceable API.
    - * @param start offset of first character which will be copied
    - * @param limit offset immediately following the last character to be copied
    - * @param target UnicodeString into which to copy characters.
    - * @return A reference to <TT>target</TT>
    - * @stable ICU 2.0
    - */
    - virtual void extractBetween(int32_t start,
    - int32_t limit,
    - UnicodeString& target) const;
    -
    - /**
    - * Copy the characters in the range
    - * [<tt>start</TT>, <tt>start + length</TT>) into an array of characters.
    - * All characters must be invariant (see utypes.h).
    - * Use US_INV as the last, signature-distinguishing parameter.
    - *
    - * This function does not write any more than <code>targetLength</code>
    - * characters but returns the length of the entire output string
    - * so that one can allocate a larger buffer and call the function again
    - * if necessary.
    - * The output string is NUL-terminated if possible.
    - *
    - * @param start offset of first character which will be copied
    - * @param startLength the number of characters to extract
    - * @param target the target buffer for extraction, can be NULL
    - * if targetLength is 0
    - * @param targetCapacity the length of the target buffer
    - * @param inv Signature-distinguishing paramater, use US_INV.
    - * @return the output string length, not including the terminating NUL
    - * @stable ICU 3.2
    - */
    - int32_t extract(int32_t start,
    - int32_t startLength,
    - char *target,
    - int32_t targetCapacity,
    - enum EInvariant inv) const;
    -
    -#if !UCONFIG_NO_CONVERSION
    -
    - /**
    - * Copy the characters in the range
    - * [<tt>start</TT>, <tt>start + length</TT>) into an array of characters
    - * in a specified codepage.
    - * The output string is NUL-terminated.
    - *
    - * Recommendation: For invariant-character strings use
    - * extract(int32_t start, int32_t length, char *target, int32_t targetCapacity, enum EInvariant inv) const
    - * because it avoids object code dependencies of UnicodeString on
    - * the conversion code.
    - *
    - * @param start offset of first character which will be copied
    - * @param startLength the number of characters to extract
    - * @param target the target buffer for extraction
    - * @param codepage the desired codepage for the characters. 0 has
    - * the special meaning of the default codepage
    - * If <code>codepage</code> is an empty string (<code>""</code>),
    - * then a simple conversion is performed on the codepage-invariant
    - * subset ("invariant characters") of the platform encoding. See utypes.h.
    - * If <TT>target</TT> is NULL, then the number of bytes required for
    - * <TT>target</TT> is returned. It is assumed that the target is big enough
    - * to fit all of the characters.
    - * @return the output string length, not including the terminating NUL
    - * @stable ICU 2.0
    - */
    - inline int32_t extract(int32_t start,
    - int32_t startLength,
    - char *target,
    - const char *codepage = 0) const;
    -
    - /**
    - * Copy the characters in the range
    - * [<tt>start</TT>, <tt>start + length</TT>) into an array of characters
    - * in a specified codepage.
    - * This function does not write any more than <code>targetLength</code>
    - * characters but returns the length of the entire output string
    - * so that one can allocate a larger buffer and call the function again
    - * if necessary.
    - * The output string is NUL-terminated if possible.
    - *
    - * Recommendation: For invariant-character strings use
    - * extract(int32_t start, int32_t length, char *target, int32_t targetCapacity, enum EInvariant inv) const
    - * because it avoids object code dependencies of UnicodeString on
    - * the conversion code.
    - *
    - * @param start offset of first character which will be copied
    - * @param startLength the number of characters to extract
    - * @param target the target buffer for extraction
    - * @param targetLength the length of the target buffer
    - * @param codepage the desired codepage for the characters. 0 has
    - * the special meaning of the default codepage
    - * If <code>codepage</code> is an empty string (<code>""</code>),
    - * then a simple conversion is performed on the codepage-invariant
    - * subset ("invariant characters") of the platform encoding. See utypes.h.
    - * If <TT>target</TT> is NULL, then the number of bytes required for
    - * <TT>target</TT> is returned.
    - * @return the output string length, not including the terminating NUL
    - * @stable ICU 2.0
    - */
    - int32_t extract(int32_t start,
    - int32_t startLength,
    - char *target,
    - uint32_t targetLength,
    - const char *codepage = 0) const;
    -
    - /**
    - * Convert the UnicodeString into a codepage string using an existing UConverter.
    - * The output string is NUL-terminated if possible.
    - *
    - * This function avoids the overhead of opening and closing a converter if
    - * multiple strings are extracted.
    - *
    - * @param dest destination string buffer, can be NULL if destCapacity==0
    - * @param destCapacity the number of chars available at dest
    - * @param cnv the converter object to be used (ucnv_resetFromUnicode() will be called),
    - * or NULL for the default converter
    - * @param errorCode normal ICU error code
    - * @return the length of the output string, not counting the terminating NUL;
    - * if the length is greater than destCapacity, then the string will not fit
    - * and a buffer of the indicated length would need to be passed in
    - * @stable ICU 2.0
    - */
    - int32_t extract(char *dest, int32_t destCapacity,
    - UConverter *cnv,
    - UErrorCode &errorCode) const;
    -
    -#endif
    -
    - /* Length operations */
    -
    - /**
    - * Return the length of the UnicodeString object.
    - * The length is the number of UChar code units are in the UnicodeString.
    - * If you want the number of code points, please use countChar32().
    - * @return the length of the UnicodeString object
    - * @see countChar32
    - * @stable ICU 2.0
    - */
    - inline int32_t length(void) const;
    -
    - /**
    - * Count Unicode code points in the length UChar code units of the string.
    - * A code point may occupy either one or two UChar code units.
    - * Counting code points involves reading all code units.
    - *
    - * This functions is basically the inverse of moveIndex32().
    - *
    - * @param start the index of the first code unit to check
    - * @param length the number of UChar code units to check
    - * @return the number of code points in the specified code units
    - * @see length
    - * @stable ICU 2.0
    - */
    - int32_t
    - countChar32(int32_t start=0, int32_t length=INT32_MAX) const;
    -
    - /**
    - * Check if the length UChar code units of the string
    - * contain more Unicode code points than a certain number.
    - * This is more efficient than counting all code points in this part of the string
    - * and comparing that number with a threshold.
    - * This function may not need to scan the string at all if the length
    - * falls within a certain range, and
    - * never needs to count more than 'number+1' code points.
    - * Logically equivalent to (countChar32(start, length)>number).
    - * A Unicode code point may occupy either one or two UChar code units.
    - *
    - * @param start the index of the first code unit to check (0 for the entire string)
    - * @param length the number of UChar code units to check
    - * (use INT32_MAX for the entire string; remember that start/length
    - * values are pinned)
    - * @param number The number of code points in the (sub)string is compared against
    - * the 'number' parameter.
    - * @return Boolean value for whether the string contains more Unicode code points
    - * than 'number'. Same as (u_countChar32(s, length)>number).
    - * @see countChar32
    - * @see u_strHasMoreChar32Than
    - * @stable ICU 2.4
    - */
    - UBool
    - hasMoreChar32Than(int32_t start, int32_t length, int32_t number) const;
    -
    - /**
    - * Determine if this string is empty.
    - * @return TRUE if this string contains 0 characters, FALSE otherwise.
    - * @stable ICU 2.0
    - */
    - inline UBool isEmpty(void) const;
    -
    - /**
    - * Return the capacity of the internal buffer of the UnicodeString object.
    - * This is useful together with the getBuffer functions.
    - * See there for details.
    - *
    - * @return the number of UChars available in the internal buffer
    - * @see getBuffer
    - * @stable ICU 2.0
    - */
    - inline int32_t getCapacity(void) const;
    -
    - /* Other operations */
    -
    - /**
    - * Generate a hash code for this object.
    - * @return The hash code of this UnicodeString.
    - * @stable ICU 2.0
    - */
    - inline int32_t hashCode(void) const;
    -
    - /**
    - * Determine if this object contains a valid string.
    - * A bogus string has no value. It is different from an empty string.
    - * It can be used to indicate that no string value is available.
    - * getBuffer() and getTerminatedBuffer() return NULL, and
    - * length() returns 0.
    - *
    - * @return TRUE if the string is valid, FALSE otherwise
    - * @see setToBogus()
    - * @stable ICU 2.0
    - */
    - inline UBool isBogus(void) const;
    -
    -
    - //========================================
    - // Write operations
    - //========================================
    -
    - /* Assignment operations */
    -
    - /**
    - * Assignment operator. Replace the characters in this UnicodeString
    - * with the characters from <TT>srcText</TT>.
    - * @param srcText The text containing the characters to replace
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - UnicodeString &operator=(const UnicodeString &srcText);
    -
    - /**
    - * Almost the same as the assignment operator.
    - * Replace the characters in this UnicodeString
    - * with the characters from <code>srcText</code>.
    - *
    - * This function works the same for all strings except for ones that
    - * are readonly aliases.
    - * Starting with ICU 2.4, the assignment operator and the copy constructor
    - * allocate a new buffer and copy the buffer contents even for readonly aliases.
    - * This function implements the old, more efficient but less safe behavior
    - * of making this string also a readonly alias to the same buffer.
    - * The fastCopyFrom function must be used only if it is known that the lifetime of
    - * this UnicodeString is at least as long as the lifetime of the aliased buffer
    - * including its contents, for example for strings from resource bundles
    - * or aliases to string contents.
    - *
    - * @param src The text containing the characters to replace.
    - * @return a reference to this
    - * @stable ICU 2.4
    - */
    - UnicodeString &fastCopyFrom(const UnicodeString &src);
    -
    - /**
    - * Assignment operator. Replace the characters in this UnicodeString
    - * with the code unit <TT>ch</TT>.
    - * @param ch the code unit to replace
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - inline UnicodeString& operator= (UChar ch);
    -
    - /**
    - * Assignment operator. Replace the characters in this UnicodeString
    - * with the code point <TT>ch</TT>.
    - * @param ch the code point to replace
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - inline UnicodeString& operator= (UChar32 ch);
    -
    - /**
    - * Set the text in the UnicodeString object to the characters
    - * in <TT>srcText</TT> in the range
    - * [<TT>srcStart</TT>, <TT>srcText.length()</TT>).
    - * <TT>srcText</TT> is not modified.
    - * @param srcText the source for the new characters
    - * @param srcStart the offset into <TT>srcText</TT> where new characters
    - * will be obtained
    - * @return a reference to this
    - * @stable ICU 2.2
    - */
    - inline UnicodeString& setTo(const UnicodeString& srcText,
    - int32_t srcStart);
    -
    - /**
    - * Set the text in the UnicodeString object to the characters
    - * in <TT>srcText</TT> in the range
    - * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>).
    - * <TT>srcText</TT> is not modified.
    - * @param srcText the source for the new characters
    - * @param srcStart the offset into <TT>srcText</TT> where new characters
    - * will be obtained
    - * @param srcLength the number of characters in <TT>srcText</TT> in the
    - * replace string.
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - inline UnicodeString& setTo(const UnicodeString& srcText,
    - int32_t srcStart,
    - int32_t srcLength);
    -
    - /**
    - * Set the text in the UnicodeString object to the characters in
    - * <TT>srcText</TT>.
    - * <TT>srcText</TT> is not modified.
    - * @param srcText the source for the new characters
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - inline UnicodeString& setTo(const UnicodeString& srcText);
    -
    - /**
    - * Set the characters in the UnicodeString object to the characters
    - * in <TT>srcChars</TT>. <TT>srcChars</TT> is not modified.
    - * @param srcChars the source for the new characters
    - * @param srcLength the number of Unicode characters in srcChars.
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - inline UnicodeString& setTo(const UChar *srcChars,
    - int32_t srcLength);
    -
    - /**
    - * Set the characters in the UnicodeString object to the code unit
    - * <TT>srcChar</TT>.
    - * @param srcChar the code unit which becomes the UnicodeString's character
    - * content
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - UnicodeString& setTo(UChar srcChar);
    -
    - /**
    - * Set the characters in the UnicodeString object to the code point
    - * <TT>srcChar</TT>.
    - * @param srcChar the code point which becomes the UnicodeString's character
    - * content
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - UnicodeString& setTo(UChar32 srcChar);
    -
    - /**
    - * Aliasing setTo() function, analogous to the readonly-aliasing UChar* constructor.
    - * The text will be used for the UnicodeString object, but
    - * it will not be released when the UnicodeString is destroyed.
    - * This has copy-on-write semantics:
    - * When the string is modified, then the buffer is first copied into
    - * newly allocated memory.
    - * The aliased buffer is never modified.
    - * In an assignment to another UnicodeString, the text will be aliased again,
    - * so that both strings then alias the same readonly-text.
    - *
    - * @param isTerminated specifies if <code>text</code> is <code>NUL</code>-terminated.
    - * This must be true if <code>textLength==-1</code>.
    - * @param text The characters to alias for the UnicodeString.
    - * @param textLength The number of Unicode characters in <code>text</code> to alias.
    - * If -1, then this constructor will determine the length
    - * by calling <code>u_strlen()</code>.
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - UnicodeString &setTo(UBool isTerminated,
    - const UChar *text,
    - int32_t textLength);
    -
    - /**
    - * Aliasing setTo() function, analogous to the writable-aliasing UChar* constructor.
    - * The text will be used for the UnicodeString object, but
    - * it will not be released when the UnicodeString is destroyed.
    - * This has write-through semantics:
    - * For as long as the capacity of the buffer is sufficient, write operations
    - * will directly affect the buffer. When more capacity is necessary, then
    - * a new buffer will be allocated and the contents copied as with regularly
    - * constructed strings.
    - * In an assignment to another UnicodeString, the buffer will be copied.
    - * The extract(UChar *dst) function detects whether the dst pointer is the same
    - * as the string buffer itself and will in this case not copy the contents.
    - *
    - * @param buffer The characters to alias for the UnicodeString.
    - * @param buffLength The number of Unicode characters in <code>buffer</code> to alias.
    - * @param buffCapacity The size of <code>buffer</code> in UChars.
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - UnicodeString &setTo(UChar *buffer,
    - int32_t buffLength,
    - int32_t buffCapacity);
    -
    - /**
    - * Make this UnicodeString object invalid.
    - * The string will test TRUE with isBogus().
    - *
    - * A bogus string has no value. It is different from an empty string.
    - * It can be used to indicate that no string value is available.
    - * getBuffer() and getTerminatedBuffer() return NULL, and
    - * length() returns 0.
    - *
    - * This utility function is used throughout the UnicodeString
    - * implementation to indicate that a UnicodeString operation failed,
    - * and may be used in other functions,
    - * especially but not exclusively when such functions do not
    - * take a UErrorCode for simplicity.
    - *
    - * The following methods, and no others, will clear a string object's bogus flag:
    - * - remove()
    - * - remove(0, INT32_MAX)
    - * - truncate(0)
    - * - operator=() (assignment operator)
    - * - setTo(...)
    - *
    - * The simplest ways to turn a bogus string into an empty one
    - * is to use the remove() function.
    - * Examples for other functions that are equivalent to "set to empty string":
    - * \code
    - * if(s.isBogus()) {
    - * s.remove(); // set to an empty string (remove all), or
    - * s.remove(0, INT32_MAX); // set to an empty string (remove all), or
    - * s.truncate(0); // set to an empty string (complete truncation), or
    - * s=UnicodeString(); // assign an empty string, or
    - * s.setTo((UChar32)-1); // set to a pseudo code point that is out of range, or
    - * static const UChar nul=0;
    - * s.setTo(&nul, 0); // set to an empty C Unicode string
    - * }
    - * \endcode
    - *
    - * @see isBogus()
    - * @stable ICU 2.0
    - */
    - void setToBogus();
    -
    - /**
    - * Set the character at the specified offset to the specified character.
    - * @param offset A valid offset into the text of the character to set
    - * @param ch The new character
    - * @return A reference to this
    - * @stable ICU 2.0
    - */
    - UnicodeString& setCharAt(int32_t offset,
    - UChar ch);
    -
    -
    - /* Append operations */
    -
    - /**
    - * Append operator. Append the code unit <TT>ch</TT> to the UnicodeString
    - * object.
    - * @param ch the code unit to be appended
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - inline UnicodeString& operator+= (UChar ch);
    -
    - /**
    - * Append operator. Append the code point <TT>ch</TT> to the UnicodeString
    - * object.
    - * @param ch the code point to be appended
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - inline UnicodeString& operator+= (UChar32 ch);
    -
    - /**
    - * Append operator. Append the characters in <TT>srcText</TT> to the
    - * UnicodeString object at offset <TT>start</TT>. <TT>srcText</TT> is
    - * not modified.
    - * @param srcText the source for the new characters
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - inline UnicodeString& operator+= (const UnicodeString& srcText);
    -
    - /**
    - * Append the characters
    - * in <TT>srcText</TT> in the range
    - * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>) to the
    - * UnicodeString object at offset <TT>start</TT>. <TT>srcText</TT>
    - * is not modified.
    - * @param srcText the source for the new characters
    - * @param srcStart the offset into <TT>srcText</TT> where new characters
    - * will be obtained
    - * @param srcLength the number of characters in <TT>srcText</TT> in
    - * the append string
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - inline UnicodeString& append(const UnicodeString& srcText,
    - int32_t srcStart,
    - int32_t srcLength);
    -
    - /**
    - * Append the characters in <TT>srcText</TT> to the UnicodeString object at
    - * offset <TT>start</TT>. <TT>srcText</TT> is not modified.
    - * @param srcText the source for the new characters
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - inline UnicodeString& append(const UnicodeString& srcText);
    -
    - /**
    - * Append the characters in <TT>srcChars</TT> in the range
    - * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>) to the UnicodeString
    - * object at offset
    - * <TT>start</TT>. <TT>srcChars</TT> is not modified.
    - * @param srcChars the source for the new characters
    - * @param srcStart the offset into <TT>srcChars</TT> where new characters
    - * will be obtained
    - * @param srcLength the number of characters in <TT>srcChars</TT> in
    - * the append string
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - inline UnicodeString& append(const UChar *srcChars,
    - int32_t srcStart,
    - int32_t srcLength);
    -
    - /**
    - * Append the characters in <TT>srcChars</TT> to the UnicodeString object
    - * at offset <TT>start</TT>. <TT>srcChars</TT> is not modified.
    - * @param srcChars the source for the new characters
    - * @param srcLength the number of Unicode characters in <TT>srcChars</TT>
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - inline UnicodeString& append(const UChar *srcChars,
    - int32_t srcLength);
    -
    - /**
    - * Append the code unit <TT>srcChar</TT> to the UnicodeString object.
    - * @param srcChar the code unit to append
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - inline UnicodeString& append(UChar srcChar);
    -
    - /**
    - * Append the code point <TT>srcChar</TT> to the UnicodeString object.
    - * @param srcChar the code point to append
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - inline UnicodeString& append(UChar32 srcChar);
    -
    -
    - /* Insert operations */
    -
    - /**
    - * Insert the characters in <TT>srcText</TT> in the range
    - * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>) into the UnicodeString
    - * object at offset <TT>start</TT>. <TT>srcText</TT> is not modified.
    - * @param start the offset where the insertion begins
    - * @param srcText the source for the new characters
    - * @param srcStart the offset into <TT>srcText</TT> where new characters
    - * will be obtained
    - * @param srcLength the number of characters in <TT>srcText</TT> in
    - * the insert string
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - inline UnicodeString& insert(int32_t start,
    - const UnicodeString& srcText,
    - int32_t srcStart,
    - int32_t srcLength);
    -
    - /**
    - * Insert the characters in <TT>srcText</TT> into the UnicodeString object
    - * at offset <TT>start</TT>. <TT>srcText</TT> is not modified.
    - * @param start the offset where the insertion begins
    - * @param srcText the source for the new characters
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - inline UnicodeString& insert(int32_t start,
    - const UnicodeString& srcText);
    -
    - /**
    - * Insert the characters in <TT>srcChars</TT> in the range
    - * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>) into the UnicodeString
    - * object at offset <TT>start</TT>. <TT>srcChars</TT> is not modified.
    - * @param start the offset at which the insertion begins
    - * @param srcChars the source for the new characters
    - * @param srcStart the offset into <TT>srcChars</TT> where new characters
    - * will be obtained
    - * @param srcLength the number of characters in <TT>srcChars</TT>
    - * in the insert string
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - inline UnicodeString& insert(int32_t start,
    - const UChar *srcChars,
    - int32_t srcStart,
    - int32_t srcLength);
    -
    - /**
    - * Insert the characters in <TT>srcChars</TT> into the UnicodeString object
    - * at offset <TT>start</TT>. <TT>srcChars</TT> is not modified.
    - * @param start the offset where the insertion begins
    - * @param srcChars the source for the new characters
    - * @param srcLength the number of Unicode characters in srcChars.
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - inline UnicodeString& insert(int32_t start,
    - const UChar *srcChars,
    - int32_t srcLength);
    -
    - /**
    - * Insert the code unit <TT>srcChar</TT> into the UnicodeString object at
    - * offset <TT>start</TT>.
    - * @param start the offset at which the insertion occurs
    - * @param srcChar the code unit to insert
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - inline UnicodeString& insert(int32_t start,
    - UChar srcChar);
    -
    - /**
    - * Insert the code point <TT>srcChar</TT> into the UnicodeString object at
    - * offset <TT>start</TT>.
    - * @param start the offset at which the insertion occurs
    - * @param srcChar the code point to insert
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - inline UnicodeString& insert(int32_t start,
    - UChar32 srcChar);
    -
    -
    - /* Replace operations */
    -
    - /**
    - * Replace the characters in the range
    - * [<TT>start</TT>, <TT>start + length</TT>) with the characters in
    - * <TT>srcText</TT> in the range
    - * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>).
    - * <TT>srcText</TT> is not modified.
    - * @param start the offset at which the replace operation begins
    - * @param length the number of characters to replace. The character at
    - * <TT>start + length</TT> is not modified.
    - * @param srcText the source for the new characters
    - * @param srcStart the offset into <TT>srcText</TT> where new characters
    - * will be obtained
    - * @param srcLength the number of characters in <TT>srcText</TT> in
    - * the replace string
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - UnicodeString& replace(int32_t start,
    - int32_t length,
    - const UnicodeString& srcText,
    - int32_t srcStart,
    - int32_t srcLength);
    -
    - /**
    - * Replace the characters in the range
    - * [<TT>start</TT>, <TT>start + length</TT>)
    - * with the characters in <TT>srcText</TT>. <TT>srcText</TT> is
    - * not modified.
    - * @param start the offset at which the replace operation begins
    - * @param length the number of characters to replace. The character at
    - * <TT>start + length</TT> is not modified.
    - * @param srcText the source for the new characters
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - UnicodeString& replace(int32_t start,
    - int32_t length,
    - const UnicodeString& srcText);
    -
    - /**
    - * Replace the characters in the range
    - * [<TT>start</TT>, <TT>start + length</TT>) with the characters in
    - * <TT>srcChars</TT> in the range
    - * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>). <TT>srcChars</TT>
    - * is not modified.
    - * @param start the offset at which the replace operation begins
    - * @param length the number of characters to replace. The character at
    - * <TT>start + length</TT> is not modified.
    - * @param srcChars the source for the new characters
    - * @param srcStart the offset into <TT>srcChars</TT> where new characters
    - * will be obtained
    - * @param srcLength the number of characters in <TT>srcChars</TT>
    - * in the replace string
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - UnicodeString& replace(int32_t start,
    - int32_t length,
    - const UChar *srcChars,
    - int32_t srcStart,
    - int32_t srcLength);
    -
    - /**
    - * Replace the characters in the range
    - * [<TT>start</TT>, <TT>start + length</TT>) with the characters in
    - * <TT>srcChars</TT>. <TT>srcChars</TT> is not modified.
    - * @param start the offset at which the replace operation begins
    - * @param length number of characters to replace. The character at
    - * <TT>start + length</TT> is not modified.
    - * @param srcChars the source for the new characters
    - * @param srcLength the number of Unicode characters in srcChars
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - inline UnicodeString& replace(int32_t start,
    - int32_t length,
    - const UChar *srcChars,
    - int32_t srcLength);
    -
    - /**
    - * Replace the characters in the range
    - * [<TT>start</TT>, <TT>start + length</TT>) with the code unit
    - * <TT>srcChar</TT>.
    - * @param start the offset at which the replace operation begins
    - * @param length the number of characters to replace. The character at
    - * <TT>start + length</TT> is not modified.
    - * @param srcChar the new code unit
    - * @return a reference to this
    - * @stable ICU 2.0
    - */
    - inline UnicodeString& replace(int32_t start,
    - int32_t length,
    - UChar srcChar);
    -
    - /**
    - * Replace the characters in the range
    - * [<TT>start</TT>, <TT>start + length</TT>) with the code point
    - *

    <TRUNCATED>
  • Benoitc at Feb 13, 2014 at 6:14 pm
    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/utext.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/utext.h b/apps/couch_collate/platform/osx/icu/unicode/utext.h
    deleted file mode 100644
    index 866b850..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/utext.h
    +++ /dev/null
    @@ -1,1562 +0,0 @@
    -/*
    -*******************************************************************************
    -*
    -* Copyright (C) 2004-2008, International Business Machines
    -* Corporation and others. All Rights Reserved.
    -*
    -*******************************************************************************
    -* file name: utext.h
    -* encoding: US-ASCII
    -* tab size: 8 (not used)
    -* indentation:4
    -*
    -* created on: 2004oct06
    -* created by: Markus W. Scherer
    -*/
    -
    -#ifndef __UTEXT_H__
    -#define __UTEXT_H__
    -
    -/**
    - * \file
    - * \brief C API: Abstract Unicode Text API
    - *
    - * The Text Access API provides a means to allow text that is stored in alternative
    - * formats to work with ICU services. ICU normally operates on text that is
    - * stored in UTF-16 format, in (UChar *) arrays for the C APIs or as type
    - * UnicodeString for C++ APIs.
    - *
    - * ICU Text Access allows other formats, such as UTF-8 or non-contiguous
    - * UTF-16 strings, to be placed in a UText wrapper and then passed to ICU services.
    - *
    - * There are three general classes of usage for UText:
    - *
    - * Application Level Use. This is the simplest usage - applications would
    - * use one of the utext_open() functions on their input text, and pass
    - * the resulting UText to the desired ICU service.
    - *
    - * Second is usage in ICU Services, such as break iteration, that will need to
    - * operate on input presented to them as a UText. These implementations
    - * will need to use the iteration and related UText functions to gain
    - * access to the actual text.
    - *
    - * The third class of UText users are "text providers." These are the
    - * UText implementations for the various text storage formats. An application
    - * or system with a unique text storage format can implement a set of
    - * UText provider functions for that format, which will then allow
    - * ICU services to operate on that format.
    - *
    - *
    - * <em>Iterating over text</em>
    - *
    - * Here is sample code for a forward iteration over the contents of a UText
    - *
    - * \code
    - * UChar32 c;
    - * UText *ut = whatever();
    - *
    - * for (c=utext_next32From(ut, 0); c>=0; c=utext_next32(ut)) {
    - * // do whatever with the codepoint c here.
    - * }
    - * \endcode
    - *
    - * And here is similar code to iterate in the reverse direction, from the end
    - * of the text towards the beginning.
    - *
    - * \code
    - * UChar32 c;
    - * UText *ut = whatever();
    - * int textLength = utext_nativeLength(ut);
    - * for (c=utext_previous32From(ut, textLength); c>=0; c=utext_previous32(ut)) {
    - * // do whatever with the codepoint c here.
    - * }
    - * \endcode
    - *
    - * <em>Characters and Indexing</em>
    - *
    - * Indexing into text by UText functions is nearly always in terms of the native
    - * indexing of the underlying text storage. The storage format could be UTF-8
    - * or UTF-32, for example. When coding to the UText access API, no assumptions
    - * can be made regarding the size of characters, or how far an index
    - * may move when iterating between characters.
    - *
    - * All indices supplied to UText functions are pinned to the length of the
    - * text. An out-of-bounds index is not considered to be an error, but is
    - * adjusted to be in the range 0 <= index <= length of input text.
    - *
    - *
    - * When an index position is returned from a UText function, it will be
    - * a native index to the underlying text. In the case of multi-unit characters,
    - * it will always refer to the first position of the character,
    - * never to the interior. This is essentially the same thing as saying that
    - * a returned index will always point to a boundary between characters.
    - *
    - * When a native index is supplied to a UText function, all indices that
    - * refer to any part of a multi-unit character representation are considered
    - * to be equivalent. In the case of multi-unit characters, an incoming index
    - * will be logically normalized to refer to the start of the character.
    - *
    - * It is possible to test whether a native index is on a code point boundary
    - * by doing a utext_setNativeIndex() followed by a utext_getNativeIndex().
    - * If the index is returned unchanged, it was on a code point boundary. If
    - * an adjusted index is returned, the original index referred to the
    - * interior of a character.
    - *
    - * <em>Conventions for calling UText functions</em>
    - *
    - * Most UText access functions have as their first parameter a (UText *) pointer,
    - * which specifies the UText to be used. Unless otherwise noted, the
    - * pointer must refer to a valid, open UText. Attempting to
    - * use a closed UText or passing a NULL pointer is a programming error and
    - * will produce undefined results or NULL pointer exceptions.
    - *
    - * The UText_Open family of functions can either open an existing (closed)
    - * UText, or heap allocate a new UText. Here is sample code for creating
    - * a stack-allocated UText.
    - *
    - * \code
    - * char *s = whatever(); // A utf-8 string
    - * U_ErrorCode status = U_ZERO_ERROR;
    - * UText ut = UTEXT_INITIALIZER;
    - * utext_openUTF8(ut, s, -1, &status);
    - * if (U_FAILURE(status)) {
    - * // error handling
    - * } else {
    - * // work with the UText
    - * }
    - * \endcode
    - *
    - * Any existing UText passed to an open function _must_ have been initialized,
    - * either by the UTEXT_INITIALIZER, or by having been originally heap-allocated
    - * by an open function. Passing NULL will cause the open function to
    - * heap-allocate and fully initialize a new UText.
    - *
    - */
    -
    -
    -
    -#include "unicode/utypes.h"
    -#ifdef XP_CPLUSPLUS
    -#include "unicode/rep.h"
    -#include "unicode/unistr.h"
    -#include "unicode/chariter.h"
    -#endif
    -
    -
    -U_CDECL_BEGIN
    -
    -struct UText;
    -typedef struct UText UText; /**< C typedef for struct UText. @stable ICU 3.6 */
    -
    -
    -/***************************************************************************************
    - *
    - * C Functions for creating UText wrappers around various kinds of text strings.
    - *
    - ****************************************************************************************/
    -
    -
    -/**
    - * Close function for UText instances.
    - * Cleans up, releases any resources being held by an open UText.
    - * <p>
    - * If the UText was originally allocated by one of the utext_open functions,
    - * the storage associated with the utext will also be freed.
    - * If the UText storage originated with the application, as it would with
    - * a local or static instance, the storage will not be deleted.
    - *
    - * An open UText can be reset to refer to new string by using one of the utext_open()
    - * functions without first closing the UText.
    - *
    - * @param ut The UText to be closed.
    - * @return NULL if the UText struct was deleted by the close. If the UText struct
    - * was originally provided by the caller to the open function, it is
    - * returned by this function, and may be safely used again in
    - * a subsequent utext_open.
    - *
    - * @stable ICU 3.4
    - */
    -U_STABLE UText * U_EXPORT2
    -utext_close(UText *ut);
    -
    -
    -/**
    - * Open a read-only UText implementation for UTF-8 strings.
    - *
    - * \htmlonly
    - * Any invalid UTF-8 in the input will be handled in this way:
    - * a sequence of bytes that has the form of a truncated, but otherwise valid,
    - * UTF-8 sequence will be replaced by a single unicode replacement character, \uFFFD.
    - * Any other illegal bytes will each be replaced by a \uFFFD.
    - * \endhtmlonly
    - *
    - * @param ut Pointer to a UText struct. If NULL, a new UText will be created.
    - * If non-NULL, must refer to an initialized UText struct, which will then
    - * be reset to reference the specified UTF-8 string.
    - * @param s A UTF-8 string. Must not be NULL.
    - * @param length The length of the UTF-8 string in bytes, or -1 if the string is
    - * zero terminated.
    - * @param status Errors are returned here.
    - * @return A pointer to the UText. If a pre-allocated UText was provided, it
    - * will always be used and returned.
    - * @stable ICU 3.4
    - */
    -U_STABLE UText * U_EXPORT2
    -utext_openUTF8(UText *ut, const char *s, int64_t length, UErrorCode *status);
    -
    -
    -/**
    - * Open a read-only UText for UChar * string.
    - *
    - * @param ut Pointer to a UText struct. If NULL, a new UText will be created.
    - * If non-NULL, must refer to an initialized UText struct, which will then
    - * be reset to reference the specified UChar string.
    - * @param s A UChar (UTF-16) string
    - * @param length The number of UChars in the input string, or -1 if the string is
    - * zero terminated.
    - * @param status Errors are returned here.
    - * @return A pointer to the UText. If a pre-allocated UText was provided, it
    - * will always be used and returned.
    - * @stable ICU 3.4
    - */
    -U_STABLE UText * U_EXPORT2
    -utext_openUChars(UText *ut, const UChar *s, int64_t length, UErrorCode *status);
    -
    -
    -#ifdef XP_CPLUSPLUS
    -/**
    - * Open a writable UText for a non-const UnicodeString.
    - *
    - * @param ut Pointer to a UText struct. If NULL, a new UText will be created.
    - * If non-NULL, must refer to an initialized UText struct, which will then
    - * be reset to reference the specified input string.
    - * @param s A UnicodeString.
    - * @param status Errors are returned here.
    - * @return Pointer to the UText. If a UText was supplied as input, this
    - * will always be used and returned.
    - * @stable ICU 3.4
    - */
    -U_STABLE UText * U_EXPORT2
    -utext_openUnicodeString(UText *ut, U_NAMESPACE_QUALIFIER UnicodeString *s, UErrorCode *status);
    -
    -
    -/**
    - * Open a UText for a const UnicodeString. The resulting UText will not be writable.
    - *
    - * @param ut Pointer to a UText struct. If NULL, a new UText will be created.
    - * If non-NULL, must refer to an initialized UText struct, which will then
    - * be reset to reference the specified input string.
    - * @param s A const UnicodeString to be wrapped.
    - * @param status Errors are returned here.
    - * @return Pointer to the UText. If a UText was supplied as input, this
    - * will always be used and returned.
    - * @stable ICU 3.4
    - */
    -U_STABLE UText * U_EXPORT2
    -utext_openConstUnicodeString(UText *ut, const U_NAMESPACE_QUALIFIER UnicodeString *s, UErrorCode *status);
    -
    -
    -/**
    - * Open a writable UText implementation for an ICU Replaceable object.
    - * @param ut Pointer to a UText struct. If NULL, a new UText will be created.
    - * If non-NULL, must refer to an already existing UText, which will then
    - * be reset to reference the specified replaceable text.
    - * @param rep A Replaceable text object.
    - * @param status Errors are returned here.
    - * @return Pointer to the UText. If a UText was supplied as input, this
    - * will always be used and returned.
    - * @see Replaceable
    - * @stable ICU 3.4
    - */
    -U_STABLE UText * U_EXPORT2
    -utext_openReplaceable(UText *ut, U_NAMESPACE_QUALIFIER Replaceable *rep, UErrorCode *status);
    -
    -/**
    - * Open a UText implementation over an ICU CharacterIterator.
    - * @param ut Pointer to a UText struct. If NULL, a new UText will be created.
    - * If non-NULL, must refer to an already existing UText, which will then
    - * be reset to reference the specified replaceable text.
    - * @param ci A Character Iterator.
    - * @param status Errors are returned here.
    - * @return Pointer to the UText. If a UText was supplied as input, this
    - * will always be used and returned.
    - * @see Replaceable
    - * @stable ICU 3.4
    - */
    -U_STABLE UText * U_EXPORT2
    -utext_openCharacterIterator(UText *ut, U_NAMESPACE_QUALIFIER CharacterIterator *ic, UErrorCode *status);
    -
    -#endif
    -
    -
    -/**
    - * Clone a UText. This is much like opening a UText where the source text is itself
    - * another UText.
    - *
    - * A deep clone will copy both the UText data structures and the underlying text.
    - * The original and cloned UText will operate completely independently; modifications
    - * made to the text in one will not affect the other. Text providers are not
    - * required to support deep clones. The user of clone() must check the status return
    - * and be prepared to handle failures.
    - *
    - * The standard UText implementations for UTF8, UChar *, UnicodeString and
    - * Replaceable all support deep cloning.
    - *
    - * The UText returned from a deep clone will be writable, assuming that the text
    - * provider is able to support writing, even if the source UText had been made
    - * non-writable by means of UText_freeze().
    - *
    - * A shallow clone replicates only the UText data structures; it does not make
    - * a copy of the underlying text. Shallow clones can be used as an efficient way to
    - * have multiple iterators active in a single text string that is not being
    - * modified.
    - *
    - * A shallow clone operation will not fail, barring truly exceptional conditions such
    - * as memory allocation failures.
    - *
    - * Shallow UText clones should be avoided if the UText functions that modify the
    - * text are expected to be used, either on the original or the cloned UText.
    - * Any such modifications can cause unpredictable behavior. Read Only
    - * shallow clones provide some protection against errors of this type by
    - * disabling text modification via the cloned UText.
    - *
    - * A shallow clone made with the readOnly parameter == FALSE will preserve the
    - * utext_isWritable() state of the source object. Note, however, that
    - * write operations must be avoided while more than one UText exists that refer
    - * to the same underlying text.
    - *
    - * A UText and its clone may be safely concurrently accessed by separate threads.
    - * This is true for read access only with shallow clones, and for both read and
    - * write access with deep clones.
    - * It is the responsibility of the Text Provider to ensure that this thread safety
    - * constraint is met.
    - *
    - * @param dest A UText struct to be filled in with the result of the clone operation,
    - * or NULL if the clone function should heap-allocate a new UText struct.
    - * If non-NULL, must refer to an already existing UText, which will then
    - * be reset to become the clone.
    - * @param src The UText to be cloned.
    - * @param deep TRUE to request a deep clone, FALSE for a shallow clone.
    - * @param readOnly TRUE to request that the cloned UText have read only access to the
    - * underlying text.
    -
    - * @param status Errors are returned here. For deep clones, U_UNSUPPORTED_ERROR
    - * will be returned if the text provider is unable to clone the
    - * original text.
    - * @return The newly created clone, or NULL if the clone operation failed.
    - * @stable ICU 3.4
    - */
    -U_STABLE UText * U_EXPORT2
    -utext_clone(UText *dest, const UText *src, UBool deep, UBool readOnly, UErrorCode *status);
    -
    -
    -/**
    - * Compare two UText objects for equality.
    - * UTexts are equal if they are iterating over the same text, and
    - * have the same iteration position within the text.
    - * If either or both of the parameters are NULL, the comparison is FALSE.
    - *
    - * @param a The first of the two UTexts to compare.
    - * @param b The other UText to be compared.
    - * @return TRUE if the two UTexts are equal.
    - * @stable ICU 3.6
    - */
    -U_STABLE UBool U_EXPORT2
    -utext_equals(const UText *a, const UText *b);
    -
    -
    -/*****************************************************************************
    - *
    - * Functions to work with the text represeted by a UText wrapper
    - *
    - *****************************************************************************/
    -
    -/**
    - * Get the length of the text. Depending on the characteristics
    - * of the underlying text representation, this may be expensive.
    - * @see utext_isLengthExpensive()
    - *
    - *
    - * @param ut the text to be accessed.
    - * @return the length of the text, expressed in native units.
    - *
    - * @stable ICU 3.4
    - */
    -U_STABLE int64_t U_EXPORT2
    -utext_nativeLength(UText *ut);
    -
    -/**
    - * Return TRUE if calculating the length of the text could be expensive.
    - * Finding the length of NUL terminated strings is considered to be expensive.
    - *
    - * Note that the value of this function may change
    - * as the result of other operations on a UText.
    - * Once the length of a string has been discovered, it will no longer
    - * be expensive to report it.
    - *
    - * @param ut the text to be accessed.
    - * @return TRUE if determining the length of the text could be time consuming.
    - * @stable ICU 3.4
    - */
    -U_STABLE UBool U_EXPORT2
    -utext_isLengthExpensive(const UText *ut);
    -
    -/**
    - * Returns the code point at the requested index,
    - * or U_SENTINEL (-1) if it is out of bounds.
    - *
    - * If the specified index points to the interior of a multi-unit
    - * character - one of the trail bytes of a UTF-8 sequence, for example -
    - * the complete code point will be returned.
    - *
    - * The iteration position will be set to the start of the returned code point.
    - *
    - * This function is roughly equivalent to the the sequence
    - * utext_setNativeIndex(index);
    - * utext_current32();
    - * (There is a subtle difference if the index is out of bounds by being less than zero -
    - * utext_setNativeIndex(negative value) sets the index to zero, after which utext_current()
    - * will return the char at zero. utext_char32At(negative index), on the other hand, will
    - * return the U_SENTINEL value of -1.)
    - *
    - * @param ut the text to be accessed
    - * @param nativeIndex the native index of the character to be accessed. If the index points
    - * to other than the first unit of a multi-unit character, it will be adjusted
    - * to the start of the character.
    - * @return the code point at the specified index.
    - * @stable ICU 3.4
    - */
    -U_STABLE UChar32 U_EXPORT2
    -utext_char32At(UText *ut, int64_t nativeIndex);
    -
    -
    -/**
    - *
    - * Get the code point at the current iteration position,
    - * or U_SENTINEL (-1) if the iteration has reached the end of
    - * the input text.
    - *
    - * @param ut the text to be accessed.
    - * @return the Unicode code point at the current iterator position.
    - * @stable ICU 3.4
    - */
    -U_STABLE UChar32 U_EXPORT2
    -utext_current32(UText *ut);
    -
    -
    -/**
    - * Get the code point at the current iteration position of the UText, and
    - * advance the position to the first index following the character.
    - *
    - * If the position is at the end of the text (the index following
    - * the last character, which is also the length of the text),
    - * return U_SENTINEL (-1) and do not advance the index.
    - *
    - * This is a post-increment operation.
    - *
    - * An inline macro version of this function, UTEXT_NEXT32(),
    - * is available for performance critical use.
    - *
    - * @param ut the text to be accessed.
    - * @return the Unicode code point at the iteration position.
    - * @see UTEXT_NEXT32
    - * @stable ICU 3.4
    - */
    -U_STABLE UChar32 U_EXPORT2
    -utext_next32(UText *ut);
    -
    -
    -/**
    - * Move the iterator position to the character (code point) whose
    - * index precedes the current position, and return that character.
    - * This is a pre-decrement operation.
    - *
    - * If the initial position is at the start of the text (index of 0)
    - * return U_SENTINEL (-1), and leave the position unchanged.
    - *
    - * An inline macro version of this function, UTEXT_PREVIOUS32(),
    - * is available for performance critical use.
    - *
    - * @param ut the text to be accessed.
    - * @return the previous UChar32 code point, or U_SENTINEL (-1)
    - * if the iteration has reached the start of the text.
    - * @see UTEXT_PREVIOUS32
    - * @stable ICU 3.4
    - */
    -U_STABLE UChar32 U_EXPORT2
    -utext_previous32(UText *ut);
    -
    -
    -/**
    - * Set the iteration index and return the code point at that index.
    - * Leave the iteration index at the start of the following code point.
    - *
    - * This function is the most efficient and convenient way to
    - * begin a forward iteration. The results are identical to the those
    - * from the sequence
    - * \code
    - * utext_setIndex();
    - * utext_next32();
    - * \endcode
    - *
    - * @param ut the text to be accessed.
    - * @param nativeIndex Iteration index, in the native units of the text provider.
    - * @return Code point which starts at or before index,
    - * or U_SENTINEL (-1) if it is out of bounds.
    - * @stable ICU 3.4
    - */
    -U_STABLE UChar32 U_EXPORT2
    -utext_next32From(UText *ut, int64_t nativeIndex);
    -
    -
    -
    -/**
    - * Set the iteration index, and return the code point preceding the
    - * one specified by the initial index. Leave the iteration position
    - * at the start of the returned code point.
    - *
    - * This function is the most efficient and convenient way to
    - * begin a backwards iteration.
    - *
    - * @param ut the text to be accessed.
    - * @param nativeIndex Iteration index in the native units of the text provider.
    - * @return Code point preceding the one at the initial index,
    - * or U_SENTINEL (-1) if it is out of bounds.
    - *
    - * @stable ICU 3.4
    - */
    -U_STABLE UChar32 U_EXPORT2
    -utext_previous32From(UText *ut, int64_t nativeIndex);
    -
    -/**
    - * Get the current iterator position, which can range from 0 to
    - * the length of the text.
    - * The position is a native index into the input text, in whatever format it
    - * may have (possibly UTF-8 for example), and may not always be the same as
    - * the corresponding UChar (UTF-16) index.
    - * The returned position will always be aligned to a code point boundary.
    - *
    - * @param ut the text to be accessed.
    - * @return the current index position, in the native units of the text provider.
    - * @stable ICU 3.4
    - */
    -U_STABLE int64_t U_EXPORT2
    -utext_getNativeIndex(const UText *ut);
    -
    -/**
    - * Set the current iteration position to the nearest code point
    - * boundary at or preceding the specified index.
    - * The index is in the native units of the original input text.
    - * If the index is out of range, it will be pinned to be within
    - * the range of the input text.
    - * <p>
    - * It will usually be more efficient to begin an iteration
    - * using the functions utext_next32From() or utext_previous32From()
    - * rather than setIndex().
    - * <p>
    - * Moving the index position to an adjacent character is best done
    - * with utext_next32(), utext_previous32() or utext_moveIndex32().
    - * Attempting to do direct arithmetic on the index position is
    - * complicated by the fact that the size (in native units) of a
    - * character depends on the underlying representation of the character
    - * (UTF-8, UTF-16, UTF-32, arbitrary codepage), and is not
    - * easily knowable.
    - *
    - * @param ut the text to be accessed.
    - * @param nativeIndex the native unit index of the new iteration position.
    - * @stable ICU 3.4
    - */
    -U_STABLE void U_EXPORT2
    -utext_setNativeIndex(UText *ut, int64_t nativeIndex);
    -
    -/**
    - * Move the iterator postion by delta code points. The number of code points
    - * is a signed number; a negative delta will move the iterator backwards,
    - * towards the start of the text.
    - * <p>
    - * The index is moved by <code>delta</code> code points
    - * forward or backward, but no further backward than to 0 and
    - * no further forward than to utext_nativeLength().
    - * The resulting index value will be in between 0 and length, inclusive.
    - *
    - * @param ut the text to be accessed.
    - * @param delta the signed number of code points to move the iteration position.
    - * @return TRUE if the position could be moved the requested number of positions while
    - * staying within the range [0 - text length].
    - * @stable ICU 3.4
    - */
    -U_STABLE UBool U_EXPORT2
    -utext_moveIndex32(UText *ut, int32_t delta);
    -
    -/**
    - * Get the native index of the character preceeding the current position.
    - * If the iteration position is already at the start of the text, zero
    - * is returned.
    - * The value returned is the same as that obtained from the following sequence,
    - * but without the side effect of changing the iteration position.
    - *
    - * \code
    - * UText *ut = whatever;
    - * ...
    - * utext_previous(ut)
    - * utext_getNativeIndex(ut);
    - * \endcode
    - *
    - * This function is most useful during forwards iteration, where it will get the
    - * native index of the character most recently returned from utext_next().
    - *
    - * @param ut the text to be accessed
    - * @return the native index of the character preceeding the current index position,
    - * or zero if the current position is at the start of the text.
    - * @stable ICU 3.6
    - */
    -U_STABLE int64_t U_EXPORT2
    -utext_getPreviousNativeIndex(UText *ut);
    -
    -
    -/**
    - *
    - * Extract text from a UText into a UChar buffer. The range of text to be extracted
    - * is specified in the native indices of the UText provider. These may not necessarily
    - * be UTF-16 indices.
    - * <p>
    - * The size (number of 16 bit UChars) of the data to be extracted is returned. The
    - * full number of UChars is returned, even when the extracted text is truncated
    - * because the specified buffer size is too small.
    - * <p>
    - * The extracted string will (if you are a user) / must (if you are a text provider)
    - * be NUL-terminated if there is sufficient space in the destination buffer. This
    - * terminating NUL is not included in the returned length.
    - * <p>
    - * The iteration index is left at the position following the last extracted character.
    - *
    - * @param ut the UText from which to extract data.
    - * @param nativeStart the native index of the first character to extract.\
    - * If the specified index is out of range,
    - * it will be pinned to to be within 0 <= index <= textLength
    - * @param nativeLimit the native string index of the position following the last
    - * character to extract. If the specified index is out of range,
    - * it will be pinned to to be within 0 <= index <= textLength.
    - * nativeLimit must be >= nativeStart.
    - * @param dest the UChar (UTF-16) buffer into which the extracted text is placed
    - * @param destCapacity The size, in UChars, of the destination buffer. May be zero
    - * for precomputing the required size.
    - * @param status receives any error status.
    - * U_BUFFER_OVERFLOW_ERROR: the extracted text was truncated because the
    - * buffer was too small. Returns number of UChars for preflighting.
    - * @return Number of UChars in the data to be extracted. Does not include a trailing NUL.
    - *
    - * @stable ICU 3.4
    - */
    -U_STABLE int32_t U_EXPORT2
    -utext_extract(UText *ut,
    - int64_t nativeStart, int64_t nativeLimit,
    - UChar *dest, int32_t destCapacity,
    - UErrorCode *status);
    -
    -
    -/************************************************************************************
    - *
    - * #define inline versions of selected performance-critical text access functions
    - * Caution: do not use auto increment++ or decrement-- expressions
    - * as parameters to these macros.
    - *
    - * For most use, where there is no extreme performance constraint, the
    - * normal, non-inline functions are a better choice. The resulting code
    - * will be smaller, and, if the need ever arises, easier to debug.
    - *
    - * These are implemented as #defines rather than real functions
    - * because there is no fully portable way to do inline functions in plain C.
    - *
    - ************************************************************************************/
    -
    -/**
    - * inline version of utext_next32(), for performance-critical situations.
    - *
    - * Get the code point at the current iteration position of the UText, and
    - * advance the position to the first index following the character.
    - * This is a post-increment operation.
    - * Returns U_SENTINEL (-1) if the position is at the end of the
    - * text.
    - *
    - * @stable ICU 3.4
    - */
    -#define UTEXT_NEXT32(ut) \
    - ((ut)->chunkOffset < (ut)->chunkLength && ((ut)->chunkContents)[(ut)->chunkOffset]<0xd800 ? \
    - ((ut)->chunkContents)[((ut)->chunkOffset)++] : utext_next32(ut))
    -
    -/**
    - * inline version of utext_previous32(), for performance-critical situations.
    - *
    - * Move the iterator position to the character (code point) whose
    - * index precedes the current position, and return that character.
    - * This is a pre-decrement operation.
    - * Returns U_SENTINEL (-1) if the position is at the start of the text.
    - *
    - * @stable ICU 3.4
    - */
    -#define UTEXT_PREVIOUS32(ut) \
    - ((ut)->chunkOffset > 0 && \
    - (ut)->chunkContents[(ut)->chunkOffset-1] < 0xd800 ? \
    - (ut)->chunkContents[--((ut)->chunkOffset)] : utext_previous32(ut))
    -
    -/**
    - * inline version of utext_getNativeIndex(), for performance-critical situations.
    - *
    - * Get the current iterator position, which can range from 0 to
    - * the length of the text.
    - * The position is a native index into the input text, in whatever format it
    - * may have (possibly UTF-8 for example), and may not always be the same as
    - * the corresponding UChar (UTF-16) index.
    - * The returned position will always be aligned to a code point boundary.
    - *
    - * @stable ICU 3.6
    - */
    -#define UTEXT_GETNATIVEINDEX(ut) \
    - ((ut)->chunkOffset <= (ut)->nativeIndexingLimit? \
    - (ut)->chunkNativeStart+(ut)->chunkOffset : \
    - (ut)->pFuncs->mapOffsetToNative(ut))
    -
    -/**
    - * inline version of utext_setNativeIndex(), for performance-critical situations.
    - *
    - * Set the current iteration position to the nearest code point
    - * boundary at or preceding the specified index.
    - * The index is in the native units of the original input text.
    - * If the index is out of range, it will be pinned to be within
    - * the range of the input text.
    - *
    - * @stable ICU 4.0
    - */
    -#define UTEXT_SETNATIVEINDEX(ut, ix) \
    - { int64_t __offset = (ix) - (ut)->chunkNativeStart; \
    - if (__offset>=0 && __offset<=(int64_t)(ut)->nativeIndexingLimit) { \
    - (ut)->chunkOffset=(int32_t)__offset; \
    - } else { \
    - utext_setNativeIndex((ut), (ix)); } }
    -
    -
    -
    -/************************************************************************************
    - *
    - * Functions related to writing or modifying the text.
    - * These will work only with modifiable UTexts. Attempting to
    - * modify a read-only UText will return an error status.
    - *
    - ************************************************************************************/
    -
    -
    -/**
    - * Return TRUE if the text can be written (modified) with utext_replace() or
    - * utext_copy(). For the text to be writable, the text provider must
    - * be of a type that supports writing and the UText must not be frozen.
    - *
    - * Attempting to modify text when utext_isWriteable() is FALSE will fail -
    - * the text will not be modified, and an error will be returned from the function
    - * that attempted the modification.
    - *
    - * @param ut the UText to be tested.
    - * @return TRUE if the text is modifiable.
    - *
    - * @see utext_freeze()
    - * @see utext_replace()
    - * @see utext_copy()
    - * @stable ICU 3.4
    - *
    - */
    -U_STABLE UBool U_EXPORT2
    -utext_isWritable(const UText *ut);
    -
    -
    -/**
    - * Test whether there is meta data associated with the text.
    - * @see Replaceable::hasMetaData()
    - *
    - * @param ut The UText to be tested
    - * @return TRUE if the underlying text includes meta data.
    - * @stable ICU 3.4
    - */
    -U_STABLE UBool U_EXPORT2
    -utext_hasMetaData(const UText *ut);
    -
    -
    -/**
    - * Replace a range of the original text with a replacement text.
    - *
    - * Leaves the current iteration position at the position following the
    - * newly inserted replacement text.
    - *
    - * This function is only available on UText types that support writing,
    - * that is, ones where utext_isWritable() returns TRUE.
    - *
    - * When using this function, there should be only a single UText opened onto the
    - * underlying native text string. Behavior after a replace operation
    - * on a UText is undefined for any other additional UTexts that refer to the
    - * modified string.
    - *
    - * @param ut the UText representing the text to be operated on.
    - * @param nativeStart the native index of the start of the region to be replaced
    - * @param nativeLimit the native index of the character following the region to be replaced.
    - * @param replacementText pointer to the replacement text
    - * @param replacementLength length of the replacement text, or -1 if the text is NUL terminated.
    - * @param status receives any error status. Possible errors include
    - * U_NO_WRITE_PERMISSION
    - *
    - * @return The signed number of (native) storage units by which
    - * the length of the text expanded or contracted.
    - *
    - * @stable ICU 3.4
    - */
    -U_STABLE int32_t U_EXPORT2
    -utext_replace(UText *ut,
    - int64_t nativeStart, int64_t nativeLimit,
    - const UChar *replacementText, int32_t replacementLength,
    - UErrorCode *status);
    -
    -
    -
    -/**
    - *
    - * Copy or move a substring from one position to another within the text,
    - * while retaining any metadata associated with the text.
    - * This function is used to duplicate or reorder substrings.
    - * The destination index must not overlap the source range.
    - *
    - * The text to be copied or moved is inserted at destIndex;
    - * it does not replace or overwrite any existing text.
    - *
    - * The iteration position is left following the newly inserted text
    - * at the destination position.
    - *
    - * This function is only available on UText types that support writing,
    - * that is, ones where utext_isWritable() returns TRUE.
    - *
    - * When using this function, there should be only a single UText opened onto the
    - * underlying native text string. Behavior after a copy operation
    - * on a UText is undefined in any other additional UTexts that refer to the
    - * modified string.
    - *
    - * @param ut The UText representing the text to be operated on.
    - * @param nativeStart The native index of the start of the region to be copied or moved
    - * @param nativeLimit The native index of the character position following the region
    - * to be copied.
    - * @param destIndex The native destination index to which the source substring is
    - * copied or moved.
    - * @param move If TRUE, then the substring is moved, not copied/duplicated.
    - * @param status receives any error status. Possible errors include U_NO_WRITE_PERMISSION
    - *
    - * @stable ICU 3.4
    - */
    -U_STABLE void U_EXPORT2
    -utext_copy(UText *ut,
    - int64_t nativeStart, int64_t nativeLimit,
    - int64_t destIndex,
    - UBool move,
    - UErrorCode *status);
    -
    -
    -/**
    - * <p>
    - * Freeze a UText. This prevents any modification to the underlying text itself
    - * by means of functions operating on this UText.
    - * </p>
    - * <p>
    - * Once frozen, a UText can not be unfrozen. The intent is to ensure
    - * that a the text underlying a frozen UText wrapper cannot be modified via that UText.
    - * </p>
    - * <p>
    - * Caution: freezing a UText will disable changes made via the specific
    - * frozen UText wrapper only; it will not have any effect on the ability to
    - * directly modify the text by bypassing the UText. Any such backdoor modifications
    - * are always an error while UText access is occuring because the underlying
    - * text can get out of sync with UText's buffering.
    - * </p>
    - *
    - * @param ut The UText to be frozen.
    - * @see utext_isWritable()
    - * @stable ICU 3.6
    - */
    -U_STABLE void U_EXPORT2
    -utext_freeze(UText *ut);
    -
    -
    -/**
    - * UText provider properties (bit field indexes).
    - *
    - * @see UText
    - * @stable ICU 3.4
    - */
    -enum {
    - /**
    - * It is potentially time consuming for the provider to determine the length of the text.
    - * @stable ICU 3.4
    - */
    - UTEXT_PROVIDER_LENGTH_IS_EXPENSIVE = 1,
    - /**
    - * Text chunks remain valid and usable until the text object is modified or
    - * deleted, not just until the next time the access() function is called
    - * (which is the default).
    - * @stable ICU 3.4
    - */
    - UTEXT_PROVIDER_STABLE_CHUNKS = 2,
    - /**
    - * The provider supports modifying the text via the replace() and copy()
    - * functions.
    - * @see Replaceable
    - * @stable ICU 3.4
    - */
    - UTEXT_PROVIDER_WRITABLE = 3,
    - /**
    - * There is meta data associated with the text.
    - * @see Replaceable::hasMetaData()
    - * @stable ICU 3.4
    - */
    - UTEXT_PROVIDER_HAS_META_DATA = 4,
    - /**
    - * Text provider owns the text storage.
    - * Generally occurs as the result of a deep clone of the UText.
    - * When closing the UText, the associated text must
    - * also be closed/deleted/freed/ whatever is appropriate.
    - * @stable ICU 3.6
    - */
    - UTEXT_PROVIDER_OWNS_TEXT = 5
    -};
    -
    -/**
    - * Function type declaration for UText.clone().
    - *
    - * clone a UText. Much like opening a UText where the source text is itself
    - * another UText.
    - *
    - * A deep clone will copy both the UText data structures and the underlying text.
    - * The original and cloned UText will operate completely independently; modifications
    - * made to the text in one will not effect the other. Text providers are not
    - * required to support deep clones. The user of clone() must check the status return
    - * and be prepared to handle failures.
    - *
    - * A shallow clone replicates only the UText data structures; it does not make
    - * a copy of the underlying text. Shallow clones can be used as an efficient way to
    - * have multiple iterators active in a single text string that is not being
    - * modified.
    - *
    - * A shallow clone operation must not fail except for truly exceptional conditions such
    - * as memory allocation failures.
    - *
    - * A UText and its clone may be safely concurrently accessed by separate threads.
    - * This is true for both shallow and deep clones.
    - * It is the responsibility of the Text Provider to ensure that this thread safety
    - * constraint is met.
    -
    - *
    - * @param dest A UText struct to be filled in with the result of the clone operation,
    - * or NULL if the clone function should heap-allocate a new UText struct.
    - * @param src The UText to be cloned.
    - * @param deep TRUE to request a deep clone, FALSE for a shallow clone.
    - * @param status Errors are returned here. For deep clones, U_UNSUPPORTED_ERROR
    - * should be returned if the text provider is unable to clone the
    - * original text.
    - * @return The newly created clone, or NULL if the clone operation failed.
    - *
    - * @stable ICU 3.4
    - */
    -typedef UText * U_CALLCONV
    -UTextClone(UText *dest, const UText *src, UBool deep, UErrorCode *status);
    -
    -
    -/**
    - * Function type declaration for UText.nativeLength().
    - *
    - * @param ut the UText to get the length of.
    - * @return the length, in the native units of the original text string.
    - * @see UText
    - * @stable ICU 3.4
    - */
    -typedef int64_t U_CALLCONV
    -UTextNativeLength(UText *ut);
    -
    -/**
    - * Function type declaration for UText.access(). Get the description of the text chunk
    - * containing the text at a requested native index. The UText's iteration
    - * position will be left at the requested index. If the index is out
    - * of bounds, the iteration position will be left at the start or end
    - * of the string, as appropriate.
    - *
    - * Chunks must begin and end on code point boundaries. A single code point
    - * comprised of multiple storage units must never span a chunk boundary.
    - *
    - *
    - * @param ut the UText being accessed.
    - * @param nativeIndex Requested index of the text to be accessed.
    - * @param forward If TRUE, then the returned chunk must contain text
    - * starting from the index, so that start<=index<limit.
    - * If FALSE, then the returned chunk must contain text
    - * before the index, so that start<index<=limit.
    - * @return True if the requested index could be accessed. The chunk
    - * will contain the requested text.
    - * False value if a chunk cannot be accessed
    - * (the requested index is out of bounds).
    - *
    - * @see UText
    - * @stable ICU 3.4
    - */
    -typedef UBool U_CALLCONV
    -UTextAccess(UText *ut, int64_t nativeIndex, UBool forward);
    -
    -/**
    - * Function type declaration for UText.extract().
    - *
    - * Extract text from a UText into a UChar buffer. The range of text to be extracted
    - * is specified in the native indices of the UText provider. These may not necessarily
    - * be UTF-16 indices.
    - * <p>
    - * The size (number of 16 bit UChars) in the data to be extracted is returned. The
    - * full amount is returned, even when the specified buffer size is smaller.
    - * <p>
    - * The extracted string will (if you are a user) / must (if you are a text provider)
    - * be NUL-terminated if there is sufficient space in the destination buffer.
    - *
    - * @param ut the UText from which to extract data.
    - * @param nativeStart the native index of the first characer to extract.
    - * @param nativeLimit the native string index of the position following the last
    - * character to extract.
    - * @param dest the UChar (UTF-16) buffer into which the extracted text is placed
    - * @param destCapacity The size, in UChars, of the destination buffer. May be zero
    - * for precomputing the required size.
    - * @param status receives any error status.
    - * If U_BUFFER_OVERFLOW_ERROR: Returns number of UChars for
    - * preflighting.
    - * @return Number of UChars in the data. Does not include a trailing NUL.
    - *
    - * @stable ICU 3.4
    - */
    -typedef int32_t U_CALLCONV
    -UTextExtract(UText *ut,
    - int64_t nativeStart, int64_t nativeLimit,
    - UChar *dest, int32_t destCapacity,
    - UErrorCode *status);
    -
    -/**
    - * Function type declaration for UText.replace().
    - *
    - * Replace a range of the original text with a replacement text.
    - *
    - * Leaves the current iteration position at the position following the
    - * newly inserted replacement text.
    - *
    - * This function need only be implemented on UText types that support writing.
    - *
    - * When using this function, there should be only a single UText opened onto the
    - * underlying native text string. The function is responsible for updating the
    - * text chunk within the UText to reflect the updated iteration position,
    - * taking into account any changes to the underlying string's structure caused
    - * by the replace operation.
    - *
    - * @param ut the UText representing the text to be operated on.
    - * @param nativeStart the index of the start of the region to be replaced
    - * @param nativeLimit the index of the character following the region to be replaced.
    - * @param replacementText pointer to the replacement text
    - * @param replacmentLength length of the replacement text in UChars, or -1 if the text is NUL terminated.
    - * @param status receives any error status. Possible errors include
    - * U_NO_WRITE_PERMISSION
    - *
    - * @return The signed number of (native) storage units by which
    - * the length of the text expanded or contracted.
    - *
    - * @stable ICU 3.4
    - */
    -typedef int32_t U_CALLCONV
    -UTextReplace(UText *ut,
    - int64_t nativeStart, int64_t nativeLimit,
    - const UChar *replacementText, int32_t replacmentLength,
    - UErrorCode *status);
    -
    -/**
    - * Function type declaration for UText.copy().
    - *
    - * Copy or move a substring from one position to another within the text,
    - * while retaining any metadata associated with the text.
    - * This function is used to duplicate or reorder substrings.
    - * The destination index must not overlap the source range.
    - *
    - * The text to be copied or moved is inserted at destIndex;
    - * it does not replace or overwrite any existing text.
    - *
    - * This function need only be implemented for UText types that support writing.
    - *
    - * When using this function, there should be only a single UText opened onto the
    - * underlying native text string. The function is responsible for updating the
    - * text chunk within the UText to reflect the updated iteration position,
    - * taking into account any changes to the underlying string's structure caused
    - * by the replace operation.
    - *
    - * @param ut The UText representing the text to be operated on.
    - * @param nativeStart The index of the start of the region to be copied or moved
    - * @param nativeLimit The index of the character following the region to be replaced.
    - * @param nativeDest The destination index to which the source substring is copied or moved.
    - * @param move If TRUE, then the substring is moved, not copied/duplicated.
    - * @param status receives any error status. Possible errors include U_NO_WRITE_PERMISSION
    - *
    - * @stable ICU 3.4
    - */
    -typedef void U_CALLCONV
    -UTextCopy(UText *ut,
    - int64_t nativeStart, int64_t nativeLimit,
    - int64_t nativeDest,
    - UBool move,
    - UErrorCode *status);
    -
    -/**
    - * Function type declaration for UText.mapOffsetToNative().
    - * Map from the current UChar offset within the current text chunk to
    - * the corresponding native index in the original source text.
    - *
    - * This is required only for text providers that do not use native UTF-16 indexes.
    - *
    - * @param ut the UText.
    - * @return Absolute (native) index corresponding to chunkOffset in the current chunk.
    - * The returned native index should always be to a code point boundary.
    - *
    - * @stable ICU 3.4
    - */
    -typedef int64_t U_CALLCONV
    -UTextMapOffsetToNative(const UText *ut);
    -
    -/**
    - * Function type declaration for UText.mapIndexToUTF16().
    - * Map from a native index to a UChar offset within a text chunk.
    - * Behavior is undefined if the native index does not fall within the
    - * current chunk.
    - *
    - * This function is required only for text providers that do not use native UTF-16 indexes.
    - *
    - * @param ut The UText containing the text chunk.
    - * @param nativeIndex Absolute (native) text index, chunk->start<=index<=chunk->limit.
    - * @return Chunk-relative UTF-16 offset corresponding to the specified native
    - * index.
    - *
    - * @stable ICU 3.4
    - */
    -typedef int32_t U_CALLCONV
    -UTextMapNativeIndexToUTF16(const UText *ut, int64_t nativeIndex);
    -
    -
    -/**
    - * Function type declaration for UText.utextClose().
    - *
    - * A Text Provider close function is only required for provider types that make
    - * allocations in their open function (or other functions) that must be
    - * cleaned when the UText is closed.
    - *
    - * The allocation of the UText struct itself and any "extra" storage
    - * associated with the UText is handled by the common UText implementation
    - * and does not require provider specific cleanup in a close function.
    - *
    - * Most UText provider implementations do not need to implement this function.
    - *
    - * @param ut A UText object to be closed.
    - *
    - * @stable ICU 3.4
    - */
    -typedef void U_CALLCONV
    -UTextClose(UText *ut);
    -
    -
    -/**
    - * (public) Function dispatch table for UText.
    - * Conceptually very much like a C++ Virtual Function Table.
    - * This struct defines the organization of the table.
    - * Each text provider implementation must provide an
    - * actual table that is initialized with the appropriate functions
    - * for the type of text being handled.
    - * @stable ICU 3.6
    - */
    -struct UTextFuncs {
    - /**
    - * (public) Function table size, sizeof(UTextFuncs)
    - * Intended for use should the table grow to accomodate added
    - * functions in the future, to allow tests for older format
    - * function tables that do not contain the extensions.
    - *
    - * Fields are placed for optimal alignment on
    - * 32/64/128-bit-pointer machines, by normally grouping together
    - * 4 32-bit fields,
    - * 4 pointers,
    - * 2 64-bit fields
    - * in sequence.
    - * @stable ICU 3.6
    - */
    - int32_t tableSize;
    -
    - /**
    - * (private) Alignment padding.
    - * Do not use, reserved for use by the UText framework only.
    - * @internal
    - */
    - int32_t reserved1, /** @internal */ reserved2, /** @internal */ reserved3;
    -
    -
    - /**
    - * (public) Function pointer for UTextClone
    - *
    - * @see UTextClone
    - * @stable ICU 3.6
    - */
    - UTextClone *clone;
    -
    - /**
    - * (public) function pointer for UTextLength
    - * May be expensive to compute!
    - *
    - * @see UTextLength
    - * @stable ICU 3.6
    - */
    - UTextNativeLength *nativeLength;
    -
    - /**
    - * (public) Function pointer for UTextAccess.
    - *
    - * @see UTextAccess
    - * @stable ICU 3.6
    - */
    - UTextAccess *access;
    -
    - /**
    - * (public) Function pointer for UTextExtract.
    - *
    - * @see UTextExtract
    - * @stable ICU 3.6
    - */
    - UTextExtract *extract;
    -
    - /**
    - * (public) Function pointer for UTextReplace.
    - *
    - * @see UTextReplace
    - * @stable ICU 3.6
    - */
    - UTextReplace *replace;
    -
    - /**
    - * (public) Function pointer for UTextCopy.
    - *
    - * @see UTextCopy
    - * @stable ICU 3.6
    - */
    - UTextCopy *copy;
    -
    - /**
    - * (public) Function pointer for UTextMapOffsetToNative.
    - *
    - * @see UTextMapOffsetToNative
    - * @stable ICU 3.6
    - */
    - UTextMapOffsetToNative *mapOffsetToNative;
    -
    - /**
    - * (public) Function pointer for UTextMapNativeIndexToUTF16.
    - *
    - * @see UTextMapNativeIndexToUTF16
    - * @stable ICU 3.6
    - */
    - UTextMapNativeIndexToUTF16 *mapNativeIndexToUTF16;
    -
    - /**
    - * (public) Function pointer for UTextClose.
    - *
    - * @see UTextClose
    - * @stable ICU 3.6
    - */
    - UTextClose *close;
    -
    - /**
    - * (private) Spare function pointer
    - * @internal
    - */
    -
    - UTextClose *spare1;
    - /**
    - * (private) Spare function pointer
    - * @internal
    - */
    - UTextClose *spare2;
    -
    - /**
    - * (private) Spare function pointer
    - * @internal
    - */
    - UTextClose *spare3;
    -
    -};
    -/**
    - * Function dispatch table for UText
    - * @see UTextFuncs
    - */
    -typedef struct UTextFuncs UTextFuncs;
    -
    - /**
    - * UText struct. Provides the interface between the generic UText access code
    - * and the UText provider code that works on specific kinds of
    - * text (UTF-8, noncontiguous UTF-16, whatever.)
    - *
    - * Applications that are using predefined types of text providers
    - * to pass text data to ICU services will have no need to view the
    - * internals of the UText structs that they open.
    - *
    - * @stable ICU 3.6
    - */
    -struct UText {
    - /**
    - * (private) Magic. Used to help detect when UText functions are handed
    - * invalid or unitialized UText structs.
    - * utext_openXYZ() functions take an initialized,
    - * but not necessarily open, UText struct as an
    - * optional fill-in parameter. This magic field
    - * is used to check for that initialization.
    - * Text provider close functions must NOT clear
    - * the magic field because that would prevent
    - * reuse of the UText struct.
    - * @internal
    - */
    - uint32_t magic;
    -
    -
    - /**
    - * (private) Flags for managing the allocation and freeing of
    - * memory associated with this UText.
    - * @internal
    - */
    - int32_t flags;
    -
    -
    - /**
    - * Text provider properties. This set of flags is maintainted by the
    - * text provider implementation.
    - * @stable ICU 3.4
    - */
    - int32_t providerProperties;
    -
    - /**
    - * (public) sizeOfStruct=sizeof(UText)
    - * Allows possible backward compatible extension.
    - *
    - * @stable ICU 3.4
    - */
    - int32_t sizeOfStruct;
    -
    - /* ------ 16 byte alignment boundary ----------- */
    -
    -
    - /**
    - * (protected) Native index of the first character position following
    - * the current chunk.
    - * @stable ICU 3.6
    - */
    - int64_t chunkNativeLimit;
    -
    - /**
    - * (protected) Size in bytes of the extra space (pExtra).
    - * @stable ICU 3.4
    - */
    - int32_t extraSize;
    -
    - /**
    - * (protected) The highest chunk offset where native indexing and
    - * chunk (UTF-16) indexing correspond. For UTF-16 sources, value
    - * will be equal to chunkLength.
    - *
    - * @stable ICU 3.6
    - */
    - int32_t nativeIndexingLimit;
    -
    - /* ---- 16 byte alignment boundary------ */
    -
    - /**
    - * (protected) Native index of the first character in the text chunk.
    - * @stable ICU 3.6
    - */
    - int64_t chunkNativeStart;
    -
    - /**
    - * (protected) Current iteration position within the text chunk (UTF-16 buffer).
    - * This is the index to the character that will be returned by utext_next32().
    - * @stable ICU 3.6
    - */
    - int32_t chunkOffset;
    -
    - /**
    - * (protected) Length the text chunk (UTF-16 buffer), in UChars.
    - * @stable ICU 3.6
    - */
    - int32_t chunkLength;
    -
    - /* ---- 16 byte alignment boundary-- */
    -
    -
    - /**
    - * (protected) pointer to a chunk of text in UTF-16 format.
    - * May refer either to original storage of the source of the text, or
    - * if conversion was required, to a buffer owned by the UText.
    - * @stable ICU 3.6
    - */
    - const UChar *chunkContents;
    -
    - /**
    - * (public) Pointer to Dispatch table for accessing functions for this UText.
    - * @stable ICU 3.6
    - */
    - const UTextFuncs *pFuncs;
    -
    - /**
    - * (protected) Pointer to additional space requested by the
    - * text provider during the utext_open operation.
    - * @stable ICU 3.4
    - */
    - void *pExtra;
    -
    - /**
    - * (protected) Pointer to string or text-containin object or similar.
    - * This is the source of the text that this UText is wrapping, in a format
    - * that is known to the text provider functions.
    - * @stable ICU 3.4
    - */
    - const void *context;
    -
    - /* --- 16 byte alignment boundary--- */
    -
    - /**
    - * (protected) Pointer fields available for use by the text provider.
    - * Not used by UText common code.
    - * @stable ICU 3.6
    - */
    - const void *p;
    - /**
    - * (protected) Pointer fields available for use by the text provider.
    - * Not used by UText common code.
    - * @stable ICU 3.6
    - */
    - const void *q;
    - /**
    - * (protected) Pointer fields available for use by the text provider.
    - * Not used by UText common code.
    - * @stable ICU 3.6
    - */
    - const void *r;
    -
    - /**
    - * Private field reserved for future use by the UText framework
    - * itself. This is not to be touched by the text providers.
    - * @internal ICU 3.4
    - */
    - void *privP;
    -
    -
    - /* --- 16 byte alignment boundary--- */
    -
    -
    - /**
    - * (protected) Integer field reserved for use by the text provider.
    - * Not used by the UText framework, or by the client (user) of the UText.
    - * @stable ICU 3.4
    - */
    - int64_t a;
    -
    - /**
    - * (protected) Integer field reserved for use by the text provider.
    - * Not used by the UText framework, or by the client (user) of the UText.
    - * @stable ICU 3.4
    - */
    - int32_t b;
    -
    - /**
    - * (protected) Integer field reserved for use by the text provider.
    - * Not used by the UText framework, or by the client (user) of the UText.
    - * @stable ICU 3.4
    - */
    - int32_t c;
    -
    - /* ---- 16 byte alignment boundary---- */
    -
    -
    - /**
    - * Private field reserved for future use by the UText framework
    - * itself. This is not to be touched by the text providers.
    - * @internal ICU 3.4
    - */
    - int64_t privA;
    - /**
    - * Private field reserved for future use by the UText framework
    - * itself. This is not to be touched by the text providers.
    - * @internal ICU 3.4
    - */
    - int32_t privB;
    - /**
    - * Private field reserved for future use by the UText framework
    - * itself. This is not to be touched by the text providers.
    - * @internal ICU 3.4
    - */
    - int32_t privC;
    -};
    -
    -
    -/**
    - * Common function for use by Text Provider implementations to allocate and/or initialize
    - * a new UText struct. To be called in the implementation of utext_open() functions.
    - * If the supplied UText parameter is null, a new UText struct will be allocated on the heap.
    - * If the supplied UText is already open, the provider's close function will be called
    - * so that the struct can be reused by the open that is in progress.
    - *
    - * @param ut pointer to a UText struct to be re-used, or null if a new UText
    - * should be allocated.
    - * @param extraSpace The amount of additional space to be allocated as part
    - * of this UText, for use by types of providers that require
    - * additional storage.
    - * @param status Errors are returned here.
    - * @return pointer to the UText, allocated if necessary, with extra space set up if requested.
    - * @stable ICU 3.4
    - */
    -U_STABLE UText * U_EXPORT2
    -utext_setup(UText *ut, int32_t extraSpace, UErrorCode *status);
    -
    -/**
    - * @internal
    - * Value used to help identify correctly initialized UText structs.
    - * Note: must be publicly visible so that UTEXT_INITIALIZER can access it.
    - */
    -enum {
    - UTEXT_MAGIC = 0x345ad82c
    -};
    -
    -/**
    - * initializer to be used with local (stack) instances of a UText
    - * struct. UText structs must be initialized before passing
    - * them to one of the utext_open functions.
    - *
    - * @stable ICU 3.6
    - */
    -#define UTEXT_INITIALIZER { \
    - UTEXT_MAGIC, /* magic */ \
    - 0, /* flags */ \
    - 0, /* providerProps */ \
    - sizeof(UText), /* sizeOfStruct */ \
    - 0, /* chunkNativeLimit */ \
    - 0, /* extraSize */ \
    - 0, /* nativeIndexingLimit */ \
    - 0, /* chunkNativeStart */ \
    - 0, /* chunkOffset */ \
    - 0, /* chunkLength */ \
    - NULL, /* chunkContents */ \
    - NULL, /* pFuncs */ \
    - NULL, /* pExtra */ \
    - NULL, /* context */ \
    - NULL, NULL, NULL, /* p, q, r */ \
    - NULL, /* privP */ \
    - 0, 0, 0, /* a, b, c */ \
    - 0, 0, 0 /* privA,B,C, */ \
    - }
    -
    -
    -U_CDECL_END
    -
    -
    -
    -#endif

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/utf.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/utf.h b/apps/couch_collate/platform/osx/icu/unicode/utf.h
    deleted file mode 100644
    index 1682283..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/utf.h
    +++ /dev/null
    @@ -1,227 +0,0 @@
    -/*
    -*******************************************************************************
    -*
    -* Copyright (C) 1999-2007, International Business Machines
    -* Corporation and others. All Rights Reserved.
    -*
    -*******************************************************************************
    -* file name: utf.h
    -* encoding: US-ASCII
    -* tab size: 8 (not used)
    -* indentation:4
    -*
    -* created on: 1999sep09
    -* created by: Markus W. Scherer
    -*/
    -
    -/**
    - * \file
    - * \brief C API: Code point macros
    - *
    - * This file defines macros for checking whether a code point is
    - * a surrogate or a non-character etc.
    - *
    - * The UChar and UChar32 data types for Unicode code units and code points
    - * are defined in umachines.h because they can be machine-dependent.
    - *
    - * utf.h is included by utypes.h and itself includes utf8.h and utf16.h after some
    - * common definitions. Those files define macros for efficiently getting code points
    - * in and out of UTF-8/16 strings.
    - * utf16.h macros have "U16_" prefixes.
    - * utf8.h defines similar macros with "U8_" prefixes for UTF-8 string handling.
    - *
    - * ICU processes 16-bit Unicode strings.
    - * Most of the time, such strings are well-formed UTF-16.
    - * Single, unpaired surrogates must be handled as well, and are treated in ICU
    - * like regular code points where possible.
    - * (Pairs of surrogate code points are indistinguishable from supplementary
    - * code points encoded as pairs of supplementary code units.)
    - *
    - * In fact, almost all Unicode code points in normal text (>99%)
    - * are on the BMP (<=U+ffff) and even <=U+d7ff.
    - * ICU functions handle supplementary code points (U+10000..U+10ffff)
    - * but are optimized for the much more frequently occurring BMP code points.
    - *
    - * utf.h defines UChar to be an unsigned 16-bit integer. If this matches wchar_t, then
    - * UChar is defined to be exactly wchar_t, otherwise uint16_t.
    - *
    - * UChar32 is defined to be a signed 32-bit integer (int32_t), large enough for a 21-bit
    - * Unicode code point (Unicode scalar value, 0..0x10ffff).
    - * Before ICU 2.4, the definition of UChar32 was similarly platform-dependent as
    - * the definition of UChar. For details see the documentation for UChar32 itself.
    - *
    - * utf.h also defines a small number of C macros for single Unicode code points.
    - * These are simple checks for surrogates and non-characters.
    - * For actual Unicode character properties see uchar.h.
    - *
    - * By default, string operations must be done with error checking in case
    - * a string is not well-formed UTF-16.
    - * The macros will detect if a surrogate code unit is unpaired
    - * (lead unit without trail unit or vice versa) and just return the unit itself
    - * as the code point.
    - * (It is an accidental property of Unicode and UTF-16 that all
    - * malformed sequences can be expressed unambiguously with a distinct subrange
    - * of Unicode code points.)
    - *
    - * The regular "safe" macros require that the initial, passed-in string index
    - * is within bounds. They only check the index when they read more than one
    - * code unit. This is usually done with code similar to the following loop:
    - * <pre>while(i<length) {
    - * U16_NEXT(s, i, length, c);
    - * // use c
    - * }</pre>
    - *
    - * When it is safe to assume that text is well-formed UTF-16
    - * (does not contain single, unpaired surrogates), then one can use
    - * U16_..._UNSAFE macros.
    - * These do not check for proper code unit sequences or truncated text and may
    - * yield wrong results or even cause a crash if they are used with "malformed"
    - * text.
    - * In practice, U16_..._UNSAFE macros will produce slightly less code but
    - * should not be faster because the processing is only different when a
    - * surrogate code unit is detected, which will be rare.
    - *
    - * Similarly for UTF-8, there are "safe" macros without a suffix,
    - * and U8_..._UNSAFE versions.
    - * The performance differences are much larger here because UTF-8 provides so
    - * many opportunities for malformed sequences.
    - * The unsafe UTF-8 macros are entirely implemented inside the macro definitions
    - * and are fast, while the safe UTF-8 macros call functions for all but the
    - * trivial (ASCII) cases.
    - * (ICU 3.6 optimizes U8_NEXT() and U8_APPEND() to handle most other common
    - * characters inline as well.)
    - *
    - * Unlike with UTF-16, malformed sequences cannot be expressed with distinct
    - * code point values (0..U+10ffff). They are indicated with negative values instead.
    - *
    - * For more information see the ICU User Guide Strings chapter
    - * (http://icu-project.org/userguide/strings.html).
    - *
    - * <em>Usage:</em>
    - * ICU coding guidelines for if() statements should be followed when using these macros.
    - * Compound statements (curly braces {}) must be used for if-else-while...
    - * bodies and all macro statements should be terminated with semicolon.
    - *
    - * @stable ICU 2.4
    - */
    -
    -#ifndef __UTF_H__
    -#define __UTF_H__
    -
    -#include "unicode/utypes.h"
    -/* include the utfXX.h after the following definitions */
    -
    -/* single-code point definitions -------------------------------------------- */
    -
    -/**
    - * This value is intended for sentinel values for APIs that
    - * (take or) return single code points (UChar32).
    - * It is outside of the Unicode code point range 0..0x10ffff.
    - *
    - * For example, a "done" or "error" value in a new API
    - * could be indicated with U_SENTINEL.
    - *
    - * ICU APIs designed before ICU 2.4 usually define service-specific "done"
    - * values, mostly 0xffff.
    - * Those may need to be distinguished from
    - * actual U+ffff text contents by calling functions like
    - * CharacterIterator::hasNext() or UnicodeString::length().
    - *
    - * @return -1
    - * @see UChar32
    - * @stable ICU 2.4
    - */
    -#define U_SENTINEL (-1)
    -
    -/**
    - * Is this code point a Unicode noncharacter?
    - * @param c 32-bit code point
    - * @return TRUE or FALSE
    - * @stable ICU 2.4
    - */
    -#define U_IS_UNICODE_NONCHAR(c) \
    - ((c)>=0xfdd0 && \
    - ((uint32_t)(c)<=0xfdef || ((c)&0xfffe)==0xfffe) && \
    - (uint32_t)(c)<=0x10ffff)
    -
    -/**
    - * Is c a Unicode code point value (0..U+10ffff)
    - * that can be assigned a character?
    - *
    - * Code points that are not characters include:
    - * - single surrogate code points (U+d800..U+dfff, 2048 code points)
    - * - the last two code points on each plane (U+__fffe and U+__ffff, 34 code points)
    - * - U+fdd0..U+fdef (new with Unicode 3.1, 32 code points)
    - * - the highest Unicode code point value is U+10ffff
    - *
    - * This means that all code points below U+d800 are character code points,
    - * and that boundary is tested first for performance.
    - *
    - * @param c 32-bit code point
    - * @return TRUE or FALSE
    - * @stable ICU 2.4
    - */
    -#define U_IS_UNICODE_CHAR(c) \
    - ((uint32_t)(c)<0xd800 || \
    - ((uint32_t)(c)>0xdfff && \
    - (uint32_t)(c)<=0x10ffff && \
    - !U_IS_UNICODE_NONCHAR(c)))
    -
    -/**
    - * Is this code point a BMP code point (U+0000..U+ffff)?
    - * @param c 32-bit code point
    - * @return TRUE or FALSE
    - * @stable ICU 2.8
    - */
    -#define U_IS_BMP(c) ((uint32_t)(c)<=0xffff)
    -
    -/**
    - * Is this code point a supplementary code point (U+10000..U+10ffff)?
    - * @param c 32-bit code point
    - * @return TRUE or FALSE
    - * @stable ICU 2.8
    - */
    -#define U_IS_SUPPLEMENTARY(c) ((uint32_t)((c)-0x10000)<=0xfffff)
    -
    -/**
    - * Is this code point a lead surrogate (U+d800..U+dbff)?
    - * @param c 32-bit code point
    - * @return TRUE or FALSE
    - * @stable ICU 2.4
    - */
    -#define U_IS_LEAD(c) (((c)&0xfffffc00)==0xd800)
    -
    -/**
    - * Is this code point a trail surrogate (U+dc00..U+dfff)?
    - * @param c 32-bit code point
    - * @return TRUE or FALSE
    - * @stable ICU 2.4
    - */
    -#define U_IS_TRAIL(c) (((c)&0xfffffc00)==0xdc00)
    -
    -/**
    - * Is this code point a surrogate (U+d800..U+dfff)?
    - * @param c 32-bit code point
    - * @return TRUE or FALSE
    - * @stable ICU 2.4
    - */
    -#define U_IS_SURROGATE(c) (((c)&0xfffff800)==0xd800)
    -
    -/**
    - * Assuming c is a surrogate code point (U_IS_SURROGATE(c)),
    - * is it a lead surrogate?
    - * @param c 32-bit code point
    - * @return TRUE or FALSE
    - * @stable ICU 2.4
    - */
    -#define U_IS_SURROGATE_LEAD(c) (((c)&0x400)==0)
    -
    -/* include the utfXX.h ------------------------------------------------------ */
    -
    -#include "unicode/utf8.h"
    -#include "unicode/utf16.h"
    -
    -/* utf_old.h contains deprecated, pre-ICU 2.4 definitions */
    -#include "unicode/utf_old.h"
    -
    -#endif

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/utf16.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/utf16.h b/apps/couch_collate/platform/osx/icu/unicode/utf16.h
    deleted file mode 100644
    index 719bc04..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/utf16.h
    +++ /dev/null
    @@ -1,605 +0,0 @@
    -/*
    -*******************************************************************************
    -*
    -* Copyright (C) 1999-2007, International Business Machines
    -* Corporation and others. All Rights Reserved.
    -*
    -*******************************************************************************
    -* file name: utf16.h
    -* encoding: US-ASCII
    -* tab size: 8 (not used)
    -* indentation:4
    -*
    -* created on: 1999sep09
    -* created by: Markus W. Scherer
    -*/
    -
    -/**
    - * \file
    - * \brief C API: 16-bit Unicode handling macros
    - *
    - * This file defines macros to deal with 16-bit Unicode (UTF-16) code units and strings.
    - * utf16.h is included by utf.h after unicode/umachine.h
    - * and some common definitions.
    - *
    - * For more information see utf.h and the ICU User Guide Strings chapter
    - * (http://icu-project.org/userguide/strings.html).
    - *
    - * <em>Usage:</em>
    - * ICU coding guidelines for if() statements should be followed when using these macros.
    - * Compound statements (curly braces {}) must be used for if-else-while...
    - * bodies and all macro statements should be terminated with semicolon.
    - */
    -
    -#ifndef __UTF16_H__
    -#define __UTF16_H__
    -
    -/* utf.h must be included first. */
    -#ifndef __UTF_H__
    -# include "unicode/utf.h"
    -#endif
    -
    -/* single-code point definitions -------------------------------------------- */
    -
    -/**
    - * Does this code unit alone encode a code point (BMP, not a surrogate)?
    - * @param c 16-bit code unit
    - * @return TRUE or FALSE
    - * @stable ICU 2.4
    - */
    -#define U16_IS_SINGLE(c) !U_IS_SURROGATE(c)
    -
    -/**
    - * Is this code unit a lead surrogate (U+d800..U+dbff)?
    - * @param c 16-bit code unit
    - * @return TRUE or FALSE
    - * @stable ICU 2.4
    - */
    -#define U16_IS_LEAD(c) (((c)&0xfffffc00)==0xd800)
    -
    -/**
    - * Is this code unit a trail surrogate (U+dc00..U+dfff)?
    - * @param c 16-bit code unit
    - * @return TRUE or FALSE
    - * @stable ICU 2.4
    - */
    -#define U16_IS_TRAIL(c) (((c)&0xfffffc00)==0xdc00)
    -
    -/**
    - * Is this code unit a surrogate (U+d800..U+dfff)?
    - * @param c 16-bit code unit
    - * @return TRUE or FALSE
    - * @stable ICU 2.4
    - */
    -#define U16_IS_SURROGATE(c) U_IS_SURROGATE(c)
    -
    -/**
    - * Assuming c is a surrogate code point (U16_IS_SURROGATE(c)),
    - * is it a lead surrogate?
    - * @param c 16-bit code unit
    - * @return TRUE or FALSE
    - * @stable ICU 2.4
    - */
    -#define U16_IS_SURROGATE_LEAD(c) (((c)&0x400)==0)
    -
    -/**
    - * Helper constant for U16_GET_SUPPLEMENTARY.
    - * @internal
    - */
    -#define U16_SURROGATE_OFFSET ((0xd800<<10UL)+0xdc00-0x10000)
    -
    -/**
    - * Get a supplementary code point value (U+10000..U+10ffff)
    - * from its lead and trail surrogates.
    - * The result is undefined if the input values are not
    - * lead and trail surrogates.
    - *
    - * @param lead lead surrogate (U+d800..U+dbff)
    - * @param trail trail surrogate (U+dc00..U+dfff)
    - * @return supplementary code point (U+10000..U+10ffff)
    - * @stable ICU 2.4
    - */
    -#define U16_GET_SUPPLEMENTARY(lead, trail) \
    - (((UChar32)(lead)<<10UL)+(UChar32)(trail)-U16_SURROGATE_OFFSET)
    -
    -
    -/**
    - * Get the lead surrogate (0xd800..0xdbff) for a
    - * supplementary code point (0x10000..0x10ffff).
    - * @param supplementary 32-bit code point (U+10000..U+10ffff)
    - * @return lead surrogate (U+d800..U+dbff) for supplementary
    - * @stable ICU 2.4
    - */
    -#define U16_LEAD(supplementary) (UChar)(((supplementary)>>10)+0xd7c0)
    -
    -/**
    - * Get the trail surrogate (0xdc00..0xdfff) for a
    - * supplementary code point (0x10000..0x10ffff).
    - * @param supplementary 32-bit code point (U+10000..U+10ffff)
    - * @return trail surrogate (U+dc00..U+dfff) for supplementary
    - * @stable ICU 2.4
    - */
    -#define U16_TRAIL(supplementary) (UChar)(((supplementary)&0x3ff)|0xdc00)
    -
    -/**
    - * How many 16-bit code units are used to encode this Unicode code point? (1 or 2)
    - * The result is not defined if c is not a Unicode code point (U+0000..U+10ffff).
    - * @param c 32-bit code point
    - * @return 1 or 2
    - * @stable ICU 2.4
    - */
    -#define U16_LENGTH(c) ((uint32_t)(c)<=0xffff ? 1 : 2)
    -
    -/**
    - * The maximum number of 16-bit code units per Unicode code point (U+0000..U+10ffff).
    - * @return 2
    - * @stable ICU 2.4
    - */
    -#define U16_MAX_LENGTH 2
    -
    -/**
    - * Get a code point from a string at a random-access offset,
    - * without changing the offset.
    - * "Unsafe" macro, assumes well-formed UTF-16.
    - *
    - * The offset may point to either the lead or trail surrogate unit
    - * for a supplementary code point, in which case the macro will read
    - * the adjacent matching surrogate as well.
    - * The result is undefined if the offset points to a single, unpaired surrogate.
    - * Iteration through a string is more efficient with U16_NEXT_UNSAFE or U16_NEXT.
    - *
    - * @param s const UChar * string
    - * @param i string offset
    - * @param c output UChar32 variable
    - * @see U16_GET
    - * @stable ICU 2.4
    - */
    -#define U16_GET_UNSAFE(s, i, c) { \
    - (c)=(s)[i]; \
    - if(U16_IS_SURROGATE(c)) { \
    - if(U16_IS_SURROGATE_LEAD(c)) { \
    - (c)=U16_GET_SUPPLEMENTARY((c), (s)[(i)+1]); \
    - } else { \
    - (c)=U16_GET_SUPPLEMENTARY((s)[(i)-1], (c)); \
    - } \
    - } \
    -}
    -
    -/**
    - * Get a code point from a string at a random-access offset,
    - * without changing the offset.
    - * "Safe" macro, handles unpaired surrogates and checks for string boundaries.
    - *
    - * The offset may point to either the lead or trail surrogate unit
    - * for a supplementary code point, in which case the macro will read
    - * the adjacent matching surrogate as well.
    - * If the offset points to a single, unpaired surrogate, then that itself
    - * will be returned as the code point.
    - * Iteration through a string is more efficient with U16_NEXT_UNSAFE or U16_NEXT.
    - *
    - * @param s const UChar * string
    - * @param start starting string offset (usually 0)
    - * @param i string offset, must be start<=i<length
    - * @param length string length
    - * @param c output UChar32 variable
    - * @see U16_GET_UNSAFE
    - * @stable ICU 2.4
    - */
    -#define U16_GET(s, start, i, length, c) { \
    - (c)=(s)[i]; \
    - if(U16_IS_SURROGATE(c)) { \
    - uint16_t __c2; \
    - if(U16_IS_SURROGATE_LEAD(c)) { \
    - if((i)+1<(length) && U16_IS_TRAIL(__c2=(s)[(i)+1])) { \
    - (c)=U16_GET_SUPPLEMENTARY((c), __c2); \
    - } \
    - } else { \
    - if((i)-1>=(start) && U16_IS_LEAD(__c2=(s)[(i)-1])) { \
    - (c)=U16_GET_SUPPLEMENTARY(__c2, (c)); \
    - } \
    - } \
    - } \
    -}
    -
    -/* definitions with forward iteration --------------------------------------- */
    -
    -/**
    - * Get a code point from a string at a code point boundary offset,
    - * and advance the offset to the next code point boundary.
    - * (Post-incrementing forward iteration.)
    - * "Unsafe" macro, assumes well-formed UTF-16.
    - *
    - * The offset may point to the lead surrogate unit
    - * for a supplementary code point, in which case the macro will read
    - * the following trail surrogate as well.
    - * If the offset points to a trail surrogate, then that itself
    - * will be returned as the code point.
    - * The result is undefined if the offset points to a single, unpaired lead surrogate.
    - *
    - * @param s const UChar * string
    - * @param i string offset
    - * @param c output UChar32 variable
    - * @see U16_NEXT
    - * @stable ICU 2.4
    - */
    -#define U16_NEXT_UNSAFE(s, i, c) { \
    - (c)=(s)[(i)++]; \
    - if(U16_IS_LEAD(c)) { \
    - (c)=U16_GET_SUPPLEMENTARY((c), (s)[(i)++]); \
    - } \
    -}
    -
    -/**
    - * Get a code point from a string at a code point boundary offset,
    - * and advance the offset to the next code point boundary.
    - * (Post-incrementing forward iteration.)
    - * "Safe" macro, handles unpaired surrogates and checks for string boundaries.
    - *
    - * The offset may point to the lead surrogate unit
    - * for a supplementary code point, in which case the macro will read
    - * the following trail surrogate as well.
    - * If the offset points to a trail surrogate or
    - * to a single, unpaired lead surrogate, then that itself
    - * will be returned as the code point.
    - *
    - * @param s const UChar * string
    - * @param i string offset, must be i<length
    - * @param length string length
    - * @param c output UChar32 variable
    - * @see U16_NEXT_UNSAFE
    - * @stable ICU 2.4
    - */
    -#define U16_NEXT(s, i, length, c) { \
    - (c)=(s)[(i)++]; \
    - if(U16_IS_LEAD(c)) { \
    - uint16_t __c2; \
    - if((i)<(length) && U16_IS_TRAIL(__c2=(s)[(i)])) { \
    - ++(i); \
    - (c)=U16_GET_SUPPLEMENTARY((c), __c2); \
    - } \
    - } \
    -}
    -
    -/**
    - * Append a code point to a string, overwriting 1 or 2 code units.
    - * The offset points to the current end of the string contents
    - * and is advanced (post-increment).
    - * "Unsafe" macro, assumes a valid code point and sufficient space in the string.
    - * Otherwise, the result is undefined.
    - *
    - * @param s const UChar * string buffer
    - * @param i string offset
    - * @param c code point to append
    - * @see U16_APPEND
    - * @stable ICU 2.4
    - */
    -#define U16_APPEND_UNSAFE(s, i, c) { \
    - if((uint32_t)(c)<=0xffff) { \
    - (s)[(i)++]=(uint16_t)(c); \
    - } else { \
    - (s)[(i)++]=(uint16_t)(((c)>>10)+0xd7c0); \
    - (s)[(i)++]=(uint16_t)(((c)&0x3ff)|0xdc00); \
    - } \
    -}
    -
    -/**
    - * Append a code point to a string, overwriting 1 or 2 code units.
    - * The offset points to the current end of the string contents
    - * and is advanced (post-increment).
    - * "Safe" macro, checks for a valid code point.
    - * If a surrogate pair is written, checks for sufficient space in the string.
    - * If the code point is not valid or a trail surrogate does not fit,
    - * then isError is set to TRUE.
    - *
    - * @param s const UChar * string buffer
    - * @param i string offset, must be i<capacity
    - * @param capacity size of the string buffer
    - * @param c code point to append
    - * @param isError output UBool set to TRUE if an error occurs, otherwise not modified
    - * @see U16_APPEND_UNSAFE
    - * @stable ICU 2.4
    - */
    -#define U16_APPEND(s, i, capacity, c, isError) { \
    - if((uint32_t)(c)<=0xffff) { \
    - (s)[(i)++]=(uint16_t)(c); \
    - } else if((uint32_t)(c)<=0x10ffff && (i)+1<(capacity)) { \
    - (s)[(i)++]=(uint16_t)(((c)>>10)+0xd7c0); \
    - (s)[(i)++]=(uint16_t)(((c)&0x3ff)|0xdc00); \
    - } else /* c>0x10ffff or not enough space */ { \
    - (isError)=TRUE; \
    - } \
    -}
    -
    -/**
    - * Advance the string offset from one code point boundary to the next.
    - * (Post-incrementing iteration.)
    - * "Unsafe" macro, assumes well-formed UTF-16.
    - *
    - * @param s const UChar * string
    - * @param i string offset
    - * @see U16_FWD_1
    - * @stable ICU 2.4
    - */
    -#define U16_FWD_1_UNSAFE(s, i) { \
    - if(U16_IS_LEAD((s)[(i)++])) { \
    - ++(i); \
    - } \
    -}
    -
    -/**
    - * Advance the string offset from one code point boundary to the next.
    - * (Post-incrementing iteration.)
    - * "Safe" macro, handles unpaired surrogates and checks for string boundaries.
    - *
    - * @param s const UChar * string
    - * @param i string offset, must be i<length
    - * @param length string length
    - * @see U16_FWD_1_UNSAFE
    - * @stable ICU 2.4
    - */
    -#define U16_FWD_1(s, i, length) { \
    - if(U16_IS_LEAD((s)[(i)++]) && (i)<(length) && U16_IS_TRAIL((s)[i])) { \
    - ++(i); \
    - } \
    -}
    -
    -/**
    - * Advance the string offset from one code point boundary to the n-th next one,
    - * i.e., move forward by n code points.
    - * (Post-incrementing iteration.)
    - * "Unsafe" macro, assumes well-formed UTF-16.
    - *
    - * @param s const UChar * string
    - * @param i string offset
    - * @param n number of code points to skip
    - * @see U16_FWD_N
    - * @stable ICU 2.4
    - */
    -#define U16_FWD_N_UNSAFE(s, i, n) { \
    - int32_t __N=(n); \
    - while(__N>0) { \
    - U16_FWD_1_UNSAFE(s, i); \
    - --__N; \
    - } \
    -}
    -
    -/**
    - * Advance the string offset from one code point boundary to the n-th next one,
    - * i.e., move forward by n code points.
    - * (Post-incrementing iteration.)
    - * "Safe" macro, handles unpaired surrogates and checks for string boundaries.
    - *
    - * @param s const UChar * string
    - * @param i string offset, must be i<length
    - * @param length string length
    - * @param n number of code points to skip
    - * @see U16_FWD_N_UNSAFE
    - * @stable ICU 2.4
    - */
    -#define U16_FWD_N(s, i, length, n) { \
    - int32_t __N=(n); \
    - while(__N>0 && (i)<(length)) { \
    - U16_FWD_1(s, i, length); \
    - --__N; \
    - } \
    -}
    -
    -/**
    - * Adjust a random-access offset to a code point boundary
    - * at the start of a code point.
    - * If the offset points to the trail surrogate of a surrogate pair,
    - * then the offset is decremented.
    - * Otherwise, it is not modified.
    - * "Unsafe" macro, assumes well-formed UTF-16.
    - *
    - * @param s const UChar * string
    - * @param i string offset
    - * @see U16_SET_CP_START
    - * @stable ICU 2.4
    - */
    -#define U16_SET_CP_START_UNSAFE(s, i) { \
    - if(U16_IS_TRAIL((s)[i])) { \
    - --(i); \
    - } \
    -}
    -
    -/**
    - * Adjust a random-access offset to a code point boundary
    - * at the start of a code point.
    - * If the offset points to the trail surrogate of a surrogate pair,
    - * then the offset is decremented.
    - * Otherwise, it is not modified.
    - * "Safe" macro, handles unpaired surrogates and checks for string boundaries.
    - *
    - * @param s const UChar * string
    - * @param start starting string offset (usually 0)
    - * @param i string offset, must be start<=i
    - * @see U16_SET_CP_START_UNSAFE
    - * @stable ICU 2.4
    - */
    -#define U16_SET_CP_START(s, start, i) { \
    - if(U16_IS_TRAIL((s)[i]) && (i)>(start) && U16_IS_LEAD((s)[(i)-1])) { \
    - --(i); \
    - } \
    -}
    -
    -/* definitions with backward iteration -------------------------------------- */
    -
    -/**
    - * Move the string offset from one code point boundary to the previous one
    - * and get the code point between them.
    - * (Pre-decrementing backward iteration.)
    - * "Unsafe" macro, assumes well-formed UTF-16.
    - *
    - * The input offset may be the same as the string length.
    - * If the offset is behind a trail surrogate unit
    - * for a supplementary code point, then the macro will read
    - * the preceding lead surrogate as well.
    - * If the offset is behind a lead surrogate, then that itself
    - * will be returned as the code point.
    - * The result is undefined if the offset is behind a single, unpaired trail surrogate.
    - *
    - * @param s const UChar * string
    - * @param i string offset
    - * @param c output UChar32 variable
    - * @see U16_PREV
    - * @stable ICU 2.4
    - */
    -#define U16_PREV_UNSAFE(s, i, c) { \
    - (c)=(s)[--(i)]; \
    - if(U16_IS_TRAIL(c)) { \
    - (c)=U16_GET_SUPPLEMENTARY((s)[--(i)], (c)); \
    - } \
    -}
    -
    -/**
    - * Move the string offset from one code point boundary to the previous one
    - * and get the code point between them.
    - * (Pre-decrementing backward iteration.)
    - * "Safe" macro, handles unpaired surrogates and checks for string boundaries.
    - *
    - * The input offset may be the same as the string length.
    - * If the offset is behind a trail surrogate unit
    - * for a supplementary code point, then the macro will read
    - * the preceding lead surrogate as well.
    - * If the offset is behind a lead surrogate or behind a single, unpaired
    - * trail surrogate, then that itself
    - * will be returned as the code point.
    - *
    - * @param s const UChar * string
    - * @param start starting string offset (usually 0)
    - * @param i string offset, must be start<i
    - * @param c output UChar32 variable
    - * @see U16_PREV_UNSAFE
    - * @stable ICU 2.4
    - */
    -#define U16_PREV(s, start, i, c) { \
    - (c)=(s)[--(i)]; \
    - if(U16_IS_TRAIL(c)) { \
    - uint16_t __c2; \
    - if((i)>(start) && U16_IS_LEAD(__c2=(s)[(i)-1])) { \
    - --(i); \
    - (c)=U16_GET_SUPPLEMENTARY(__c2, (c)); \
    - } \
    - } \
    -}
    -
    -/**
    - * Move the string offset from one code point boundary to the previous one.
    - * (Pre-decrementing backward iteration.)
    - * The input offset may be the same as the string length.
    - * "Unsafe" macro, assumes well-formed UTF-16.
    - *
    - * @param s const UChar * string
    - * @param i string offset
    - * @see U16_BACK_1
    - * @stable ICU 2.4
    - */
    -#define U16_BACK_1_UNSAFE(s, i) { \
    - if(U16_IS_TRAIL((s)[--(i)])) { \
    - --(i); \
    - } \
    -}
    -
    -/**
    - * Move the string offset from one code point boundary to the previous one.
    - * (Pre-decrementing backward iteration.)
    - * The input offset may be the same as the string length.
    - * "Safe" macro, handles unpaired surrogates and checks for string boundaries.
    - *
    - * @param s const UChar * string
    - * @param start starting string offset (usually 0)
    - * @param i string offset, must be start<i
    - * @see U16_BACK_1_UNSAFE
    - * @stable ICU 2.4
    - */
    -#define U16_BACK_1(s, start, i) { \
    - if(U16_IS_TRAIL((s)[--(i)]) && (i)>(start) && U16_IS_LEAD((s)[(i)-1])) { \
    - --(i); \
    - } \
    -}
    -
    -/**
    - * Move the string offset from one code point boundary to the n-th one before it,
    - * i.e., move backward by n code points.
    - * (Pre-decrementing backward iteration.)
    - * The input offset may be the same as the string length.
    - * "Unsafe" macro, assumes well-formed UTF-16.
    - *
    - * @param s const UChar * string
    - * @param i string offset
    - * @param n number of code points to skip
    - * @see U16_BACK_N
    - * @stable ICU 2.4
    - */
    -#define U16_BACK_N_UNSAFE(s, i, n) { \
    - int32_t __N=(n); \
    - while(__N>0) { \
    - U16_BACK_1_UNSAFE(s, i); \
    - --__N; \
    - } \
    -}
    -
    -/**
    - * Move the string offset from one code point boundary to the n-th one before it,
    - * i.e., move backward by n code points.
    - * (Pre-decrementing backward iteration.)
    - * The input offset may be the same as the string length.
    - * "Safe" macro, handles unpaired surrogates and checks for string boundaries.
    - *
    - * @param s const UChar * string
    - * @param start start of string
    - * @param i string offset, must be start<i
    - * @param n number of code points to skip
    - * @see U16_BACK_N_UNSAFE
    - * @stable ICU 2.4
    - */
    -#define U16_BACK_N(s, start, i, n) { \
    - int32_t __N=(n); \
    - while(__N>0 && (i)>(start)) { \
    - U16_BACK_1(s, start, i); \
    - --__N; \
    - } \
    -}
    -
    -/**
    - * Adjust a random-access offset to a code point boundary after a code point.
    - * If the offset is behind the lead surrogate of a surrogate pair,
    - * then the offset is incremented.
    - * Otherwise, it is not modified.
    - * The input offset may be the same as the string length.
    - * "Unsafe" macro, assumes well-formed UTF-16.
    - *
    - * @param s const UChar * string
    - * @param i string offset
    - * @see U16_SET_CP_LIMIT
    - * @stable ICU 2.4
    - */
    -#define U16_SET_CP_LIMIT_UNSAFE(s, i) { \
    - if(U16_IS_LEAD((s)[(i)-1])) { \
    - ++(i); \
    - } \
    -}
    -
    -/**
    - * Adjust a random-access offset to a code point boundary after a code point.
    - * If the offset is behind the lead surrogate of a surrogate pair,
    - * then the offset is incremented.
    - * Otherwise, it is not modified.
    - * The input offset may be the same as the string length.
    - * "Safe" macro, handles unpaired surrogates and checks for string boundaries.
    - *
    - * @param s const UChar * string
    - * @param start starting string offset (usually 0)
    - * @param i string offset, start<=i<=length
    - * @param length string length
    - * @see U16_SET_CP_LIMIT_UNSAFE
    - * @stable ICU 2.4
    - */
    -#define U16_SET_CP_LIMIT(s, start, i, length) { \
    - if((start)<(i) && (i)<(length) && U16_IS_LEAD((s)[(i)-1]) && U16_IS_TRAIL((s)[i])) { \
    - ++(i); \
    - } \
    -}
    -
    -#endif

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/utf32.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/utf32.h b/apps/couch_collate/platform/osx/icu/unicode/utf32.h
    deleted file mode 100644
    index bf63e69..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/utf32.h
    +++ /dev/null
    @@ -1,23 +0,0 @@
    -/*
    -*******************************************************************************
    -*
    -* Copyright (C) 1999-2001, International Business Machines
    -* Corporation and others. All Rights Reserved.
    -*
    -*******************************************************************************
    -* file name: utf32.h
    -* encoding: US-ASCII
    -* tab size: 8 (not used)
    -* indentation:4
    -*
    -* created on: 1999sep20
    -* created by: Markus W. Scherer
    -*/
    -/**
    - * \file
    - * \brief C API: UTF-32 macros
    - *
    - * This file is obsolete and its contents moved to utf_old.h.
    - * See utf_old.h and Jitterbug 2150 and its discussion on the ICU mailing list
    - * in September 2002.
    - */
  • Benoitc at Feb 13, 2014 at 6:14 pm
    move to multiple repository

    Use multiple repository instead of having applications in the apps/
    folder. For now just take the easy way by fetching apps in deps/ folder
    so I can still launch the tests. The application node_package from basho
    is also still in use and should be removed in the next step.


    Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo
    Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/b19d0557
    Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/b19d0557
    Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/b19d0557

    Branch: refs/heads/1994-merge-rcouch-multi-repo
    Commit: b19d0557638df05cfbee945e998c31beea507a88
    Parents: a3d75ba
    Author: Benoit Chesneau <bchesneau@gmail.com>
    Authored: Thu Feb 13 19:08:46 2014 +0100
    Committer: Benoit Chesneau <bchesneau@gmail.com>
    Committed: Thu Feb 13 19:08:46 2014 +0100

    ----------------------------------------------------------------------
      Makefile | 10 +++++-----
      rebar.config | 6 +++---
      test/etap/test_util.erl | 2 +-
      3 files changed, 9 insertions(+), 9 deletions(-)
    ----------------------------------------------------------------------


    http://git-wip-us.apache.org/repos/asf/couchdb/blob/b19d0557/Makefile
    ----------------------------------------------------------------------
    diff --git a/Makefile b/Makefile
    index 117ff9c..a88b9ec 100644
    --- a/Makefile
    +++ b/Makefile
    @@ -119,13 +119,13 @@ export ERL_LIBS

      test: testbuild
       prove $(COUCHDB_ETAP_DIR)/*.t
    - prove $(BASE_DIR)/apps/couch_mrview/test/*.t
    - prove $(BASE_DIR)/apps/couch_replicator/test/*.t
    + prove $(BASE_DIR)/deps/couch_mrview/test/*.t
    + prove $(BASE_DIR)/deps/couch_replicator/test/*.t

      verbose-test: testbuild
       prove -v $(COUCHDB_ETAP_DIR)/*.t
    - prove -v $(BASE_DIR)/apps/couch_mrview/test/*.t
    - prove -v $(BASE_DIR)/apps/couch_replicator/test/*.t
    + prove -v $(BASE_DIR)/deps/couch_mrview/test/*.t
    + prove -v $(BASE_DIR)/deps/couch_replicator/test/*.t

      testjs: testbuild
       $(ESCRIPT) $(BASE_DIR)/test/javascript/test_js.escript
    @@ -141,7 +141,7 @@ testbuild: testclean
       mkdir -p $(BASE_DIR)/test/out/bin
       mkdir -p $(BASE_DIR)/test/out/share
       mkdir -p $(BASE_DIR)/test/out/log
    - cp $(BASE_DIR)/apps/couch/priv/couchjs $(BASE_DIR)/test/out/bin/
    + cp $(BASE_DIR)/deps/couch/priv/couchjs $(BASE_DIR)/test/out/bin/
       cp -r $(BASE_DIR)/share/server $(BASE_DIR)/test/out/share
       cp -r $(BASE_DIR)/share/www $(BASE_DIR)/test/out/share
       cp $(BASE_DIR)/etc/couchdb/local.ini $(BASE_DIR)/test/out/

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/b19d0557/rebar.config
    ----------------------------------------------------------------------
    diff --git a/rebar.config b/rebar.config
    index 232b6ff..4c956ab 100644
    --- a/rebar.config
    +++ b/rebar.config
    @@ -36,7 +36,7 @@
          %% json module, encode/decode module
          {jiffy, ".*",
              {git, "http://git-wip-us.apache.org/repos/asf/couchdb-jiffy.git",
    - {branch, "import"}},
    + {branch, "import"}}},

          %% lager logging module
          {lager, ".*",
    @@ -71,11 +71,11 @@

           {couch_plugins, ".*",
            {git, "http://git-wip-us.apache.org/repos/asf/couchdb-couch-plugins.git",
    - {branch, "import"}}},
    + {branch, "1994-merge-rcouch"}}},

           {couch_dbupdates, ".*",
            {git, "http://git-wip-us.apache.org/repos/asf/couchdb-couch-dbupdates.git",
    - {branch, "import"}}}
    + {branch, "1994-merge-rcouch"}}}

      ]}.


    http://git-wip-us.apache.org/repos/asf/couchdb/blob/b19d0557/test/etap/test_util.erl
    ----------------------------------------------------------------------
    diff --git a/test/etap/test_util.erl b/test/etap/test_util.erl
    index 9208335..caad0b4 100644
    --- a/test/etap/test_util.erl
    +++ b/test/etap/test_util.erl
    @@ -25,7 +25,7 @@ builddir() ->
          filename:absname(filename:join([Current, "..", ".."])).

      srcdir() ->
    - filename:join([builddir(), "apps"]).
    + filename:join([builddir(), "deps"]).

      depsdir() ->
          filename:join([builddir(), "deps"]).
  • Benoitc at Feb 13, 2014 at 6:14 pm
    remove couch_collate


    Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo
    Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/81332b78
    Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/81332b78
    Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/81332b78

    Branch: refs/heads/1994-merge-rcouch-multi-repo
    Commit: 81332b78ab2152af555c7d7d78ec8e878c07fc3a
    Parents: d95b902
    Author: Benoit Chesneau <bchesneau@gmail.com>
    Authored: Thu Feb 13 16:33:36 2014 +0100
    Committer: Benoit Chesneau <bchesneau@gmail.com>
    Committed: Thu Feb 13 16:33:36 2014 +0100

    ----------------------------------------------------------------------
      apps/couch_collate/build_icu.sh | 191 -
      apps/couch_collate/c_src/couch_collate.c | 281 --
      .../patches/icu/common-uloc_c.patch | 26 -
      .../icu/layout_LookupProcessor_cpp.patch | 13 -
      .../icu/source_config_Makefile_inc_in.patch | 12 -
      .../patches/icu/source_icudefs_mk_in.patch | 19 -
      .../platform/osx/icu/unicode/basictz.h | 210 -
      .../platform/osx/icu/unicode/brkiter.h | 557 ---
      .../platform/osx/icu/unicode/calendar.h | 2170 ---------
      .../platform/osx/icu/unicode/caniter.h | 201 -
      .../platform/osx/icu/unicode/chariter.h | 716 ---
      .../platform/osx/icu/unicode/choicfmt.h | 746 ---
      .../platform/osx/icu/unicode/coleitr.h | 400 --
      .../platform/osx/icu/unicode/coll.h | 1035 -----
      .../platform/osx/icu/unicode/curramt.h | 130 -
      .../platform/osx/icu/unicode/currunit.h | 117 -
      .../platform/osx/icu/unicode/datefmt.h | 700 ---
      .../platform/osx/icu/unicode/dbbi.h | 41 -
      .../platform/osx/icu/unicode/dcfmtsym.h | 370 --
      .../platform/osx/icu/unicode/decimfmt.h | 1901 --------
      .../platform/osx/icu/unicode/docmain.h | 202 -
      .../platform/osx/icu/unicode/dtfmtsym.h | 721 ---
      .../platform/osx/icu/unicode/dtintrv.h | 159 -
      .../platform/osx/icu/unicode/dtitvfmt.h | 949 ----
      .../platform/osx/icu/unicode/dtitvinf.h | 528 ---
      .../platform/osx/icu/unicode/dtptngen.h | 423 --
      .../platform/osx/icu/unicode/dtrule.h | 250 --
      .../platform/osx/icu/unicode/fieldpos.h | 291 --
      .../platform/osx/icu/unicode/fmtable.h | 591 ---
      .../platform/osx/icu/unicode/format.h | 296 --
      .../platform/osx/icu/unicode/gregocal.h | 823 ----
      .../platform/osx/icu/unicode/locid.h | 765 ----
      .../platform/osx/icu/unicode/measfmt.h | 77 -
      .../platform/osx/icu/unicode/measunit.h | 71 -
      .../platform/osx/icu/unicode/measure.h | 137 -
      .../platform/osx/icu/unicode/msgfmt.h | 940 ----
      .../platform/osx/icu/unicode/normlzr.h | 823 ----
      .../platform/osx/icu/unicode/numfmt.h | 886 ----
      .../platform/osx/icu/unicode/parseerr.h | 92 -
      .../platform/osx/icu/unicode/parsepos.h | 230 -
      .../platform/osx/icu/unicode/platform.h | 316 --
      .../platform/osx/icu/unicode/plurfmt.h | 541 ---
      .../platform/osx/icu/unicode/plurrule.h | 291 --
      .../platform/osx/icu/unicode/ppalmos.h | 273 --
      .../platform/osx/icu/unicode/putil.h | 184 -
      .../platform/osx/icu/unicode/pwin32.h | 311 --
      .../platform/osx/icu/unicode/rbbi.h | 722 ---
      .../platform/osx/icu/unicode/rbnf.h | 1049 -----
      .../platform/osx/icu/unicode/rbtz.h | 361 --
      .../platform/osx/icu/unicode/regex.h | 1232 -----
      .../platform/osx/icu/unicode/rep.h | 259 --
      .../platform/osx/icu/unicode/resbund.h | 485 --
      .../platform/osx/icu/unicode/schriter.h | 187 -
      .../platform/osx/icu/unicode/search.h | 569 ---
      .../platform/osx/icu/unicode/simpletz.h | 927 ----
      .../platform/osx/icu/unicode/smpdtfmt.h | 975 ----
      .../platform/osx/icu/unicode/sortkey.h | 324 --
      .../platform/osx/icu/unicode/strenum.h | 271 --
      .../platform/osx/icu/unicode/stsearch.h | 518 ---
      .../platform/osx/icu/unicode/symtable.h | 112 -
      .../platform/osx/icu/unicode/tblcoll.h | 926 ----
      .../platform/osx/icu/unicode/timezone.h | 803 ----
      .../platform/osx/icu/unicode/translit.h | 1323 ------
      .../platform/osx/icu/unicode/tzrule.h | 828 ----
      .../platform/osx/icu/unicode/tztrans.h | 195 -
      .../platform/osx/icu/unicode/ubidi.h | 2013 ---------
      .../platform/osx/icu/unicode/ubrk.h | 482 --
      .../platform/osx/icu/unicode/ucal.h | 1161 -----
      .../platform/osx/icu/unicode/ucasemap.h | 391 --
      .../platform/osx/icu/unicode/ucat.h | 158 -
      .../platform/osx/icu/unicode/uchar.h | 3062 -------------
      .../platform/osx/icu/unicode/uchriter.h | 381 --
      .../platform/osx/icu/unicode/uclean.h | 267 --
      .../platform/osx/icu/unicode/ucnv.h | 1967 --------
      .../platform/osx/icu/unicode/ucnv_cb.h | 162 -
      .../platform/osx/icu/unicode/ucnv_err.h | 463 --
      .../platform/osx/icu/unicode/ucol.h | 1132 -----
      .../platform/osx/icu/unicode/ucoleitr.h | 315 --
      .../platform/osx/icu/unicode/uconfig.h | 228 -
      .../platform/osx/icu/unicode/ucsdet.h | 349 --
      .../platform/osx/icu/unicode/ucurr.h | 270 --
      .../platform/osx/icu/unicode/udat.h | 962 ----
      .../platform/osx/icu/unicode/udata.h | 389 --
      .../platform/osx/icu/unicode/udatpg.h | 471 --
      .../platform/osx/icu/unicode/udeprctd.h | 50 -
      .../platform/osx/icu/unicode/udraft.h | 166 -
      .../platform/osx/icu/unicode/uenum.h | 134 -
      .../platform/osx/icu/unicode/uidna.h | 312 --
      .../platform/osx/icu/unicode/uintrnal.h | 180 -
      .../platform/osx/icu/unicode/uiter.h | 707 ---
      .../platform/osx/icu/unicode/uloc.h | 1046 -----
      .../platform/osx/icu/unicode/ulocdata.h | 192 -
      .../platform/osx/icu/unicode/umachine.h | 338 --
      .../platform/osx/icu/unicode/umisc.h | 60 -
      .../platform/osx/icu/unicode/umsg.h | 647 ---
      .../platform/osx/icu/unicode/unifilt.h | 127 -
      .../platform/osx/icu/unicode/unifunct.h | 125 -
      .../platform/osx/icu/unicode/unimatch.h | 163 -
      .../platform/osx/icu/unicode/unirepl.h | 97 -
      .../platform/osx/icu/unicode/uniset.h | 1566 -------
      .../platform/osx/icu/unicode/unistr.h | 4230 ------------------
      .../platform/osx/icu/unicode/unorm.h | 576 ---
      .../platform/osx/icu/unicode/unum.h | 869 ----
      .../platform/osx/icu/unicode/uobject.h | 308 --
      .../platform/osx/icu/unicode/uobslete.h | 32 -
      .../platform/osx/icu/unicode/urbtok.h | 126 -
      .../platform/osx/icu/unicode/uregex.h | 989 ----
      .../platform/osx/icu/unicode/urename.h | 1775 --------
      .../platform/osx/icu/unicode/urep.h | 155 -
      .../platform/osx/icu/unicode/ures.h | 871 ----
      .../platform/osx/icu/unicode/uscript.h | 254 --
      .../platform/osx/icu/unicode/usearch.h | 766 ----
      .../platform/osx/icu/unicode/uset.h | 1052 -----
      .../platform/osx/icu/unicode/usetiter.h | 318 --
      .../platform/osx/icu/unicode/ushape.h | 263 --
      .../platform/osx/icu/unicode/usprep.h | 156 -
      .../platform/osx/icu/unicode/ustring.h | 1479 ------
      .../platform/osx/icu/unicode/usystem.h | 46 -
      .../platform/osx/icu/unicode/utext.h | 1562 -------
      .../platform/osx/icu/unicode/utf.h | 227 -
      .../platform/osx/icu/unicode/utf16.h | 605 ---
      .../platform/osx/icu/unicode/utf32.h | 23 -
      .../platform/osx/icu/unicode/utf8.h | 652 ---
      .../platform/osx/icu/unicode/utf_old.h | 1171 -----
      .../platform/osx/icu/unicode/utmscale.h | 481 --
      .../platform/osx/icu/unicode/utrace.h | 358 --
      .../platform/osx/icu/unicode/utrans.h | 583 ---
      .../platform/osx/icu/unicode/utypes.h | 801 ----
      .../platform/osx/icu/unicode/uversion.h | 275 --
      .../platform/osx/icu/unicode/vtzone.h | 443 --
      apps/couch_collate/rebar.config | 9 -
      apps/couch_collate/rebar.config.script | 90 -
      apps/couch_collate/src/couch_collate.app.src | 13 -
      apps/couch_collate/src/couch_collate.erl | 62 -
      134 files changed, 75225 deletions(-)
    ----------------------------------------------------------------------


    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/build_icu.sh
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/build_icu.sh b/apps/couch_collate/build_icu.sh
    deleted file mode 100755
    index 167e73d..0000000
    --- a/apps/couch_collate/build_icu.sh
    +++ /dev/null
    @@ -1,191 +0,0 @@
    -#!/bin/sh
    -
    -CORE_TOP=`pwd`
    -export CORE_TOP
    -
    -CURLBIN=`which curl`
    -if ! test -n "CURLBIN"; then
    - display_error "Error: curl is required. Add it to 'PATH'"
    - exit 1
    -fi
    -
    -GUNZIP=`which gunzip`
    -UNZIP=`which unzip`
    -TAR=`which tar`
    -GNUMAKE=`which gmake 2>/dev/null || which make`
    -PATCHES=$CORE_TOP/patches
    -STATICLIBS=$CORE_TOP/.libs
    -DISTDIR=$CORE_TOP/.dists
    -
    -# icu sources
    -ICU_VER=4.4.2
    -ICU_DISTNAME=icu4c-4_4_2-src.tgz
    -ICU_SITE=http://dl.refuge.io
    -ICUDIR=$STATICLIBS/icu
    -
    -
    -[ "$MACHINE" ] || MACHINE=`(uname -m) 2>/dev/null` || MACHINE="unknown"
    -[ "$RELEASE" ] || RELEASE=`(uname -r) 2>/dev/null` || RELEASE="unknown"
    -[ "$SYSTEM" ] || SYSTEM=`(uname -s) 2>/dev/null` || SYSTEM="unknown"
    -[ "$BUILD" ] || VERSION=`(uname -v) 2>/dev/null` || VERSION="unknown"
    -
    -
    -CFLAGS="-g -O2 -Wall"
    -LDFLAGS="-lstdc++"
    -ARCH=
    -ISA64=
    -GNUMAKE=make
    -CC=gcc
    -CXX=g++
    -PATCH=patch
    -case "$SYSTEM" in
    - Linux)
    - ARCH=`arch 2>/dev/null`
    - ;;
    - FreeBSD|OpenBSD|NetBSD)
    - ARCH=`(uname -p) 2>/dev/null`
    - GNUMAKE=gmake
    - ;;
    - Darwin)
    - ARCH=`(uname -p) 2>/dev/null`
    - ISA64=`(sysctl -n hw.optional.x86_64) 2>/dev/null`
    - ;;
    - Solaris)
    - ARCH=`(uname -p) 2>/dev/null`
    - GNUMAKE=gmake
    - PATCH=gpatch
    - ;;
    - *)
    - ARCH="unknown"
    - ;;
    -esac
    -
    -
    -# TODO: add mirror & signature validation support
    -fetch()
    -{
    - TARGET=$DISTDIR/$1
    - if ! test -f $TARGET; then
    - echo "==> Fetch $1 to $TARGET"
    - $CURLBIN --progress-bar -L $2/$1 -o $TARGET
    - fi
    -}
    -
    -build_icu()
    -{
    - fetch $ICU_DISTNAME $ICU_SITE
    -
    - mkdir -p $ICUDIR
    -
    - echo "==> icu (compile)"
    -
    - rm -rf $STATICLIBS/icu*
    -
    - cd $STATICLIBS
    - $GUNZIP -c $DISTDIR/$ICU_DISTNAME | $TAR xf -
    -
    - # apply patches
    - cd $STATICLIBS/icu
    - for P in $PATCHES/icu/*.patch; do \
    - (patch -p0 -i $P || echo "skipping patch"); \
    - done
    -
    - cd $ICUDIR/source
    -
    - CFLAGS="-g -Wall -fPIC -Os"
    -
    - env CC="gcc" CXX="g++" CPPFLAGS="" LDFLAGS="-fPIC" \
    - CFLAGS="$CFLAGS" CXXFLAGS="$CFLAGS" \
    - ./configure --disable-debug \
    - --enable-static \
    - --disable-shared \
    - --disable-icuio \
    - --disable-layout \
    - --disable-extras \
    - --disable-tests \
    - --disable-samples \
    - --prefix=$STATICLIBS/icu && \
    - $GNUMAKE && $GNUMAKE install
    -}
    -
    -do_setup()
    -{
    - echo "==> build icu"
    - mkdir -p $DISTDIR
    - mkdir -p $STATICLIBS
    -}
    -
    -do_builddeps()
    -{
    - if [ ! -f $STATICLIBS/icu/lib/libicui18n.a ]; then
    - build_icu
    - fi
    -}
    -
    -
    -clean()
    -{
    - rm -rf $STATICLIBS
    - rm -rf $DISTDIR
    -}
    -
    -
    -
    -usage()
    -{
    - cat << EOF
    -Usage: $basename [command] [OPTIONS]
    -
    -The $basename command compile Mozilla Spidermonkey and ICU statically
    -for couch_core.
    -
    -Commands:
    -
    - all: build couch_core static libs
    - clean: clean static libs
    - -?: display usage
    -
    -Report bugs at <https://github.com/refuge/couch_core>.
    -EOF
    -}
    -
    -
    -if [ ! "x$COUCHDB_STATIC" = "x1" ]; then
    - exit 0
    -fi
    -
    -if [ ! "x$USE_STATIC_ICU" = "x1" ]; then
    - exit 0
    -fi
    -
    -if [ "x$1" = "x" ]; then
    - do_setup
    - do_builddeps
    - exit 0
    -fi
    -
    -case "$1" in
    - all)
    - shift 1
    - do_setup
    - do_builddeps
    - ;;
    - clean)
    - shift 1
    - clean
    - ;;
    - help|--help|-h|-?)
    - usage
    - exit 0
    - ;;
    - *)
    - echo $basename: ERROR Unknown command $arg 1>&2
    - echo 1>&2
    - usage 1>&2
    - echo "### $basename: Exitting." 1>&2
    - exit 1;
    - ;;
    -esac
    -
    -
    -exit 0

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/c_src/couch_collate.c
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/c_src/couch_collate.c b/apps/couch_collate/c_src/couch_collate.c
    deleted file mode 100644
    index c5453d2..0000000
    --- a/apps/couch_collate/c_src/couch_collate.c
    +++ /dev/null
    @@ -1,281 +0,0 @@
    -/*
    -
    -Licensed under the Apache License, Version 2.0 (the "License"); you may not use
    -this file except in compliance with the License. You may obtain a copy of the
    -License at
    -
    - http://www.apache.org/licenses/LICENSE-2.0
    -
    -Unless required by applicable law or agreed to in writing, software distributed
    -under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
    -CONDITIONS OF ANY KIND, either express or implied. See the License for the
    -specific language governing permissions and limitations under the License.
    -
    -*/
    -
    -#ifdef DARWIN
    -#define U_HIDE_DRAFT_API 1
    -#define U_DISABLE_RENAMING 1
    -#endif
    -
    -#include "erl_nif.h"
    -#include "unicode/ucol.h"
    -#include "unicode/ucasemap.h"
    -#include <stdio.h>
    -#include <assert.h>
    -
    -static ERL_NIF_TERM ATOM_TRUE;
    -static ERL_NIF_TERM ATOM_FALSE;
    -static ERL_NIF_TERM ATOM_NULL;
    -
    -typedef struct {
    - ErlNifEnv* env;
    - int error;
    - UCollator* coll;
    -} ctx_t;
    -
    -typedef struct {
    - UCollator** collators;
    - int collStackTop;
    - int numCollators;
    - ErlNifMutex* collMutex;
    -} priv_data_t;
    -
    -static ERL_NIF_TERM collate_nif(ErlNifEnv*, int, const ERL_NIF_TERM []);
    -static int collate_binary(priv_data_t*, ctx_t*, ERL_NIF_TERM, ERL_NIF_TERM, ERL_NIF_TERM);
    -static int on_load(ErlNifEnv*, void**, ERL_NIF_TERM);
    -static void on_unload(ErlNifEnv*, void*);
    -static __inline void reserve_coll(priv_data_t*, ctx_t*);
    -static __inline void release_coll(priv_data_t*, ctx_t*);
    -int on_reload(ErlNifEnv*, void**, ERL_NIF_TERM);
    -int on_upgrade(ErlNifEnv*, void**, void**, ERL_NIF_TERM);
    -
    -void
    -reserve_coll(priv_data_t* pData, ctx_t *ctx)
    -{
    - if (ctx->coll == NULL) {
    - enif_mutex_lock(pData->collMutex);
    - assert(pData->collStackTop < pData->numCollators);
    - ctx->coll = pData->collators[pData->collStackTop];
    - pData->collStackTop += 1;
    - enif_mutex_unlock(pData->collMutex);
    - }
    -}
    -
    -
    -void
    -release_coll(priv_data_t* pData, ctx_t *ctx)
    -{
    - if (ctx->coll != NULL) {
    - enif_mutex_lock(pData->collMutex);
    - pData->collStackTop -= 1;
    - assert(pData->collStackTop >= 0);
    - enif_mutex_unlock(pData->collMutex);
    - }
    -}
    -
    -/* ------------------------------------------------------------------------- */
    -
    -static ERL_NIF_TERM
    -collate_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) {
    - ERL_NIF_TERM term_a = argv[0];
    - ERL_NIF_TERM term_b = argv[1];
    - ERL_NIF_TERM term_has_nocase = argv[2];
    -
    - ctx_t ctx;
    - int result;
    - priv_data_t* pData;
    -
    - ctx.env = env;
    - ctx.error = 0;
    - ctx.coll = NULL;
    -
    - pData = (priv_data_t*) enif_priv_data(env);
    -
    - result = collate_binary(pData, &ctx, term_a, term_b, term_has_nocase);
    - release_coll(pData, &ctx);
    -
    - return enif_make_int(env, result);
    -}
    -
    -int
    -collate_binary(priv_data_t* pData, ctx_t* ctx, ERL_NIF_TERM term_a, ERL_NIF_TERM term_b, ERL_NIF_TERM term_has_nocase)
    -{
    - ErlNifBinary binA, binB;
    - int has_nocase, response;
    -
    - if(!enif_get_int(ctx->env, term_has_nocase, &has_nocase)) {
    - ctx->error = 1;
    - return 0;
    - }
    - if(!enif_inspect_binary(ctx->env, term_a, &binA)) {
    - ctx->error = 1;
    - return 0;
    - }
    - if(!enif_inspect_binary(ctx->env, term_b, &binB)) {
    - ctx->error = 1;
    - return 0;
    - }
    -
    - switch(has_nocase) {
    - case 0: /* COLLATE */
    - case 1: /* COLLATE_NO_CASE: */
    - {
    - UErrorCode status = U_ZERO_ERROR;
    - UCharIterator iterA;
    - UCharIterator iterB;
    -
    - uiter_setUTF8(&iterA, (const char *) binA.data, (uint32_t) binA.size);
    - uiter_setUTF8(&iterB, (const char *) binB.data, (uint32_t) binB.size);
    -
    - /* grab a collator */
    - reserve_coll(pData, ctx);
    -
    - if (has_nocase == 1) /* switching this collator to case insensitive */
    - ucol_setAttribute(ctx->coll, UCOL_STRENGTH, UCOL_PRIMARY, &status);
    -
    - /* by default, it will collate case sensitive */
    - response = ucol_strcollIter(ctx->coll, &iterA, &iterB, &status);
    -
    - if (has_nocase == 1) /* puting back this collator to case sensitive */
    - ucol_setAttribute(ctx->coll, UCOL_STRENGTH, UCOL_DEFAULT, &status);
    -
    - break;
    - }
    -
    - default:
    - response = -1;
    - }
    -
    - return response;
    -}
    -
    -/* ------------------------------------------------------------------------- */
    -
    -int
    -on_load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM info)
    -{
    - UErrorCode status = U_ZERO_ERROR;
    - priv_data_t* pData = (priv_data_t*)enif_alloc(sizeof(priv_data_t));
    - int i, j;
    -
    - /* Initialize the structure */
    - pData->collators = NULL;
    - pData->collStackTop = 0;
    - pData->numCollators = 0;
    - pData->collMutex = NULL;
    -
    - if (!enif_get_int(env, info, &(pData->numCollators) )) {
    - enif_free((char*)pData);
    - return 1;
    - }
    -
    - if (pData->numCollators < 1) {
    - enif_free((char*)pData);
    - return 2;
    - }
    -
    - pData->collMutex = enif_mutex_create((char *)"coll_mutex");
    -
    - if (pData->collMutex == NULL) {
    - enif_free((char*)pData);
    - return 3;
    - }
    -
    - pData->collators = enif_alloc(sizeof(UCollator*) * pData->numCollators);
    -
    - if (pData->collators == NULL) {
    - enif_mutex_destroy(pData->collMutex);
    - enif_free((char*)pData);
    - return 4;
    - }
    -
    - for (i = 0; i < pData->numCollators; i++) {
    - pData->collators[i] = ucol_open("", &status);
    -
    - if (U_FAILURE(status)) {
    - for (j = 0; j < i; j++) {
    - ucol_close(pData->collators[j]);
    - }
    -
    - enif_free(pData->collators);
    - enif_mutex_destroy(pData->collMutex);
    -
    - enif_free((char*)pData);
    -
    - return 5;
    - }
    - }
    -
    - ATOM_TRUE = enif_make_atom(env, "true");
    - ATOM_FALSE = enif_make_atom(env, "false");
    - ATOM_NULL = enif_make_atom(env, "null");
    -
    - *priv_data = pData;
    -
    - return 0;
    -}
    -
    -
    -void
    -on_unload(ErlNifEnv* env, void* priv_data)
    -{
    - priv_data_t* pData = (priv_data_t*)priv_data;
    - if (pData->collators != NULL) {
    - int i;
    -
    - for (i = 0; i < pData->numCollators; i++) {
    - ucol_close(pData->collators[i]);
    - }
    -
    - enif_free(pData->collators);
    - }
    -
    - if (pData->collMutex != NULL) {
    - enif_mutex_destroy(pData->collMutex);
    - }
    -
    - enif_free((char*)pData);
    -}
    -
    -int
    -on_reload(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM info)
    -{
    - return 0;
    -}
    -
    -int
    -on_upgrade(ErlNifEnv* env, void** priv_data, void** old_data, ERL_NIF_TERM info)
    -{
    - if (*old_data != NULL) {
    - priv_data_t* pData = (priv_data_t*)old_data;
    -
    - if (pData->collators != NULL) {
    - int i;
    -
    - for (i = 0; i < pData->numCollators; i++) {
    - ucol_close(pData->collators[i]);
    - }
    -
    - enif_free(pData->collators);
    - }
    -
    - if (pData->collMutex != NULL) {
    - enif_mutex_destroy(pData->collMutex);
    - }
    -
    - enif_free((char*)pData);
    - }
    -
    - return on_load(env, priv_data, info);
    -}
    -
    -/* ------------------------------------------------------------------------- */
    -
    -static ErlNifFunc
    -nif_funcs[] =
    -{
    - {"collate_nif", 3, collate_nif}
    -};
    -
    -ERL_NIF_INIT(couch_collate, nif_funcs, &on_load, &on_reload, &on_upgrade, &on_unload)

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/patches/icu/common-uloc_c.patch
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/patches/icu/common-uloc_c.patch b/apps/couch_collate/patches/icu/common-uloc_c.patch
    deleted file mode 100644
    index fe60732..0000000
    --- a/apps/couch_collate/patches/icu/common-uloc_c.patch
    +++ /dev/null
    @@ -1,26 +0,0 @@
    -$FreeBSD: ports/devel/icu/files/patch-common-uloc.c,v 1.1 2011/12/23 14:54:18 crees Exp $
    -
    -From http://bugs.icu-project.org/trac/ticket/8984
    -
    -Submitted by: Andrei Lavreniyuk (thanks!)
    -
    ---- icu/source/common/uloc.c
    -+++ icu/source/common/uloc.c
    -@@ -1797,7 +1797,7 @@
    - int32_t variantLen = _deleteVariant(variant, uprv_min(variantSize, (nameCapacity-len)), variantToCompare, n);
    - len -= variantLen;
    - if (variantLen > 0) {
    -- if (name[len-1] == '_') { /* delete trailing '_' */
    -+ if (len > 0 && name[len-1] == '_') { /* delete trailing '_' */
    - --len;
    - }
    - addKeyword = VARIANT_MAP[j].keyword;
    -@@ -1805,7 +1805,7 @@
    - break;
    - }
    - }
    -- if (name[len-1] == '_') { /* delete trailing '_' */
    -+ if (len > 0 && len <= nameCapacity && name[len-1] == '_') { /* delete trailing '_' */
    - --len;
    - }
    - }

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/patches/icu/layout_LookupProcessor_cpp.patch
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/patches/icu/layout_LookupProcessor_cpp.patch b/apps/couch_collate/patches/icu/layout_LookupProcessor_cpp.patch
    deleted file mode 100644
    index 304d266..0000000
    --- a/apps/couch_collate/patches/icu/layout_LookupProcessor_cpp.patch
    +++ /dev/null
    @@ -1,13 +0,0 @@
    ---- icu/source/layout/LookupProcessor.cpp
    -+++ icu/source/layout/LookupProcessor.cpp
    -@@ -201,7 +201,9 @@
    -
    - if (requiredFeatureIndex != 0xFFFF) {
    - requiredFeatureTable = featureListTable->getFeatureTable(requiredFeatureIndex, &requiredFeatureTag);
    -- featureReferences += SWAPW(featureTable->lookupCount);
    -+ if (requiredFeatureTable) {
    -+ featureReferences += SWAPW(requiredFeatureTable->lookupCount);
    -+ }
    - }
    -
    - lookupOrderArray = LE_NEW_ARRAY(le_uint16, featureReferences);

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/patches/icu/source_config_Makefile_inc_in.patch
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/patches/icu/source_config_Makefile_inc_in.patch b/apps/couch_collate/patches/icu/source_config_Makefile_inc_in.patch
    deleted file mode 100644
    index 89d428e..0000000
    --- a/apps/couch_collate/patches/icu/source_config_Makefile_inc_in.patch
    +++ /dev/null
    @@ -1,12 +0,0 @@
    ---- icu/source/config/Makefile.inc.in.orig 2011-04-07 17:41:15.000000000 +0200
    -+++ icu/source/config/Makefile.inc.in 2011-04-07 17:41:40.000000000 +0200
    -@@ -44,8 +44,7 @@
    - LIBICU = lib$(ICUPREFIX)
    -
    - # Static library prefix and file extension
    --STATIC_PREFIX = s
    --LIBSICU = lib$(STATIC_PREFIX)$(ICUPREFIX)
    -+LIBSICU = lib$(ICUPREFIX)
    - A = a
    -
    - # Suffix at the end of libraries. Usually empty.

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/patches/icu/source_icudefs_mk_in.patch
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/patches/icu/source_icudefs_mk_in.patch b/apps/couch_collate/patches/icu/source_icudefs_mk_in.patch
    deleted file mode 100644
    index a1add5e..0000000
    --- a/apps/couch_collate/patches/icu/source_icudefs_mk_in.patch
    +++ /dev/null
    @@ -1,19 +0,0 @@
    ---- icu/source/icudefs.mk.in.orig 2011-04-07 17:15:44.000000000 +0200
    -+++ icu/source/icudefs.mk.in 2011-04-07 17:15:56.000000000 +0200
    -@@ -189,14 +189,13 @@
    -
    - ## If we can't use the shared libraries, use the static libraries
    - ifneq ($(ENABLE_SHARED),YES)
    --STATIC_PREFIX_WHEN_USED = s
    -+STATIC_PREFIX_WHEN_USED =
    - else
    - STATIC_PREFIX_WHEN_USED =
    - endif
    -
    - # Static library prefix and file extension
    --STATIC_PREFIX = s
    --LIBSICU = $(LIBPREFIX)$(STATIC_PREFIX)$(ICUPREFIX)
    -+LIBSICU = $(LIBPREFIX)$(ICUPREFIX)
    - A = a
    - SOBJ = $(SO)
    -

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/basictz.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/basictz.h b/apps/couch_collate/platform/osx/icu/unicode/basictz.h
    deleted file mode 100644
    index c616a3e..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/basictz.h
    +++ /dev/null
    @@ -1,210 +0,0 @@
    -/*
    -*******************************************************************************
    -* Copyright (C) 2007-2008, International Business Machines Corporation and *
    -* others. All Rights Reserved. *
    -*******************************************************************************
    -*/
    -#ifndef BASICTZ_H
    -#define BASICTZ_H
    -
    -/**
    - * \file
    - * \brief C++ API: ICU TimeZone base class
    - */
    -
    -#include "unicode/utypes.h"
    -
    -#if !UCONFIG_NO_FORMATTING
    -
    -#include "unicode/timezone.h"
    -#include "unicode/tzrule.h"
    -#include "unicode/tztrans.h"
    -
    -U_NAMESPACE_BEGIN
    -
    -// forward declarations
    -class UVector;
    -
    -/**
    - * <code>BasicTimeZone</code> is an abstract class extending <code>TimeZone</code>.
    - * This class provides some additional methods to access time zone transitions and rules.
    - * All ICU <code>TimeZone</code> concrete subclasses extend this class.
    - * @stable ICU 4.0
    - */
    -class U_I18N_API BasicTimeZone: public TimeZone {
    -public:
    - /**
    - * Destructor.
    - * @stable ICU 4.0
    - */
    - virtual ~BasicTimeZone();
    -
    - /**
    - * Gets the first time zone transition after the base time.
    - * @param base The base time.
    - * @param inclusive Whether the base time is inclusive or not.
    - * @param result Receives the first transition after the base time.
    - * @return TRUE if the transition is found.
    - * @stable ICU 4.0
    - */
    - virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/ = 0;
    -
    - /**
    - * Gets the most recent time zone transition before the base time.
    - * @param base The base time.
    - * @param inclusive Whether the base time is inclusive or not.
    - * @param result Receives the most recent transition before the base time.
    - * @return TRUE if the transition is found.
    - * @stable ICU 4.0
    - */
    - virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/ = 0;
    -
    - /**
    - * Checks if the time zone has equivalent transitions in the time range.
    - * This method returns true when all of transition times, from/to standard
    - * offsets and DST savings used by this time zone match the other in the
    - * time range.
    - * @param tz The <code>BasicTimeZone</code> object to be compared with.
    - * @param start The start time of the evaluated time range (inclusive)
    - * @param end The end time of the evaluated time range (inclusive)
    - * @param ignoreDstAmount
    - * When true, any transitions with only daylight saving amount
    - * changes will be ignored, except either of them is zero.
    - * For example, a transition from rawoffset 3:00/dstsavings 1:00
    - * to rawoffset 2:00/dstsavings 2:00 is excluded from the comparison,
    - * but a transtion from rawoffset 2:00/dstsavings 1:00 to
    - * rawoffset 3:00/dstsavings 0:00 is included.
    - * @param ec Output param to filled in with a success or an error.
    - * @return true if the other time zone has the equivalent transitions in the
    - * time range.
    - * @stable ICU 4.0
    - */
    - virtual UBool hasEquivalentTransitions(/*const*/ BasicTimeZone& tz, UDate start, UDate end,
    - UBool ignoreDstAmount, UErrorCode& ec) /*const*/;
    -
    - /**
    - * Returns the number of <code>TimeZoneRule</code>s which represents time transitions,
    - * for this time zone, that is, all <code>TimeZoneRule</code>s for this time zone except
    - * <code>InitialTimeZoneRule</code>. The return value range is 0 or any positive value.
    - * @param status Receives error status code.
    - * @return The number of <code>TimeZoneRule</code>s representing time transitions.
    - * @stable ICU 4.0
    - */
    - virtual int32_t countTransitionRules(UErrorCode& status) /*const*/ = 0;
    -
    - /**
    - * Gets the <code>InitialTimeZoneRule</code> and the set of <code>TimeZoneRule</code>
    - * which represent time transitions for this time zone. On successful return,
    - * the argument initial points to non-NULL <code>InitialTimeZoneRule</code> and
    - * the array trsrules is filled with 0 or multiple <code>TimeZoneRule</code>
    - * instances up to the size specified by trscount. The results are referencing the
    - * rule instance held by this time zone instance. Therefore, after this time zone
    - * is destructed, they are no longer available.
    - * @param initial Receives the initial timezone rule
    - * @param trsrules Receives the timezone transition rules
    - * @param trscount On input, specify the size of the array 'transitions' receiving
    - * the timezone transition rules. On output, actual number of
    - * rules filled in the array will be set.
    - * @param status Receives error status code.
    - * @stable ICU 4.0
    - */
    - virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
    - const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) /*const*/ = 0;
    -
    - /**
    - * Gets the set of time zone rules valid at the specified time. Some known external time zone
    - * implementations are not capable to handle historic time zone rule changes. Also some
    - * implementations can only handle certain type of rule definitions.
    - * If this time zone does not use any daylight saving time within about 1 year from the specified
    - * time, only the <code>InitialTimeZone</code> is returned. Otherwise, the rule for standard
    - * time and daylight saving time transitions are returned in addition to the
    - * <code>InitialTimeZoneRule</code>. The standard and daylight saving time transition rules are
    - * represented by <code>AnnualTimeZoneRule</code> with <code>DateTimeRule::DOW</code> for its date
    - * rule and <code>DateTimeRule::WALL_TIME</code> for its time rule. Because daylight saving time
    - * rule is changing time to time in many time zones and also mapping a transition time rule to
    - * different type is lossy transformation, the set of rules returned by this method may be valid
    - * for short period of time.
    - * The time zone rule objects returned by this method is owned by the caller, so the caller is
    - * responsible for deleting them after use.
    - * @param date The date used for extracting time zone rules.
    - * @param initial Receives the <code>InitialTimeZone</code>, always not NULL.
    - * @param std Receives the <code>AnnualTimeZoneRule</code> for standard time transitions.
    - * When this time time zone does not observe daylight saving times around the
    - * specified date, NULL is set.
    - * @param dst Receives the <code>AnnualTimeZoneRule</code> for daylight saving time
    - * transitions. When this time zone does not observer daylight saving times
    - * around the specified date, NULL is set.
    - * @param status Receives error status code.
    - * @stable ICU 4.0
    - */
    - virtual void getSimpleRulesNear(UDate date, InitialTimeZoneRule*& initial,
    - AnnualTimeZoneRule*& std, AnnualTimeZoneRule*& dst, UErrorCode& status) /*const*/;
    -
    -
    - /**
    - * The time type option bit flags used by getOffsetFromLocal
    - * @internal
    - */
    - enum {
    - kStandard = 0x01,
    - kDaylight = 0x03,
    - kFormer = 0x04,
    - kLatter = 0x0C
    - };
    -
    - /**
    - * Get time zone offsets from local wall time.
    - * @internal
    - */
    - virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
    - int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) /*const*/;
    -
    -protected:
    -
    - /**
    - * The time type option bit masks used by getOffsetFromLocal
    - * @internal
    - */
    - enum {
    - kStdDstMask = kDaylight,
    - kFormerLatterMask = kLatter
    - };
    -
    - /**
    - * Default constructor.
    - * @stable ICU 4.0
    - */
    - BasicTimeZone();
    -
    - /**
    - * Construct a timezone with a given ID.
    - * @param id a system time zone ID
    - * @stable ICU 4.0
    - */
    - BasicTimeZone(const UnicodeString &id);
    -
    - /**
    - * Copy constructor.
    - * @param source the object to be copied.
    - * @stable ICU 4.0
    - */
    - BasicTimeZone(const BasicTimeZone& source);
    -
    - /**
    - * Gets the set of TimeZoneRule instances applicable to the specified time and after.
    - * @param start The start date used for extracting time zone rules
    - * @param initial Receives the InitialTimeZone, always not NULL
    - * @param transitionRules Receives the transition rules, could be NULL
    - * @param status Receives error status code
    - */
    - void getTimeZoneRulesAfter(UDate start, InitialTimeZoneRule*& initial, UVector*& transitionRules,
    - UErrorCode& status) /*const*/;
    -};
    -
    -U_NAMESPACE_END
    -
    -#endif /* #if !UCONFIG_NO_FORMATTING */
    -
    -#endif // BASICTZ_H
    -
    -//eof

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/brkiter.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/brkiter.h b/apps/couch_collate/platform/osx/icu/unicode/brkiter.h
    deleted file mode 100644
    index 7df5f14..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/brkiter.h
    +++ /dev/null
    @@ -1,557 +0,0 @@
    -/*
    -********************************************************************************
    -* Copyright (C) 1997-2007, International Business Machines
    -* Corporation and others. All Rights Reserved.
    -********************************************************************************
    -*
    -* File brkiter.h
    -*
    -* Modification History:
    -*
    -* Date Name Description
    -* 02/18/97 aliu Added typedef for TextCount. Made DONE const.
    -* 05/07/97 aliu Fixed DLL declaration.
    -* 07/09/97 jfitz Renamed BreakIterator and interface synced with JDK
    -* 08/11/98 helena Sync-up JDK1.2.
    -* 01/13/2000 helena Added UErrorCode parameter to createXXXInstance methods.
    -********************************************************************************
    -*/
    -
    -#ifndef BRKITER_H
    -#define BRKITER_H
    -
    -#include "unicode/utypes.h"
    -
    -/**
    - * \file
    - * \brief C++ API: Break Iterator.
    - */
    -
    -#if UCONFIG_NO_BREAK_ITERATION
    -
    -U_NAMESPACE_BEGIN
    -
    -/*
    - * Allow the declaration of APIs with pointers to BreakIterator
    - * even when break iteration is removed from the build.
    - */
    -class BreakIterator;
    -
    -U_NAMESPACE_END
    -
    -#else
    -
    -#include "unicode/uobject.h"
    -#include "unicode/unistr.h"
    -#include "unicode/chariter.h"
    -#include "unicode/locid.h"
    -#include "unicode/ubrk.h"
    -#include "unicode/strenum.h"
    -#include "unicode/utext.h"
    -#include "unicode/umisc.h"
    -
    -U_NAMESPACE_BEGIN
    -
    -/**
    - * The BreakIterator class implements methods for finding the location
    - * of boundaries in text. BreakIterator is an abstract base class.
    - * Instances of BreakIterator maintain a current position and scan over
    - * text returning the index of characters where boundaries occur.
    - * <p>
    - * Line boundary analysis determines where a text string can be broken
    - * when line-wrapping. The mechanism correctly handles punctuation and
    - * hyphenated words.
    - * <p>
    - * Sentence boundary analysis allows selection with correct
    - * interpretation of periods within numbers and abbreviations, and
    - * trailing punctuation marks such as quotation marks and parentheses.
    - * <p>
    - * Word boundary analysis is used by search and replace functions, as
    - * well as within text editing applications that allow the user to
    - * select words with a double click. Word selection provides correct
    - * interpretation of punctuation marks within and following
    - * words. Characters that are not part of a word, such as symbols or
    - * punctuation marks, have word-breaks on both sides.
    - * <p>
    - * Character boundary analysis allows users to interact with
    - * characters as they expect to, for example, when moving the cursor
    - * through a text string. Character boundary analysis provides correct
    - * navigation of through character strings, regardless of how the
    - * character is stored. For example, an accented character might be
    - * stored as a base character and a diacritical mark. What users
    - * consider to be a character can differ between languages.
    - * <p>
    - * The text boundary positions are found according to the rules
    - * described in Unicode Standard Annex #29, Text Boundaries, and
    - * Unicode Standard Annex #14, Line Breaking Properties. These
    - * are available at http://www.unicode.org/reports/tr14/ and
    - * http://www.unicode.org/reports/tr29/.
    - * <p>
    - * In addition to the C++ API defined in this header file, a
    - * plain C API with equivalent functionality is defined in the
    - * file ubrk.h
    - * <p>
    - * Code snippits illustrating the use of the Break Iterator APIs
    - * are available in the ICU User Guide,
    - * http://icu-project.org/userguide/boundaryAnalysis.html
    - * and in the sample program icu/source/samples/break/break.cpp"
    - *
    - */
    -class U_COMMON_API BreakIterator : public UObject {
    -public:
    - /**
    - * destructor
    - * @stable ICU 2.0
    - */
    - virtual ~BreakIterator();
    -
    - /**
    - * Return true if another object is semantically equal to this
    - * one. The other object should be an instance of the same subclass of
    - * BreakIterator. Objects of different subclasses are considered
    - * unequal.
    - * <P>
    - * Return true if this BreakIterator is at the same position in the
    - * same text, and is the same class and type (word, line, etc.) of
    - * BreakIterator, as the argument. Text is considered the same if
    - * it contains the same characters, it need not be the same
    - * object, and styles are not considered.
    - * @stable ICU 2.0
    - */
    - virtual UBool operator==(const BreakIterator&) const = 0;
    -
    - /**
    - * Returns the complement of the result of operator==
    - * @param rhs The BreakIterator to be compared for inequality
    - * @return the complement of the result of operator==
    - * @stable ICU 2.0
    - */
    - UBool operator!=(const BreakIterator& rhs) const { return !operator==(rhs); }
    -
    - /**
    - * Return a polymorphic copy of this object. This is an abstract
    - * method which subclasses implement.
    - * @stable ICU 2.0
    - */
    - virtual BreakIterator* clone(void) const = 0;
    -
    - /**
    - * Return a polymorphic class ID for this object. Different subclasses
    - * will return distinct unequal values.
    - * @stable ICU 2.0
    - */
    - virtual UClassID getDynamicClassID(void) const = 0;
    -
    - /**
    - * Return a CharacterIterator over the text being analyzed.
    - * @stable ICU 2.0
    - */
    - virtual CharacterIterator& getText(void) const = 0;
    -
    -
    - /**
    - * Get a UText for the text being analyzed.
    - * The returned UText is a shallow clone of the UText used internally
    - * by the break iterator implementation. It can safely be used to
    - * access the text without impacting any break iterator operations,
    - * but the underlying text itself must not be altered.
    - *
    - * @param fillIn A UText to be filled in. If NULL, a new UText will be
    - * allocated to hold the result.
    - * @param status receives any error codes.
    - * @return The current UText for this break iterator. If an input
    - * UText was provided, it will always be returned.
    - * @stable ICU 3.4
    - */
    - virtual UText *getUText(UText *fillIn, UErrorCode &status) const = 0;
    -
    - /**
    - * Change the text over which this operates. The text boundary is
    - * reset to the start.
    - * @param text The UnicodeString used to change the text.
    - * @stable ICU 2.0
    - */
    - virtual void setText(const UnicodeString &text) = 0;
    -
    - /**
    - * Reset the break iterator to operate over the text represented by
    - * the UText. The iterator position is reset to the start.
    - *
    - * This function makes a shallow clone of the supplied UText. This means
    - * that the caller is free to immediately close or otherwise reuse the
    - * Utext that was passed as a parameter, but that the underlying text itself
    - * must not be altered while being referenced by the break iterator.
    - *
    - * @param text The UText used to change the text.
    - * @param status receives any error codes.
    - * @stable ICU 3.4
    - */
    - virtual void setText(UText *text, UErrorCode &status) = 0;
    -
    - /**
    - * Change the text over which this operates. The text boundary is
    - * reset to the start.
    - * Note that setText(UText *) provides similar functionality to this function,
    - * and is more efficient.
    - * @param it The CharacterIterator used to change the text.
    - * @stable ICU 2.0
    - */
    - virtual void adoptText(CharacterIterator* it) = 0;
    -
    - enum {
    - /**
    - * DONE is returned by previous() and next() after all valid
    - * boundaries have been returned.
    - * @stable ICU 2.0
    - */
    - DONE = (int32_t)-1
    - };
    -
    - /**
    - * Return the index of the first character in the text being scanned.
    - * @stable ICU 2.0
    - */
    - virtual int32_t first(void) = 0;
    -
    - /**
    - * Return the index immediately BEYOND the last character in the text being scanned.
    - * @stable ICU 2.0
    - */
    - virtual int32_t last(void) = 0;
    -
    - /**
    - * Return the boundary preceding the current boundary.
    - * @return The character index of the previous text boundary or DONE if all
    - * boundaries have been returned.
    - * @stable ICU 2.0
    - */
    - virtual int32_t previous(void) = 0;
    -
    - /**
    - * Return the boundary following the current boundary.
    - * @return The character index of the next text boundary or DONE if all
    - * boundaries have been returned.
    - * @stable ICU 2.0
    - */
    - virtual int32_t next(void) = 0;
    -
    - /**
    - * Return character index of the current interator position within the text.
    - * @return The boundary most recently returned.
    - * @stable ICU 2.0
    - */
    - virtual int32_t current(void) const = 0;
    -
    - /**
    - * Return the first boundary following the specified offset.
    - * The value returned is always greater than the offset or
    - * the value BreakIterator.DONE
    - * @param offset the offset to begin scanning.
    - * @return The first boundary after the specified offset.
    - * @stable ICU 2.0
    - */
    - virtual int32_t following(int32_t offset) = 0;
    -
    - /**
    - * Return the first boundary preceding the specified offset.
    - * The value returned is always smaller than the offset or
    - * the value BreakIterator.DONE
    - * @param offset the offset to begin scanning.
    - * @return The first boundary before the specified offset.
    - * @stable ICU 2.0
    - */
    - virtual int32_t preceding(int32_t offset) = 0;
    -
    - /**
    - * Return true if the specfied position is a boundary position.
    - * As a side effect, the current position of the iterator is set
    - * to the first boundary position at or following the specified offset.
    - * @param offset the offset to check.
    - * @return True if "offset" is a boundary position.
    - * @stable ICU 2.0
    - */
    - virtual UBool isBoundary(int32_t offset) = 0;
    -
    - /**
    - * Return the nth boundary from the current boundary
    - * @param n which boundary to return. A value of 0
    - * does nothing. Negative values move to previous boundaries
    - * and positive values move to later boundaries.
    - * @return The index of the nth boundary from the current position, or
    - * DONE if there are fewer than |n| boundaries in the specfied direction.
    - * @stable ICU 2.0
    - */
    - virtual int32_t next(int32_t n) = 0;
    -
    - /**
    - * Create BreakIterator for word-breaks using the given locale.
    - * Returns an instance of a BreakIterator implementing word breaks.
    - * WordBreak is useful for word selection (ex. double click)
    - * @param where the locale.
    - * @param status the error code
    - * @return A BreakIterator for word-breaks. The UErrorCode& status
    - * parameter is used to return status information to the user.
    - * To check whether the construction succeeded or not, you should check
    - * the value of U_SUCCESS(err). If you wish more detailed information, you
    - * can check for informational error results which still indicate success.
    - * U_USING_FALLBACK_WARNING indicates that a fall back locale was used. For
    - * example, 'de_CH' was requested, but nothing was found there, so 'de' was
    - * used. U_USING_DEFAULT_WARNING indicates that the default locale data was
    - * used; neither the requested locale nor any of its fall back locales
    - * could be found.
    - * The caller owns the returned object and is responsible for deleting it.
    - * @stable ICU 2.0
    - */
    - static BreakIterator* U_EXPORT2
    - createWordInstance(const Locale& where, UErrorCode& status);
    -
    - /**
    - * Create BreakIterator for line-breaks using specified locale.
    - * Returns an instance of a BreakIterator implementing line breaks. Line
    - * breaks are logically possible line breaks, actual line breaks are
    - * usually determined based on display width.
    - * LineBreak is useful for word wrapping text.
    - * @param where the locale.
    - * @param status The error code.
    - * @return A BreakIterator for line-breaks. The UErrorCode& status
    - * parameter is used to return status information to the user.
    - * To check whether the construction succeeded or not, you should check
    - * the value of U_SUCCESS(err). If you wish more detailed information, you
    - * can check for informational error results which still indicate success.
    - * U_USING_FALLBACK_WARNING indicates that a fall back locale was used. For
    - * example, 'de_CH' was requested, but nothing was found there, so 'de' was
    - * used. U_USING_DEFAULT_WARNING indicates that the default locale data was
    - * used; neither the requested locale nor any of its fall back locales
    - * could be found.
    - * The caller owns the returned object and is responsible for deleting it.
    - * @stable ICU 2.0
    - */
    - static BreakIterator* U_EXPORT2
    - createLineInstance(const Locale& where, UErrorCode& status);
    -
    - /**
    - * Create BreakIterator for character-breaks using specified locale
    - * Returns an instance of a BreakIterator implementing character breaks.
    - * Character breaks are boundaries of combining character sequences.
    - * @param where the locale.
    - * @param status The error code.
    - * @return A BreakIterator for character-breaks. The UErrorCode& status
    - * parameter is used to return status information to the user.
    - * To check whether the construction succeeded or not, you should check
    - * the value of U_SUCCESS(err). If you wish more detailed information, you
    - * can check for informational error results which still indicate success.
    - * U_USING_FALLBACK_WARNING indicates that a fall back locale was used. For
    - * example, 'de_CH' was requested, but nothing was found there, so 'de' was
    - * used. U_USING_DEFAULT_WARNING indicates that the default locale data was
    - * used; neither the requested locale nor any of its fall back locales
    - * could be found.
    - * The caller owns the returned object and is responsible for deleting it.
    - * @stable ICU 2.0
    - */
    - static BreakIterator* U_EXPORT2
    - createCharacterInstance(const Locale& where, UErrorCode& status);
    -
    - /**
    - * Create BreakIterator for sentence-breaks using specified locale
    - * Returns an instance of a BreakIterator implementing sentence breaks.
    - * @param where the locale.
    - * @param status The error code.
    - * @return A BreakIterator for sentence-breaks. The UErrorCode& status
    - * parameter is used to return status information to the user.
    - * To check whether the construction succeeded or not, you should check
    - * the value of U_SUCCESS(err). If you wish more detailed information, you
    - * can check for informational error results which still indicate success.
    - * U_USING_FALLBACK_WARNING indicates that a fall back locale was used. For
    - * example, 'de_CH' was requested, but nothing was found there, so 'de' was
    - * used. U_USING_DEFAULT_WARNING indicates that the default locale data was
    - * used; neither the requested locale nor any of its fall back locales
    - * could be found.
    - * The caller owns the returned object and is responsible for deleting it.
    - * @stable ICU 2.0
    - */
    - static BreakIterator* U_EXPORT2
    - createSentenceInstance(const Locale& where, UErrorCode& status);
    -
    - /**
    - * Create BreakIterator for title-casing breaks using the specified locale
    - * Returns an instance of a BreakIterator implementing title breaks.
    - * The iterator returned locates title boundaries as described for
    - * Unicode 3.2 only. For Unicode 4.0 and above title boundary iteration,
    - * please use Word Boundary iterator.{@link #createWordInstance }
    - *
    - * @param where the locale.
    - * @param status The error code.
    - * @return A BreakIterator for title-breaks. The UErrorCode& status
    - * parameter is used to return status information to the user.
    - * To check whether the construction succeeded or not, you should check
    - * the value of U_SUCCESS(err). If you wish more detailed information, you
    - * can check for informational error results which still indicate success.
    - * U_USING_FALLBACK_WARNING indicates that a fall back locale was used. For
    - * example, 'de_CH' was requested, but nothing was found there, so 'de' was
    - * used. U_USING_DEFAULT_WARNING indicates that the default locale data was
    - * used; neither the requested locale nor any of its fall back locales
    - * could be found.
    - * The caller owns the returned object and is responsible for deleting it.
    - * @stable ICU 2.1
    - */
    - static BreakIterator* U_EXPORT2
    - createTitleInstance(const Locale& where, UErrorCode& status);
    -
    - /**
    - * Get the set of Locales for which TextBoundaries are installed.
    - * <p><b>Note:</b> this will not return locales added through the register
    - * call. To see the registered locales too, use the getAvailableLocales
    - * function that returns a StringEnumeration object </p>
    - * @param count the output parameter of number of elements in the locale list
    - * @return available locales
    - * @stable ICU 2.0
    - */
    - static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
    -
    - /**
    - * Get name of the object for the desired Locale, in the desired langauge.
    - * @param objectLocale must be from getAvailableLocales.
    - * @param displayLocale specifies the desired locale for output.
    - * @param name the fill-in parameter of the return value
    - * Uses best match.
    - * @return user-displayable name
    - * @stable ICU 2.0
    - */
    - static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
    - const Locale& displayLocale,
    - UnicodeString& name);
    -
    - /**
    - * Get name of the object for the desired Locale, in the langauge of the
    - * default locale.
    - * @param objectLocale must be from getMatchingLocales
    - * @param name the fill-in parameter of the return value
    - * @return user-displayable name
    - * @stable ICU 2.0
    - */
    - static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
    - UnicodeString& name);
    -
    - /**
    - * Thread safe client-buffer-based cloning operation
    - * Do NOT call delete on a safeclone, since 'new' is not used to create it.
    - * @param stackBuffer user allocated space for the new clone. If NULL new memory will be allocated.
    - * If buffer is not large enough, new memory will be allocated.
    - * @param BufferSize reference to size of allocated space.
    - * If BufferSize == 0, a sufficient size for use in cloning will
    - * be returned ('pre-flighting')
    - * If BufferSize is not enough for a stack-based safe clone,
    - * new memory will be allocated.
    - * @param status to indicate whether the operation went on smoothly or there were errors
    - * An informational status value, U_SAFECLONE_ALLOCATED_ERROR, is used if any allocations were
    - * necessary.
    - * @return pointer to the new clone
    - *
    - * @stable ICU 2.0
    - */
    - virtual BreakIterator * createBufferClone(void *stackBuffer,
    - int32_t &BufferSize,
    - UErrorCode &status) = 0;
    -
    - /**
    - * Determine whether the BreakIterator was created in user memory by
    - * createBufferClone(), and thus should not be deleted. Such objects
    - * must be closed by an explicit call to the destructor (not delete).
    - * @stable ICU 2.0
    - */
    - inline UBool isBufferClone(void);
    -
    -#if !UCONFIG_NO_SERVICE
    - /**
    - * Register a new break iterator of the indicated kind, to use in the given locale.
    - * The break iterator will be adopted. Clones of the iterator will be returned
    - * if a request for a break iterator of the given kind matches or falls back to
    - * this locale.
    - * @param toAdopt the BreakIterator instance to be adopted
    - * @param locale the Locale for which this instance is to be registered
    - * @param kind the type of iterator for which this instance is to be registered
    - * @param status the in/out status code, no special meanings are assigned
    - * @return a registry key that can be used to unregister this instance
    - * @stable ICU 2.4
    - */
    - static URegistryKey U_EXPORT2 registerInstance(BreakIterator* toAdopt,
    - const Locale& locale,
    - UBreakIteratorType kind,
    - UErrorCode& status);
    -
    - /**
    - * Unregister a previously-registered BreakIterator using the key returned from the
    - * register call. Key becomes invalid after a successful call and should not be used again.
    - * The BreakIterator corresponding to the key will be deleted.
    - * @param key the registry key returned by a previous call to registerInstance
    - * @param status the in/out status code, no special meanings are assigned
    - * @return TRUE if the iterator for the key was successfully unregistered
    - * @stable ICU 2.4
    - */
    - static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
    -
    - /**
    - * Return a StringEnumeration over the locales available at the time of the call,
    - * including registered locales.
    - * @return a StringEnumeration over the locales available at the time of the call
    - * @stable ICU 2.4
    - */
    - static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
    -#endif
    -
    - /**
    - * Returns the locale for this break iterator. Two flavors are available: valid and
    - * actual locale.
    - * @stable ICU 2.8
    - */
    - Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
    -
    - /** Get the locale for this break iterator object. You can choose between valid and actual locale.
    - * @param type type of the locale we're looking for (valid or actual)
    - * @param status error code for the operation
    - * @return the locale
    - * @internal
    - */
    - const char *getLocaleID(ULocDataLocaleType type, UErrorCode& status) const;
    -
    - private:
    - static BreakIterator* buildInstance(const Locale& loc, const char *type, int32_t kind, UErrorCode& status);
    - static BreakIterator* createInstance(const Locale& loc, int32_t kind, UErrorCode& status);
    - static BreakIterator* makeInstance(const Locale& loc, int32_t kind, UErrorCode& status);
    -
    - friend class ICUBreakIteratorFactory;
    - friend class ICUBreakIteratorService;
    -
    -protected:
    - /** @internal */
    - BreakIterator();
    - /** @internal */
    - UBool fBufferClone;
    - /** @internal */
    - BreakIterator (const BreakIterator &other) : UObject(other), fBufferClone(FALSE) {}
    -
    -private:
    -
    - /** @internal */
    - char actualLocale[ULOC_FULLNAME_CAPACITY];
    - char validLocale[ULOC_FULLNAME_CAPACITY];
    -
    - /**
    - * The assignment operator has no real implementation.
    - * It's provided to make the compiler happy. Do not call.
    - */
    - BreakIterator& operator=(const BreakIterator&);
    -};
    -
    -inline UBool BreakIterator::isBufferClone()
    -{
    - return fBufferClone;
    -}
    -
    -U_NAMESPACE_END
    -
    -#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
    -
    -#endif // _BRKITER
    -//eof
    -
  • Benoitc at Feb 13, 2014 at 6:14 pm
    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/coll.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/coll.h b/apps/couch_collate/platform/osx/icu/unicode/coll.h
    deleted file mode 100644
    index 5733f58..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/coll.h
    +++ /dev/null
    @@ -1,1035 +0,0 @@
    -/*
    -******************************************************************************
    -* Copyright (C) 1996-2008, International Business Machines *
    -* Corporation and others. All Rights Reserved. *
    -******************************************************************************
    -*/
    -
    -/**
    - * \file
    - * \brief C++ API: Collation Service.
    - */
    -
    -/**
    -* File coll.h
    -*
    -* Created by: Helena Shih
    -*
    -* Modification History:
    -*
    -* Date Name Description
    -* 02/5/97 aliu Modified createDefault to load collation data from
    -* binary files when possible. Added related methods
    -* createCollationFromFile, chopLocale, createPathName.
    -* 02/11/97 aliu Added members addToCache, findInCache, and fgCache.
    -* 02/12/97 aliu Modified to create objects from RuleBasedCollator cache.
    -* Moved cache out of Collation class.
    -* 02/13/97 aliu Moved several methods out of this class and into
    -* RuleBasedCollator, with modifications. Modified
    -* createDefault() to call new RuleBasedCollator(Locale&)
    -* constructor. General clean up and documentation.
    -* 02/20/97 helena Added clone, operator==, operator!=, operator=, copy
    -* constructor and getDynamicClassID.
    -* 03/25/97 helena Updated with platform independent data types.
    -* 05/06/97 helena Added memory allocation error detection.
    -* 06/20/97 helena Java class name change.
    -* 09/03/97 helena Added createCollationKeyValues().
    -* 02/10/98 damiba Added compare() with length as parameter.
    -* 04/23/99 stephen Removed EDecompositionMode, merged with
    -* Normalizer::EMode.
    -* 11/02/99 helena Collator performance enhancements. Eliminates the
    -* UnicodeString construction and special case for NO_OP.
    -* 11/23/99 srl More performance enhancements. Inlining of
    -* critical accessors.
    -* 05/15/00 helena Added version information API.
    -* 01/29/01 synwee Modified into a C++ wrapper which calls C apis
    -* (ucoll.h).
    -*/
    -
    -#ifndef COLL_H
    -#define COLL_H
    -
    -#include "unicode/utypes.h"
    -
    -#if !UCONFIG_NO_COLLATION
    -
    -#include "unicode/uobject.h"
    -#include "unicode/ucol.h"
    -#include "unicode/normlzr.h"
    -#include "unicode/locid.h"
    -#include "unicode/uniset.h"
    -#include "unicode/umisc.h"
    -
    -U_NAMESPACE_BEGIN
    -
    -class StringEnumeration;
    -
    -#if !UCONFIG_NO_SERVICE
    -/**
    - * @stable ICU 2.6
    - */
    -class CollatorFactory;
    -#endif
    -
    -/**
    -* @stable ICU 2.0
    -*/
    -class CollationKey;
    -
    -/**
    -* The <code>Collator</code> class performs locale-sensitive string
    -* comparison.<br>
    -* You use this class to build searching and sorting routines for natural
    -* language text.<br>
    -* <em>Important: </em>The ICU collation service has been reimplemented
    -* in order to achieve better performance and UCA compliance.
    -* For details, see the
    -* <a href="http://source.icu-project.org/repos/icu/icuhtml/trunk/design/collation/ICU_collation_design.htm">
    -* collation design document</a>.
    -* <p>
    -* <code>Collator</code> is an abstract base class. Subclasses implement
    -* specific collation strategies. One subclass,
    -* <code>RuleBasedCollator</code>, is currently provided and is applicable
    -* to a wide set of languages. Other subclasses may be created to handle more
    -* specialized needs.
    -* <p>
    -* Like other locale-sensitive classes, you can use the static factory method,
    -* <code>createInstance</code>, to obtain the appropriate
    -* <code>Collator</code> object for a given locale. You will only need to
    -* look at the subclasses of <code>Collator</code> if you need to
    -* understand the details of a particular collation strategy or if you need to
    -* modify that strategy.
    -* <p>
    -* The following example shows how to compare two strings using the
    -* <code>Collator</code> for the default locale.
    -* \htmlonly<blockquote>\endhtmlonly
    -* <pre>
    -* \code
    -* // Compare two strings in the default locale
    -* UErrorCode success = U_ZERO_ERROR;
    -* Collator* myCollator = Collator::createInstance(success);
    -* if (myCollator->compare("abc", "ABC") < 0)
    -* cout << "abc is less than ABC" << endl;
    -* else
    -* cout << "abc is greater than or equal to ABC" << endl;
    -* \endcode
    -* </pre>
    -* \htmlonly</blockquote>\endhtmlonly
    -* <p>
    -* You can set a <code>Collator</code>'s <em>strength</em> property to
    -* determine the level of difference considered significant in comparisons.
    -* Five strengths are provided: <code>PRIMARY</code>, <code>SECONDARY</code>,
    -* <code>TERTIARY</code>, <code>QUATERNARY</code> and <code>IDENTICAL</code>.
    -* The exact assignment of strengths to language features is locale dependant.
    -* For example, in Czech, "e" and "f" are considered primary differences,
    -* while "e" and "\u00EA" are secondary differences, "e" and "E" are tertiary
    -* differences and "e" and "e" are identical. The following shows how both case
    -* and accents could be ignored for US English.
    -* \htmlonly<blockquote>\endhtmlonly
    -* <pre>
    -* \code
    -* //Get the Collator for US English and set its strength to PRIMARY
    -* UErrorCode success = U_ZERO_ERROR;
    -* Collator* usCollator = Collator::createInstance(Locale::US, success);
    -* usCollator->setStrength(Collator::PRIMARY);
    -* if (usCollator->compare("abc", "ABC") == 0)
    -* cout << "'abc' and 'ABC' strings are equivalent with strength PRIMARY" << endl;
    -* \endcode
    -* </pre>
    -* \htmlonly</blockquote>\endhtmlonly
    -* <p>
    -* For comparing strings exactly once, the <code>compare</code> method
    -* provides the best performance. When sorting a list of strings however, it
    -* is generally necessary to compare each string multiple times. In this case,
    -* sort keys provide better performance. The <code>getSortKey</code> methods
    -* convert a string to a series of bytes that can be compared bitwise against
    -* other sort keys using <code>strcmp()</code>. Sort keys are written as
    -* zero-terminated byte strings. They consist of several substrings, one for
    -* each collation strength level, that are delimited by 0x01 bytes.
    -* If the string code points are appended for UCOL_IDENTICAL, then they are
    -* processed for correct code point order comparison and may contain 0x01
    -* bytes but not zero bytes.
    -* </p>
    -* <p>
    -* An older set of APIs returns a <code>CollationKey</code> object that wraps
    -* the sort key bytes instead of returning the bytes themselves.
    -* Its use is deprecated, but it is still available for compatibility with
    -* Java.
    -* </p>
    -* <p>
    -* <strong>Note:</strong> <code>Collator</code>s with different Locale,
    -* and CollationStrength settings will return different sort
    -* orders for the same set of strings. Locales have specific collation rules,
    -* and the way in which secondary and tertiary differences are taken into
    -* account, for example, will result in a different sorting order for same
    -* strings.
    -* </p>
    -* @see RuleBasedCollator
    -* @see CollationKey
    -* @see CollationElementIterator
    -* @see Locale
    -* @see Normalizer
    -* @version 2.0 11/15/01
    -*/
    -
    -class U_I18N_API Collator : public UObject {
    -public:
    -
    - // Collator public enums -----------------------------------------------
    -
    - /**
    - * Base letter represents a primary difference. Set comparison level to
    - * PRIMARY to ignore secondary and tertiary differences.<br>
    - * Use this to set the strength of a Collator object.<br>
    - * Example of primary difference, "abc" &lt; "abd"
    - *
    - * Diacritical differences on the same base letter represent a secondary
    - * difference. Set comparison level to SECONDARY to ignore tertiary
    - * differences. Use this to set the strength of a Collator object.<br>
    - * Example of secondary difference, "&auml;" >> "a".
    - *
    - * Uppercase and lowercase versions of the same character represents a
    - * tertiary difference. Set comparison level to TERTIARY to include all
    - * comparison differences. Use this to set the strength of a Collator
    - * object.<br>
    - * Example of tertiary difference, "abc" &lt;&lt;&lt; "ABC".
    - *
    - * Two characters are considered "identical" when they have the same unicode
    - * spellings.<br>
    - * For example, "&auml;" == "&auml;".
    - *
    - * UCollationStrength is also used to determine the strength of sort keys
    - * generated from Collator objects.
    - * @stable ICU 2.0
    - */
    - enum ECollationStrength
    - {
    - PRIMARY = 0,
    - SECONDARY = 1,
    - TERTIARY = 2,
    - QUATERNARY = 3,
    - IDENTICAL = 15
    - };
    -
    - /**
    - * LESS is returned if source string is compared to be less than target
    - * string in the compare() method.
    - * EQUAL is returned if source string is compared to be equal to target
    - * string in the compare() method.
    - * GREATER is returned if source string is compared to be greater than
    - * target string in the compare() method.
    - * @see Collator#compare
    - * @deprecated ICU 2.6. Use C enum UCollationResult defined in ucol.h
    - */
    - enum EComparisonResult
    - {
    - LESS = -1,
    - EQUAL = 0,
    - GREATER = 1
    - };
    -
    - // Collator public destructor -----------------------------------------
    -
    - /**
    - * Destructor
    - * @stable ICU 2.0
    - */
    - virtual ~Collator();
    -
    - // Collator public methods --------------------------------------------
    -
    - /**
    - * Returns true if "other" is the same as "this"
    - * @param other Collator object to be compared
    - * @return true if other is the same as this.
    - * @stable ICU 2.0
    - */
    - virtual UBool operator==(const Collator& other) const;
    -
    - /**
    - * Returns true if "other" is not the same as "this".
    - * @param other Collator object to be compared
    - * @return true if other is not the same as this.
    - * @stable ICU 2.0
    - */
    - virtual UBool operator!=(const Collator& other) const;
    -
    - /**
    - * Makes a shallow copy of the current object.
    - * @return a copy of this object
    - * @stable ICU 2.0
    - */
    - virtual Collator* clone(void) const = 0;
    -
    - /**
    - * Creates the Collator object for the current default locale.
    - * The default locale is determined by Locale::getDefault.
    - * The UErrorCode& err parameter is used to return status information to the user.
    - * To check whether the construction succeeded or not, you should check the
    - * value of U_SUCCESS(err). If you wish more detailed information, you can
    - * check for informational error results which still indicate success.
    - * U_USING_FALLBACK_ERROR indicates that a fall back locale was used. For
    - * example, 'de_CH' was requested, but nothing was found there, so 'de' was
    - * used. U_USING_DEFAULT_ERROR indicates that the default locale data was
    - * used; neither the requested locale nor any of its fall back locales
    - * could be found.
    - * The caller owns the returned object and is responsible for deleting it.
    - *
    - * @param err the error code status.
    - * @return the collation object of the default locale.(for example, en_US)
    - * @see Locale#getDefault
    - * @stable ICU 2.0
    - */
    - static Collator* U_EXPORT2 createInstance(UErrorCode& err);
    -
    - /**
    - * Gets the table-based collation object for the desired locale. The
    - * resource of the desired locale will be loaded by ResourceLoader.
    - * Locale::ENGLISH is the base collation table and all other languages are
    - * built on top of it with additional language-specific modifications.
    - * The UErrorCode& err parameter is used to return status information to the user.
    - * To check whether the construction succeeded or not, you should check
    - * the value of U_SUCCESS(err). If you wish more detailed information, you
    - * can check for informational error results which still indicate success.
    - * U_USING_FALLBACK_ERROR indicates that a fall back locale was used. For
    - * example, 'de_CH' was requested, but nothing was found there, so 'de' was
    - * used. U_USING_DEFAULT_ERROR indicates that the default locale data was
    - * used; neither the requested locale nor any of its fall back locales
    - * could be found.
    - * The caller owns the returned object and is responsible for deleting it.
    - * @param loc The locale ID for which to open a collator.
    - * @param err the error code status.
    - * @return the created table-based collation object based on the desired
    - * locale.
    - * @see Locale
    - * @see ResourceLoader
    - * @stable ICU 2.2
    - */
    - static Collator* U_EXPORT2 createInstance(const Locale& loc, UErrorCode& err);
    -
    -#ifdef U_USE_COLLATION_OBSOLETE_2_6
    - /**
    - * Create a Collator with a specific version.
    - * This is the same as createInstance(loc, err) except that getVersion() of
    - * the returned object is guaranteed to be the same as the version
    - * parameter.
    - * This is designed to be used to open the same collator for a given
    - * locale even when ICU is updated.
    - * The same locale and version guarantees the same sort keys and
    - * comparison results.
    - * <p>
    - * Note: this API will be removed in a future release. Use
    - * <tt>createInstance(const Locale&, UErrorCode&) instead.</tt></p>
    - *
    - * @param loc The locale ID for which to open a collator.
    - * @param version The requested collator version.
    - * @param err A reference to a UErrorCode,
    - * must not indicate a failure before calling this function.
    - * @return A pointer to a Collator, or 0 if an error occurred
    - * or a collator with the requested version is not available.
    - *
    - * @see getVersion
    - * @obsolete ICU 2.6
    - */
    - static Collator *createInstance(const Locale &loc, UVersionInfo version, UErrorCode &err);
    -#endif
    -
    - /**
    - * The comparison function compares the character data stored in two
    - * different strings. Returns information about whether a string is less
    - * than, greater than or equal to another string.
    - * @param source the source string to be compared with.
    - * @param target the string that is to be compared with the source string.
    - * @return Returns a byte value. GREATER if source is greater
    - * than target; EQUAL if source is equal to target; LESS if source is less
    - * than target
    - * @deprecated ICU 2.6 use the overload with UErrorCode &
    - */
    - virtual EComparisonResult compare(const UnicodeString& source,
    - const UnicodeString& target) const;
    -
    - /**
    - * The comparison function compares the character data stored in two
    - * different strings. Returns information about whether a string is less
    - * than, greater than or equal to another string.
    - * @param source the source string to be compared with.
    - * @param target the string that is to be compared with the source string.
    - * @param status possible error code
    - * @return Returns an enum value. UCOL_GREATER if source is greater
    - * than target; UCOL_EQUAL if source is equal to target; UCOL_LESS if source is less
    - * than target
    - * @stable ICU 2.6
    - */
    - virtual UCollationResult compare(const UnicodeString& source,
    - const UnicodeString& target,
    - UErrorCode &status) const = 0;
    -
    - /**
    - * Does the same thing as compare but limits the comparison to a specified
    - * length
    - * @param source the source string to be compared with.
    - * @param target the string that is to be compared with the source string.
    - * @param length the length the comparison is limited to
    - * @return Returns a byte value. GREATER if source (up to the specified
    - * length) is greater than target; EQUAL if source (up to specified
    - * length) is equal to target; LESS if source (up to the specified
    - * length) is less than target.
    - * @deprecated ICU 2.6 use the overload with UErrorCode &
    - */
    - virtual EComparisonResult compare(const UnicodeString& source,
    - const UnicodeString& target,
    - int32_t length) const;
    -
    - /**
    - * Does the same thing as compare but limits the comparison to a specified
    - * length
    - * @param source the source string to be compared with.
    - * @param target the string that is to be compared with the source string.
    - * @param length the length the comparison is limited to
    - * @param status possible error code
    - * @return Returns an enum value. UCOL_GREATER if source (up to the specified
    - * length) is greater than target; UCOL_EQUAL if source (up to specified
    - * length) is equal to target; UCOL_LESS if source (up to the specified
    - * length) is less than target.
    - * @stable ICU 2.6
    - */
    - virtual UCollationResult compare(const UnicodeString& source,
    - const UnicodeString& target,
    - int32_t length,
    - UErrorCode &status) const = 0;
    -
    - /**
    - * The comparison function compares the character data stored in two
    - * different string arrays. Returns information about whether a string array
    - * is less than, greater than or equal to another string array.
    - * @param source the source string array to be compared with.
    - * @param sourceLength the length of the source string array. If this value
    - * is equal to -1, the string array is null-terminated.
    - * @param target the string that is to be compared with the source string.
    - * @param targetLength the length of the target string array. If this value
    - * is equal to -1, the string array is null-terminated.
    - * @return Returns a byte value. GREATER if source is greater than target;
    - * EQUAL if source is equal to target; LESS if source is less than
    - * target
    - * @deprecated ICU 2.6 use the overload with UErrorCode &
    - */
    - virtual EComparisonResult compare(const UChar* source, int32_t sourceLength,
    - const UChar* target, int32_t targetLength)
    - const;
    -
    - /**
    - * The comparison function compares the character data stored in two
    - * different string arrays. Returns information about whether a string array
    - * is less than, greater than or equal to another string array.
    - * @param source the source string array to be compared with.
    - * @param sourceLength the length of the source string array. If this value
    - * is equal to -1, the string array is null-terminated.
    - * @param target the string that is to be compared with the source string.
    - * @param targetLength the length of the target string array. If this value
    - * is equal to -1, the string array is null-terminated.
    - * @param status possible error code
    - * @return Returns an enum value. UCOL_GREATER if source is greater
    - * than target; UCOL_EQUAL if source is equal to target; UCOL_LESS if source is less
    - * than target
    - * @stable ICU 2.6
    - */
    - virtual UCollationResult compare(const UChar* source, int32_t sourceLength,
    - const UChar* target, int32_t targetLength,
    - UErrorCode &status) const = 0;
    -
    - /**
    - * Transforms the string into a series of characters that can be compared
    - * with CollationKey::compareTo. It is not possible to restore the original
    - * string from the chars in the sort key. The generated sort key handles
    - * only a limited number of ignorable characters.
    - * <p>Use CollationKey::equals or CollationKey::compare to compare the
    - * generated sort keys.
    - * If the source string is null, a null collation key will be returned.
    - * @param source the source string to be transformed into a sort key.
    - * @param key the collation key to be filled in
    - * @param status the error code status.
    - * @return the collation key of the string based on the collation rules.
    - * @see CollationKey#compare
    - * @deprecated ICU 2.8 Use getSortKey(...) instead
    - */
    - virtual CollationKey& getCollationKey(const UnicodeString& source,
    - CollationKey& key,
    - UErrorCode& status) const = 0;
    -
    - /**
    - * Transforms the string into a series of characters that can be compared
    - * with CollationKey::compareTo. It is not possible to restore the original
    - * string from the chars in the sort key. The generated sort key handles
    - * only a limited number of ignorable characters.
    - * <p>Use CollationKey::equals or CollationKey::compare to compare the
    - * generated sort keys.
    - * <p>If the source string is null, a null collation key will be returned.
    - * @param source the source string to be transformed into a sort key.
    - * @param sourceLength length of the collation key
    - * @param key the collation key to be filled in
    - * @param status the error code status.
    - * @return the collation key of the string based on the collation rules.
    - * @see CollationKey#compare
    - * @deprecated ICU 2.8 Use getSortKey(...) instead
    - */
    - virtual CollationKey& getCollationKey(const UChar*source,
    - int32_t sourceLength,
    - CollationKey& key,
    - UErrorCode& status) const = 0;
    - /**
    - * Generates the hash code for the collation object
    - * @stable ICU 2.0
    - */
    - virtual int32_t hashCode(void) const = 0;
    -
    - /**
    - * Gets the locale of the Collator
    - *
    - * @param type can be either requested, valid or actual locale. For more
    - * information see the definition of ULocDataLocaleType in
    - * uloc.h
    - * @param status the error code status.
    - * @return locale where the collation data lives. If the collator
    - * was instantiated from rules, locale is empty.
    - * @deprecated ICU 2.8 This API is under consideration for revision
    - * in ICU 3.0.
    - */
    - virtual const Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const = 0;
    -
    - /**
    - * Convenience method for comparing two strings based on the collation rules.
    - * @param source the source string to be compared with.
    - * @param target the target string to be compared with.
    - * @return true if the first string is greater than the second one,
    - * according to the collation rules. false, otherwise.
    - * @see Collator#compare
    - * @stable ICU 2.0
    - */
    - UBool greater(const UnicodeString& source, const UnicodeString& target)
    - const;
    -
    - /**
    - * Convenience method for comparing two strings based on the collation rules.
    - * @param source the source string to be compared with.
    - * @param target the target string to be compared with.
    - * @return true if the first string is greater than or equal to the second
    - * one, according to the collation rules. false, otherwise.
    - * @see Collator#compare
    - * @stable ICU 2.0
    - */
    - UBool greaterOrEqual(const UnicodeString& source,
    - const UnicodeString& target) const;
    -
    - /**
    - * Convenience method for comparing two strings based on the collation rules.
    - * @param source the source string to be compared with.
    - * @param target the target string to be compared with.
    - * @return true if the strings are equal according to the collation rules.
    - * false, otherwise.
    - * @see Collator#compare
    - * @stable ICU 2.0
    - */
    - UBool equals(const UnicodeString& source, const UnicodeString& target) const;
    -
    - /**
    - * Determines the minimum strength that will be use in comparison or
    - * transformation.
    - * <p>E.g. with strength == SECONDARY, the tertiary difference is ignored
    - * <p>E.g. with strength == PRIMARY, the secondary and tertiary difference
    - * are ignored.
    - * @return the current comparison level.
    - * @see Collator#setStrength
    - * @deprecated ICU 2.6 Use getAttribute(UCOL_STRENGTH...) instead
    - */
    - virtual ECollationStrength getStrength(void) const = 0;
    -
    - /**
    - * Sets the minimum strength to be used in comparison or transformation.
    - * <p>Example of use:
    - * <pre>
    - * \code
    - * UErrorCode status = U_ZERO_ERROR;
    - * Collator*myCollation = Collator::createInstance(Locale::US, status);
    - * if (U_FAILURE(status)) return;
    - * myCollation->setStrength(Collator::PRIMARY);
    - * // result will be "abc" == "ABC"
    - * // tertiary differences will be ignored
    - * Collator::ComparisonResult result = myCollation->compare("abc", "ABC");
    - * \endcode
    - * </pre>
    - * @see Collator#getStrength
    - * @param newStrength the new comparison level.
    - * @deprecated ICU 2.6 Use setAttribute(UCOL_STRENGTH...) instead
    - */
    - virtual void setStrength(ECollationStrength newStrength) = 0;
    -
    - /**
    - * Get name of the object for the desired Locale, in the desired langauge
    - * @param objectLocale must be from getAvailableLocales
    - * @param displayLocale specifies the desired locale for output
    - * @param name the fill-in parameter of the return value
    - * @return display-able name of the object for the object locale in the
    - * desired language
    - * @stable ICU 2.0
    - */
    - static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
    - const Locale& displayLocale,
    - UnicodeString& name);
    -
    - /**
    - * Get name of the object for the desired Locale, in the langauge of the
    - * default locale.
    - * @param objectLocale must be from getAvailableLocales
    - * @param name the fill-in parameter of the return value
    - * @return name of the object for the desired locale in the default language
    - * @stable ICU 2.0
    - */
    - static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
    - UnicodeString& name);
    -
    - /**
    - * Get the set of Locales for which Collations are installed.
    - *
    - * <p>Note this does not include locales supported by registered collators.
    - * If collators might have been registered, use the overload of getAvailableLocales
    - * that returns a StringEnumeration.</p>
    - *
    - * @param count the output parameter of number of elements in the locale list
    - * @return the list of available locales for which collations are installed
    - * @stable ICU 2.0
    - */
    - static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
    -
    - /**
    - * Return a StringEnumeration over the locales available at the time of the call,
    - * including registered locales. If a severe error occurs (such as out of memory
    - * condition) this will return null. If there is no locale data, an empty enumeration
    - * will be returned.
    - * @return a StringEnumeration over the locales available at the time of the call
    - * @stable ICU 2.6
    - */
    - static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
    -
    - /**
    - * Create a string enumerator of all possible keywords that are relevant to
    - * collation. At this point, the only recognized keyword for this
    - * service is "collation".
    - * @param status input-output error code
    - * @return a string enumeration over locale strings. The caller is
    - * responsible for closing the result.
    - * @stable ICU 3.0
    - */
    - static StringEnumeration* U_EXPORT2 getKeywords(UErrorCode& status);
    -
    - /**
    - * Given a keyword, create a string enumeration of all values
    - * for that keyword that are currently in use.
    - * @param keyword a particular keyword as enumerated by
    - * ucol_getKeywords. If any other keyword is passed in, status is set
    - * to U_ILLEGAL_ARGUMENT_ERROR.
    - * @param status input-output error code
    - * @return a string enumeration over collation keyword values, or NULL
    - * upon error. The caller is responsible for deleting the result.
    - * @stable ICU 3.0
    - */
    - static StringEnumeration* U_EXPORT2 getKeywordValues(const char *keyword, UErrorCode& status);
    -
    - /**
    - * Return the functionally equivalent locale for the given
    - * requested locale, with respect to given keyword, for the
    - * collation service. If two locales return the same result, then
    - * collators instantiated for these locales will behave
    - * equivalently. The converse is not always true; two collators
    - * may in fact be equivalent, but return different results, due to
    - * internal details. The return result has no other meaning than
    - * that stated above, and implies nothing as to the relationship
    - * between the two locales. This is intended for use by
    - * applications who wish to cache collators, or otherwise reuse
    - * collators when possible. The functional equivalent may change
    - * over time. For more information, please see the <a
    - * href="http://icu-project.org/userguide/locale.html#services">
    - * Locales and Services</a> section of the ICU User Guide.
    - * @param keyword a particular keyword as enumerated by
    - * ucol_getKeywords.
    - * @param locale the requested locale
    - * @param isAvailable reference to a fillin parameter that
    - * indicates whether the requested locale was 'available' to the
    - * collation service. A locale is defined as 'available' if it
    - * physically exists within the collation locale data.
    - * @param status reference to input-output error code
    - * @return the functionally equivalent collation locale, or the root
    - * locale upon error.
    - * @stable ICU 3.0
    - */
    - static Locale U_EXPORT2 getFunctionalEquivalent(const char* keyword, const Locale& locale,
    - UBool& isAvailable, UErrorCode& status);
    -
    -#if !UCONFIG_NO_SERVICE
    - /**
    - * Register a new Collator. The collator will be adopted.
    - * @param toAdopt the Collator instance to be adopted
    - * @param locale the locale with which the collator will be associated
    - * @param status the in/out status code, no special meanings are assigned
    - * @return a registry key that can be used to unregister this collator
    - * @stable ICU 2.6
    - */
    - static URegistryKey U_EXPORT2 registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status);
    -
    - /**
    - * Register a new CollatorFactory. The factory will be adopted.
    - * @param toAdopt the CollatorFactory instance to be adopted
    - * @param status the in/out status code, no special meanings are assigned
    - * @return a registry key that can be used to unregister this collator
    - * @stable ICU 2.6
    - */
    - static URegistryKey U_EXPORT2 registerFactory(CollatorFactory* toAdopt, UErrorCode& status);
    -
    - /**
    - * Unregister a previously-registered Collator or CollatorFactory
    - * using the key returned from the register call. Key becomes
    - * invalid after a successful call and should not be used again.
    - * The object corresponding to the key will be deleted.
    - * @param key the registry key returned by a previous call to registerInstance
    - * @param status the in/out status code, no special meanings are assigned
    - * @return TRUE if the collator for the key was successfully unregistered
    - * @stable ICU 2.6
    - */
    - static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
    -#endif /* UCONFIG_NO_SERVICE */
    -
    - /**
    - * Gets the version information for a Collator.
    - * @param info the version # information, the result will be filled in
    - * @stable ICU 2.0
    - */
    - virtual void getVersion(UVersionInfo info) const = 0;
    -
    - /**
    - * Returns a unique class ID POLYMORPHICALLY. Pure virtual method.
    - * This method is to implement a simple version of RTTI, since not all C++
    - * compilers support genuine RTTI. Polymorphic operator==() and clone()
    - * methods call this method.
    - * @return The class ID for this object. All objects of a given class have
    - * the same class ID. Objects of other classes have different class
    - * IDs.
    - * @stable ICU 2.0
    - */
    - virtual UClassID getDynamicClassID(void) const = 0;
    -
    - /**
    - * Universal attribute setter
    - * @param attr attribute type
    - * @param value attribute value
    - * @param status to indicate whether the operation went on smoothly or
    - * there were errors
    - * @stable ICU 2.2
    - */
    - virtual void setAttribute(UColAttribute attr, UColAttributeValue value,
    - UErrorCode &status) = 0;
    -
    - /**
    - * Universal attribute getter
    - * @param attr attribute type
    - * @param status to indicate whether the operation went on smoothly or
    - * there were errors
    - * @return attribute value
    - * @stable ICU 2.2
    - */
    - virtual UColAttributeValue getAttribute(UColAttribute attr,
    - UErrorCode &status) = 0;
    -
    - /**
    - * Sets the variable top to a collation element value of a string supplied.
    - * @param varTop one or more (if contraction) UChars to which the variable top should be set
    - * @param len length of variable top string. If -1 it is considered to be zero terminated.
    - * @param status error code. If error code is set, the return value is undefined. Errors set by this function are: <br>
    - * U_CE_NOT_FOUND_ERROR if more than one character was passed and there is no such a contraction<br>
    - * U_PRIMARY_TOO_LONG_ERROR if the primary for the variable top has more than two bytes
    - * @return a 32 bit value containing the value of the variable top in upper 16 bits. Lower 16 bits are undefined
    - * @stable ICU 2.0
    - */
    - virtual uint32_t setVariableTop(const UChar *varTop, int32_t len, UErrorCode &status) = 0;
    -
    - /**
    - * Sets the variable top to a collation element value of a string supplied.
    - * @param varTop an UnicodeString size 1 or more (if contraction) of UChars to which the variable top should be set
    - * @param status error code. If error code is set, the return value is undefined. Errors set by this function are: <br>
    - * U_CE_NOT_FOUND_ERROR if more than one character was passed and there is no such a contraction<br>
    - * U_PRIMARY_TOO_LONG_ERROR if the primary for the variable top has more than two bytes
    - * @return a 32 bit value containing the value of the variable top in upper 16 bits. Lower 16 bits are undefined
    - * @stable ICU 2.0
    - */
    - virtual uint32_t setVariableTop(const UnicodeString varTop, UErrorCode &status) = 0;
    -
    - /**
    - * Sets the variable top to a collation element value supplied. Variable top is set to the upper 16 bits.
    - * Lower 16 bits are ignored.
    - * @param varTop CE value, as returned by setVariableTop or ucol)getVariableTop
    - * @param status error code (not changed by function)
    - * @stable ICU 2.0
    - */
    - virtual void setVariableTop(const uint32_t varTop, UErrorCode &status) = 0;
    -
    - /**
    - * Gets the variable top value of a Collator.
    - * Lower 16 bits are undefined and should be ignored.
    - * @param status error code (not changed by function). If error code is set, the return value is undefined.
    - * @stable ICU 2.0
    - */
    - virtual uint32_t getVariableTop(UErrorCode &status) const = 0;
    -
    - /**
    - * Get an UnicodeSet that contains all the characters and sequences
    - * tailored in this collator.
    - * @param status error code of the operation
    - * @return a pointer to a UnicodeSet object containing all the
    - * code points and sequences that may sort differently than
    - * in the UCA. The object must be disposed of by using delete
    - * @stable ICU 2.4
    - */
    - virtual UnicodeSet *getTailoredSet(UErrorCode &status) const;
    -
    -
    - /**
    - * Thread safe cloning operation
    - * @return pointer to the new clone, user should remove it.
    - * @stable ICU 2.2
    - */
    - virtual Collator* safeClone(void) = 0;
    -
    - /**
    - * Get the sort key as an array of bytes from an UnicodeString.
    - * Sort key byte arrays are zero-terminated and can be compared using
    - * strcmp().
    - * @param source string to be processed.
    - * @param result buffer to store result in. If NULL, number of bytes needed
    - * will be returned.
    - * @param resultLength length of the result buffer. If if not enough the
    - * buffer will be filled to capacity.
    - * @return Number of bytes needed for storing the sort key
    - * @stable ICU 2.2
    - */
    - virtual int32_t getSortKey(const UnicodeString& source,
    - uint8_t* result,
    - int32_t resultLength) const = 0;
    -
    - /**
    - * Get the sort key as an array of bytes from an UChar buffer.
    - * Sort key byte arrays are zero-terminated and can be compared using
    - * strcmp().
    - * @param source string to be processed.
    - * @param sourceLength length of string to be processed.
    - * If -1, the string is 0 terminated and length will be decided by the
    - * function.
    - * @param result buffer to store result in. If NULL, number of bytes needed
    - * will be returned.
    - * @param resultLength length of the result buffer. If if not enough the
    - * buffer will be filled to capacity.
    - * @return Number of bytes needed for storing the sort key
    - * @stable ICU 2.2
    - */
    - virtual int32_t getSortKey(const UChar*source, int32_t sourceLength,
    - uint8_t*result, int32_t resultLength) const = 0;
    -
    - /**
    - * Produce a bound for a given sortkey and a number of levels.
    - * Return value is always the number of bytes needed, regardless of
    - * whether the result buffer was big enough or even valid.<br>
    - * Resulting bounds can be used to produce a range of strings that are
    - * between upper and lower bounds. For example, if bounds are produced
    - * for a sortkey of string "smith", strings between upper and lower
    - * bounds with one level would include "Smith", "SMITH", "sMiTh".<br>
    - * There are two upper bounds that can be produced. If UCOL_BOUND_UPPER
    - * is produced, strings matched would be as above. However, if bound
    - * produced using UCOL_BOUND_UPPER_LONG is used, the above example will
    - * also match "Smithsonian" and similar.<br>
    - * For more on usage, see example in cintltst/capitst.c in procedure
    - * TestBounds.
    - * Sort keys may be compared using <TT>strcmp</TT>.
    - * @param source The source sortkey.
    - * @param sourceLength The length of source, or -1 if null-terminated.
    - * (If an unmodified sortkey is passed, it is always null
    - * terminated).
    - * @param boundType Type of bound required. It can be UCOL_BOUND_LOWER, which
    - * produces a lower inclusive bound, UCOL_BOUND_UPPER, that
    - * produces upper bound that matches strings of the same length
    - * or UCOL_BOUND_UPPER_LONG that matches strings that have the
    - * same starting substring as the source string.
    - * @param noOfLevels Number of levels required in the resulting bound (for most
    - * uses, the recommended value is 1). See users guide for
    - * explanation on number of levels a sortkey can have.
    - * @param result A pointer to a buffer to receive the resulting sortkey.
    - * @param resultLength The maximum size of result.
    - * @param status Used for returning error code if something went wrong. If the
    - * number of levels requested is higher than the number of levels
    - * in the source key, a warning (U_SORT_KEY_TOO_SHORT_WARNING) is
    - * issued.
    - * @return The size needed to fully store the bound.
    - * @see ucol_keyHashCode
    - * @stable ICU 2.1
    - */
    - static int32_t U_EXPORT2 getBound(const uint8_t *source,
    - int32_t sourceLength,
    - UColBoundMode boundType,
    - uint32_t noOfLevels,
    - uint8_t *result,
    - int32_t resultLength,
    - UErrorCode &status);
    -
    -
    -protected:
    -
    - // Collator protected constructors -------------------------------------
    -
    - /**
    - * Default constructor.
    - * Constructor is different from the old default Collator constructor.
    - * The task for determing the default collation strength and normalization
    - * mode is left to the child class.
    - * @stable ICU 2.0
    - */
    - Collator();
    -
    - /**
    - * Constructor.
    - * Empty constructor, does not handle the arguments.
    - * This constructor is done for backward compatibility with 1.7 and 1.8.
    - * The task for handling the argument collation strength and normalization
    - * mode is left to the child class.
    - * @param collationStrength collation strength
    - * @param decompositionMode
    - * @deprecated ICU 2.4. Subclasses should use the default constructor
    - * instead and handle the strength and normalization mode themselves.
    - */
    - Collator(UCollationStrength collationStrength,
    - UNormalizationMode decompositionMode);
    -
    - /**
    - * Copy constructor.
    - * @param other Collator object to be copied from
    - * @stable ICU 2.0
    - */
    - Collator(const Collator& other);
    -
    - // Collator protected methods -----------------------------------------
    -
    -
    - /**
    - * Used internally by registraton to define the requested and valid locales.
    - * @param requestedLocale the requsted locale
    - * @param validLocale the valid locale
    - * @internal
    - */
    - virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale, const Locale& actualLocale);
    -
    -public:
    -#if !UCONFIG_NO_SERVICE
    - /**
    - * used only by ucol_open, not for public use
    - * @internal
    - */
    - static UCollator* createUCollator(const char* loc, UErrorCode* status);
    -#endif
    -private:
    - /**
    - * Assignment operator. Private for now.
    - * @internal
    - */
    - Collator& operator=(const Collator& other);
    -
    - friend class CFactory;
    - friend class SimpleCFactory;
    - friend class ICUCollatorFactory;
    - friend class ICUCollatorService;
    - static Collator* makeInstance(const Locale& desiredLocale,
    - UErrorCode& status);
    -
    - // Collator private data members ---------------------------------------
    -
    - /*
    - synwee : removed as attributes to be handled by child class
    - UCollationStrength strength;
    - Normalizer::EMode decmp;
    - */
    - /* This is useless information */
    -/* static const UVersionInfo fVersion;*/
    -};
    -
    -#if !UCONFIG_NO_SERVICE
    -/**
    - * A factory, used with registerFactory, the creates multiple collators and provides
    - * display names for them. A factory supports some number of locales-- these are the
    - * locales for which it can create collators. The factory can be visible, in which
    - * case the supported locales will be enumerated by getAvailableLocales, or invisible,
    - * in which they are not. Invisible locales are still supported, they are just not
    - * listed by getAvailableLocales.
    - * <p>
    - * If standard locale display names are sufficient, Collator instances can
    - * be registered using registerInstance instead.</p>
    - * <p>
    - * Note: if the collators are to be used from C APIs, they must be instances
    - * of RuleBasedCollator.</p>
    - *
    - * @stable ICU 2.6
    - */
    -class U_I18N_API CollatorFactory : public UObject {
    -public:
    -
    - /**
    - * Destructor
    - * @stable ICU 3.0
    - */
    - virtual ~CollatorFactory();
    -
    - /**
    - * Return true if this factory is visible. Default is true.
    - * If not visible, the locales supported by this factory will not
    - * be listed by getAvailableLocales.
    - * @return true if the factory is visible.
    - * @stable ICU 2.6
    - */
    - virtual UBool visible(void) const;
    -
    - /**
    - * Return a collator for the provided locale. If the locale
    - * is not supported, return NULL.
    - * @param loc the locale identifying the collator to be created.
    - * @return a new collator if the locale is supported, otherwise NULL.
    - * @stable ICU 2.6
    - */
    - virtual Collator* createCollator(const Locale& loc) = 0;
    -
    - /**
    - * Return the name of the collator for the objectLocale, localized for the displayLocale.
    - * If objectLocale is not supported, or the factory is not visible, set the result string
    - * to bogus.
    - * @param objectLocale the locale identifying the collator
    - * @param displayLocale the locale for which the display name of the collator should be localized
    - * @param result an output parameter for the display name, set to bogus if not supported.
    - * @return the display name
    - * @stable ICU 2.6
    - */
    - virtual UnicodeString& getDisplayName(const Locale& objectLocale,
    - const Locale& displayLocale,
    - UnicodeString& result);
    -
    - /**
    - * Return an array of all the locale names directly supported by this factory.
    - * The number of names is returned in count. This array is owned by the factory.
    - * Its contents must never change.
    - * @param count output parameter for the number of locales supported by the factory
    - * @param status the in/out error code
    - * @return a pointer to an array of count UnicodeStrings.
    - * @stable ICU 2.6
    - */
    - virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0;
    -};
    -#endif /* UCONFIG_NO_SERVICE */
    -
    -// Collator inline methods -----------------------------------------------
    -
    -U_NAMESPACE_END
    -
    -#endif /* #if !UCONFIG_NO_COLLATION */
    -
    -#endif

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/curramt.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/curramt.h b/apps/couch_collate/platform/osx/icu/unicode/curramt.h
    deleted file mode 100644
    index c33e6f1..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/curramt.h
    +++ /dev/null
    @@ -1,130 +0,0 @@
    -/*
    -**********************************************************************
    -* Copyright (c) 2004-2006, International Business Machines
    -* Corporation and others. All Rights Reserved.
    -**********************************************************************
    -* Author: Alan Liu
    -* Created: April 26, 2004
    -* Since: ICU 3.0
    -**********************************************************************
    -*/
    -#ifndef __CURRENCYAMOUNT_H__
    -#define __CURRENCYAMOUNT_H__
    -
    -#include "unicode/utypes.h"
    -
    -#if !UCONFIG_NO_FORMATTING
    -
    -#include "unicode/measure.h"
    -#include "unicode/currunit.h"
    -
    -/**
    - * \file
    - * \brief C++ API: Currency Amount Object.
    - */
    -
    -U_NAMESPACE_BEGIN
    -
    -/**
    - *
    - * A currency together with a numeric amount, such as 200 USD.
    - *
    - * @author Alan Liu
    - * @stable ICU 3.0
    - */
    -class U_I18N_API CurrencyAmount: public Measure {
    - public:
    - /**
    - * Construct an object with the given numeric amount and the given
    - * ISO currency code.
    - * @param amount a numeric object; amount.isNumeric() must be TRUE
    - * @param isoCode the 3-letter ISO 4217 currency code; must not be
    - * NULL and must have length 3
    - * @param ec input-output error code. If the amount or the isoCode
    - * is invalid, then this will be set to a failing value.
    - * @stable ICU 3.0
    - */
    - CurrencyAmount(const Formattable& amount, const UChar* isoCode,
    - UErrorCode &ec);
    -
    - /**
    - * Construct an object with the given numeric amount and the given
    - * ISO currency code.
    - * @param amount the amount of the given currency
    - * @param isoCode the 3-letter ISO 4217 currency code; must not be
    - * NULL and must have length 3
    - * @param ec input-output error code. If the isoCode is invalid,
    - * then this will be set to a failing value.
    - * @stable ICU 3.0
    - */
    - CurrencyAmount(double amount, const UChar* isoCode,
    - UErrorCode &ec);
    -
    - /**
    - * Copy constructor
    - * @stable ICU 3.0
    - */
    - CurrencyAmount(const CurrencyAmount& other);
    -
    - /**
    - * Assignment operator
    - * @stable ICU 3.0
    - */
    - CurrencyAmount& operator=(const CurrencyAmount& other);
    -
    - /**
    - * Return a polymorphic clone of this object. The result will
    - * have the same class as returned by getDynamicClassID().
    - * @stable ICU 3.0
    - */
    - virtual UObject* clone() const;
    -
    - /**
    - * Destructor
    - * @stable ICU 3.0
    - */
    - virtual ~CurrencyAmount();
    -
    - /**
    - * Returns a unique class ID for this object POLYMORPHICALLY.
    - * This method implements a simple form of RTTI used by ICU.
    - * @return The class ID for this object. All objects of a given
    - * class have the same class ID. Objects of other classes have
    - * different class IDs.
    - * @stable ICU 3.0
    - */
    - virtual UClassID getDynamicClassID() const;
    -
    - /**
    - * Returns the class ID for this class. This is used to compare to
    - * the return value of getDynamicClassID().
    - * @return The class ID for all objects of this class.
    - * @stable ICU 3.0
    - */
    - static UClassID U_EXPORT2 getStaticClassID();
    -
    - /**
    - * Return the currency unit object of this object.
    - * @stable ICU 3.0
    - */
    - inline const CurrencyUnit& getCurrency() const;
    -
    - /**
    - * Return the ISO currency code of this object.
    - * @stable ICU 3.0
    - */
    - inline const UChar* getISOCurrency() const;
    -};
    -
    -inline const CurrencyUnit& CurrencyAmount::getCurrency() const {
    - return (const CurrencyUnit&) getUnit();
    -}
    -
    -inline const UChar* CurrencyAmount::getISOCurrency() const {
    - return getCurrency().getISOCurrency();
    -}
    -
    -U_NAMESPACE_END
    -
    -#endif // !UCONFIG_NO_FORMATTING
    -#endif // __CURRENCYAMOUNT_H__

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/currunit.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/currunit.h b/apps/couch_collate/platform/osx/icu/unicode/currunit.h
    deleted file mode 100644
    index ecd9411..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/currunit.h
    +++ /dev/null
    @@ -1,117 +0,0 @@
    -/*
    -**********************************************************************
    -* Copyright (c) 2004-2006, International Business Machines
    -* Corporation and others. All Rights Reserved.
    -**********************************************************************
    -* Author: Alan Liu
    -* Created: April 26, 2004
    -* Since: ICU 3.0
    -**********************************************************************
    -*/
    -#ifndef __CURRENCYUNIT_H__
    -#define __CURRENCYUNIT_H__
    -
    -#include "unicode/utypes.h"
    -
    -#if !UCONFIG_NO_FORMATTING
    -
    -#include "unicode/measunit.h"
    -
    -/**
    - * \file
    - * \brief C++ API: Currency Unit Information.
    - */
    -
    -U_NAMESPACE_BEGIN
    -
    -/**
    - * A unit of currency, such as USD (U.S. dollars) or JPY (Japanese
    - * yen). This class is a thin wrapper over a UChar string that
    - * subclasses MeasureUnit, for use with Measure and MeasureFormat.
    - *
    - * @author Alan Liu
    - * @stable ICU 3.0
    - */
    -class U_I18N_API CurrencyUnit: public MeasureUnit {
    - public:
    - /**
    - * Construct an object with the given ISO currency code.
    - * @param isoCode the 3-letter ISO 4217 currency code; must not be
    - * NULL and must have length 3
    - * @param ec input-output error code. If the isoCode is invalid,
    - * then this will be set to a failing value.
    - * @stable ICU 3.0
    - */
    - CurrencyUnit(const UChar* isoCode, UErrorCode &ec);
    -
    - /**
    - * Copy constructor
    - * @stable ICU 3.0
    - */
    - CurrencyUnit(const CurrencyUnit& other);
    -
    - /**
    - * Assignment operator
    - * @stable ICU 3.0
    - */
    - CurrencyUnit& operator=(const CurrencyUnit& other);
    -
    - /**
    - * Return a polymorphic clone of this object. The result will
    - * have the same class as returned by getDynamicClassID().
    - * @stable ICU 3.0
    - */
    - virtual UObject* clone() const;
    -
    - /**
    - * Destructor
    - * @stable ICU 3.0
    - */
    - virtual ~CurrencyUnit();
    -
    - /**
    - * Equality operator. Return true if this object is equal
    - * to the given object.
    - * @stable ICU 3.0
    - */
    - UBool operator==(const UObject& other) const;
    -
    - /**
    - * Returns a unique class ID for this object POLYMORPHICALLY.
    - * This method implements a simple form of RTTI used by ICU.
    - * @return The class ID for this object. All objects of a given
    - * class have the same class ID. Objects of other classes have
    - * different class IDs.
    - * @stable ICU 3.0
    - */
    - virtual UClassID getDynamicClassID() const;
    -
    - /**
    - * Returns the class ID for this class. This is used to compare to
    - * the return value of getDynamicClassID().
    - * @return The class ID for all objects of this class.
    - * @stable ICU 3.0
    - */
    - static UClassID U_EXPORT2 getStaticClassID();
    -
    - /**
    - * Return the ISO currency code of this object.
    - * @stable ICU 3.0
    - */
    - inline const UChar* getISOCurrency() const;
    -
    - private:
    - /**
    - * The ISO 4217 code of this object.
    - */
    - UChar isoCode[4];
    -};
    -
    -inline const UChar* CurrencyUnit::getISOCurrency() const {
    - return isoCode;
    -}
    -
    -U_NAMESPACE_END
    -
    -#endif // !UCONFIG_NO_FORMATTING
    -#endif // __CURRENCYUNIT_H__

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/datefmt.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/datefmt.h b/apps/couch_collate/platform/osx/icu/unicode/datefmt.h
    deleted file mode 100644
    index 7aeab2c..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/datefmt.h
    +++ /dev/null
    @@ -1,700 +0,0 @@
    -/*
    - ********************************************************************************
    - * Copyright (C) 1997-2008, International Business Machines
    - * Corporation and others. All Rights Reserved.
    - ********************************************************************************
    - *
    - * File DATEFMT.H
    - *
    - * Modification History:
    - *
    - * Date Name Description
    - * 02/19/97 aliu Converted from java.
    - * 04/01/97 aliu Added support for centuries.
    - * 07/23/98 stephen JDK 1.2 sync
    - * 11/15/99 weiv Added support for week of year/day of week formatting
    - ********************************************************************************
    - */
    -
    -#ifndef DATEFMT_H
    -#define DATEFMT_H
    -
    -#include "unicode/utypes.h"
    -
    -#if !UCONFIG_NO_FORMATTING
    -
    -#include "unicode/udat.h"
    -#include "unicode/calendar.h"
    -#include "unicode/numfmt.h"
    -#include "unicode/format.h"
    -#include "unicode/locid.h"
    -
    -/**
    - * \file
    - * \brief C++ API: Abstract class for converting dates.
    - */
    -
    -U_NAMESPACE_BEGIN
    -
    -class TimeZone;
    -
    -/**
    - * DateFormat is an abstract class for a family of classes that convert dates and
    - * times from their internal representations to textual form and back again in a
    - * language-independent manner. Converting from the internal representation (milliseconds
    - * since midnight, January 1, 1970) to text is known as "formatting," and converting
    - * from text to millis is known as "parsing." We currently define only one concrete
    - * subclass of DateFormat: SimpleDateFormat, which can handle pretty much all normal
    - * date formatting and parsing actions.
    - * <P>
    - * DateFormat helps you to format and parse dates for any locale. Your code can
    - * be completely independent of the locale conventions for months, days of the
    - * week, or even the calendar format: lunar vs. solar.
    - * <P>
    - * To format a date for the current Locale, use one of the static factory
    - * methods:
    - * <pre>
    - * \code
    - * DateFormat* dfmt = DateFormat::createDateInstance();
    - * UDate myDate = Calendar::getNow();
    - * UnicodeString myString;
    - * myString = dfmt->format( myDate, myString );
    - * \endcode
    - * </pre>
    - * If you are formatting multiple numbers, it is more efficient to get the
    - * format and use it multiple times so that the system doesn't have to fetch the
    - * information about the local language and country conventions multiple times.
    - * <pre>
    - * \code
    - * DateFormat* df = DateFormat::createDateInstance();
    - * UnicodeString myString;
    - * UDate myDateArr[] = { 0.0, 100000000.0, 2000000000.0 }; // test values
    - * for (int32_t i = 0; i < 3; ++i) {
    - * myString.remove();
    - * cout << df->format( myDateArr[i], myString ) << endl;
    - * }
    - * \endcode
    - * </pre>
    - * To get specific fields of a date, you can use UFieldPosition to
    - * get specific fields.
    - * <pre>
    - * \code
    - * DateFormat* dfmt = DateFormat::createDateInstance();
    - * FieldPosition pos(DateFormat::YEAR_FIELD);
    - * UnicodeString myString;
    - * myString = dfmt->format( myDate, myString );
    - * cout << myString << endl;
    - * cout << pos.getBeginIndex() << "," << pos. getEndIndex() << endl;
    - * \endcode
    - * </pre>
    - * To format a date for a different Locale, specify it in the call to
    - * createDateInstance().
    - * <pre>
    - * \code
    - * DateFormat* df =
    - * DateFormat::createDateInstance( DateFormat::SHORT, Locale::getFrance());
    - * \endcode
    - * </pre>
    - * You can use a DateFormat to parse also.
    - * <pre>
    - * \code
    - * UErrorCode status = U_ZERO_ERROR;
    - * UDate myDate = df->parse(myString, status);
    - * \endcode
    - * </pre>
    - * Use createDateInstance() to produce the normal date format for that country.
    - * There are other static factory methods available. Use createTimeInstance()
    - * to produce the normal time format for that country. Use createDateTimeInstance()
    - * to produce a DateFormat that formats both date and time. You can pass in
    - * different options to these factory methods to control the length of the
    - * result; from SHORT to MEDIUM to LONG to FULL. The exact result depends on the
    - * locale, but generally:
    - * <ul type=round>
    - * <li> SHORT is completely numeric, such as 12/13/52 or 3:30pm
    - * <li> MEDIUM is longer, such as Jan 12, 1952
    - * <li> LONG is longer, such as January 12, 1952 or 3:30:32pm
    - * <li> FULL is pretty completely specified, such as
    - * Tuesday, April 12, 1952 AD or 3:30:42pm PST.
    - * </ul>
    - * You can also set the time zone on the format if you wish. If you want even
    - * more control over the format or parsing, (or want to give your users more
    - * control), you can try casting the DateFormat you get from the factory methods
    - * to a SimpleDateFormat. This will work for the majority of countries; just
    - * remember to chck getDynamicClassID() before carrying out the cast.
    - * <P>
    - * You can also use forms of the parse and format methods with ParsePosition and
    - * FieldPosition to allow you to
    - * <ul type=round>
    - * <li> Progressively parse through pieces of a string.
    - * <li> Align any particular field, or find out where it is for selection
    - * on the screen.
    - * </ul>
    - *
    - * <p><em>User subclasses are not supported.</em> While clients may write
    - * subclasses, such code will not necessarily work and will not be
    - * guaranteed to work stably from release to release.
    - */
    -class U_I18N_API DateFormat : public Format {
    -public:
    -
    - /**
    - * Constants for various style patterns. These reflect the order of items in
    - * the DateTimePatterns resource. There are 4 time patterns, 4 date patterns,
    - * and then the date-time pattern. Each block of 4 values in the resource occurs
    - * in the order full, long, medium, short.
    - * @stable ICU 2.4
    - */
    - enum EStyle
    - {
    - kNone = -1,
    -
    - kFull = 0,
    - kLong = 1,
    - kMedium = 2,
    - kShort = 3,
    -
    - kDateOffset = kShort + 1,
    - // kFull + kDateOffset = 4
    - // kLong + kDateOffset = 5
    - // kMedium + kDateOffset = 6
    - // kShort + kDateOffset = 7
    -
    - kDateTime = 8,
    -
    -
    - // relative dates
    - kRelative = (1 << 7),
    -
    - kFullRelative = (kFull | kRelative),
    -
    - kLongRelative = kLong | kRelative,
    -
    - kMediumRelative = kMedium | kRelative,
    -
    - kShortRelative = kShort | kRelative,
    -
    -
    - kDefault = kMedium,
    -
    -
    -
    - /**
    - * These constants are provided for backwards compatibility only.
    - * Please use the C++ style constants defined above.
    - */
    - FULL = kFull,
    - LONG = kLong,
    - MEDIUM = kMedium,
    - SHORT = kShort,
    - DEFAULT = kDefault,
    - DATE_OFFSET = kDateOffset,
    - NONE = kNone,
    - DATE_TIME = kDateTime
    - };
    -
    - /**
    - * Destructor.
    - * @stable ICU 2.0
    - */
    - virtual ~DateFormat();
    -
    - /**
    - * Equality operator. Returns true if the two formats have the same behavior.
    - * @stable ICU 2.0
    - */
    - virtual UBool operator==(const Format&) const;
    -
    - /**
    - * Format an object to produce a string. This method handles Formattable
    - * objects with a UDate type. If a the Formattable object type is not a Date,
    - * then it returns a failing UErrorCode.
    - *
    - * @param obj The object to format. Must be a Date.
    - * @param appendTo Output parameter to receive result.
    - * Result is appended to existing contents.
    - * @param pos On input: an alignment field, if desired.
    - * On output: the offsets of the alignment field.
    - * @param status Output param filled with success/failure status.
    - * @return Reference to 'appendTo' parameter.
    - * @stable ICU 2.0
    - */
    - virtual UnicodeString& format(const Formattable& obj,
    - UnicodeString& appendTo,
    - FieldPosition& pos,
    - UErrorCode& status) const;
    -
    - /**
    - * Formats a date into a date/time string. This is an abstract method which
    - * concrete subclasses must implement.
    - * <P>
    - * On input, the FieldPosition parameter may have its "field" member filled with
    - * an enum value specifying a field. On output, the FieldPosition will be filled
    - * in with the text offsets for that field.
    - * <P> For example, given a time text
    - * "1996.07.10 AD at 15:08:56 PDT", if the given fieldPosition.field is
    - * UDAT_YEAR_FIELD, the offsets fieldPosition.beginIndex and
    - * statfieldPositionus.getEndIndex will be set to 0 and 4, respectively.
    - * <P> Notice
    - * that if the same time field appears more than once in a pattern, the status will
    - * be set for the first occurence of that time field. For instance,
    - * formatting a UDate to the time string "1 PM PDT (Pacific Daylight Time)"
    - * using the pattern "h a z (zzzz)" and the alignment field
    - * DateFormat::TIMEZONE_FIELD, the offsets fieldPosition.beginIndex and
    - * fieldPosition.getEndIndex will be set to 5 and 8, respectively, for the first
    - * occurence of the timezone pattern character 'z'.
    - *
    - * @param cal Calendar set to the date and time to be formatted
    - * into a date/time string.
    - * @param appendTo Output parameter to receive result.
    - * Result is appended to existing contents.
    - * @param fieldPosition On input: an alignment field, if desired (see examples above)
    - * On output: the offsets of the alignment field (see examples above)
    - * @return Reference to 'appendTo' parameter.
    - * @stable ICU 2.1
    - */
    - virtual UnicodeString& format( Calendar& cal,
    - UnicodeString& appendTo,
    - FieldPosition& fieldPosition) const = 0;
    -
    - /**
    - * Formats a UDate into a date/time string.
    - * <P>
    - * On input, the FieldPosition parameter may have its "field" member filled with
    - * an enum value specifying a field. On output, the FieldPosition will be filled
    - * in with the text offsets for that field.
    - * <P> For example, given a time text
    - * "1996.07.10 AD at 15:08:56 PDT", if the given fieldPosition.field is
    - * UDAT_YEAR_FIELD, the offsets fieldPosition.beginIndex and
    - * statfieldPositionus.getEndIndex will be set to 0 and 4, respectively.
    - * <P> Notice
    - * that if the same time field appears more than once in a pattern, the status will
    - * be set for the first occurence of that time field. For instance,
    - * formatting a UDate to the time string "1 PM PDT (Pacific Daylight Time)"
    - * using the pattern "h a z (zzzz)" and the alignment field
    - * DateFormat::TIMEZONE_FIELD, the offsets fieldPosition.beginIndex and
    - * fieldPosition.getEndIndex will be set to 5 and 8, respectively, for the first
    - * occurence of the timezone pattern character 'z'.
    - *
    - * @param date UDate to be formatted into a date/time string.
    - * @param appendTo Output parameter to receive result.
    - * Result is appended to existing contents.
    - * @param fieldPosition On input: an alignment field, if desired (see examples above)
    - * On output: the offsets of the alignment field (see examples above)
    - * @return Reference to 'appendTo' parameter.
    - * @stable ICU 2.0
    - */
    - UnicodeString& format( UDate date,
    - UnicodeString& appendTo,
    - FieldPosition& fieldPosition) const;
    -
    - /**
    - * Formats a UDate into a date/time string. If there is a problem, you won't
    - * know, using this method. Use the overloaded format() method which takes a
    - * FieldPosition& to detect formatting problems.
    - *
    - * @param date The UDate value to be formatted into a string.
    - * @param appendTo Output parameter to receive result.
    - * Result is appended to existing contents.
    - * @return Reference to 'appendTo' parameter.
    - * @stable ICU 2.0
    - */
    - UnicodeString& format(UDate date, UnicodeString& appendTo) const;
    -
    - /**
    - * Redeclared Format method.
    - *
    - * @param obj The object to be formatted into a string.
    - * @param appendTo Output parameter to receive result.
    - * Result is appended to existing contents.
    - * @param status Output param filled with success/failure status.
    - * @return Reference to 'appendTo' parameter.
    - * @stable ICU 2.0
    - */
    - UnicodeString& format(const Formattable& obj,
    - UnicodeString& appendTo,
    - UErrorCode& status) const;
    -
    - /**
    - * Parse a date/time string.
    - *
    - * @param text The string to be parsed into a UDate value.
    - * @param status Output param to be set to success/failure code. If
    - * 'text' cannot be parsed, it will be set to a failure
    - * code.
    - * @result The parsed UDate value, if successful.
    - * @stable ICU 2.0
    - */
    - virtual UDate parse( const UnicodeString& text,
    - UErrorCode& status) const;
    -
    - /**
    - * Parse a date/time string beginning at the given parse position. For
    - * example, a time text "07/10/96 4:5 PM, PDT" will be parsed into a Date
    - * that is equivalent to Date(837039928046).
    - * <P>
    - * By default, parsing is lenient: If the input is not in the form used by
    - * this object's format method but can still be parsed as a date, then the
    - * parse succeeds. Clients may insist on strict adherence to the format by
    - * calling setLenient(false).
    - *
    - * @see DateFormat::setLenient(boolean)
    - *
    - * @param text The date/time string to be parsed
    - * @param cal a Calendar set to the date and time to be formatted
    - * into a date/time string.
    - * @param pos On input, the position at which to start parsing; on
    - * output, the position at which parsing terminated, or the
    - * start position if the parse failed.
    - * @return A valid UDate if the input could be parsed.
    - * @stable ICU 2.1
    - */
    - virtual void parse( const UnicodeString& text,
    - Calendar& cal,
    - ParsePosition& pos) const = 0;
    -
    - /**
    - * Parse a date/time string beginning at the given parse position. For
    - * example, a time text "07/10/96 4:5 PM, PDT" will be parsed into a Date
    - * that is equivalent to Date(837039928046).
    - * <P>
    - * By default, parsing is lenient: If the input is not in the form used by
    - * this object's format method but can still be parsed as a date, then the
    - * parse succeeds. Clients may insist on strict adherence to the format by
    - * calling setLenient(false).
    - *
    - * @see DateFormat::setLenient(boolean)
    - *
    - * @param text The date/time string to be parsed
    - * @param pos On input, the position at which to start parsing; on
    - * output, the position at which parsing terminated, or the
    - * start position if the parse failed.
    - * @return A valid UDate if the input could be parsed.
    - * @stable ICU 2.0
    - */
    - UDate parse( const UnicodeString& text,
    - ParsePosition& pos) const;
    -
    - /**
    - * Parse a string to produce an object. This methods handles parsing of
    - * date/time strings into Formattable objects with UDate types.
    - * <P>
    - * Before calling, set parse_pos.index to the offset you want to start
    - * parsing at in the source. After calling, parse_pos.index is the end of
    - * the text you parsed. If error occurs, index is unchanged.
    - * <P>
    - * When parsing, leading whitespace is discarded (with a successful parse),
    - * while trailing whitespace is left as is.
    - * <P>
    - * See Format::parseObject() for more.
    - *
    - * @param source The string to be parsed into an object.
    - * @param result Formattable to be set to the parse result.
    - * If parse fails, return contents are undefined.
    - * @param parse_pos The position to start parsing at. Upon return
    - * this param is set to the position after the
    - * last character successfully parsed. If the
    - * source is not parsed successfully, this param
    - * will remain unchanged.
    - * @return A newly created Formattable* object, or NULL
    - * on failure. The caller owns this and should
    - * delete it when done.
    - * @stable ICU 2.0
    - */
    - virtual void parseObject(const UnicodeString& source,
    - Formattable& result,
    - ParsePosition& parse_pos) const;
    -
    - /**
    - * Create a default date/time formatter that uses the SHORT style for both
    - * the date and the time.
    - *
    - * @return A date/time formatter which the caller owns.
    - * @stable ICU 2.0
    - */
    - static DateFormat* U_EXPORT2 createInstance(void);
    -
    - /**
    - * This is for ICU internal use only. Please do not use.
    - * Create a date/time formatter from skeleton and a given locale.
    - *
    - * Users are encouraged to use the skeleton macros defined in udat.h.
    - * For example, MONTH_WEEKDAY_DAY, which is "MMMMEEEEd",
    - * and which means the pattern should have day, month, and day-of-week
    - * fields, and follow the long date format defined in date time pattern.
    - * For example, for English, the full pattern should be
    - * "EEEE, MMMM d".
    - *
    - * Temporarily, this is an internal API, used by DateIntevalFormat only.
    - * There will be a new set of APIs for the same purpose coming soon.
    - * After which, this API will be replaced.
    - *
    - * @param skeleton the skeleton on which date format based.
    - * @param locale the given locale.
    - * @param status Output param to be set to success/failure code.
    - * If it is failure, the returned date formatter will
    - * be NULL.
    - * @return a simple date formatter which the caller owns.
    - * @internal ICU 4.0
    - */
    - static DateFormat* U_EXPORT2 createPatternInstance(
    - const UnicodeString& skeleton,
    - const Locale& locale,
    - UErrorCode& status);
    -
    - /**
    - * Creates a time formatter with the given formatting style for the given
    - * locale.
    - *
    - * @param style The given formatting style. For example,
    - * SHORT for "h:mm a" in the US locale.
    - * @param aLocale The given locale.
    - * @return A time formatter which the caller owns.
    - * @stable ICU 2.0
    - */
    - static DateFormat* U_EXPORT2 createTimeInstance(EStyle style = kDefault,
    - const Locale& aLocale = Locale::getDefault());
    -
    - /**
    - * Creates a date formatter with the given formatting style for the given
    - * const locale.
    - *
    - * @param style The given formatting style. For example,
    - * SHORT for "M/d/yy" in the US locale.
    - * @param aLocale The given locale.
    - * @return A date formatter which the caller owns.
    - * @stable ICU 2.0
    - */
    - static DateFormat* U_EXPORT2 createDateInstance(EStyle style = kDefault,
    - const Locale& aLocale = Locale::getDefault());
    -
    - /**
    - * Creates a date/time formatter with the given formatting styles for the
    - * given locale.
    - *
    - * @param dateStyle The given formatting style for the date portion of the result.
    - * For example, SHORT for "M/d/yy" in the US locale.
    - * @param timeStyle The given formatting style for the time portion of the result.
    - * For example, SHORT for "h:mm a" in the US locale.
    - * @param aLocale The given locale.
    - * @return A date/time formatter which the caller owns.
    - * @stable ICU 2.0
    - */
    - static DateFormat* U_EXPORT2 createDateTimeInstance(EStyle dateStyle = kDefault,
    - EStyle timeStyle = kDefault,
    - const Locale& aLocale = Locale::getDefault());
    -
    - /**
    - * Gets the set of locales for which DateFormats are installed.
    - * @param count Filled in with the number of locales in the list that is returned.
    - * @return the set of locales for which DateFormats are installed. The caller
    - * does NOT own this list and must not delete it.
    - * @stable ICU 2.0
    - */
    - static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
    -
    - /**
    - * Returns true if the formatter is set for lenient parsing.
    - * @stable ICU 2.0
    - */
    - virtual UBool isLenient(void) const;
    -
    - /**
    - * Specify whether or not date/time parsing is to be lenient. With lenient
    - * parsing, the parser may use heuristics to interpret inputs that do not
    - * precisely match this object's format. With strict parsing, inputs must
    - * match this object's format.
    - *
    - * @param lenient True specifies date/time interpretation to be lenient.
    - * @see Calendar::setLenient
    - * @stable ICU 2.0
    - */
    - virtual void setLenient(UBool lenient);
    -
    - /**
    - * Gets the calendar associated with this date/time formatter.
    - * @return the calendar associated with this date/time formatter.
    - * @stable ICU 2.0
    - */
    - virtual const Calendar* getCalendar(void) const;
    -
    - /**
    - * Set the calendar to be used by this date format. Initially, the default
    - * calendar for the specified or default locale is used. The caller should
    - * not delete the Calendar object after it is adopted by this call.
    - * Adopting a new calendar will change to the default symbols.
    - *
    - * @param calendarToAdopt Calendar object to be adopted.
    - * @stable ICU 2.0
    - */
    - virtual void adoptCalendar(Calendar* calendarToAdopt);
    -
    - /**
    - * Set the calendar to be used by this date format. Initially, the default
    - * calendar for the specified or default locale is used.
    - *
    - * @param newCalendar Calendar object to be set.
    - * @stable ICU 2.0
    - */
    - virtual void setCalendar(const Calendar& newCalendar);
    -
    -
    - /**
    - * Gets the number formatter which this date/time formatter uses to format
    - * and parse the numeric portions of the pattern.
    - * @return the number formatter which this date/time formatter uses.
    - * @stable ICU 2.0
    - */
    - virtual const NumberFormat* getNumberFormat(void) const;
    -
    - /**
    - * Allows you to set the number formatter. The caller should
    - * not delete the NumberFormat object after it is adopted by this call.
    - * @param formatToAdopt NumberFormat object to be adopted.
    - * @stable ICU 2.0
    - */
    - virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
    -
    - /**
    - * Allows you to set the number formatter.
    - * @param newNumberFormat NumberFormat object to be set.
    - * @stable ICU 2.0
    - */
    - virtual void setNumberFormat(const NumberFormat& newNumberFormat);
    -
    - /**
    - * Returns a reference to the TimeZone used by this DateFormat's calendar.
    - * @return the time zone associated with the calendar of DateFormat.
    - * @stable ICU 2.0
    - */
    - virtual const TimeZone& getTimeZone(void) const;
    -
    - /**
    - * Sets the time zone for the calendar of this DateFormat object. The caller
    - * no longer owns the TimeZone object and should not delete it after this call.
    - * @param zoneToAdopt the TimeZone to be adopted.
    - * @stable ICU 2.0
    - */
    - virtual void adoptTimeZone(TimeZone* zoneToAdopt);
    -
    - /**
    - * Sets the time zone for the calendar of this DateFormat object.
    - * @param zone the new time zone.
    - * @stable ICU 2.0
    - */
    - virtual void setTimeZone(const TimeZone& zone);
    -
    -protected:
    - /**
    - * Default constructor. Creates a DateFormat with no Calendar or NumberFormat
    - * associated with it. This constructor depends on the subclasses to fill in
    - * the calendar and numberFormat fields.
    - * @stable ICU 2.0
    - */
    - DateFormat();
    -
    - /**
    - * Copy constructor.
    - * @stable ICU 2.0
    - */
    - DateFormat(const DateFormat&);
    -
    - /**
    - * Default assignment operator.
    - * @stable ICU 2.0
    - */
    - DateFormat& operator=(const DateFormat&);
    -
    - /**
    - * The calendar that DateFormat uses to produce the time field values needed
    - * to implement date/time formatting. Subclasses should generally initialize
    - * this to the default calendar for the locale associated with this DateFormat.
    - * @stable ICU 2.4
    - */
    - Calendar* fCalendar;
    -
    - /**
    - * The number formatter that DateFormat uses to format numbers in dates and
    - * times. Subclasses should generally initialize this to the default number
    - * format for the locale associated with this DateFormat.
    - * @stable ICU 2.4
    - */
    - NumberFormat* fNumberFormat;
    -
    -private:
    - /**
    - * Gets the date/time formatter with the given formatting styles for the
    - * given locale.
    - * @param dateStyle the given date formatting style.
    - * @param timeStyle the given time formatting style.
    - * @param inLocale the given locale.
    - * @return a date/time formatter, or 0 on failure.
    - */
    - static DateFormat* U_EXPORT2 create(EStyle timeStyle, EStyle dateStyle, const Locale&);
    -
    -public:
    - /**
    - * Field selector for FieldPosition for DateFormat fields.
    - * @obsolete ICU 3.4 use UDateFormatField instead, since this API will be
    - * removed in that release
    - */
    - enum EField
    - {
    - // Obsolete; use UDateFormatField instead
    - kEraField = UDAT_ERA_FIELD,
    - kYearField = UDAT_YEAR_FIELD,
    - kMonthField = UDAT_MONTH_FIELD,
    - kDateField = UDAT_DATE_FIELD,
    - kHourOfDay1Field = UDAT_HOUR_OF_DAY1_FIELD,
    - kHourOfDay0Field = UDAT_HOUR_OF_DAY0_FIELD,
    - kMinuteField = UDAT_MINUTE_FIELD,
    - kSecondField = UDAT_SECOND_FIELD,
    - kMillisecondField = UDAT_FRACTIONAL_SECOND_FIELD,
    - kDayOfWeekField = UDAT_DAY_OF_WEEK_FIELD,
    - kDayOfYearField = UDAT_DAY_OF_YEAR_FIELD,
    - kDayOfWeekInMonthField = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
    - kWeekOfYearField = UDAT_WEEK_OF_YEAR_FIELD,
    - kWeekOfMonthField = UDAT_WEEK_OF_MONTH_FIELD,
    - kAmPmField = UDAT_AM_PM_FIELD,
    - kHour1Field = UDAT_HOUR1_FIELD,
    - kHour0Field = UDAT_HOUR0_FIELD,
    - kTimezoneField = UDAT_TIMEZONE_FIELD,
    - kYearWOYField = UDAT_YEAR_WOY_FIELD,
    - kDOWLocalField = UDAT_DOW_LOCAL_FIELD,
    - kExtendedYearField = UDAT_EXTENDED_YEAR_FIELD,
    - kJulianDayField = UDAT_JULIAN_DAY_FIELD,
    - kMillisecondsInDayField = UDAT_MILLISECONDS_IN_DAY_FIELD,
    -
    - // Obsolete; use UDateFormatField instead
    - ERA_FIELD = UDAT_ERA_FIELD,
    - YEAR_FIELD = UDAT_YEAR_FIELD,
    - MONTH_FIELD = UDAT_MONTH_FIELD,
    - DATE_FIELD = UDAT_DATE_FIELD,
    - HOUR_OF_DAY1_FIELD = UDAT_HOUR_OF_DAY1_FIELD,
    - HOUR_OF_DAY0_FIELD = UDAT_HOUR_OF_DAY0_FIELD,
    - MINUTE_FIELD = UDAT_MINUTE_FIELD,
    - SECOND_FIELD = UDAT_SECOND_FIELD,
    - MILLISECOND_FIELD = UDAT_FRACTIONAL_SECOND_FIELD,
    - DAY_OF_WEEK_FIELD = UDAT_DAY_OF_WEEK_FIELD,
    - DAY_OF_YEAR_FIELD = UDAT_DAY_OF_YEAR_FIELD,
    - DAY_OF_WEEK_IN_MONTH_FIELD = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
    - WEEK_OF_YEAR_FIELD = UDAT_WEEK_OF_YEAR_FIELD,
    - WEEK_OF_MONTH_FIELD = UDAT_WEEK_OF_MONTH_FIELD,
    - AM_PM_FIELD = UDAT_AM_PM_FIELD,
    - HOUR1_FIELD = UDAT_HOUR1_FIELD,
    - HOUR0_FIELD = UDAT_HOUR0_FIELD,
    - TIMEZONE_FIELD = UDAT_TIMEZONE_FIELD
    - };
    -};
    -
    -inline UnicodeString&
    -DateFormat::format(const Formattable& obj,
    - UnicodeString& appendTo,
    - UErrorCode& status) const {
    - return Format::format(obj, appendTo, status);
    -}
    -U_NAMESPACE_END
    -
    -#endif /* #if !UCONFIG_NO_FORMATTING */
    -
    -#endif // _DATEFMT
    -//eof

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/dbbi.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/dbbi.h b/apps/couch_collate/platform/osx/icu/unicode/dbbi.h
    deleted file mode 100644
    index c7984ef..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/dbbi.h
    +++ /dev/null
    @@ -1,41 +0,0 @@
    -/*
    -**********************************************************************
    -* Copyright (C) 1999-2006 IBM Corp. All rights reserved.
    -**********************************************************************
    -* Date Name Description
    -* 12/1/99 rgillam Complete port from Java.
    -* 01/13/2000 helena Added UErrorCode to ctors.
    -**********************************************************************
    -*/
    -
    -#ifndef DBBI_H
    -#define DBBI_H
    -
    -#include "unicode/rbbi.h"
    -
    -#if !UCONFIG_NO_BREAK_ITERATION
    -
    -/**
    - * \file
    - * \brief C++ API: Dictionary Based Break Iterator
    - */
    -
    -U_NAMESPACE_BEGIN
    -
    -/**
    - * An obsolete subclass of RuleBasedBreakIterator. Handling of dictionary-
    - * based break iteration has been folded into the base class. This class
    - * is deprecated as of ICU 3.6.
    - */
    -
    -#ifndef U_HIDE_DEPRECATED_API
    -
    -typedef RuleBasedBreakIterator DictionaryBasedBreakIterator;
    -
    -#endif
    -
    -U_NAMESPACE_END
    -
    -#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
    -
    -#endif
  • Benoitc at Feb 13, 2014 at 6:14 pm
    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/uchriter.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/uchriter.h b/apps/couch_collate/platform/osx/icu/unicode/uchriter.h
    deleted file mode 100644
    index 6d5a990..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/uchriter.h
    +++ /dev/null
    @@ -1,381 +0,0 @@
    -/*
    -**********************************************************************
    -* Copyright (C) 1998-2005, International Business Machines
    -* Corporation and others. All Rights Reserved.
    -**********************************************************************
    -*/
    -
    -#ifndef UCHRITER_H
    -#define UCHRITER_H
    -
    -#include "unicode/utypes.h"
    -#include "unicode/chariter.h"
    -
    -/**
    - * \file
    - * \brief C++ API: UChar Character Iterator
    - */
    -
    -U_NAMESPACE_BEGIN
    -
    -/**
    - * A concrete subclass of CharacterIterator that iterates over the
    - * characters (code units or code points) in a UChar array.
    - * It's possible not only to create an
    - * iterator that iterates over an entire UChar array, but also to
    - * create one that iterates over only a subrange of a UChar array
    - * (iterators over different subranges of the same UChar array don't
    - * compare equal).
    - * @see CharacterIterator
    - * @see ForwardCharacterIterator
    - * @stable ICU 2.0
    - */
    -class U_COMMON_API UCharCharacterIterator : public CharacterIterator {
    -public:
    - /**
    - * Create an iterator over the UChar array referred to by "textPtr".
    - * The iteration range is 0 to <code>length-1</code>.
    - * text is only aliased, not adopted (the
    - * destructor will not delete it).
    - * @param textPtr The UChar array to be iterated over
    - * @param length The length of the UChar array
    - * @stable ICU 2.0
    - */
    - UCharCharacterIterator(const UChar* textPtr, int32_t length);
    -
    - /**
    - * Create an iterator over the UChar array referred to by "textPtr".
    - * The iteration range is 0 to <code>length-1</code>.
    - * text is only aliased, not adopted (the
    - * destructor will not delete it).
    - * The starting
    - * position is specified by "position". If "position" is outside the valid
    - * iteration range, the behavior of this object is undefined.
    - * @param textPtr The UChar array to be iteratd over
    - * @param length The length of the UChar array
    - * @param position The starting position of the iteration
    - * @stable ICU 2.0
    - */
    - UCharCharacterIterator(const UChar* textPtr, int32_t length,
    - int32_t position);
    -
    - /**
    - * Create an iterator over the UChar array referred to by "textPtr".
    - * The iteration range is 0 to <code>end-1</code>.
    - * text is only aliased, not adopted (the
    - * destructor will not delete it).
    - * The starting
    - * position is specified by "position". If begin and end do not
    - * form a valid iteration range or "position" is outside the valid
    - * iteration range, the behavior of this object is undefined.
    - * @param textPtr The UChar array to be iterated over
    - * @param length The length of the UChar array
    - * @param textBegin The begin position of the iteration range
    - * @param textEnd The end position of the iteration range
    - * @param position The starting position of the iteration
    - * @stable ICU 2.0
    - */
    - UCharCharacterIterator(const UChar* textPtr, int32_t length,
    - int32_t textBegin,
    - int32_t textEnd,
    - int32_t position);
    -
    - /**
    - * Copy constructor. The new iterator iterates over the same range
    - * of the same string as "that", and its initial position is the
    - * same as "that"'s current position.
    - * @param that The UCharCharacterIterator to be copied
    - * @stable ICU 2.0
    - */
    - UCharCharacterIterator(const UCharCharacterIterator& that);
    -
    - /**
    - * Destructor.
    - * @stable ICU 2.0
    - */
    - virtual ~UCharCharacterIterator();
    -
    - /**
    - * Assignment operator. *this is altered to iterate over the sane
    - * range of the same string as "that", and refers to the same
    - * character within that string as "that" does.
    - * @param that The object to be copied
    - * @return the newly created object
    - * @stable ICU 2.0
    - */
    - UCharCharacterIterator&
    - operator=(const UCharCharacterIterator& that);
    -
    - /**
    - * Returns true if the iterators iterate over the same range of the
    - * same string and are pointing at the same character.
    - * @param that The ForwardCharacterIterator used to be compared for equality
    - * @return true if the iterators iterate over the same range of the
    - * same string and are pointing at the same character.
    - * @stable ICU 2.0
    - */
    - virtual UBool operator==(const ForwardCharacterIterator& that) const;
    -
    - /**
    - * Generates a hash code for this iterator.
    - * @return the hash code.
    - * @stable ICU 2.0
    - */
    - virtual int32_t hashCode(void) const;
    -
    - /**
    - * Returns a new UCharCharacterIterator referring to the same
    - * character in the same range of the same string as this one. The
    - * caller must delete the new iterator.
    - * @return the CharacterIterator newly created
    - * @stable ICU 2.0
    - */
    - virtual CharacterIterator* clone(void) const;
    -
    - /**
    - * Sets the iterator to refer to the first code unit in its
    - * iteration range, and returns that code unit.
    - * This can be used to begin an iteration with next().
    - * @return the first code unit in its iteration range.
    - * @stable ICU 2.0
    - */
    - virtual UChar first(void);
    -
    - /**
    - * Sets the iterator to refer to the first code unit in its
    - * iteration range, returns that code unit, and moves the position
    - * to the second code unit. This is an alternative to setToStart()
    - * for forward iteration with nextPostInc().
    - * @return the first code unit in its iteration range
    - * @stable ICU 2.0
    - */
    - virtual UChar firstPostInc(void);
    -
    - /**
    - * Sets the iterator to refer to the first code point in its
    - * iteration range, and returns that code unit,
    - * This can be used to begin an iteration with next32().
    - * Note that an iteration with next32PostInc(), beginning with,
    - * e.g., setToStart() or firstPostInc(), is more efficient.
    - * @return the first code point in its iteration range
    - * @stable ICU 2.0
    - */
    - virtual UChar32 first32(void);
    -
    - /**
    - * Sets the iterator to refer to the first code point in its
    - * iteration range, returns that code point, and moves the position
    - * to the second code point. This is an alternative to setToStart()
    - * for forward iteration with next32PostInc().
    - * @return the first code point in its iteration range.
    - * @stable ICU 2.0
    - */
    - virtual UChar32 first32PostInc(void);
    -
    - /**
    - * Sets the iterator to refer to the last code unit in its
    - * iteration range, and returns that code unit.
    - * This can be used to begin an iteration with previous().
    - * @return the last code unit in its iteration range.
    - * @stable ICU 2.0
    - */
    - virtual UChar last(void);
    -
    - /**
    - * Sets the iterator to refer to the last code point in its
    - * iteration range, and returns that code unit.
    - * This can be used to begin an iteration with previous32().
    - * @return the last code point in its iteration range.
    - * @stable ICU 2.0
    - */
    - virtual UChar32 last32(void);
    -
    - /**
    - * Sets the iterator to refer to the "position"-th code unit
    - * in the text-storage object the iterator refers to, and
    - * returns that code unit.
    - * @param position the position within the text-storage object
    - * @return the code unit
    - * @stable ICU 2.0
    - */
    - virtual UChar setIndex(int32_t position);
    -
    - /**
    - * Sets the iterator to refer to the beginning of the code point
    - * that contains the "position"-th code unit
    - * in the text-storage object the iterator refers to, and
    - * returns that code point.
    - * The current position is adjusted to the beginning of the code point
    - * (its first code unit).
    - * @param position the position within the text-storage object
    - * @return the code unit
    - * @stable ICU 2.0
    - */
    - virtual UChar32 setIndex32(int32_t position);
    -
    - /**
    - * Returns the code unit the iterator currently refers to.
    - * @return the code unit the iterator currently refers to.
    - * @stable ICU 2.0
    - */
    - virtual UChar current(void) const;
    -
    - /**
    - * Returns the code point the iterator currently refers to.
    - * @return the code point the iterator currently refers to.
    - * @stable ICU 2.0
    - */
    - virtual UChar32 current32(void) const;
    -
    - /**
    - * Advances to the next code unit in the iteration range (toward
    - * endIndex()), and returns that code unit. If there are no more
    - * code units to return, returns DONE.
    - * @return the next code unit in the iteration range.
    - * @stable ICU 2.0
    - */
    - virtual UChar next(void);
    -
    - /**
    - * Gets the current code unit for returning and advances to the next code unit
    - * in the iteration range
    - * (toward endIndex()). If there are
    - * no more code units to return, returns DONE.
    - * @return the current code unit.
    - * @stable ICU 2.0
    - */
    - virtual UChar nextPostInc(void);
    -
    - /**
    - * Advances to the next code point in the iteration range (toward
    - * endIndex()), and returns that code point. If there are no more
    - * code points to return, returns DONE.
    - * Note that iteration with "pre-increment" semantics is less
    - * efficient than iteration with "post-increment" semantics
    - * that is provided by next32PostInc().
    - * @return the next code point in the iteration range.
    - * @stable ICU 2.0
    - */
    - virtual UChar32 next32(void);
    -
    - /**
    - * Gets the current code point for returning and advances to the next code point
    - * in the iteration range
    - * (toward endIndex()). If there are
    - * no more code points to return, returns DONE.
    - * @return the current point.
    - * @stable ICU 2.0
    - */
    - virtual UChar32 next32PostInc(void);
    -
    - /**
    - * Returns FALSE if there are no more code units or code points
    - * at or after the current position in the iteration range.
    - * This is used with nextPostInc() or next32PostInc() in forward
    - * iteration.
    - * @return FALSE if there are no more code units or code points
    - * at or after the current position in the iteration range.
    - * @stable ICU 2.0
    - */
    - virtual UBool hasNext();
    -
    - /**
    - * Advances to the previous code unit in the iteration range (toward
    - * startIndex()), and returns that code unit. If there are no more
    - * code units to return, returns DONE.
    - * @return the previous code unit in the iteration range.
    - * @stable ICU 2.0
    - */
    - virtual UChar previous(void);
    -
    - /**
    - * Advances to the previous code point in the iteration range (toward
    - * startIndex()), and returns that code point. If there are no more
    - * code points to return, returns DONE.
    - * @return the previous code point in the iteration range.
    - * @stable ICU 2.0
    - */
    - virtual UChar32 previous32(void);
    -
    - /**
    - * Returns FALSE if there are no more code units or code points
    - * before the current position in the iteration range.
    - * This is used with previous() or previous32() in backward
    - * iteration.
    - * @return FALSE if there are no more code units or code points
    - * before the current position in the iteration range.
    - * @stable ICU 2.0
    - */
    - virtual UBool hasPrevious();
    -
    - /**
    - * Moves the current position relative to the start or end of the
    - * iteration range, or relative to the current position itself.
    - * The movement is expressed in numbers of code units forward
    - * or backward by specifying a positive or negative delta.
    - * @param delta the position relative to origin. A positive delta means forward;
    - * a negative delta means backward.
    - * @param origin Origin enumeration {kStart, kCurrent, kEnd}
    - * @return the new position
    - * @stable ICU 2.0
    - */
    - virtual int32_t move(int32_t delta, EOrigin origin);
    -
    - /**
    - * Moves the current position relative to the start or end of the
    - * iteration range, or relative to the current position itself.
    - * The movement is expressed in numbers of code points forward
    - * or backward by specifying a positive or negative delta.
    - * @param delta the position relative to origin. A positive delta means forward;
    - * a negative delta means backward.
    - * @param origin Origin enumeration {kStart, kCurrent, kEnd}
    - * @return the new position
    - * @stable ICU 2.0
    - */
    - virtual int32_t move32(int32_t delta, EOrigin origin);
    -
    - /**
    - * Sets the iterator to iterate over a new range of text
    - * @stable ICU 2.0
    - */
    - void setText(const UChar* newText, int32_t newTextLength);
    -
    - /**
    - * Copies the UChar array under iteration into the UnicodeString
    - * referred to by "result". Even if this iterator iterates across
    - * only a part of this string, the whole string is copied.
    - * @param result Receives a copy of the text under iteration.
    - * @stable ICU 2.0
    - */
    - virtual void getText(UnicodeString& result);
    -
    - /**
    - * Return a class ID for this class (not really public)
    - * @return a class ID for this class
    - * @stable ICU 2.0
    - */
    - static UClassID U_EXPORT2 getStaticClassID(void);
    -
    - /**
    - * Return a class ID for this object (not really public)
    - * @return a class ID for this object.
    - * @stable ICU 2.0
    - */
    - virtual UClassID getDynamicClassID(void) const;
    -
    -protected:
    - /**
    - * Protected constructor
    - * @stable ICU 2.0
    - */
    - UCharCharacterIterator();
    - /**
    - * Protected member text
    - * @stable ICU 2.0
    - */
    - const UChar* text;
    -
    -};
    -
    -U_NAMESPACE_END
    -#endif

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/uclean.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/uclean.h b/apps/couch_collate/platform/osx/icu/unicode/uclean.h
    deleted file mode 100644
    index a13924a..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/uclean.h
    +++ /dev/null
    @@ -1,267 +0,0 @@
    -/*
    -******************************************************************************
    -* *
    -* Copyright (C) 2001-2005, International Business Machines *
    -* Corporation and others. All Rights Reserved. *
    -* *
    -******************************************************************************
    -* file name: uclean.h
    -* encoding: US-ASCII
    -* tab size: 8 (not used)
    -* indentation:4
    -*
    -* created on: 2001July05
    -* created by: George Rhoten
    -*/
    -
    -#ifndef __UCLEAN_H__
    -#define __UCLEAN_H__
    -
    -#include "unicode/utypes.h"
    -/**
    - * \file
    - * \brief C API: Initialize and clean up ICU
    - */
    -
    -/**
    - * Initialize ICU. The description further below applies to ICU 2.6 to ICU 3.4.
    - * Starting with ICU 3.4, u_init() needs not be called any more for
    - * ensuring thread safety, but it can give an indication for whether ICU
    - * can load its data. In ICU 3.4, it will try to load the converter alias table
    - * (cnvalias.icu) and give an error code if that fails.
    - * This may change in the future.
    - * <p>
    - * For ensuring the availability of necessary data, an application should
    - * open the service objects (converters, collators, etc.) that it will use
    - * and check for error codes there.
    - * <p>
    - * Documentation for ICU 2.6 to ICU 3.4:
    - * <p>
    - * This function loads and initializes data items
    - * that are required internally by various ICU functions. Use of this explicit
    - * initialization is required in multi-threaded applications; in
    - * single threaded apps, use is optional, but incurs little additional
    - * cost, and is thus recommended.
    - * <p>
    - * In multi-threaded applications, u_init() should be called in the
    - * main thread before starting additional threads, or, alternatively
    - * it can be called in each individual thread once, before other ICU
    - * functions are called in that thread. In this second scenario, the
    - * application must guarantee that the first call to u_init() happen
    - * without contention, in a single thread only.
    - * <p>
    - * If <code>u_setMemoryFunctions()</code> or
    - * <code>u_setMutexFunctions</code> are needed (uncommon), they must be
    - * called _before_ <code>u_init()</code>.
    - * <p>
    - * Extra, repeated, or otherwise unneeded calls to u_init() do no harm,
    - * other than taking a small amount of time.
    - *
    - * @param status An ICU UErrorCode parameter. It must not be <code>NULL</code>.
    - * An Error will be returned if some required part of ICU data can not
    - * be loaded or initialized.
    - * The function returns immediately if the input error code indicates a
    - * failure, as usual.
    - *
    - * @stable ICU 2.6
    - */
    -U_STABLE void U_EXPORT2
    -u_init(UErrorCode *status);
    -
    -/**
    - * Clean up the system resources, such as allocated memory or open files,
    - * used in all ICU libraries. This will free/delete all memory owned by the
    - * ICU libraries, and return them to their original load state. All open ICU
    - * items (collators, resource bundles, converters, etc.) must be closed before
    - * calling this function, otherwise ICU may not free its allocated memory
    - * (e.g. close your converters and resource bundles before calling this
    - * function). Generally, this function should be called once just before
    - * an application exits. For applications that dynamically load and unload
    - * the ICU libraries (relatively uncommon), u_cleanup() should be called
    - * just before the library unload.
    - * <p>
    - * u_cleanup() also clears any ICU heap functions, mutex functions or
    - * trace functions that may have been set for the process.
    - * This has the effect of restoring ICU to its initial condition, before
    - * any of these override functions were installed. Refer to
    - * u_setMemoryFunctions(), u_setMutexFunctions and
    - * utrace_setFunctions(). If ICU is to be reinitialized after after
    - * calling u_cleanup(), these runtime override functions will need to
    - * be set up again if they are still required.
    - * <p>
    - * u_cleanup() is not thread safe. All other threads should stop using ICU
    - * before calling this function.
    - * <p>
    - * Any open ICU items will be left in an undefined state by u_cleanup(),
    - * and any subsequent attempt to use such an item will give unpredictable
    - * results.
    - * <p>
    - * After calling u_cleanup(), an application may continue to use ICU by
    - * calling u_init(). An application must invoke u_init() first from one single
    - * thread before allowing other threads call u_init(). All threads existing
    - * at the time of the first thread's call to u_init() must also call
    - * u_init() themselves before continuing with other ICU operations.
    - * <p>
    - * The use of u_cleanup() just before an application terminates is optional,
    - * but it should be called only once for performance reasons. The primary
    - * benefit is to eliminate reports of memory or resource leaks originating
    - * in ICU code from the results generated by heap analysis tools.
    - * <p>
    - * <strong>Use this function with great care!</strong>
    - * </p>
    - *
    - * @stable ICU 2.0
    - * @system
    - */
    -U_STABLE void U_EXPORT2
    -u_cleanup(void);
    -
    -
    -
    -
    -/**
    - * An opaque pointer type that represents an ICU mutex.
    - * For user-implemented mutexes, the value will typically point to a
    - * struct or object that implements the mutex.
    - * @stable ICU 2.8
    - * @system
    - */
    -typedef void *UMTX;
    -
    -/**
    - * Function Pointer type for a user supplied mutex initialization function.
    - * The user-supplied function will be called by ICU whenever ICU needs to create a
    - * new mutex. The function implementation should create a mutex, and store a pointer
    - * to something that uniquely identifies the mutex into the UMTX that is supplied
    - * as a paramter.
    - * @param context user supplied value, obtained from from u_setMutexFunctions().
    - * @param mutex Receives a pointer that identifies the new mutex.
    - * The mutex init function must set the UMTX to a non-null value.
    - * Subsequent calls by ICU to lock, unlock, or destroy a mutex will
    - * identify the mutex by the UMTX value.
    - * @param status Error status. Report errors back to ICU by setting this variable
    - * with an error code.
    - * @stable ICU 2.8
    - * @system
    - */
    -typedef void U_CALLCONV UMtxInitFn (const void *context, UMTX *mutex, UErrorCode* status);
    -
    -
    -/**
    - * Function Pointer type for a user supplied mutex functions.
    - * One of the user-supplied functions with this signature will be called by ICU
    - * whenever ICU needs to lock, unlock, or destroy a mutex.
    - * @param context user supplied value, obtained from from u_setMutexFunctions().
    - * @param mutex specify the mutex on which to operate.
    - * @stable ICU 2.8
    - * @system
    - */
    -typedef void U_CALLCONV UMtxFn (const void *context, UMTX *mutex);
    -
    -
    -/**
    - * Set the functions that ICU will use for mutex operations
    - * Use of this function is optional; by default (without this function), ICU will
    - * directly access system functions for mutex operations
    - * This function can only be used when ICU is in an initial, unused state, before
    - * u_init() has been called.
    - * This function may be used even when ICU has been built without multi-threaded
    - * support (see ICU_USE_THREADS pre-processor variable, umutex.h)
    - * @param context This pointer value will be saved, and then (later) passed as
    - * a parameter to the user-supplied mutex functions each time they
    - * are called.
    - * @param init Pointer to a mutex initialization function. Must be non-null.
    - * @param destroy Pointer to the mutex destroy function. Must be non-null.
    - * @param lock pointer to the mutex lock function. Must be non-null.
    - * @param unlock Pointer to the mutex unlock function. Must be non-null.
    - * @param status Receives error values.
    - * @stable ICU 2.8
    - * @system
    - */
    -U_STABLE void U_EXPORT2
    -u_setMutexFunctions(const void *context, UMtxInitFn *init, UMtxFn *destroy, UMtxFn *lock, UMtxFn *unlock,
    - UErrorCode *status);
    -
    -
    -/**
    - * Pointer type for a user supplied atomic increment or decrement function.
    - * @param context user supplied value, obtained from from u_setAtomicIncDecFunctions().
    - * @param p Pointer to a 32 bit int to be incremented or decremented
    - * @return The value of the variable after the inc or dec operation.
    - * @stable ICU 2.8
    - * @system
    - */
    -typedef int32_t U_CALLCONV UMtxAtomicFn(const void *context, int32_t *p);
    -
    -/**
    - * Set the functions that ICU will use for atomic increment and decrement of int32_t values.
    - * Use of this function is optional; by default (without this function), ICU will
    - * use its own internal implementation of atomic increment/decrement.
    - * This function can only be used when ICU is in an initial, unused state, before
    - * u_init() has been called.
    - * @param context This pointer value will be saved, and then (later) passed as
    - * a parameter to the increment and decrement functions each time they
    - * are called. This function can only be called
    - * @param inc Pointer to a function to do an atomic increment operation. Must be non-null.
    - * @param dec Pointer to a function to do an atomic decrement operation. Must be non-null.
    - * @param status Receives error values.
    - * @stable ICU 2.8
    - * @system
    - */
    -U_STABLE void U_EXPORT2
    -u_setAtomicIncDecFunctions(const void *context, UMtxAtomicFn *inc, UMtxAtomicFn *dec,
    - UErrorCode *status);
    -
    -
    -
    -/**
    - * Pointer type for a user supplied memory allocation function.
    - * @param context user supplied value, obtained from from u_setMemoryFunctions().
    - * @param size The number of bytes to be allocated
    - * @return Pointer to the newly allocated memory, or NULL if the allocation failed.
    - * @stable ICU 2.8
    - * @system
    - */
    -typedef void *U_CALLCONV UMemAllocFn(const void *context, size_t size);
    -/**
    - * Pointer type for a user supplied memory re-allocation function.
    - * @param context user supplied value, obtained from from u_setMemoryFunctions().
    - * @param size The number of bytes to be allocated
    - * @return Pointer to the newly allocated memory, or NULL if the allocation failed.
    - * @stable ICU 2.8
    - * @system
    - */
    -typedef void *U_CALLCONV UMemReallocFn(const void *context, void *mem, size_t size);
    -/**
    - * Pointer type for a user supplied memory free function. Behavior should be
    - * similar the standard C library free().
    - * @param context user supplied value, obtained from from u_setMemoryFunctions().
    - * @param mem Pointer to the memory block to be resized
    - * @param size The new size for the block
    - * @return Pointer to the resized memory block, or NULL if the resizing failed.
    - * @stable ICU 2.8
    - * @system
    - */
    -typedef void U_CALLCONV UMemFreeFn (const void *context, void *mem);
    -
    -/**
    - * Set the functions that ICU will use for memory allocation.
    - * Use of this function is optional; by default (without this function), ICU will
    - * use the standard C library malloc() and free() functions.
    - * This function can only be used when ICU is in an initial, unused state, before
    - * u_init() has been called.
    - * @param context This pointer value will be saved, and then (later) passed as
    - * a parameter to the memory functions each time they
    - * are called.
    - * @param a Pointer to a user-supplied malloc function.
    - * @param r Pointer to a user-supplied realloc function.
    - * @param f Pointer to a user-supplied free function.
    - * @param status Receives error values.
    - * @stable ICU 2.8
    - * @system
    - */
    -U_STABLE void U_EXPORT2
    -u_setMemoryFunctions(const void *context, UMemAllocFn *a, UMemReallocFn *r, UMemFreeFn *f,
    - UErrorCode *status);
    -
    -#endif
  • Benoitc at Feb 13, 2014 at 6:14 pm
    small update


    Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo
    Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/cb4817b4
    Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/cb4817b4
    Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/cb4817b4

    Branch: refs/heads/1994-merge-rcouch-multi-repo
    Commit: cb4817b40498bff9bf95fdeb1a8e631ecf587ec6
    Parents: c085543
    Author: Benoit Chesneau <bchesneau@gmail.com>
    Authored: Thu Feb 13 18:08:08 2014 +0100
    Committer: Benoit Chesneau <bchesneau@gmail.com>
    Committed: Thu Feb 13 18:08:08 2014 +0100

    ----------------------------------------------------------------------
      rebar.config | 73 ++++++++++++++++++++++++++++++++++++++++---------------
      1 file changed, 54 insertions(+), 19 deletions(-)
    ----------------------------------------------------------------------


    http://git-wip-us.apache.org/repos/asf/couchdb/blob/cb4817b4/rebar.config
    ----------------------------------------------------------------------
    diff --git a/rebar.config b/rebar.config
    index 81f7e48..232b6ff 100644
    --- a/rebar.config
    +++ b/rebar.config
    @@ -14,42 +14,77 @@
                               {tag, "1.3.8"}}},

          %% erlang oauth module
    - {oauth, ".*", {git, "git://github.com/refuge/erlang-oauth.git", {branch,
    - "master"}}},
    + {oauth, ".*",
    + {git, "http://git-wip-us.apache.org/repos/asf/couchdb-oauth.git",
    + {branch, "import"}}},

          %% ibrowse module , http client
    - {ibrowse, ".*", {git, "git://github.com/refuge/ibrowse.git",
    - {branch, "master"}}},
    + {ibrowse, ".*",
    + {git, "http://git-wip-us.apache.org/repos/asf/couchdb-ibrowse.git",
    + {branch, "import"}}},

          %% mochiweb module, http framework
    - {mochiweb, ".*", {git,"git://github.com/refuge/mochiweb.git",
    - {branch, "master"}}},
    + {mochiweb, ".*",
    + {git,"http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb.git",
    + {branch, "import-upstream"}}},

          %% snappy module, used for compression
    - {snappy, ".*", {git, "git://github.com/refuge/snappy-erlang.git",
    - {branch, "refuge"}}},
    + {snappy, ".*",
    + {git, "http://git-wip-us.apache.org/repos/asf/couchdb-snappy.git",
    + {branch, "import"}}},

          %% json module, encode/decode module
    - {jiffy, ".*", {git, "git://github.com/refuge/jiffy.git", "master"}},
    + {jiffy, ".*",
    + {git, "http://git-wip-us.apache.org/repos/asf/couchdb-jiffy.git",
    + {branch, "import"}},

          %% lager logging module
    - {lager, ".*", {git, "git://github.com/refuge/lager.git", "master"}}
    + {lager, ".*",
    + {git, "http://git-wip-us.apache.org/repos/asf/couchdb-lager.git",
    + {branch, "master"}}},
    +
    +
    + %% apps
    + {couch_collate, ".*",
    + {git,"http://git-wip-us.apache.org/repos/asf/couchdb-couch-collate.git",
    + {branch, "1994-merge-rcouch"}}},
    +
    + {couch, ".*",
    + {git, "http://git-wip-us.apache.org/repos/asf/couchdb-couch.git",
    + {branch, "1994-merge-rcouch"}}},
    +
    + {couch_httpd, ".*",
    + {git, "http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd.git",
    + {branch, "1994-merge-rcouch"}}},
    +
    + {couch_index, ".*",
    + {git, "http://git-wip-us.apache.org/repos/asf/couchdb-couch-index.git",
    + {branch, "1994-merge-rcouch"}}},
    +
    + {couch_mrview, ".*",
    + {git, "http://git-wip-us.apache.org/repos/asf/couchdb-couch-mrview.git",
    + {branch, "1994-merge-rcouch"}}},
    +
    + {couch_replicator, ".*",
    + {git, "http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator.git",
    + {branch, "1994-merge-rcouch"}}},
    +
    + {couch_plugins, ".*",
    + {git, "http://git-wip-us.apache.org/repos/asf/couchdb-couch-plugins.git",
    + {branch, "import"}}},
    +
    + {couch_dbupdates, ".*",
    + {git, "http://git-wip-us.apache.org/repos/asf/couchdb-couch-dbupdates.git",
    + {branch, "import"}}}
    +
      ]}.


      {deps_dir, ["deps"]}.

    -{libs_dir, ["apps", "deps/"]}.
    +{libs_dir, ["deps/"]}.

      {sub_dirs, [
    - "apps/couch_collate",
    - "apps/couch",
    - "apps/couch_httpd",
    - "apps/couch_index",
    - "apps/couch_mrview",
    - "apps/couch_replicator",
    - "apps/couch_plugins",
    - "apps/couch_dbupdates",
          "support/couch_rel",
          "rel"
      ]}.
  • Benoitc at Feb 13, 2014 at 6:14 pm
    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/ubrk.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/ubrk.h b/apps/couch_collate/platform/osx/icu/unicode/ubrk.h
    deleted file mode 100644
    index d57ba37..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/ubrk.h
    +++ /dev/null
    @@ -1,482 +0,0 @@
    -/*
    -******************************************************************************
    -* Copyright (C) 1996-2007, International Business Machines Corporation and others.
    -* All Rights Reserved.
    -******************************************************************************
    -*/
    -
    -#ifndef UBRK_H
    -#define UBRK_H
    -
    -#include "unicode/utypes.h"
    -#include "unicode/uloc.h"
    -#include "unicode/utext.h"
    -
    -/**
    - * A text-break iterator.
    - * For usage in C programs.
    - */
    -#ifndef UBRK_TYPEDEF_UBREAK_ITERATOR
    -# define UBRK_TYPEDEF_UBREAK_ITERATOR
    - /**
    - * Opaque type representing an ICU Break iterator object.
    - * @stable ICU 2.0
    - */
    - typedef void UBreakIterator;
    -#endif
    -
    -#if !UCONFIG_NO_BREAK_ITERATION
    -
    -#include "unicode/parseerr.h"
    -
    -/**
    - * \file
    - * \brief C API: BreakIterator
    - *
    - * <h2> BreakIterator C API </h2>
    - *
    - * The BreakIterator C API defines methods for finding the location
    - * of boundaries in text. Pointer to a UBreakIterator maintain a
    - * current position and scan over text returning the index of characters
    - * where boundaries occur.
    - * <p>
    - * Line boundary analysis determines where a text string can be broken
    - * when line-wrapping. The mechanism correctly handles punctuation and
    - * hyphenated words.
    - * <p>
    - * Sentence boundary analysis allows selection with correct
    - * interpretation of periods within numbers and abbreviations, and
    - * trailing punctuation marks such as quotation marks and parentheses.
    - * <p>
    - * Word boundary analysis is used by search and replace functions, as
    - * well as within text editing applications that allow the user to
    - * select words with a double click. Word selection provides correct
    - * interpretation of punctuation marks within and following
    - * words. Characters that are not part of a word, such as symbols or
    - * punctuation marks, have word-breaks on both sides.
    - * <p>
    - * Character boundary analysis allows users to interact with
    - * characters as they expect to, for example, when moving the cursor
    - * through a text string. Character boundary analysis provides correct
    - * navigation of through character strings, regardless of how the
    - * character is stored. For example, an accented character might be
    - * stored as a base character and a diacritical mark. What users
    - * consider to be a character can differ between languages.
    - * <p>
    - * Title boundary analysis locates all positions,
    - * typically starts of words, that should be set to Title Case
    - * when title casing the text.
    - * <p>
    - * The text boundary positions are found according to the rules
    - * described in Unicode Standard Annex #29, Text Boundaries, and
    - * Unicode Standard Annex #14, Line Breaking Properties. These
    - * are available at http://www.unicode.org/reports/tr14/ and
    - * http://www.unicode.org/reports/tr29/.
    - * <p>
    - * In addition to the plain C API defined in this header file, an
    - * object oriented C++ API with equivalent functionality is defined in the
    - * file brkiter.h.
    - * <p>
    - * Code snippits illustrating the use of the Break Iterator APIs
    - * are available in the ICU User Guide,
    - * http://icu-project.org/userguide/boundaryAnalysis.html
    - * and in the sample program icu/source/samples/break/break.cpp"
    - */
    -
    -/** The possible types of text boundaries. @stable ICU 2.0 */
    -typedef enum UBreakIteratorType {
    - /** Character breaks @stable ICU 2.0 */
    - UBRK_CHARACTER = 0,
    - /** Word breaks @stable ICU 2.0 */
    - UBRK_WORD = 1,
    - /** Line breaks @stable ICU 2.0 */
    - UBRK_LINE = 2,
    - /** Sentence breaks @stable ICU 2.0 */
    - UBRK_SENTENCE = 3,
    -
    -#ifndef U_HIDE_DEPRECATED_API
    - /**
    - * Title Case breaks
    - * The iterator created using this type locates title boundaries as described for
    - * Unicode 3.2 only. For Unicode 4.0 and above title boundary iteration,
    - * please use Word Boundary iterator.
    - *
    - * @deprecated ICU 2.8 Use the word break iterator for titlecasing for Unicode 4 and later.
    - */
    - UBRK_TITLE = 4,
    -#endif /* U_HIDE_DEPRECATED_API */
    - UBRK_COUNT = 5
    -} UBreakIteratorType;
    -
    -/** Value indicating all text boundaries have been returned.
    - * @stable ICU 2.0
    - */
    -#define UBRK_DONE ((int32_t) -1)
    -
    -
    -/**
    - * Enum constants for the word break tags returned by
    - * getRuleStatus(). A range of values is defined for each category of
    - * word, to allow for further subdivisions of a category in future releases.
    - * Applications should check for tag values falling within the range, rather
    - * than for single individual values.
    - * @stable ICU 2.2
    -*/
    -typedef enum UWordBreak {
    - /** Tag value for "words" that do not fit into any of other categories.
    - * Includes spaces and most punctuation. */
    - UBRK_WORD_NONE = 0,
    - /** Upper bound for tags for uncategorized words. */
    - UBRK_WORD_NONE_LIMIT = 100,
    - /** Tag value for words that appear to be numbers, lower limit. */
    - UBRK_WORD_NUMBER = 100,
    - /** Tag value for words that appear to be numbers, upper limit. */
    - UBRK_WORD_NUMBER_LIMIT = 200,
    - /** Tag value for words that contain letters, excluding
    - * hiragana, katakana or ideographic characters, lower limit. */
    - UBRK_WORD_LETTER = 200,
    - /** Tag value for words containing letters, upper limit */
    - UBRK_WORD_LETTER_LIMIT = 300,
    - /** Tag value for words containing kana characters, lower limit */
    - UBRK_WORD_KANA = 300,
    - /** Tag value for words containing kana characters, upper limit */
    - UBRK_WORD_KANA_LIMIT = 400,
    - /** Tag value for words containing ideographic characters, lower limit */
    - UBRK_WORD_IDEO = 400,
    - /** Tag value for words containing ideographic characters, upper limit */
    - UBRK_WORD_IDEO_LIMIT = 500
    -} UWordBreak;
    -
    -/**
    - * Enum constants for the line break tags returned by getRuleStatus().
    - * A range of values is defined for each category of
    - * word, to allow for further subdivisions of a category in future releases.
    - * Applications should check for tag values falling within the range, rather
    - * than for single individual values.
    - * @stable ICU 2.8
    -*/
    -typedef enum ULineBreakTag {
    - /** Tag value for soft line breaks, positions at which a line break
    - * is acceptable but not required */
    - UBRK_LINE_SOFT = 0,
    - /** Upper bound for soft line breaks. */
    - UBRK_LINE_SOFT_LIMIT = 100,
    - /** Tag value for a hard, or mandatory line break */
    - UBRK_LINE_HARD = 100,
    - /** Upper bound for hard line breaks. */
    - UBRK_LINE_HARD_LIMIT = 200
    -} ULineBreakTag;
    -
    -
    -
    -/**
    - * Enum constants for the sentence break tags returned by getRuleStatus().
    - * A range of values is defined for each category of
    - * sentence, to allow for further subdivisions of a category in future releases.
    - * Applications should check for tag values falling within the range, rather
    - * than for single individual values.
    - * @stable ICU 2.8
    -*/
    -typedef enum USentenceBreakTag {
    - /** Tag value for for sentences ending with a sentence terminator
    - * ('.', '?', '!', etc.) character, possibly followed by a
    - * hard separator (CR, LF, PS, etc.)
    - */
    - UBRK_SENTENCE_TERM = 0,
    - /** Upper bound for tags for sentences ended by sentence terminators. */
    - UBRK_SENTENCE_TERM_LIMIT = 100,
    - /** Tag value for for sentences that do not contain an ending
    - * sentence terminator ('.', '?', '!', etc.) character, but
    - * are ended only by a hard separator (CR, LF, PS, etc.) or end of input.
    - */
    - UBRK_SENTENCE_SEP = 100,
    - /** Upper bound for tags for sentences ended by a separator. */
    - UBRK_SENTENCE_SEP_LIMIT = 200
    - /** Tag value for a hard, or mandatory line break */
    -} USentenceBreakTag;
    -
    -
    -/**
    - * Open a new UBreakIterator for locating text boundaries for a specified locale.
    - * A UBreakIterator may be used for detecting character, line, word,
    - * and sentence breaks in text.
    - * @param type The type of UBreakIterator to open: one of UBRK_CHARACTER, UBRK_WORD,
    - * UBRK_LINE, UBRK_SENTENCE
    - * @param locale The locale specifying the text-breaking conventions.
    - * @param text The text to be iterated over.
    - * @param textLength The number of characters in text, or -1 if null-terminated.
    - * @param status A UErrorCode to receive any errors.
    - * @return A UBreakIterator for the specified locale.
    - * @see ubrk_openRules
    - * @stable ICU 2.0
    - */
    -U_STABLE UBreakIterator* U_EXPORT2
    -ubrk_open(UBreakIteratorType type,
    - const char *locale,
    - const UChar *text,
    - int32_t textLength,
    - UErrorCode *status);
    -
    -/**
    - * Open a new UBreakIterator for locating text boundaries using specified breaking rules.
    - * The rule syntax is ... (TBD)
    - * @param rules A set of rules specifying the text breaking conventions.
    - * @param rulesLength The number of characters in rules, or -1 if null-terminated.
    - * @param text The text to be iterated over. May be null, in which case ubrk_setText() is
    - * used to specify the text to be iterated.
    - * @param textLength The number of characters in text, or -1 if null-terminated.
    - * @param parseErr Receives position and context information for any syntax errors
    - * detected while parsing the rules.
    - * @param status A UErrorCode to receive any errors.
    - * @return A UBreakIterator for the specified rules.
    - * @see ubrk_open
    - * @stable ICU 2.2
    - */
    -U_STABLE UBreakIterator* U_EXPORT2
    -ubrk_openRules(const UChar *rules,
    - int32_t rulesLength,
    - const UChar *text,
    - int32_t textLength,
    - UParseError *parseErr,
    - UErrorCode *status);
    -
    -/**
    - * Thread safe cloning operation
    - * @param bi iterator to be cloned
    - * @param stackBuffer user allocated space for the new clone. If NULL new memory will be allocated.
    - * If buffer is not large enough, new memory will be allocated.
    - * Clients can use the U_BRK_SAFECLONE_BUFFERSIZE. This will probably be enough to avoid memory allocations.
    - * @param pBufferSize pointer to size of allocated space.
    - * If *pBufferSize == 0, a sufficient size for use in cloning will
    - * be returned ('pre-flighting')
    - * If *pBufferSize is not enough for a stack-based safe clone,
    - * new memory will be allocated.
    - * @param status to indicate whether the operation went on smoothly or there were errors
    - * An informational status value, U_SAFECLONE_ALLOCATED_ERROR, is used if any allocations were necessary.
    - * @return pointer to the new clone
    - * @stable ICU 2.0
    - */
    -U_STABLE UBreakIterator * U_EXPORT2
    -ubrk_safeClone(
    - const UBreakIterator *bi,
    - void *stackBuffer,
    - int32_t *pBufferSize,
    - UErrorCode *status);
    -
    -/**
    - * A recommended size (in bytes) for the memory buffer to be passed to ubrk_saveClone().
    - * @stable ICU 2.0
    - */
    -#define U_BRK_SAFECLONE_BUFFERSIZE 512
    -
    -/**
    -* Close a UBreakIterator.
    -* Once closed, a UBreakIterator may no longer be used.
    -* @param bi The break iterator to close.
    - * @stable ICU 2.0
    -*/
    -U_STABLE void U_EXPORT2
    -ubrk_close(UBreakIterator *bi);
    -
    -/**
    - * Sets an existing iterator to point to a new piece of text
    - * @param bi The iterator to use
    - * @param text The text to be set
    - * @param textLength The length of the text
    - * @param status The error code
    - * @stable ICU 2.0
    - */
    -U_STABLE void U_EXPORT2
    -ubrk_setText(UBreakIterator* bi,
    - const UChar* text,
    - int32_t textLength,
    - UErrorCode* status);
    -
    -
    -/**
    - * Sets an existing iterator to point to a new piece of text
    - * @param bi The iterator to use
    - * @param text The text to be set.
    - * This function makes a shallow clone of the supplied UText. This means
    - * that the caller is free to immediately close or otherwise reuse the
    - * UText that was passed as a parameter, but that the underlying text itself
    - * must not be altered while being referenced by the break iterator.
    - * @param status The error code
    - * @stable ICU 3.4
    - */
    -U_STABLE void U_EXPORT2
    -ubrk_setUText(UBreakIterator* bi,
    - UText* text,
    - UErrorCode* status);
    -
    -
    -
    -/**
    - * Determine the most recently-returned text boundary.
    - *
    - * @param bi The break iterator to use.
    - * @return The character index most recently returned by \ref ubrk_next, \ref ubrk_previous,
    - * \ref ubrk_first, or \ref ubrk_last.
    - * @stable ICU 2.0
    - */
    -U_STABLE int32_t U_EXPORT2
    -ubrk_current(const UBreakIterator *bi);
    -
    -/**
    - * Determine the text boundary following the current text boundary.
    - *
    - * @param bi The break iterator to use.
    - * @return The character index of the next text boundary, or UBRK_DONE
    - * if all text boundaries have been returned.
    - * @see ubrk_previous
    - * @stable ICU 2.0
    - */
    -U_STABLE int32_t U_EXPORT2
    -ubrk_next(UBreakIterator *bi);
    -
    -/**
    - * Determine the text boundary preceding the current text boundary.
    - *
    - * @param bi The break iterator to use.
    - * @return The character index of the preceding text boundary, or UBRK_DONE
    - * if all text boundaries have been returned.
    - * @see ubrk_next
    - * @stable ICU 2.0
    - */
    -U_STABLE int32_t U_EXPORT2
    -ubrk_previous(UBreakIterator *bi);
    -
    -/**
    - * Determine the index of the first character in the text being scanned.
    - * This is not always the same as index 0 of the text.
    - * @param bi The break iterator to use.
    - * @return The character index of the first character in the text being scanned.
    - * @see ubrk_last
    - * @stable ICU 2.0
    - */
    -U_STABLE int32_t U_EXPORT2
    -ubrk_first(UBreakIterator *bi);
    -
    -/**
    - * Determine the index immediately <EM>beyond</EM> the last character in the text being
    - * scanned.
    - * This is not the same as the last character.
    - * @param bi The break iterator to use.
    - * @return The character offset immediately <EM>beyond</EM> the last character in the
    - * text being scanned.
    - * @see ubrk_first
    - * @stable ICU 2.0
    - */
    -U_STABLE int32_t U_EXPORT2
    -ubrk_last(UBreakIterator *bi);
    -
    -/**
    - * Determine the text boundary preceding the specified offset.
    - * The value returned is always smaller than offset, or UBRK_DONE.
    - * @param bi The break iterator to use.
    - * @param offset The offset to begin scanning.
    - * @return The text boundary preceding offset, or UBRK_DONE.
    - * @see ubrk_following
    - * @stable ICU 2.0
    - */
    -U_STABLE int32_t U_EXPORT2
    -ubrk_preceding(UBreakIterator *bi,
    - int32_t offset);
    -
    -/**
    - * Determine the text boundary following the specified offset.
    - * The value returned is always greater than offset, or UBRK_DONE.
    - * @param bi The break iterator to use.
    - * @param offset The offset to begin scanning.
    - * @return The text boundary following offset, or UBRK_DONE.
    - * @see ubrk_preceding
    - * @stable ICU 2.0
    - */
    -U_STABLE int32_t U_EXPORT2
    -ubrk_following(UBreakIterator *bi,
    - int32_t offset);
    -
    -/**
    -* Get a locale for which text breaking information is available.
    -* A UBreakIterator in a locale returned by this function will perform the correct
    -* text breaking for the locale.
    -* @param index The index of the desired locale.
    -* @return A locale for which number text breaking information is available, or 0 if none.
    -* @see ubrk_countAvailable
    -* @stable ICU 2.0
    -*/
    -U_STABLE const char* U_EXPORT2
    -ubrk_getAvailable(int32_t index);
    -
    -/**
    -* Determine how many locales have text breaking information available.
    -* This function is most useful as determining the loop ending condition for
    -* calls to \ref ubrk_getAvailable.
    -* @return The number of locales for which text breaking information is available.
    -* @see ubrk_getAvailable
    -* @stable ICU 2.0
    -*/
    -U_STABLE int32_t U_EXPORT2
    -ubrk_countAvailable(void);
    -
    -
    -/**
    -* Returns true if the specfied position is a boundary position. As a side
    -* effect, leaves the iterator pointing to the first boundary position at
    -* or after "offset".
    -* @param bi The break iterator to use.
    -* @param offset the offset to check.
    -* @return True if "offset" is a boundary position.
    -* @stable ICU 2.0
    -*/
    -U_STABLE UBool U_EXPORT2
    -ubrk_isBoundary(UBreakIterator *bi, int32_t offset);
    -
    -/**
    - * Return the status from the break rule that determined the most recently
    - * returned break position. The values appear in the rule source
    - * within brackets, {123}, for example. For rules that do not specify a
    - * status, a default value of 0 is returned.
    - * <p>
    - * For word break iterators, the possible values are defined in enum UWordBreak.
    - * @stable ICU 2.2
    - */
    -U_STABLE int32_t U_EXPORT2
    -ubrk_getRuleStatus(UBreakIterator *bi);
    -
    -/**
    - * Get the statuses from the break rules that determined the most recently
    - * returned break position. The values appear in the rule source
    - * within brackets, {123}, for example. The default status value for rules
    - * that do not explicitly provide one is zero.
    - * <p>
    - * For word break iterators, the possible values are defined in enum UWordBreak.
    - * @param bi The break iterator to use
    - * @param fillInVec an array to be filled in with the status values.
    - * @param capacity the length of the supplied vector. A length of zero causes
    - * the function to return the number of status values, in the
    - * normal way, without attemtping to store any values.
    - * @param status receives error codes.
    - * @return The number of rule status values from rules that determined
    - * the most recent boundary returned by the break iterator.
    - * @stable ICU 3.0
    - */
    -U_STABLE int32_t U_EXPORT2
    -ubrk_getRuleStatusVec(UBreakIterator *bi, int32_t *fillInVec, int32_t capacity, UErrorCode *status);
    -
    -/**
    - * Return the locale of the break iterator. You can choose between the valid and
    - * the actual locale.
    - * @param bi break iterator
    - * @param type locale type (valid or actual)
    - * @param status error code
    - * @return locale string
    - * @stable ICU 2.8
    - */
    -U_STABLE const char* U_EXPORT2
    -ubrk_getLocaleByType(const UBreakIterator *bi, ULocDataLocaleType type, UErrorCode* status);
    -
    -
    -#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
    -
    -#endif

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/ucal.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/ucal.h b/apps/couch_collate/platform/osx/icu/unicode/ucal.h
    deleted file mode 100644
    index 9ba2668..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/ucal.h
    +++ /dev/null
    @@ -1,1161 +0,0 @@
    -/*
    - *******************************************************************************
    - * Copyright (C) 1996-2008, International Business Machines Corporation and
    - * others. All Rights Reserved.
    - *******************************************************************************
    - */
    -
    -#ifndef UCAL_H
    -#define UCAL_H
    -
    -#include "unicode/utypes.h"
    -#include "unicode/uenum.h"
    -#include "unicode/uloc.h"
    -
    -#if !UCONFIG_NO_FORMATTING
    -
    -/**
    - * \file
    - * \brief C API: Calendar
    - *
    - * <h2>Calendar C API</h2>
    - *
    - * UCalendar C API is used for converting between a <code>UDate</code> object
    - * and a set of integer fields such as <code>UCAL_YEAR</code>, <code>UCAL_MONTH</code>,
    - * <code>UCAL_DAY</code>, <code>UCAL_HOUR</code>, and so on.
    - * (A <code>UDate</code> object represents a specific instant in
    - * time with millisecond precision. See UDate
    - * for information about the <code>UDate</code> .)
    - *
    - * <p>
    - * Types of <code>UCalendar</code> interpret a <code>UDate</code>
    - * according to the rules of a specific calendar system. The U_STABLE
    - * provides the enum UCalendarType with UCAL_TRADITIONAL and
    - * UCAL_GREGORIAN.
    - * <p>
    - * Like other locale-sensitive C API, calendar API provides a
    - * function, <code>ucal_open()</code>, which returns a pointer to
    - * <code>UCalendar</code> whose time fields have been initialized
    - * with the current date and time. We need to specify the type of
    - * calendar to be opened and the timezoneId.
    - * \htmlonly<blockquote>\endhtmlonly
    - * <pre>
    - * \code
    - * UCalendar *caldef;
    - * UChar *tzId;
    - * UErrorCode status;
    - * tzId=(UChar*)malloc(sizeof(UChar) * (strlen("PST") +1) );
    - * u_uastrcpy(tzId, "PST");
    - * caldef=ucal_open(tzID, u_strlen(tzID), NULL, UCAL_TRADITIONAL, &status);
    - * \endcode
    - * </pre>
    - * \htmlonly</blockquote>\endhtmlonly
    - *
    - * <p>
    - * A <code>UCalendar</code> object can produce all the time field values
    - * needed to implement the date-time formatting for a particular language
    - * and calendar style (for example, Japanese-Gregorian, Japanese-Traditional).
    - *
    - * <p>
    - * When computing a <code>UDate</code> from time fields, two special circumstances
    - * may arise: there may be insufficient information to compute the
    - * <code>UDate</code> (such as only year and month but no day in the month),
    - * or there may be inconsistent information (such as "Tuesday, July 15, 1996"
    - * -- July 15, 1996 is actually a Monday).
    - *
    - * <p>
    - * <strong>Insufficient information.</strong> The calendar will use default
    - * information to specify the missing fields. This may vary by calendar; for
    - * the Gregorian calendar, the default for a field is the same as that of the
    - * start of the epoch: i.e., UCAL_YEAR = 1970, UCAL_MONTH = JANUARY, UCAL_DATE = 1, etc.
    - *
    - * <p>
    - * <strong>Inconsistent information.</strong> If fields conflict, the calendar
    - * will give preference to fields set more recently. For example, when
    - * determining the day, the calendar will look for one of the following
    - * combinations of fields. The most recent combination, as determined by the
    - * most recently set single field, will be used.
    - *
    - * \htmlonly<blockquote>\endhtmlonly
    - * <pre>
    - * \code
    - * UCAL_MONTH + UCAL_DAY_OF_MONTH
    - * UCAL_MONTH + UCAL_WEEK_OF_MONTH + UCAL_DAY_OF_WEEK
    - * UCAL_MONTH + UCAL_DAY_OF_WEEK_IN_MONTH + UCAL_DAY_OF_WEEK
    - * UCAL_DAY_OF_YEAR
    - * UCAL_DAY_OF_WEEK + UCAL_WEEK_OF_YEAR
    - * \endcode
    - * </pre>
    - * \htmlonly</blockquote>\endhtmlonly
    - *
    - * For the time of day:
    - *
    - * \htmlonly<blockquote>\endhtmlonly
    - * <pre>
    - * \code
    - * UCAL_HOUR_OF_DAY
    - * UCAL_AM_PM + UCAL_HOUR
    - * \endcode
    - * </pre>
    - * \htmlonly</blockquote>\endhtmlonly
    - *
    - * <p>
    - * <strong>Note:</strong> for some non-Gregorian calendars, different
    - * fields may be necessary for complete disambiguation. For example, a full
    - * specification of the historial Arabic astronomical calendar requires year,
    - * month, day-of-month <em>and</em> day-of-week in some cases.
    - *
    - * <p>
    - * <strong>Note:</strong> There are certain possible ambiguities in
    - * interpretation of certain singular times, which are resolved in the
    - * following ways:
    - * <ol>
    - * <li> 24:00:00 "belongs" to the following day. That is,
    - * 23:59 on Dec 31, 1969 &lt; 24:00 on Jan 1, 1970 &lt; 24:01:00 on Jan 1, 1970
    - *
    - * <li> Although historically not precise, midnight also belongs to "am",
    - * and noon belongs to "pm", so on the same day,
    - * 12:00 am (midnight) &lt; 12:01 am, and 12:00 pm (noon) &lt; 12:01 pm
    - * </ol>
    - *
    - * <p>
    - * The date or time format strings are not part of the definition of a
    - * calendar, as those must be modifiable or overridable by the user at
    - * runtime. Use {@link DateFormat}
    - * to format dates.
    - *
    - * <p>
    - * <code>Calendar</code> provides an API for field "rolling", where fields
    - * can be incremented or decremented, but wrap around. For example, rolling the
    - * month up in the date <code>December 12, <b>1996</b></code> results in
    - * <code>January 12, <b>1996</b></code>.
    - *
    - * <p>
    - * <code>Calendar</code> also provides a date arithmetic function for
    - * adding the specified (signed) amount of time to a particular time field.
    - * For example, subtracting 5 days from the date <code>September 12, 1996</code>
    - * results in <code>September 7, 1996</code>.
    - *
    - * @stable ICU 2.0
    - */
    -
    -/** A calendar.
    - * For usage in C programs.
    - * @stable ICU 2.0
    - */
    -typedef void* UCalendar;
    -
    -/** Possible types of UCalendars
    - * @stable ICU 2.0
    - */
    -enum UCalendarType {
    - /**
    - * Despite the name, UCAL_TRADITIONAL designates the locale's default calendar,
    - * which may be the Gregorian calendar or some other calendar.
    - * @stable ICU 2.0
    - */
    - UCAL_TRADITIONAL,
    - /**
    - * Unambiguously designates the Gregorian calendar for the locale.
    - * @stable ICU 2.0
    - */
    - UCAL_GREGORIAN,
    - /**
    - * A better name for UCAL_TRADITIONAL.
    - * @draft ICU 4.2
    - */
    - UCAL_DEFAULT = UCAL_TRADITIONAL
    -};
    -
    -/** @stable ICU 2.0 */
    -typedef enum UCalendarType UCalendarType;
    -
    -/** Possible fields in a UCalendar
    - * @stable ICU 2.0
    - */
    -enum UCalendarDateFields {
    - /**
    - * Field number indicating the era, e.g., AD or BC in the Gregorian (Julian) calendar.
    - * This is a calendar-specific value.
    - * @stable ICU 2.6
    - */
    - UCAL_ERA,
    -
    - /**
    - * Field number indicating the year. This is a calendar-specific value.
    - * @stable ICU 2.6
    - */
    - UCAL_YEAR,
    -
    - /**
    - * Field number indicating the month. This is a calendar-specific value.
    - * The first month of the year is
    - * <code>JANUARY</code>; the last depends on the number of months in a year.
    - * @see #UCAL_JANUARY
    - * @see #UCAL_FEBRUARY
    - * @see #UCAL_MARCH
    - * @see #UCAL_APRIL
    - * @see #UCAL_MAY
    - * @see #UCAL_JUNE
    - * @see #UCAL_JULY
    - * @see #UCAL_AUGUST
    - * @see #UCAL_SEPTEMBER
    - * @see #UCAL_OCTOBER
    - * @see #UCAL_NOVEMBER
    - * @see #UCAL_DECEMBER
    - * @see #UCAL_UNDECIMBER
    - * @stable ICU 2.6
    - */
    - UCAL_MONTH,
    -
    - /**
    - * Field number indicating the
    - * week number within the current year. The first week of the year, as
    - * defined by <code>UCAL_FIRST_DAY_OF_WEEK</code> and <code>UCAL_MINIMAL_DAYS_IN_FIRST_WEEK</code>
    - * attributes, has value 1. Subclasses define
    - * the value of <code>UCAL_WEEK_OF_YEAR</code> for days before the first week of
    - * the year.
    - * @see ucal_getAttribute
    - * @see ucal_setAttribute
    - * @stable ICU 2.6
    - */
    - UCAL_WEEK_OF_YEAR,
    -
    - /**
    - * Field number indicating the
    - * week number within the current month. The first week of the month, as
    - * defined by <code>UCAL_FIRST_DAY_OF_WEEK</code> and <code>UCAL_MINIMAL_DAYS_IN_FIRST_WEEK</code>
    - * attributes, has value 1. Subclasses define
    - * the value of <code>WEEK_OF_MONTH</code> for days before the first week of
    - * the month.
    - * @see ucal_getAttribute
    - * @see ucal_setAttribute
    - * @see #UCAL_FIRST_DAY_OF_WEEK
    - * @see #UCAL_MINIMAL_DAYS_IN_FIRST_WEEK
    - * @stable ICU 2.6
    - */
    - UCAL_WEEK_OF_MONTH,
    -
    - /**
    - * Field number indicating the
    - * day of the month. This is a synonym for <code>DAY_OF_MONTH</code>.
    - * The first day of the month has value 1.
    - * @see #UCAL_DAY_OF_MONTH
    - * @stable ICU 2.6
    - */
    - UCAL_DATE,
    -
    - /**
    - * Field number indicating the day
    - * number within the current year. The first day of the year has value 1.
    - * @stable ICU 2.6
    - */
    - UCAL_DAY_OF_YEAR,
    -
    - /**
    - * Field number indicating the day
    - * of the week. This field takes values <code>SUNDAY</code>,
    - * <code>MONDAY</code>, <code>TUESDAY</code>, <code>WEDNESDAY</code>,
    - * <code>THURSDAY</code>, <code>FRIDAY</code>, and <code>SATURDAY</code>.
    - * @see #UCAL_SUNDAY
    - * @see #UCAL_MONDAY
    - * @see #UCAL_TUESDAY
    - * @see #UCAL_WEDNESDAY
    - * @see #UCAL_THURSDAY
    - * @see #UCAL_FRIDAY
    - * @see #UCAL_SATURDAY
    - * @stable ICU 2.6
    - */
    - UCAL_DAY_OF_WEEK,
    -
    - /**
    - * Field number indicating the
    - * ordinal number of the day of the week within the current month. Together
    - * with the <code>DAY_OF_WEEK</code> field, this uniquely specifies a day
    - * within a month. Unlike <code>WEEK_OF_MONTH</code> and
    - * <code>WEEK_OF_YEAR</code>, this field's value does <em>not</em> depend on
    - * <code>getFirstDayOfWeek()</code> or
    - * <code>getMinimalDaysInFirstWeek()</code>. <code>DAY_OF_MONTH 1</code>
    - * through <code>7</code> always correspond to <code>DAY_OF_WEEK_IN_MONTH
    - * 1</code>; <code>8</code> through <code>15</code> correspond to
    - * <code>DAY_OF_WEEK_IN_MONTH 2</code>, and so on.
    - * <code>DAY_OF_WEEK_IN_MONTH 0</code> indicates the week before
    - * <code>DAY_OF_WEEK_IN_MONTH 1</code>. Negative values count back from the
    - * end of the month, so the last Sunday of a month is specified as
    - * <code>DAY_OF_WEEK = SUNDAY, DAY_OF_WEEK_IN_MONTH = -1</code>. Because
    - * negative values count backward they will usually be aligned differently
    - * within the month than positive values. For example, if a month has 31
    - * days, <code>DAY_OF_WEEK_IN_MONTH -1</code> will overlap
    - * <code>DAY_OF_WEEK_IN_MONTH 5</code> and the end of <code>4</code>.
    - * @see #UCAL_DAY_OF_WEEK
    - * @see #UCAL_WEEK_OF_MONTH
    - * @stable ICU 2.6
    - */
    - UCAL_DAY_OF_WEEK_IN_MONTH,
    -
    - /**
    - * Field number indicating
    - * whether the <code>HOUR</code> is before or after noon.
    - * E.g., at 10:04:15.250 PM the <code>AM_PM</code> is <code>PM</code>.
    - * @see #UCAL_AM
    - * @see #UCAL_PM
    - * @see #UCAL_HOUR
    - * @stable ICU 2.6
    - */
    - UCAL_AM_PM,
    -
    - /**
    - * Field number indicating the
    - * hour of the morning or afternoon. <code>HOUR</code> is used for the 12-hour
    - * clock.
    - * E.g., at 10:04:15.250 PM the <code>HOUR</code> is 10.
    - * @see #UCAL_AM_PM
    - * @see #UCAL_HOUR_OF_DAY
    - * @stable ICU 2.6
    - */
    - UCAL_HOUR,
    -
    - /**
    - * Field number indicating the
    - * hour of the day. <code>HOUR_OF_DAY</code> is used for the 24-hour clock.
    - * E.g., at 10:04:15.250 PM the <code>HOUR_OF_DAY</code> is 22.
    - * @see #UCAL_HOUR
    - * @stable ICU 2.6
    - */
    - UCAL_HOUR_OF_DAY,
    -
    - /**
    - * Field number indicating the
    - * minute within the hour.
    - * E.g., at 10:04:15.250 PM the <code>UCAL_MINUTE</code> is 4.
    - * @stable ICU 2.6
    - */
    - UCAL_MINUTE,
    -
    - /**
    - * Field number indicating the
    - * second within the minute.
    - * E.g., at 10:04:15.250 PM the <code>UCAL_SECOND</code> is 15.
    - * @stable ICU 2.6
    - */
    - UCAL_SECOND,
    -
    - /**
    - * Field number indicating the
    - * millisecond within the second.
    - * E.g., at 10:04:15.250 PM the <code>UCAL_MILLISECOND</code> is 250.
    - * @stable ICU 2.6
    - */
    - UCAL_MILLISECOND,
    -
    - /**
    - * Field number indicating the
    - * raw offset from GMT in milliseconds.
    - * @stable ICU 2.6
    - */
    - UCAL_ZONE_OFFSET,
    -
    - /**
    - * Field number indicating the
    - * daylight savings offset in milliseconds.
    - * @stable ICU 2.6
    - */
    - UCAL_DST_OFFSET,
    -
    - /**
    - * Field number
    - * indicating the extended year corresponding to the
    - * <code>UCAL_WEEK_OF_YEAR</code> field. This may be one greater or less
    - * than the value of <code>UCAL_EXTENDED_YEAR</code>.
    - * @stable ICU 2.6
    - */
    - UCAL_YEAR_WOY,
    -
    - /**
    - * Field number
    - * indicating the localized day of week. This will be a value from 1
    - * to 7 inclusive, with 1 being the localized first day of the week.
    - * @stable ICU 2.6
    - */
    - UCAL_DOW_LOCAL,
    -
    - /**
    - * Year of this calendar system, encompassing all supra-year fields. For example,
    - * in Gregorian/Julian calendars, positive Extended Year values indicate years AD,
    - * 1 BC = 0 extended, 2 BC = -1 extended, and so on.
    - * @stable ICU 2.8
    - */
    - UCAL_EXTENDED_YEAR,
    -
    - /**
    - * Field number
    - * indicating the modified Julian day number. This is different from
    - * the conventional Julian day number in two regards. First, it
    - * demarcates days at local zone midnight, rather than noon GMT.
    - * Second, it is a local number; that is, it depends on the local time
    - * zone. It can be thought of as a single number that encompasses all
    - * the date-related fields.
    - * @stable ICU 2.8
    - */
    - UCAL_JULIAN_DAY,
    -
    - /**
    - * Ranges from 0 to 23:59:59.999 (regardless of DST). This field behaves <em>exactly</em>
    - * like a composite of all time-related fields, not including the zone fields. As such,
    - * it also reflects discontinuities of those fields on DST transition days. On a day
    - * of DST onset, it will jump forward. On a day of DST cessation, it will jump
    - * backward. This reflects the fact that it must be combined with the DST_OFFSET field
    - * to obtain a unique local time value.
    - * @stable ICU 2.8
    - */
    - UCAL_MILLISECONDS_IN_DAY,
    -
    - /**
    - * Whether or not the current month is a leap month (0 or 1). See the Chinese calendar for
    - * an example of this.
    - */
    - UCAL_IS_LEAP_MONTH,
    -
    - /**
    - * Field count
    - * @stable ICU 2.6
    - */
    - UCAL_FIELD_COUNT,
    -
    - /**
    - * Field number indicating the
    - * day of the month. This is a synonym for <code>UCAL_DATE</code>.
    - * The first day of the month has value 1.
    - * @see #UCAL_DATE
    - * Synonym for UCAL_DATE
    - * @stable ICU 2.8
    - **/
    - UCAL_DAY_OF_MONTH=UCAL_DATE
    -};
    -
    -/** @stable ICU 2.0 */
    -typedef enum UCalendarDateFields UCalendarDateFields;
    - /**
    - * Useful constant for days of week. Note: Calendar day-of-week is 1-based. Clients
    - * who create locale resources for the field of first-day-of-week should be aware of
    - * this. For instance, in US locale, first-day-of-week is set to 1, i.e., UCAL_SUNDAY.
    - */
    -/** Possible days of the week in a UCalendar
    - * @stable ICU 2.0
    - */
    -enum UCalendarDaysOfWeek {
    - /** Sunday */
    - UCAL_SUNDAY = 1,
    - /** Monday */
    - UCAL_MONDAY,
    - /** Tuesday */
    - UCAL_TUESDAY,
    - /** Wednesday */
    - UCAL_WEDNESDAY,
    - /** Thursday */
    - UCAL_THURSDAY,
    - /** Friday */
    - UCAL_FRIDAY,
    - /** Saturday */
    - UCAL_SATURDAY
    -};
    -
    -/** @stable ICU 2.0 */
    -typedef enum UCalendarDaysOfWeek UCalendarDaysOfWeek;
    -
    -/** Possible months in a UCalendar. Note: Calendar month is 0-based.
    - * @stable ICU 2.0
    - */
    -enum UCalendarMonths {
    - /** January */
    - UCAL_JANUARY,
    - /** February */
    - UCAL_FEBRUARY,
    - /** March */
    - UCAL_MARCH,
    - /** April */
    - UCAL_APRIL,
    - /** May */
    - UCAL_MAY,
    - /** June */
    - UCAL_JUNE,
    - /** July */
    - UCAL_JULY,
    - /** August */
    - UCAL_AUGUST,
    - /** September */
    - UCAL_SEPTEMBER,
    - /** October */
    - UCAL_OCTOBER,
    - /** November */
    - UCAL_NOVEMBER,
    - /** December */
    - UCAL_DECEMBER,
    - /** Value of the <code>UCAL_MONTH</code> field indicating the
    - * thirteenth month of the year. Although the Gregorian calendar
    - * does not use this value, lunar calendars do.
    - */
    - UCAL_UNDECIMBER
    -};
    -
    -/** @stable ICU 2.0 */
    -typedef enum UCalendarMonths UCalendarMonths;
    -
    -/** Possible AM/PM values in a UCalendar
    - * @stable ICU 2.0
    - */
    -enum UCalendarAMPMs {
    - /** AM */
    - UCAL_AM,
    - /** PM */
    - UCAL_PM
    -};
    -
    -/** @stable ICU 2.0 */
    -typedef enum UCalendarAMPMs UCalendarAMPMs;
    -
    -/**
    - * Create an enumeration over all time zones.
    - *
    - * @param ec input/output error code
    - *
    - * @return an enumeration object that the caller must dispose of using
    - * uenum_close(), or NULL upon failure. In case of failure *ec will
    - * indicate the error.
    - *
    - * @stable ICU 2.6
    - */
    -U_STABLE UEnumeration* U_EXPORT2
    -ucal_openTimeZones(UErrorCode* ec);
    -
    -/**
    - * Create an enumeration over all time zones associated with the given
    - * country. Some zones are affiliated with no country (e.g., "UTC");
    - * these may also be retrieved, as a group.
    - *
    - * @param country the ISO 3166 two-letter country code, or NULL to
    - * retrieve zones not affiliated with any country
    - *
    - * @param ec input/output error code
    - *
    - * @return an enumeration object that the caller must dispose of using
    - * uenum_close(), or NULL upon failure. In case of failure *ec will
    - * indicate the error.
    - *
    - * @stable ICU 2.6
    - */
    -U_STABLE UEnumeration* U_EXPORT2
    -ucal_openCountryTimeZones(const char* country, UErrorCode* ec);
    -
    -/**
    - * Return the default time zone. The default is determined initially
    - * by querying the host operating system. It may be changed with
    - * ucal_setDefaultTimeZone() or with the C++ TimeZone API.
    - *
    - * @param result A buffer to receive the result, or NULL
    - *
    - * @param resultCapacity The capacity of the result buffer
    - *
    - * @param ec input/output error code
    - *
    - * @return The result string length, not including the terminating
    - * null
    - *
    - * @stable ICU 2.6
    - */
    -U_STABLE int32_t U_EXPORT2
    -ucal_getDefaultTimeZone(UChar* result, int32_t resultCapacity, UErrorCode* ec);
    -
    -/**
    - * Set the default time zone.
    - *
    - * @param zoneID null-terminated time zone ID
    - *
    - * @param ec input/output error code
    - *
    - * @stable ICU 2.6
    - */
    -U_STABLE void U_EXPORT2
    -ucal_setDefaultTimeZone(const UChar* zoneID, UErrorCode* ec);
    -
    -/**
    - * Return the amount of time in milliseconds that the clock is
    - * advanced during daylight savings time for the given time zone, or
    - * zero if the time zone does not observe daylight savings time.
    - *
    - * @param zoneID null-terminated time zone ID
    - *
    - * @param ec input/output error code
    - *
    - * @return the number of milliseconds the time is advanced with
    - * respect to standard time when the daylight savings rules are in
    - * effect. This is always a non-negative number, most commonly either
    - * 3,600,000 (one hour) or zero.
    - *
    - * @stable ICU 2.6
    - */
    -U_STABLE int32_t U_EXPORT2
    -ucal_getDSTSavings(const UChar* zoneID, UErrorCode* ec);
    -
    -/**
    - * Get the current date and time.
    - * The value returned is represented as milliseconds from the epoch.
    - * @return The current date and time.
    - * @stable ICU 2.0
    - */
    -U_STABLE UDate U_EXPORT2
    -ucal_getNow(void);
    -
    -/**
    - * Open a UCalendar.
    - * A UCalendar may be used to convert a millisecond value to a year,
    - * month, and day.
    - * @param zoneID The desired TimeZone ID. If 0, use the default time zone.
    - * @param len The length of zoneID, or -1 if null-terminated.
    - * @param locale The desired locale
    - * @param type The type of UCalendar to open. This can be UCAL_GREGORIAN to open the Gregorian
    - * calendar for the locale, or UCAL_DEFAULT to open the default calendar for the locale (the
    - * default calendar may also be Gregorian). To open a specific non-Gregorian calendar for the
    - * locale, use uloc_setKeywordValue to set the value of the calendar keyword for the locale
    - * and then pass the locale to ucal_open with UCAL_DEFAULT as the type.
    - * @param status A pointer to an UErrorCode to receive any errors
    - * @return A pointer to a UCalendar, or 0 if an error occurred.
    - * @stable ICU 2.0
    - */
    -U_STABLE UCalendar* U_EXPORT2
    -ucal_open(const UChar* zoneID,
    - int32_t len,
    - const char* locale,
    - UCalendarType type,
    - UErrorCode* status);
    -
    -/**
    - * Close a UCalendar.
    - * Once closed, a UCalendar may no longer be used.
    - * @param cal The UCalendar to close.
    - * @stable ICU 2.0
    - */
    -U_STABLE void U_EXPORT2
    -ucal_close(UCalendar *cal);
    -
    -/**
    - * Open a copy of a UCalendar.
    - * This function performs a deep copy.
    - * @param cal The calendar to copy
    - * @param status A pointer to an UErrorCode to receive any errors.
    - * @return A pointer to a UCalendar identical to cal.
    - * @draft ICU 4.0
    - */
    -U_DRAFT UCalendar* U_EXPORT2
    -ucal_clone(const UCalendar* cal,
    - UErrorCode* status);
    -
    -/**
    - * Set the TimeZone used by a UCalendar.
    - * A UCalendar uses a timezone for converting from Greenwich time to local time.
    - * @param cal The UCalendar to set.
    - * @param zoneID The desired TimeZone ID. If 0, use the default time zone.
    - * @param len The length of zoneID, or -1 if null-terminated.
    - * @param status A pointer to an UErrorCode to receive any errors.
    - * @stable ICU 2.0
    - */
    -U_STABLE void U_EXPORT2
    -ucal_setTimeZone(UCalendar* cal,
    - const UChar* zoneID,
    - int32_t len,
    - UErrorCode* status);
    -
    -/**
    - * Possible formats for a UCalendar's display name
    - * @stable ICU 2.0
    - */
    -enum UCalendarDisplayNameType {
    - /** Standard display name */
    - UCAL_STANDARD,
    - /** Short standard display name */
    - UCAL_SHORT_STANDARD,
    - /** Daylight savings display name */
    - UCAL_DST,
    - /** Short daylight savings display name */
    - UCAL_SHORT_DST
    -};
    -
    -/** @stable ICU 2.0 */
    -typedef enum UCalendarDisplayNameType UCalendarDisplayNameType;
    -
    -/**
    - * Get the display name for a UCalendar's TimeZone.
    - * A display name is suitable for presentation to a user.
    - * @param cal The UCalendar to query.
    - * @param type The desired display name format; one of UCAL_STANDARD, UCAL_SHORT_STANDARD,
    - * UCAL_DST, UCAL_SHORT_DST
    - * @param locale The desired locale for the display name.
    - * @param result A pointer to a buffer to receive the formatted number.
    - * @param resultLength The maximum size of result.
    - * @param status A pointer to an UErrorCode to receive any errors
    - * @return The total buffer size needed; if greater than resultLength, the output was truncated.
    - * @stable ICU 2.0
    - */
    -U_STABLE int32_t U_EXPORT2
    -ucal_getTimeZoneDisplayName(const UCalendar* cal,
    - UCalendarDisplayNameType type,
    - const char* locale,
    - UChar* result,
    - int32_t resultLength,
    - UErrorCode* status);
    -
    -/**
    - * Determine if a UCalendar is currently in daylight savings time.
    - * Daylight savings time is not used in all parts of the world.
    - * @param cal The UCalendar to query.
    - * @param status A pointer to an UErrorCode to receive any errors
    - * @return TRUE if cal is currently in daylight savings time, FALSE otherwise
    - * @stable ICU 2.0
    - */
    -U_STABLE UBool U_EXPORT2
    -ucal_inDaylightTime(const UCalendar* cal,
    - UErrorCode* status );
    -
    -/**
    - * Sets the GregorianCalendar change date. This is the point when the switch from
    - * Julian dates to Gregorian dates occurred. Default is 00:00:00 local time, October
    - * 15, 1582. Previous to this time and date will be Julian dates.
    - *
    - * This function works only for Gregorian calendars. If the UCalendar is not
    - * an instance of a Gregorian calendar, then a U_UNSUPPORTED_ERROR
    - * error code is set.
    - *
    - * @param cal The calendar object.
    - * @param date The given Gregorian cutover date.
    - * @param pErrorCode Pointer to a standard ICU error code. Its input value must
    - * pass the U_SUCCESS() test, or else the function returns
    - * immediately. Check for U_FAILURE() on output or use with
    - * function chaining. (See User Guide for details.)
    - *
    - * @see GregorianCalendar::setGregorianChange
    - * @see ucal_getGregorianChange
    - * @stable ICU 3.6
    - */
    -U_STABLE void U_EXPORT2
    -ucal_setGregorianChange(UCalendar *cal, UDate date, UErrorCode *pErrorCode);
    -
    -/**
    - * Gets the Gregorian Calendar change date. This is the point when the switch from
    - * Julian dates to Gregorian dates occurred. Default is 00:00:00 local time, October
    - * 15, 1582. Previous to this time and date will be Julian dates.
    - *
    - * This function works only for Gregorian calendars. If the UCalendar is not
    - * an instance of a Gregorian calendar, then a U_UNSUPPORTED_ERROR
    - * error code is set.
    - *
    - * @param cal The calendar object.
    - * @param pErrorCode Pointer to a standard ICU error code. Its input value must
    - * pass the U_SUCCESS() test, or else the function returns
    - * immediately. Check for U_FAILURE() on output or use with
    - * function chaining. (See User Guide for details.)
    - * @return The Gregorian cutover time for this calendar.
    - *
    - * @see GregorianCalendar::getGregorianChange
    - * @see ucal_setGregorianChange
    - * @stable ICU 3.6
    - */
    -U_STABLE UDate U_EXPORT2
    -ucal_getGregorianChange(const UCalendar *cal, UErrorCode *pErrorCode);
    -
    -/**
    - * Types of UCalendar attributes
    - * @stable ICU 2.0
    - */
    -enum UCalendarAttribute {
    - /** Lenient parsing */
    - UCAL_LENIENT,
    - /** First day of week */
    - UCAL_FIRST_DAY_OF_WEEK,
    - /** Minimum number of days in first week */
    - UCAL_MINIMAL_DAYS_IN_FIRST_WEEK
    -};
    -
    -/** @stable ICU 2.0 */
    -typedef enum UCalendarAttribute UCalendarAttribute;
    -
    -/**
    - * Get a numeric attribute associated with a UCalendar.
    - * Numeric attributes include the first day of the week, or the minimal numbers
    - * of days in the first week of the month.
    - * @param cal The UCalendar to query.
    - * @param attr The desired attribute; one of UCAL_LENIENT, UCAL_FIRST_DAY_OF_WEEK,
    - * or UCAL_MINIMAL_DAYS_IN_FIRST_WEEK
    - * @return The value of attr.
    - * @see ucal_setAttribute
    - * @stable ICU 2.0
    - */
    -U_STABLE int32_t U_EXPORT2
    -ucal_getAttribute(const UCalendar* cal,
    - UCalendarAttribute attr);
    -
    -/**
    - * Set a numeric attribute associated with a UCalendar.
    - * Numeric attributes include the first day of the week, or the minimal numbers
    - * of days in the first week of the month.
    - * @param cal The UCalendar to set.
    - * @param attr The desired attribute; one of UCAL_LENIENT, UCAL_FIRST_DAY_OF_WEEK,
    - * or UCAL_MINIMAL_DAYS_IN_FIRST_WEEK
    - * @param newValue The new value of attr.
    - * @see ucal_getAttribute
    - * @stable ICU 2.0
    - */
    -U_STABLE void U_EXPORT2
    -ucal_setAttribute(UCalendar* cal,
    - UCalendarAttribute attr,
    - int32_t newValue);
    -
    -/**
    - * Get a locale for which calendars are available.
    - * A UCalendar in a locale returned by this function will contain the correct
    - * day and month names for the locale.
    - * @param index The index of the desired locale.
    - * @return A locale for which calendars are available, or 0 if none.
    - * @see ucal_countAvailable
    - * @stable ICU 2.0
    - */
    -U_STABLE const char* U_EXPORT2
    -ucal_getAvailable(int32_t index);
    -
    -/**
    - * Determine how many locales have calendars available.
    - * This function is most useful as determining the loop ending condition for
    - * calls to \ref ucal_getAvailable.
    - * @return The number of locales for which calendars are available.
    - * @see ucal_getAvailable
    - * @stable ICU 2.0
    - */
    -U_STABLE int32_t U_EXPORT2
    -ucal_countAvailable(void);
    -
    -/**
    - * Get a UCalendar's current time in millis.
    - * The time is represented as milliseconds from the epoch.
    - * @param cal The UCalendar to query.
    - * @param status A pointer to an UErrorCode to receive any errors
    - * @return The calendar's current time in millis.
    - * @see ucal_setMillis
    - * @see ucal_setDate
    - * @see ucal_setDateTime
    - * @stable ICU 2.0
    - */
    -U_STABLE UDate U_EXPORT2
    -ucal_getMillis(const UCalendar* cal,
    - UErrorCode* status);
    -
    -/**
    - * Set a UCalendar's current time in millis.
    - * The time is represented as milliseconds from the epoch.
    - * @param cal The UCalendar to set.
    - * @param dateTime The desired date and time.
    - * @param status A pointer to an UErrorCode to receive any errors
    - * @see ucal_getMillis
    - * @see ucal_setDate
    - * @see ucal_setDateTime
    - * @stable ICU 2.0
    - */
    -U_STABLE void U_EXPORT2
    -ucal_setMillis(UCalendar* cal,
    - UDate dateTime,
    - UErrorCode* status );
    -
    -/**
    - * Set a UCalendar's current date.
    - * The date is represented as a series of 32-bit integers.
    - * @param cal The UCalendar to set.
    - * @param year The desired year.
    - * @param month The desired month; one of UCAL_JANUARY, UCAL_FEBRUARY, UCAL_MARCH, UCAL_APRIL, UCAL_MAY,
    - * UCAL_JUNE, UCAL_JULY, UCAL_AUGUST, UCAL_SEPTEMBER, UCAL_OCTOBER, UCAL_NOVEMBER, UCAL_DECEMBER, UCAL_UNDECIMBER
    - * @param date The desired day of the month.
    - * @param status A pointer to an UErrorCode to receive any errors
    - * @see ucal_getMillis
    - * @see ucal_setMillis
    - * @see ucal_setDateTime
    - * @stable ICU 2.0
    - */
    -U_STABLE void U_EXPORT2
    -ucal_setDate(UCalendar* cal,
    - int32_t year,
    - int32_t month,
    - int32_t date,
    - UErrorCode* status);
    -
    -/**
    - * Set a UCalendar's current date.
    - * The date is represented as a series of 32-bit integers.
    - * @param cal The UCalendar to set.
    - * @param year The desired year.
    - * @param month The desired month; one of UCAL_JANUARY, UCAL_FEBRUARY, UCAL_MARCH, UCAL_APRIL, UCAL_MAY,
    - * UCAL_JUNE, UCAL_JULY, UCAL_AUGUST, UCAL_SEPTEMBER, UCAL_OCTOBER, UCAL_NOVEMBER, UCAL_DECEMBER, UCAL_UNDECIMBER
    - * @param date The desired day of the month.
    - * @param hour The desired hour of day.
    - * @param minute The desired minute.
    - * @param second The desirec second.
    - * @param status A pointer to an UErrorCode to receive any errors
    - * @see ucal_getMillis
    - * @see ucal_setMillis
    - * @see ucal_setDate
    - * @stable ICU 2.0
    - */
    -U_STABLE void U_EXPORT2
    -ucal_setDateTime(UCalendar* cal,
    - int32_t year,
    - int32_t month,
    - int32_t date,
    - int32_t hour,
    - int32_t minute,
    - int32_t second,
    - UErrorCode* status);
    -
    -/**
    - * Returns TRUE if two UCalendars are equivalent. Equivalent
    - * UCalendars will behave identically, but they may be set to
    - * different times.
    - * @param cal1 The first of the UCalendars to compare.
    - * @param cal2 The second of the UCalendars to compare.
    - * @return TRUE if cal1 and cal2 are equivalent, FALSE otherwise.
    - * @stable ICU 2.0
    - */
    -U_STABLE UBool U_EXPORT2
    -ucal_equivalentTo(const UCalendar* cal1,
    - const UCalendar* cal2);
    -
    -/**
    - * Add a specified signed amount to a particular field in a UCalendar.
    - * This can modify more significant fields in the calendar.
    - * @param cal The UCalendar to which to add.
    - * @param field The field to which to add the signed value; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
    - * UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
    - * UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
    - * UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
    - * @param amount The signed amount to add to field. If the amount causes the value
    - * to exceed to maximum or minimum values for that field, other fields are modified
    - * to preserve the magnitude of the change.
    - * @param status A pointer to an UErrorCode to receive any errors
    - * @see ucal_roll
    - * @stable ICU 2.0
    - */
    -U_STABLE void U_EXPORT2
    -ucal_add(UCalendar* cal,
    - UCalendarDateFields field,
    - int32_t amount,
    - UErrorCode* status);
    -
    -/**
    - * Add a specified signed amount to a particular field in a UCalendar.
    - * This will not modify more significant fields in the calendar.
    - * @param cal The UCalendar to which to add.
    - * @param field The field to which to add the signed value; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
    - * UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
    - * UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
    - * UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
    - * @param amount The signed amount to add to field. If the amount causes the value
    - * to exceed to maximum or minimum values for that field, the field is pinned to a permissible
    - * value.
    - * @param status A pointer to an UErrorCode to receive any errors
    - * @see ucal_add
    - * @stable ICU 2.0
    - */
    -U_STABLE void U_EXPORT2
    -ucal_roll(UCalendar* cal,
    - UCalendarDateFields field,
    - int32_t amount,
    - UErrorCode* status);
    -
    -/**
    - * Get the current value of a field from a UCalendar.
    - * All fields are represented as 32-bit integers.
    - * @param cal The UCalendar to query.
    - * @param field The desired field; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
    - * UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
    - * UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
    - * UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
    - * @param status A pointer to an UErrorCode to receive any errors
    - * @return The value of the desired field.
    - * @see ucal_set
    - * @see ucal_isSet
    - * @see ucal_clearField
    - * @see ucal_clear
    - * @stable ICU 2.0
    - */
    -U_STABLE int32_t U_EXPORT2
    -ucal_get(const UCalendar* cal,
    - UCalendarDateFields field,
    - UErrorCode* status );
    -
    -/**
    - * Set the value of a field in a UCalendar.
    - * All fields are represented as 32-bit integers.
    - * @param cal The UCalendar to set.
    - * @param field The field to set; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
    - * UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
    - * UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
    - * UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
    - * @param value The desired value of field.
    - * @see ucal_get
    - * @see ucal_isSet
    - * @see ucal_clearField
    - * @see ucal_clear
    - * @stable ICU 2.0
    - */
    -U_STABLE void U_EXPORT2
    -ucal_set(UCalendar* cal,
    - UCalendarDateFields field,
    - int32_t value);
    -
    -/**
    - * Determine if a field in a UCalendar is set.
    - * All fields are represented as 32-bit integers.
    - * @param cal The UCalendar to query.
    - * @param field The desired field; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
    - * UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
    - * UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
    - * UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
    - * @return TRUE if field is set, FALSE otherwise.
    - * @see ucal_get
    - * @see ucal_set
    - * @see ucal_clearField
    - * @see ucal_clear
    - * @stable ICU 2.0
    - */
    -U_STABLE UBool U_EXPORT2
    -ucal_isSet(const UCalendar* cal,
    - UCalendarDateFields field);
    -
    -/**
    - * Clear a field in a UCalendar.
    - * All fields are represented as 32-bit integers.
    - * @param cal The UCalendar containing the field to clear.
    - * @param field The field to clear; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
    - * UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
    - * UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
    - * UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
    - * @see ucal_get
    - * @see ucal_set
    - * @see ucal_isSet
    - * @see ucal_clear
    - * @stable ICU 2.0
    - */
    -U_STABLE void U_EXPORT2
    -ucal_clearField(UCalendar* cal,
    - UCalendarDateFields field);
    -
    -/**
    - * Clear all fields in a UCalendar.
    - * All fields are represented as 32-bit integers.
    - * @param calendar The UCalendar to clear.
    - * @see ucal_get
    - * @see ucal_set
    - * @see ucal_isSet
    - * @see ucal_clearField
    - * @stable ICU 2.0
    - */
    -U_STABLE void U_EXPORT2
    -ucal_clear(UCalendar* calendar);
    -
    -/**
    - * Possible limit values for a UCalendar
    - * @stable ICU 2.0
    - */
    -enum UCalendarLimitType {
    - /** Minimum value */
    - UCAL_MINIMUM,
    - /** Maximum value */
    - UCAL_MAXIMUM,
    - /** Greatest minimum value */
    - UCAL_GREATEST_MINIMUM,
    - /** Leaest maximum value */
    - UCAL_LEAST_MAXIMUM,
    - /** Actual minimum value */
    - UCAL_ACTUAL_MINIMUM,
    - /** Actual maximum value */
    - UCAL_ACTUAL_MAXIMUM
    -};
    -
    -/** @stable ICU 2.0 */
    -typedef enum UCalendarLimitType UCalendarLimitType;
    -
    -/**
    - * Determine a limit for a field in a UCalendar.
    - * A limit is a maximum or minimum value for a field.
    - * @param cal The UCalendar to query.
    - * @param field The desired field; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
    - * UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
    - * UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
    - * UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
    - * @param type The desired critical point; one of UCAL_MINIMUM, UCAL_MAXIMUM, UCAL_GREATEST_MINIMUM,
    - * UCAL_LEAST_MAXIMUM, UCAL_ACTUAL_MINIMUM, UCAL_ACTUAL_MAXIMUM
    - * @param status A pointer to an UErrorCode to receive any errors.
    - * @return The requested value.
    - * @stable ICU 2.0
    - */
    -U_STABLE int32_t U_EXPORT2
    -ucal_getLimit(const UCalendar* cal,
    - UCalendarDateFields field,
    - UCalendarLimitType type,
    - UErrorCode* status);
    -
    -/** Get the locale for this calendar object. You can choose between valid and actual locale.
    - * @param cal The calendar object
    - * @param type type of the locale we're looking for (valid or actual)
    - * @param status error code for the operation
    - * @return the locale name
    - * @stable ICU 2.8
    - */
    -U_STABLE const char * U_EXPORT2
    -ucal_getLocaleByType(const UCalendar *cal, ULocDataLocaleType type, UErrorCode* status);
    -
    -/**
    - * Returns the timezone data version currently used by ICU.
    - * @param status error code for the operation
    - * @return the version string, such as "2007f"
    - * @stable ICU 3.8
    - */
    -U_DRAFT const char * U_EXPORT2
    -ucal_getTZDataVersion(UErrorCode* status);
    -
    -/**
    - * Returns the canonical system timezone ID or the normalized
    - * custom time zone ID for the given time zone ID.
    - * @param id The input timezone ID to be canonicalized.
    - * @param len The length of id, or -1 if null-terminated.
    - * @param result The buffer receives the canonical system timezone ID
    - * or the custom timezone ID in normalized format.
    - * @param resultCapacity The capacity of the result buffer.
    - * @param isSystemID Receives if the given ID is a known system
    - * timezone ID.
    - * @param status Recevies the status. When the given timezone ID
    - * is neither a known system time zone ID nor a
    - * valid custom timezone ID, U_ILLEGAL_ARGUMENT_ERROR
    - * is set.
    - * @return The result string length, not including the terminating
    - * null.
    - * @draft ICU 4.0
    - */
    -U_DRAFT int32_t U_EXPORT2
    -ucal_getCanonicalTimeZoneID(const UChar* id, int32_t len,
    - UChar* result, int32_t resultCapacity, UBool *isSystemID, UErrorCode* status);
    -/**
    - * Get the resource keyword value string designating the calendar type for the UCalendar.
    - * @param cal The UCalendar to query.
    - * @param status The error code for the operation.
    - * @return The resource keyword value string.
    - * @draft ICU 4.2
    - */
    -U_DRAFT const char * U_EXPORT2
    -ucal_getType(const UCalendar *cal, UErrorCode* status);
    -
    -/**
    - * The following is a temporary Apple-specific API to help InternationalPrefs
    - * transition to the updated version of the above ICU API. It will be removed soon.
    - */
    -U_DRAFT const char * U_EXPORT2
    -ucal_getTypeWithError(const UCalendar *cal, UErrorCode* status);
    -
    -#endif /* #if !UCONFIG_NO_FORMATTING */
    -
    -#endif

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/ucasemap.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/ucasemap.h b/apps/couch_collate/platform/osx/icu/unicode/ucasemap.h
    deleted file mode 100644
    index 7ba622b..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/ucasemap.h
    +++ /dev/null
    @@ -1,391 +0,0 @@
    -/*
    -*******************************************************************************
    -*
    -* Copyright (C) 2005-2008, International Business Machines
    -* Corporation and others. All Rights Reserved.
    -*
    -*******************************************************************************
    -* file name: ucasemap.h
    -* encoding: US-ASCII
    -* tab size: 8 (not used)
    -* indentation:4
    -*
    -* created on: 2005may06
    -* created by: Markus W. Scherer
    -*
    -* Case mapping service object and functions using it.
    -*/
    -
    -#ifndef __UCASEMAP_H__
    -#define __UCASEMAP_H__
    -
    -#include "unicode/utypes.h"
    -#include "unicode/ustring.h"
    -
    -/**
    - * \file
    - * \brief C API: Unicode case mapping functions using a UCaseMap service object.
    - *
    - * The service object takes care of memory allocations, data loading, and setup
    - * for the attributes, as usual.
    - *
    - * Currently, the functionality provided here does not overlap with uchar.h
    - * and ustring.h, except for ucasemap_toTitle().
    - *
    - * ucasemap_utf8XYZ() functions operate directly on UTF-8 strings.
    - */
    -
    -/**
    - * UCaseMap is an opaque service object for newer ICU case mapping functions.
    - * Older functions did not use a service object.
    - * @stable ICU 3.4
    - */
    -struct UCaseMap;
    -typedef struct UCaseMap UCaseMap; /**< C typedef for struct UCaseMap. @stable ICU 3.4 */
    -
    -/**
    - * Open a UCaseMap service object for a locale and a set of options.
    - * The locale ID and options are preprocessed so that functions using the
    - * service object need not process them in each call.
    - *
    - * @param locale ICU locale ID, used for language-dependent
    - * upper-/lower-/title-casing according to the Unicode standard.
    - * Usual semantics: ""=root, NULL=default locale, etc.
    - * @param options Options bit set, used for case folding and string comparisons.
    - * Same flags as for u_foldCase(), u_strFoldCase(),
    - * u_strCaseCompare(), etc.
    - * Use 0 or U_FOLD_CASE_DEFAULT for default behavior.
    - * @param pErrorCode Must be a valid pointer to an error code value,
    - * which must not indicate a failure before the function call.
    - * @return Pointer to a UCaseMap service object, if successful.
    - *
    - * @see U_FOLD_CASE_DEFAULT
    - * @see U_FOLD_CASE_EXCLUDE_SPECIAL_I
    - * @see U_TITLECASE_NO_LOWERCASE
    - * @see U_TITLECASE_NO_BREAK_ADJUSTMENT
    - * @stable ICU 3.4
    - */
    -U_STABLE UCaseMap * U_EXPORT2
    -ucasemap_open(const char *locale, uint32_t options, UErrorCode *pErrorCode);
    -
    -/**
    - * Close a UCaseMap service object.
    - * @param csm Object to be closed.
    - * @stable ICU 3.4
    - */
    -U_STABLE void U_EXPORT2
    -ucasemap_close(UCaseMap *csm);
    -
    -/**
    - * Get the locale ID that is used for language-dependent case mappings.
    - * @param csm UCaseMap service object.
    - * @return locale ID
    - * @stable ICU 3.4
    - */
    -U_STABLE const char * U_EXPORT2
    -ucasemap_getLocale(const UCaseMap *csm);
    -
    -/**
    - * Get the options bit set that is used for case folding and string comparisons.
    - * @param csm UCaseMap service object.
    - * @return options bit set
    - * @stable ICU 3.4
    - */
    -U_STABLE uint32_t U_EXPORT2
    -ucasemap_getOptions(const UCaseMap *csm);
    -
    -/**
    - * Set the locale ID that is used for language-dependent case mappings.
    - *
    - * @param csm UCaseMap service object.
    - * @param locale Locale ID, see ucasemap_open().
    - * @param pErrorCode Must be a valid pointer to an error code value,
    - * which must not indicate a failure before the function call.
    - *
    - * @see ucasemap_open
    - * @stable ICU 3.4
    - */
    -U_STABLE void U_EXPORT2
    -ucasemap_setLocale(UCaseMap *csm, const char *locale, UErrorCode *pErrorCode);
    -
    -/**
    - * Set the options bit set that is used for case folding and string comparisons.
    - *
    - * @param csm UCaseMap service object.
    - * @param options Options bit set, see ucasemap_open().
    - * @param pErrorCode Must be a valid pointer to an error code value,
    - * which must not indicate a failure before the function call.
    - *
    - * @see ucasemap_open
    - * @stable ICU 3.4
    - */
    -U_STABLE void U_EXPORT2
    -ucasemap_setOptions(UCaseMap *csm, uint32_t options, UErrorCode *pErrorCode);
    -
    -/**
    - * Do not lowercase non-initial parts of words when titlecasing.
    - * Option bit for titlecasing APIs that take an options bit set.
    - *
    - * By default, titlecasing will titlecase the first cased character
    - * of a word and lowercase all other characters.
    - * With this option, the other characters will not be modified.
    - *
    - * @see ucasemap_setOptions
    - * @see ucasemap_toTitle
    - * @see ucasemap_utf8ToTitle
    - * @see UnicodeString::toTitle
    - * @stable ICU 4.0
    - */
    -#define U_TITLECASE_NO_LOWERCASE 0x100
    -
    -/**
    - * Do not adjust the titlecasing indexes from BreakIterator::next() indexes;
    - * titlecase exactly the characters at breaks from the iterator.
    - * Option bit for titlecasing APIs that take an options bit set.
    - *
    - * By default, titlecasing will take each break iterator index,
    - * adjust it by looking for the next cased character, and titlecase that one.
    - * Other characters are lowercased.
    - *
    - * This follows Unicode 4 & 5 section 3.13 Default Case Operations:
    - *
    - * R3 toTitlecase(X): Find the word boundaries based on Unicode Standard Annex
    - * #29, "Text Boundaries." Between each pair of word boundaries, find the first
    - * cased character F. If F exists, map F to default_title(F); then map each
    - * subsequent character C to default_lower(C).
    - *
    - * @see ucasemap_setOptions
    - * @see ucasemap_toTitle
    - * @see ucasemap_utf8ToTitle
    - * @see UnicodeString::toTitle
    - * @see U_TITLECASE_NO_LOWERCASE
    - * @stable ICU 4.0
    - */
    -#define U_TITLECASE_NO_BREAK_ADJUSTMENT 0x200
    -
    -#if !UCONFIG_NO_BREAK_ITERATION
    -
    -/**
    - * Get the break iterator that is used for titlecasing.
    - * Do not modify the returned break iterator.
    - * @param csm UCaseMap service object.
    - * @return titlecasing break iterator
    - * @stable ICU 4.0
    - */
    -U_DRAFT const UBreakIterator * U_EXPORT2
    -ucasemap_getBreakIterator(const UCaseMap *csm);
    -
    -/**
    - * Set the break iterator that is used for titlecasing.
    - * The UCaseMap service object releases a previously set break iterator
    - * and "adopts" this new one, taking ownership of it.
    - * It will be released in a subsequent call to ucasemap_setBreakIterator()
    - * or ucasemap_close().
    - *
    - * Break iterator operations are not thread-safe. Therefore, titlecasing
    - * functions use non-const UCaseMap objects. It is not possible to titlecase
    - * strings concurrently using the same UCaseMap.
    - *
    - * @param csm UCaseMap service object.
    - * @param iterToAdopt Break iterator to be adopted for titlecasing.
    - * @param pErrorCode Must be a valid pointer to an error code value,
    - * which must not indicate a failure before the function call.
    - *
    - * @see ucasemap_toTitle
    - * @see ucasemap_utf8ToTitle
    - * @stable ICU 4.0
    - */
    -U_DRAFT void U_EXPORT2
    -ucasemap_setBreakIterator(UCaseMap *csm, UBreakIterator *iterToAdopt, UErrorCode *pErrorCode);
    -
    -/**
    - * Titlecase a UTF-16 string. This function is almost a duplicate of u_strToTitle(),
    - * except that it takes ucasemap_setOptions() into account and has performance
    - * advantages from being able to use a UCaseMap object for multiple case mapping
    - * operations, saving setup time.
    - *
    - * Casing is locale-dependent and context-sensitive.
    - * Titlecasing uses a break iterator to find the first characters of words
    - * that are to be titlecased. It titlecases those characters and lowercases
    - * all others. (This can be modified with ucasemap_setOptions().)
    - *
    - * The titlecase break iterator can be provided to customize for arbitrary
    - * styles, using rules and dictionaries beyond the standard iterators.
    - * It may be more efficient to always provide an iterator to avoid
    - * opening and closing one for each string.
    - * The standard titlecase iterator for the root locale implements the
    - * algorithm of Unicode TR 21.
    - *
    - * This function uses only the setText(), first() and next() methods of the
    - * provided break iterator.
    - *
    - * The result may be longer or shorter than the original.
    - * The source string and the destination buffer must not overlap.
    - *
    - * @param csm UCaseMap service object.
    - * @param dest A buffer for the result string. The result will be NUL-terminated if
    - * the buffer is large enough.
    - * The contents is undefined in case of failure.
    - * @param destCapacity The size of the buffer (number of bytes). If it is 0, then
    - * dest may be NULL and the function will only return the length of the result
    - * without writing any of the result string.
    - * @param src The original string.
    - * @param srcLength The length of the original string. If -1, then src must be NUL-terminated.
    - * @param pErrorCode Must be a valid pointer to an error code value,
    - * which must not indicate a failure before the function call.
    - * @return The length of the result string, if successful - or in case of a buffer overflow,
    - * in which case it will be greater than destCapacity.
    - *
    - * @see u_strToTitle
    - * @stable ICU 4.0
    - */
    -U_DRAFT int32_t U_EXPORT2
    -ucasemap_toTitle(UCaseMap *csm,
    - UChar *dest, int32_t destCapacity,
    - const UChar *src, int32_t srcLength,
    - UErrorCode *pErrorCode);
    -
    -#endif
    -
    -/**
    - * Lowercase the characters in a UTF-8 string.
    - * Casing is locale-dependent and context-sensitive.
    - * The result may be longer or shorter than the original.
    - * The source string and the destination buffer must not overlap.
    - *
    - * @param csm UCaseMap service object.
    - * @param dest A buffer for the result string. The result will be NUL-terminated if
    - * the buffer is large enough.
    - * The contents is undefined in case of failure.
    - * @param destCapacity The size of the buffer (number of bytes). If it is 0, then
    - * dest may be NULL and the function will only return the length of the result
    - * without writing any of the result string.
    - * @param src The original string.
    - * @param srcLength The length of the original string. If -1, then src must be NUL-terminated.
    - * @param pErrorCode Must be a valid pointer to an error code value,
    - * which must not indicate a failure before the function call.
    - * @return The length of the result string, if successful - or in case of a buffer overflow,
    - * in which case it will be greater than destCapacity.
    - *
    - * @see u_strToLower
    - * @stable ICU 3.4
    - */
    -U_STABLE int32_t U_EXPORT2
    -ucasemap_utf8ToLower(const UCaseMap *csm,
    - char *dest, int32_t destCapacity,
    - const char *src, int32_t srcLength,
    - UErrorCode *pErrorCode);
    -
    -/**
    - * Uppercase the characters in a UTF-8 string.
    - * Casing is locale-dependent and context-sensitive.
    - * The result may be longer or shorter than the original.
    - * The source string and the destination buffer must not overlap.
    - *
    - * @param csm UCaseMap service object.
    - * @param dest A buffer for the result string. The result will be NUL-terminated if
    - * the buffer is large enough.
    - * The contents is undefined in case of failure.
    - * @param destCapacity The size of the buffer (number of bytes). If it is 0, then
    - * dest may be NULL and the function will only return the length of the result
    - * without writing any of the result string.
    - * @param src The original string.
    - * @param srcLength The length of the original string. If -1, then src must be NUL-terminated.
    - * @param pErrorCode Must be a valid pointer to an error code value,
    - * which must not indicate a failure before the function call.
    - * @return The length of the result string, if successful - or in case of a buffer overflow,
    - * in which case it will be greater than destCapacity.
    - *
    - * @see u_strToUpper
    - * @stable ICU 3.4
    - */
    -U_STABLE int32_t U_EXPORT2
    -ucasemap_utf8ToUpper(const UCaseMap *csm,
    - char *dest, int32_t destCapacity,
    - const char *src, int32_t srcLength,
    - UErrorCode *pErrorCode);
    -
    -#if !UCONFIG_NO_BREAK_ITERATION
    -
    -/**
    - * Titlecase a UTF-8 string.
    - * Casing is locale-dependent and context-sensitive.
    - * Titlecasing uses a break iterator to find the first characters of words
    - * that are to be titlecased. It titlecases those characters and lowercases
    - * all others. (This can be modified with ucasemap_setOptions().)
    - *
    - * The titlecase break iterator can be provided to customize for arbitrary
    - * styles, using rules and dictionaries beyond the standard iterators.
    - * It may be more efficient to always provide an iterator to avoid
    - * opening and closing one for each string.
    - * The standard titlecase iterator for the root locale implements the
    - * algorithm of Unicode TR 21.
    - *
    - * This function uses only the setText(), first() and next() methods of the
    - * provided break iterator.
    - *
    - * The result may be longer or shorter than the original.
    - * The source string and the destination buffer must not overlap.
    - *
    - * @param csm UCaseMap service object.
    - * @param dest A buffer for the result string. The result will be NUL-terminated if
    - * the buffer is large enough.
    - * The contents is undefined in case of failure.
    - * @param destCapacity The size of the buffer (number of bytes). If it is 0, then
    - * dest may be NULL and the function will only return the length of the result
    - * without writing any of the result string.
    - * @param src The original string.
    - * @param srcLength The length of the original string. If -1, then src must be NUL-terminated.
    - * @param pErrorCode Must be a valid pointer to an error code value,
    - * which must not indicate a failure before the function call.
    - * @return The length of the result string, if successful - or in case of a buffer overflow,
    - * in which case it will be greater than destCapacity.
    - *
    - * @see u_strToTitle
    - * @see U_TITLECASE_NO_LOWERCASE
    - * @see U_TITLECASE_NO_BREAK_ADJUSTMENT
    - * @stable ICU 4.0
    - */
    -U_DRAFT int32_t U_EXPORT2
    -ucasemap_utf8ToTitle(UCaseMap *csm,
    - char *dest, int32_t destCapacity,
    - const char *src, int32_t srcLength,
    - UErrorCode *pErrorCode);
    -
    -#endif
    -
    -/**
    - * Case-fold the characters in a UTF-8 string.
    - * Case-folding is locale-independent and not context-sensitive,
    - * but there is an option for whether to include or exclude mappings for dotted I
    - * and dotless i that are marked with 'I' in CaseFolding.txt.
    - * The result may be longer or shorter than the original.
    - * The source string and the destination buffer must not overlap.
    - *
    - * @param csm UCaseMap service object.
    - * @param dest A buffer for the result string. The result will be NUL-terminated if
    - * the buffer is large enough.
    - * The contents is undefined in case of failure.
    - * @param destCapacity The size of the buffer (number of bytes). If it is 0, then
    - * dest may be NULL and the function will only return the length of the result
    - * without writing any of the result string.
    - * @param src The original string.
    - * @param srcLength The length of the original string. If -1, then src must be NUL-terminated.
    - * @param pErrorCode Must be a valid pointer to an error code value,
    - * which must not indicate a failure before the function call.
    - * @return The length of the result string, if successful - or in case of a buffer overflow,
    - * in which case it will be greater than destCapacity.
    - *
    - * @see u_strFoldCase
    - * @see ucasemap_setOptions
    - * @see U_FOLD_CASE_DEFAULT
    - * @see U_FOLD_CASE_EXCLUDE_SPECIAL_I
    - * @stable ICU 4.0
    - */
    -U_DRAFT int32_t U_EXPORT2
    -ucasemap_utf8FoldCase(const UCaseMap *csm,
    - char *dest, int32_t destCapacity,
    - const char *src, int32_t srcLength,
    - UErrorCode *pErrorCode);
    -
    -#endif

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/ucat.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/ucat.h b/apps/couch_collate/platform/osx/icu/unicode/ucat.h
    deleted file mode 100644
    index ad9f037..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/ucat.h
    +++ /dev/null
    @@ -1,158 +0,0 @@
    -/*
    -**********************************************************************
    -* Copyright (c) 2003-2004, International Business Machines
    -* Corporation and others. All Rights Reserved.
    -**********************************************************************
    -* Author: Alan Liu
    -* Created: March 19 2003
    -* Since: ICU 2.6
    -**********************************************************************
    -*/
    -#ifndef UCAT_H
    -#define UCAT_H
    -
    -#include "unicode/utypes.h"
    -#include "unicode/ures.h"
    -
    -/**
    - * \file
    - * \brief C API: Message Catalog Wrappers
    - *
    - * This C API provides look-alike functions that deliberately resemble
    - * the POSIX catopen, catclose, and catgets functions. The underlying
    - * implementation is in terms of ICU resource bundles, rather than
    - * POSIX message catalogs.
    - *
    - * The ICU resource bundles obey standard ICU inheritance policies.
    - * To facilitate this, sets and messages are flattened into one tier.
    - * This is done by creating resource bundle keys of the form
    - * &lt;set_num&gt;%&lt;msg_num&gt; where set_num is the set number and msg_num is
    - * the message number, formatted as decimal strings.
    - *
    - * Example: Consider a message catalog containing two sets:
    - *
    - * Set 1: Message 4 = "Good morning."
    - * Message 5 = "Good afternoon."
    - * Message 7 = "Good evening."
    - * Message 8 = "Good night."
    - * Set 4: Message 14 = "Please "
    - * Message 19 = "Thank you."
    - * Message 20 = "Sincerely,"
    - *
    - * The ICU resource bundle source file would, assuming it is named
    - * "greet.txt", would look like this:
    - *
    - * greet
    - * {
    - * 1%4 { "Good morning." }
    - * 1%5 { "Good afternoon." }
    - * 1%7 { "Good evening." }
    - * 1%8 { "Good night." }
    - *
    - * 4%14 { "Please " }
    - * 4%19 { "Thank you." }
    - * 4%20 { "Sincerely," }
    - * }
    - *
    - * The catgets function is commonly used in combination with functions
    - * like printf and strftime. ICU components like message format can
    - * be used instead, although they use a different format syntax.
    - * There is an ICU package, icuio, that provides some of
    - * the POSIX-style formatting API.
    - */
    -
    -U_CDECL_BEGIN
    -
    -/**
    - * An ICU message catalog descriptor, analogous to nl_catd.
    - *
    - * @stable ICU 2.6
    - */
    -typedef UResourceBundle* u_nl_catd;
    -
    -/**
    - * Open and return an ICU message catalog descriptor. The descriptor
    - * may be passed to u_catgets() to retrieve localized strings.
    - *
    - * @param name string containing the full path pointing to the
    - * directory where the resources reside followed by the package name
    - * e.g. "/usr/resource/my_app/resources/guimessages" on a Unix system.
    - * If NULL, ICU default data files will be used.
    - *
    - * Unlike POSIX, environment variables are not interpolated within the
    - * name.
    - *
    - * @param locale the locale for which we want to open the resource. If
    - * NULL, the default ICU locale will be used (see uloc_getDefault). If
    - * strlen(locale) == 0, the root locale will be used.
    - *
    - * @param ec input/output error code. Upon output,
    - * U_USING_FALLBACK_WARNING indicates that a fallback locale was
    - * used. For example, 'de_CH' was requested, but nothing was found
    - * there, so 'de' was used. U_USING_DEFAULT_WARNING indicates that the
    - * default locale data or root locale data was used; neither the
    - * requested locale nor any of its fallback locales were found.
    - *
    - * @return a message catalog descriptor that may be passed to
    - * u_catgets(). If the ec parameter indicates success, then the caller
    - * is responsible for calling u_catclose() to close the message
    - * catalog. If the ec parameter indicates failure, then NULL will be
    - * returned.
    - *
    - * @stable ICU 2.6
    - */
    -U_STABLE u_nl_catd U_EXPORT2
    -u_catopen(const char* name, const char* locale, UErrorCode* ec);
    -
    -/**
    - * Close an ICU message catalog, given its descriptor.
    - *
    - * @param catd a message catalog descriptor to be closed. May be NULL,
    - * in which case no action is taken.
    - *
    - * @stable ICU 2.6
    - */
    -U_STABLE void U_EXPORT2
    -u_catclose(u_nl_catd catd);
    -
    -/**
    - * Retrieve a localized string from an ICU message catalog.
    - *
    - * @param catd a message catalog descriptor returned by u_catopen.
    - *
    - * @param set_num the message catalog set number. Sets need not be
    - * numbered consecutively.
    - *
    - * @param msg_num the message catalog message number within the
    - * set. Messages need not be numbered consecutively.
    - *
    - * @param s the default string. This is returned if the string
    - * specified by the set_num and msg_num is not found. It must be
    - * zero-terminated.
    - *
    - * @param len fill-in parameter to receive the length of the result.
    - * May be NULL, in which case it is ignored.
    - *
    - * @param ec input/output error code. May be U_USING_FALLBACK_WARNING
    - * or U_USING_DEFAULT_WARNING. U_MISSING_RESOURCE_ERROR indicates that
    - * the set_num/msg_num tuple does not specify a valid message string
    - * in this catalog.
    - *
    - * @return a pointer to a zero-terminated UChar array which lives in
    - * an internal buffer area, typically a memory mapped/DLL file. The
    - * caller must NOT delete this pointer. If the call is unsuccessful
    - * for any reason, then s is returned. This includes the situation in
    - * which ec indicates a failing error code upon entry to this
    - * function.
    - *
    - * @stable ICU 2.6
    - */
    -U_STABLE const UChar* U_EXPORT2
    -u_catgets(u_nl_catd catd, int32_t set_num, int32_t msg_num,
    - const UChar* s,
    - int32_t* len, UErrorCode* ec);
    -
    -U_CDECL_END
    -
    -#endif /*UCAT_H*/
    -/*eof*/
  • Benoitc at Feb 13, 2014 at 6:14 pm
    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/uchar.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/uchar.h b/apps/couch_collate/platform/osx/icu/unicode/uchar.h
    deleted file mode 100644
    index 0f629c0..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/uchar.h
    +++ /dev/null
    @@ -1,3062 +0,0 @@
    -/*
    -**********************************************************************
    -* Copyright (C) 1997-2008, International Business Machines
    -* Corporation and others. All Rights Reserved.
    -**********************************************************************
    -*
    -* File UCHAR.H
    -*
    -* Modification History:
    -*
    -* Date Name Description
    -* 04/02/97 aliu Creation.
    -* 03/29/99 helena Updated for C APIs.
    -* 4/15/99 Madhu Updated for C Implementation and Javadoc
    -* 5/20/99 Madhu Added the function u_getVersion()
    -* 8/19/1999 srl Upgraded scripts to Unicode 3.0
    -* 8/27/1999 schererm UCharDirection constants: U_...
    -* 11/11/1999 weiv added u_isalnum(), cleaned comments
    -* 01/11/2000 helena Renamed u_getVersion to u_getUnicodeVersion().
    -******************************************************************************
    -*/
    -
    -#ifndef UCHAR_H
    -#define UCHAR_H
    -
    -#include "unicode/utypes.h"
    -
    -U_CDECL_BEGIN
    -
    -/*==========================================================================*/
    -/* Unicode version number */
    -/*==========================================================================*/
    -/**
    - * Unicode version number, default for the current ICU version.
    - * The actual Unicode Character Database (UCD) data is stored in uprops.dat
    - * and may be generated from UCD files from a different Unicode version.
    - * Call u_getUnicodeVersion to get the actual Unicode version of the data.
    - *
    - * @see u_getUnicodeVersion
    - * @stable ICU 2.0
    - */
    -#define U_UNICODE_VERSION "5.1"
    -
    -/**
    - * \file
    - * \brief C API: Unicode Properties
    - *
    - * This C API provides low-level access to the Unicode Character Database.
    - * In addition to raw property values, some convenience functions calculate
    - * derived properties, for example for Java-style programming.
    - *
    - * Unicode assigns each code point (not just assigned character) values for
    - * many properties.
    - * Most of them are simple boolean flags, or constants from a small enumerated list.
    - * For some properties, values are strings or other relatively more complex types.
    - *
    - * For more information see
    - * "About the Unicode Character Database" (http://www.unicode.org/ucd/)
    - * and the ICU User Guide chapter on Properties (http://icu-project.org/userguide/properties.html).
    - *
    - * Many functions are designed to match java.lang.Character functions.
    - * See the individual function documentation,
    - * and see the JDK 1.4 java.lang.Character documentation
    - * at http://java.sun.com/j2se/1.4/docs/api/java/lang/Character.html
    - *
    - * There are also functions that provide easy migration from C/POSIX functions
    - * like isblank(). Their use is generally discouraged because the C/POSIX
    - * standards do not define their semantics beyond the ASCII range, which means
    - * that different implementations exhibit very different behavior.
    - * Instead, Unicode properties should be used directly.
    - *
    - * There are also only a few, broad C/POSIX character classes, and they tend
    - * to be used for conflicting purposes. For example, the "isalpha()" class
    - * is sometimes used to determine word boundaries, while a more sophisticated
    - * approach would at least distinguish initial letters from continuation
    - * characters (the latter including combining marks).
    - * (In ICU, BreakIterator is the most sophisticated API for word boundaries.)
    - * Another example: There is no "istitle()" class for titlecase characters.
    - *
    - * ICU 3.4 and later provides API access for all twelve C/POSIX character classes.
    - * ICU implements them according to the Standard Recommendations in
    - * Annex C: Compatibility Properties of UTS #18 Unicode Regular Expressions
    - * (http://www.unicode.org/reports/tr18/#Compatibility_Properties).
    - *
    - * API access for C/POSIX character classes is as follows:
    - * - alpha: u_isUAlphabetic(c) or u_hasBinaryProperty(c, UCHAR_ALPHABETIC)
    - * - lower: u_isULowercase(c) or u_hasBinaryProperty(c, UCHAR_LOWERCASE)
    - * - upper: u_isUUppercase(c) or u_hasBinaryProperty(c, UCHAR_UPPERCASE)
    - * - punct: u_ispunct(c)
    - * - digit: u_isdigit(c) or u_charType(c)==U_DECIMAL_DIGIT_NUMBER
    - * - xdigit: u_isxdigit(c) or u_hasBinaryProperty(c, UCHAR_POSIX_XDIGIT)
    - * - alnum: u_hasBinaryProperty(c, UCHAR_POSIX_ALNUM)
    - * - space: u_isUWhiteSpace(c) or u_hasBinaryProperty(c, UCHAR_WHITE_SPACE)
    - * - blank: u_isblank(c) or u_hasBinaryProperty(c, UCHAR_POSIX_BLANK)
    - * - cntrl: u_charType(c)==U_CONTROL_CHAR
    - * - graph: u_hasBinaryProperty(c, UCHAR_POSIX_GRAPH)
    - * - print: u_hasBinaryProperty(c, UCHAR_POSIX_PRINT)
    - *
    - * Note: Some of the u_isxyz() functions in uchar.h predate, and do not match,
    - * the Standard Recommendations in UTS #18. Instead, they match Java
    - * functions according to their API documentation.
    - *
    - * \htmlonly
    - * The C/POSIX character classes are also available in UnicodeSet patterns,
    - * using patterns like [:graph:] or \p{graph}.
    - * \endhtmlonly
    - *
    - * Note: There are several ICU whitespace functions.
    - * Comparison:
    - * - u_isUWhiteSpace=UCHAR_WHITE_SPACE: Unicode White_Space property;
    - * most of general categories "Z" (separators) + most whitespace ISO controls
    - * (including no-break spaces, but excluding IS1..IS4 and ZWSP)
    - * - u_isWhitespace: Java isWhitespace; Z + whitespace ISO controls but excluding no-break spaces
    - * - u_isJavaSpaceChar: Java isSpaceChar; just Z (including no-break spaces)
    - * - u_isspace: Z + whitespace ISO controls (including no-break spaces)
    - * - u_isblank: "horizontal spaces" = TAB + Zs - ZWSP
    - */
    -
    -/**
    - * Constants.
    - */
    -
    -/** The lowest Unicode code point value. Code points are non-negative. @stable ICU 2.0 */
    -#define UCHAR_MIN_VALUE 0
    -
    -/**
    - * The highest Unicode code point value (scalar value) according to
    - * The Unicode Standard. This is a 21-bit value (20.1 bits, rounded up).
    - * For a single character, UChar32 is a simple type that can hold any code point value.
    - *
    - * @see UChar32
    - * @stable ICU 2.0
    - */
    -#define UCHAR_MAX_VALUE 0x10ffff
    -
    -/**
    - * Get a single-bit bit set (a flag) from a bit number 0..31.
    - * @stable ICU 2.1
    - */
    -#define U_MASK(x) ((uint32_t)1<<(x))
    -
    -/*
    - * !! Note: Several comments in this file are machine-read by the
    - * genpname tool. These comments describe the correspondence between
    - * icu enum constants and UCD entities. Do not delete them. Update
    - * these comments as needed.
    - *
    - * Any comment of the form "/ *[name]* /" (spaces added) is such
    - * a comment.
    - *
    - * The U_JG_* and U_GC_*_MASK constants are matched by their symbolic
    - * name, which must match PropertyValueAliases.txt.
    - */
    -
    -/**
    - * Selection constants for Unicode properties.
    - * These constants are used in functions like u_hasBinaryProperty to select
    - * one of the Unicode properties.
    - *
    - * The properties APIs are intended to reflect Unicode properties as defined
    - * in the Unicode Character Database (UCD) and Unicode Technical Reports (UTR).
    - * For details about the properties see http://www.unicode.org/ucd/ .
    - * For names of Unicode properties see the UCD file PropertyAliases.txt.
    - *
    - * Important: If ICU is built with UCD files from Unicode versions below, e.g., 3.2,
    - * then properties marked with "new in Unicode 3.2" are not or not fully available.
    - * Check u_getUnicodeVersion to be sure.
    - *
    - * @see u_hasBinaryProperty
    - * @see u_getIntPropertyValue
    - * @see u_getUnicodeVersion
    - * @stable ICU 2.1
    - */
    -typedef enum UProperty {
    - /* See note !!. Comments of the form "Binary property Dash",
    - "Enumerated property Script", "Double property Numeric_Value",
    - and "String property Age" are read by genpname. */
    -
    - /* Note: Place UCHAR_ALPHABETIC before UCHAR_BINARY_START so that
    - debuggers display UCHAR_ALPHABETIC as the symbolic name for 0,
    - rather than UCHAR_BINARY_START. Likewise for other *_START
    - identifiers. */
    -
    - /** Binary property Alphabetic. Same as u_isUAlphabetic, different from u_isalpha.
    - Lu+Ll+Lt+Lm+Lo+Nl+Other_Alphabetic @stable ICU 2.1 */
    - UCHAR_ALPHABETIC=0,
    - /** First constant for binary Unicode properties. @stable ICU 2.1 */
    - UCHAR_BINARY_START=UCHAR_ALPHABETIC,
    - /** Binary property ASCII_Hex_Digit. 0-9 A-F a-f @stable ICU 2.1 */
    - UCHAR_ASCII_HEX_DIGIT=1,
    - /** Binary property Bidi_Control.
    - Format controls which have specific functions
    - in the Bidi Algorithm. @stable ICU 2.1 */
    - UCHAR_BIDI_CONTROL=2,
    - /** Binary property Bidi_Mirrored.
    - Characters that may change display in RTL text.
    - Same as u_isMirrored.
    - See Bidi Algorithm, UTR 9. @stable ICU 2.1 */
    - UCHAR_BIDI_MIRRORED=3,
    - /** Binary property Dash. Variations of dashes. @stable ICU 2.1 */
    - UCHAR_DASH=4,
    - /** Binary property Default_Ignorable_Code_Point (new in Unicode 3.2).
    - Ignorable in most processing.
    - <2060..206F, FFF0..FFFB, E0000..E0FFF>+Other_Default_Ignorable_Code_Point+(Cf+Cc+Cs-White_Space) @stable ICU 2.1 */
    - UCHAR_DEFAULT_IGNORABLE_CODE_POINT=5,
    - /** Binary property Deprecated (new in Unicode 3.2).
    - The usage of deprecated characters is strongly discouraged. @stable ICU 2.1 */
    - UCHAR_DEPRECATED=6,
    - /** Binary property Diacritic. Characters that linguistically modify
    - the meaning of another character to which they apply. @stable ICU 2.1 */
    - UCHAR_DIACRITIC=7,
    - /** Binary property Extender.
    - Extend the value or shape of a preceding alphabetic character,
    - e.g., length and iteration marks. @stable ICU 2.1 */
    - UCHAR_EXTENDER=8,
    - /** Binary property Full_Composition_Exclusion.
    - CompositionExclusions.txt+Singleton Decompositions+
    - Non-Starter Decompositions. @stable ICU 2.1 */
    - UCHAR_FULL_COMPOSITION_EXCLUSION=9,
    - /** Binary property Grapheme_Base (new in Unicode 3.2).
    - For programmatic determination of grapheme cluster boundaries.
    - [0..10FFFF]-Cc-Cf-Cs-Co-Cn-Zl-Zp-Grapheme_Link-Grapheme_Extend-CGJ @stable ICU 2.1 */
    - UCHAR_GRAPHEME_BASE=10,
    - /** Binary property Grapheme_Extend (new in Unicode 3.2).
    - For programmatic determination of grapheme cluster boundaries.
    - Me+Mn+Mc+Other_Grapheme_Extend-Grapheme_Link-CGJ @stable ICU 2.1 */
    - UCHAR_GRAPHEME_EXTEND=11,
    - /** Binary property Grapheme_Link (new in Unicode 3.2).
    - For programmatic determination of grapheme cluster boundaries. @stable ICU 2.1 */
    - UCHAR_GRAPHEME_LINK=12,
    - /** Binary property Hex_Digit.
    - Characters commonly used for hexadecimal numbers. @stable ICU 2.1 */
    - UCHAR_HEX_DIGIT=13,
    - /** Binary property Hyphen. Dashes used to mark connections
    - between pieces of words, plus the Katakana middle dot. @stable ICU 2.1 */
    - UCHAR_HYPHEN=14,
    - /** Binary property ID_Continue.
    - Characters that can continue an identifier.
    - DerivedCoreProperties.txt also says "NOTE: Cf characters should be filtered out."
    - ID_Start+Mn+Mc+Nd+Pc @stable ICU 2.1 */
    - UCHAR_ID_CONTINUE=15,
    - /** Binary property ID_Start.
    - Characters that can start an identifier.
    - Lu+Ll+Lt+Lm+Lo+Nl @stable ICU 2.1 */
    - UCHAR_ID_START=16,
    - /** Binary property Ideographic.
    - CJKV ideographs. @stable ICU 2.1 */
    - UCHAR_IDEOGRAPHIC=17,
    - /** Binary property IDS_Binary_Operator (new in Unicode 3.2).
    - For programmatic determination of
    - Ideographic Description Sequences. @stable ICU 2.1 */
    - UCHAR_IDS_BINARY_OPERATOR=18,
    - /** Binary property IDS_Trinary_Operator (new in Unicode 3.2).
    - For programmatic determination of
    - Ideographic Description Sequences. @stable ICU 2.1 */
    - UCHAR_IDS_TRINARY_OPERATOR=19,
    - /** Binary property Join_Control.
    - Format controls for cursive joining and ligation. @stable ICU 2.1 */
    - UCHAR_JOIN_CONTROL=20,
    - /** Binary property Logical_Order_Exception (new in Unicode 3.2).
    - Characters that do not use logical order and
    - require special handling in most processing. @stable ICU 2.1 */
    - UCHAR_LOGICAL_ORDER_EXCEPTION=21,
    - /** Binary property Lowercase. Same as u_isULowercase, different from u_islower.
    - Ll+Other_Lowercase @stable ICU 2.1 */
    - UCHAR_LOWERCASE=22,
    - /** Binary property Math. Sm+Other_Math @stable ICU 2.1 */
    - UCHAR_MATH=23,
    - /** Binary property Noncharacter_Code_Point.
    - Code points that are explicitly defined as illegal
    - for the encoding of characters. @stable ICU 2.1 */
    - UCHAR_NONCHARACTER_CODE_POINT=24,
    - /** Binary property Quotation_Mark. @stable ICU 2.1 */
    - UCHAR_QUOTATION_MARK=25,
    - /** Binary property Radical (new in Unicode 3.2).
    - For programmatic determination of
    - Ideographic Description Sequences. @stable ICU 2.1 */
    - UCHAR_RADICAL=26,
    - /** Binary property Soft_Dotted (new in Unicode 3.2).
    - Characters with a "soft dot", like i or j.
    - An accent placed on these characters causes
    - the dot to disappear. @stable ICU 2.1 */
    - UCHAR_SOFT_DOTTED=27,
    - /** Binary property Terminal_Punctuation.
    - Punctuation characters that generally mark
    - the end of textual units. @stable ICU 2.1 */
    - UCHAR_TERMINAL_PUNCTUATION=28,
    - /** Binary property Unified_Ideograph (new in Unicode 3.2).
    - For programmatic determination of
    - Ideographic Description Sequences. @stable ICU 2.1 */
    - UCHAR_UNIFIED_IDEOGRAPH=29,
    - /** Binary property Uppercase. Same as u_isUUppercase, different from u_isupper.
    - Lu+Other_Uppercase @stable ICU 2.1 */
    - UCHAR_UPPERCASE=30,
    - /** Binary property White_Space.
    - Same as u_isUWhiteSpace, different from u_isspace and u_isWhitespace.
    - Space characters+TAB+CR+LF-ZWSP-ZWNBSP @stable ICU 2.1 */
    - UCHAR_WHITE_SPACE=31,
    - /** Binary property XID_Continue.
    - ID_Continue modified to allow closure under
    - normalization forms NFKC and NFKD. @stable ICU 2.1 */
    - UCHAR_XID_CONTINUE=32,
    - /** Binary property XID_Start. ID_Start modified to allow
    - closure under normalization forms NFKC and NFKD. @stable ICU 2.1 */
    - UCHAR_XID_START=33,
    - /** Binary property Case_Sensitive. Either the source of a case
    - mapping or _in_ the target of a case mapping. Not the same as
    - the general category Cased_Letter. @stable ICU 2.6 */
    - UCHAR_CASE_SENSITIVE=34,
    - /** Binary property STerm (new in Unicode 4.0.1).
    - Sentence Terminal. Used in UAX #29: Text Boundaries
    - (http://www.unicode.org/reports/tr29/)
    - @stable ICU 3.0 */
    - UCHAR_S_TERM=35,
    - /** Binary property Variation_Selector (new in Unicode 4.0.1).
    - Indicates all those characters that qualify as Variation Selectors.
    - For details on the behavior of these characters,
    - see StandardizedVariants.html and 15.6 Variation Selectors.
    - @stable ICU 3.0 */
    - UCHAR_VARIATION_SELECTOR=36,
    - /** Binary property NFD_Inert.
    - ICU-specific property for characters that are inert under NFD,
    - i.e., they do not interact with adjacent characters.
    - Used for example in normalizing transforms in incremental mode
    - to find the boundary of safely normalizable text despite possible
    - text additions.
    -
    - There is one such property per normalization form.
    - These properties are computed as follows - an inert character is:
    - a) unassigned, or ALL of the following:
    - b) of combining class 0.
    - c) not decomposed by this normalization form.
    - AND if NFC or NFKC,
    - d) can never compose with a previous character.
    - e) can never compose with a following character.
    - f) can never change if another character is added.
    - Example: a-breve might satisfy all but f, but if you
    - add an ogonek it changes to a-ogonek + breve
    -
    - See also com.ibm.text.UCD.NFSkippable in the ICU4J repository,
    - and icu/source/common/unormimp.h .
    - @stable ICU 3.0 */
    - UCHAR_NFD_INERT=37,
    - /** Binary property NFKD_Inert.
    - ICU-specific property for characters that are inert under NFKD,
    - i.e., they do not interact with adjacent characters.
    - Used for example in normalizing transforms in incremental mode
    - to find the boundary of safely normalizable text despite possible
    - text additions.
    - @see UCHAR_NFD_INERT
    - @stable ICU 3.0 */
    - UCHAR_NFKD_INERT=38,
    - /** Binary property NFC_Inert.
    - ICU-specific property for characters that are inert under NFC,
    - i.e., they do not interact with adjacent characters.
    - Used for example in normalizing transforms in incremental mode
    - to find the boundary of safely normalizable text despite possible
    - text additions.
    - @see UCHAR_NFD_INERT
    - @stable ICU 3.0 */
    - UCHAR_NFC_INERT=39,
    - /** Binary property NFKC_Inert.
    - ICU-specific property for characters that are inert under NFKC,
    - i.e., they do not interact with adjacent characters.
    - Used for example in normalizing transforms in incremental mode
    - to find the boundary of safely normalizable text despite possible
    - text additions.
    - @see UCHAR_NFD_INERT
    - @stable ICU 3.0 */
    - UCHAR_NFKC_INERT=40,
    - /** Binary Property Segment_Starter.
    - ICU-specific property for characters that are starters in terms of
    - Unicode normalization and combining character sequences.
    - They have ccc=0 and do not occur in non-initial position of the
    - canonical decomposition of any character
    - (like " in NFD(a-umlaut) and a Jamo T in an NFD(Hangul LVT)).
    - ICU uses this property for segmenting a string for generating a set of
    - canonically equivalent strings, e.g. for canonical closure while
    - processing collation tailoring rules.
    - @stable ICU 3.0 */
    - UCHAR_SEGMENT_STARTER=41,
    - /** Binary property Pattern_Syntax (new in Unicode 4.1).
    - See UAX #31 Identifier and Pattern Syntax
    - (http://www.unicode.org/reports/tr31/)
    - @stable ICU 3.4 */
    - UCHAR_PATTERN_SYNTAX=42,
    - /** Binary property Pattern_White_Space (new in Unicode 4.1).
    - See UAX #31 Identifier and Pattern Syntax
    - (http://www.unicode.org/reports/tr31/)
    - @stable ICU 3.4 */
    - UCHAR_PATTERN_WHITE_SPACE=43,
    - /** Binary property alnum (a C/POSIX character class).
    - Implemented according to the UTS #18 Annex C Standard Recommendation.
    - See the uchar.h file documentation.
    - @stable ICU 3.4 */
    - UCHAR_POSIX_ALNUM=44,
    - /** Binary property blank (a C/POSIX character class).
    - Implemented according to the UTS #18 Annex C Standard Recommendation.
    - See the uchar.h file documentation.
    - @stable ICU 3.4 */
    - UCHAR_POSIX_BLANK=45,
    - /** Binary property graph (a C/POSIX character class).
    - Implemented according to the UTS #18 Annex C Standard Recommendation.
    - See the uchar.h file documentation.
    - @stable ICU 3.4 */
    - UCHAR_POSIX_GRAPH=46,
    - /** Binary property print (a C/POSIX character class).
    - Implemented according to the UTS #18 Annex C Standard Recommendation.
    - See the uchar.h file documentation.
    - @stable ICU 3.4 */
    - UCHAR_POSIX_PRINT=47,
    - /** Binary property xdigit (a C/POSIX character class).
    - Implemented according to the UTS #18 Annex C Standard Recommendation.
    - See the uchar.h file documentation.
    - @stable ICU 3.4 */
    - UCHAR_POSIX_XDIGIT=48,
    - /** One more than the last constant for binary Unicode properties. @stable ICU 2.1 */
    - UCHAR_BINARY_LIMIT=49,
    -
    - /** Enumerated property Bidi_Class.
    - Same as u_charDirection, returns UCharDirection values. @stable ICU 2.2 */
    - UCHAR_BIDI_CLASS=0x1000,
    - /** First constant for enumerated/integer Unicode properties. @stable ICU 2.2 */
    - UCHAR_INT_START=UCHAR_BIDI_CLASS,
    - /** Enumerated property Block.
    - Same as ublock_getCode, returns UBlockCode values. @stable ICU 2.2 */
    - UCHAR_BLOCK=0x1001,
    - /** Enumerated property Canonical_Combining_Class.
    - Same as u_getCombiningClass, returns 8-bit numeric values. @stable ICU 2.2 */
    - UCHAR_CANONICAL_COMBINING_CLASS=0x1002,
    - /** Enumerated property Decomposition_Type.
    - Returns UDecompositionType values. @stable ICU 2.2 */
    - UCHAR_DECOMPOSITION_TYPE=0x1003,
    - /** Enumerated property East_Asian_Width.
    - See http://www.unicode.org/reports/tr11/
    - Returns UEastAsianWidth values. @stable ICU 2.2 */
    - UCHAR_EAST_ASIAN_WIDTH=0x1004,
    - /** Enumerated property General_Category.
    - Same as u_charType, returns UCharCategory values. @stable ICU 2.2 */
    - UCHAR_GENERAL_CATEGORY=0x1005,
    - /** Enumerated property Joining_Group.
    - Returns UJoiningGroup values. @stable ICU 2.2 */
    - UCHAR_JOINING_GROUP=0x1006,
    - /** Enumerated property Joining_Type.
    - Returns UJoiningType values. @stable ICU 2.2 */
    - UCHAR_JOINING_TYPE=0x1007,
    - /** Enumerated property Line_Break.
    - Returns ULineBreak values. @stable ICU 2.2 */
    - UCHAR_LINE_BREAK=0x1008,
    - /** Enumerated property Numeric_Type.
    - Returns UNumericType values. @stable ICU 2.2 */
    - UCHAR_NUMERIC_TYPE=0x1009,
    - /** Enumerated property Script.
    - Same as uscript_getScript, returns UScriptCode values. @stable ICU 2.2 */
    - UCHAR_SCRIPT=0x100A,
    - /** Enumerated property Hangul_Syllable_Type, new in Unicode 4.
    - Returns UHangulSyllableType values. @stable ICU 2.6 */
    - UCHAR_HANGUL_SYLLABLE_TYPE=0x100B,
    - /** Enumerated property NFD_Quick_Check.
    - Returns UNormalizationCheckResult values. @stable ICU 3.0 */
    - UCHAR_NFD_QUICK_CHECK=0x100C,
    - /** Enumerated property NFKD_Quick_Check.
    - Returns UNormalizationCheckResult values. @stable ICU 3.0 */
    - UCHAR_NFKD_QUICK_CHECK=0x100D,
    - /** Enumerated property NFC_Quick_Check.
    - Returns UNormalizationCheckResult values. @stable ICU 3.0 */
    - UCHAR_NFC_QUICK_CHECK=0x100E,
    - /** Enumerated property NFKC_Quick_Check.
    - Returns UNormalizationCheckResult values. @stable ICU 3.0 */
    - UCHAR_NFKC_QUICK_CHECK=0x100F,
    - /** Enumerated property Lead_Canonical_Combining_Class.
    - ICU-specific property for the ccc of the first code point
    - of the decomposition, or lccc(c)=ccc(NFD(c)[0]).
    - Useful for checking for canonically ordered text;
    - see UNORM_FCD and http://www.unicode.org/notes/tn5/#FCD .
    - Returns 8-bit numeric values like UCHAR_CANONICAL_COMBINING_CLASS. @stable ICU 3.0 */
    - UCHAR_LEAD_CANONICAL_COMBINING_CLASS=0x1010,
    - /** Enumerated property Trail_Canonical_Combining_Class.
    - ICU-specific property for the ccc of the last code point
    - of the decomposition, or tccc(c)=ccc(NFD(c)[last]).
    - Useful for checking for canonically ordered text;
    - see UNORM_FCD and http://www.unicode.org/notes/tn5/#FCD .
    - Returns 8-bit numeric values like UCHAR_CANONICAL_COMBINING_CLASS. @stable ICU 3.0 */
    - UCHAR_TRAIL_CANONICAL_COMBINING_CLASS=0x1011,
    - /** Enumerated property Grapheme_Cluster_Break (new in Unicode 4.1).
    - Used in UAX #29: Text Boundaries
    - (http://www.unicode.org/reports/tr29/)
    - Returns UGraphemeClusterBreak values. @stable ICU 3.4 */
    - UCHAR_GRAPHEME_CLUSTER_BREAK=0x1012,
    - /** Enumerated property Sentence_Break (new in Unicode 4.1).
    - Used in UAX #29: Text Boundaries
    - (http://www.unicode.org/reports/tr29/)
    - Returns USentenceBreak values. @stable ICU 3.4 */
    - UCHAR_SENTENCE_BREAK=0x1013,
    - /** Enumerated property Word_Break (new in Unicode 4.1).
    - Used in UAX #29: Text Boundaries
    - (http://www.unicode.org/reports/tr29/)
    - Returns UWordBreakValues values. @stable ICU 3.4 */
    - UCHAR_WORD_BREAK=0x1014,
    - /** One more than the last constant for enumerated/integer Unicode properties. @stable ICU 2.2 */
    - UCHAR_INT_LIMIT=0x1015,
    -
    - /** Bitmask property General_Category_Mask.
    - This is the General_Category property returned as a bit mask.
    - When used in u_getIntPropertyValue(c), same as U_MASK(u_charType(c)),
    - returns bit masks for UCharCategory values where exactly one bit is set.
    - When used with u_getPropertyValueName() and u_getPropertyValueEnum(),
    - a multi-bit mask is used for sets of categories like "Letters".
    - Mask values should be cast to uint32_t.
    - @stable ICU 2.4 */
    - UCHAR_GENERAL_CATEGORY_MASK=0x2000,
    - /** First constant for bit-mask Unicode properties. @stable ICU 2.4 */
    - UCHAR_MASK_START=UCHAR_GENERAL_CATEGORY_MASK,
    - /** One more than the last constant for bit-mask Unicode properties. @stable ICU 2.4 */
    - UCHAR_MASK_LIMIT=0x2001,
    -
    - /** Double property Numeric_Value.
    - Corresponds to u_getNumericValue. @stable ICU 2.4 */
    - UCHAR_NUMERIC_VALUE=0x3000,
    - /** First constant for double Unicode properties. @stable ICU 2.4 */
    - UCHAR_DOUBLE_START=UCHAR_NUMERIC_VALUE,
    - /** One more than the last constant for double Unicode properties. @stable ICU 2.4 */
    - UCHAR_DOUBLE_LIMIT=0x3001,
    -
    - /** String property Age.
    - Corresponds to u_charAge. @stable ICU 2.4 */
    - UCHAR_AGE=0x4000,
    - /** First constant for string Unicode properties. @stable ICU 2.4 */
    - UCHAR_STRING_START=UCHAR_AGE,
    - /** String property Bidi_Mirroring_Glyph.
    - Corresponds to u_charMirror. @stable ICU 2.4 */
    - UCHAR_BIDI_MIRRORING_GLYPH=0x4001,
    - /** String property Case_Folding.
    - Corresponds to u_strFoldCase in ustring.h. @stable ICU 2.4 */
    - UCHAR_CASE_FOLDING=0x4002,
    - /** String property ISO_Comment.
    - Corresponds to u_getISOComment. @stable ICU 2.4 */
    - UCHAR_ISO_COMMENT=0x4003,
    - /** String property Lowercase_Mapping.
    - Corresponds to u_strToLower in ustring.h. @stable ICU 2.4 */
    - UCHAR_LOWERCASE_MAPPING=0x4004,
    - /** String property Name.
    - Corresponds to u_charName. @stable ICU 2.4 */
    - UCHAR_NAME=0x4005,
    - /** String property Simple_Case_Folding.
    - Corresponds to u_foldCase. @stable ICU 2.4 */
    - UCHAR_SIMPLE_CASE_FOLDING=0x4006,
    - /** String property Simple_Lowercase_Mapping.
    - Corresponds to u_tolower. @stable ICU 2.4 */
    - UCHAR_SIMPLE_LOWERCASE_MAPPING=0x4007,
    - /** String property Simple_Titlecase_Mapping.
    - Corresponds to u_totitle. @stable ICU 2.4 */
    - UCHAR_SIMPLE_TITLECASE_MAPPING=0x4008,
    - /** String property Simple_Uppercase_Mapping.
    - Corresponds to u_toupper. @stable ICU 2.4 */
    - UCHAR_SIMPLE_UPPERCASE_MAPPING=0x4009,
    - /** String property Titlecase_Mapping.
    - Corresponds to u_strToTitle in ustring.h. @stable ICU 2.4 */
    - UCHAR_TITLECASE_MAPPING=0x400A,
    - /** String property Unicode_1_Name.
    - Corresponds to u_charName. @stable ICU 2.4 */
    - UCHAR_UNICODE_1_NAME=0x400B,
    - /** String property Uppercase_Mapping.
    - Corresponds to u_strToUpper in ustring.h. @stable ICU 2.4 */
    - UCHAR_UPPERCASE_MAPPING=0x400C,
    - /** One more than the last constant for string Unicode properties. @stable ICU 2.4 */
    - UCHAR_STRING_LIMIT=0x400D,
    -
    - /** Represents a nonexistent or invalid property or property value. @stable ICU 2.4 */
    - UCHAR_INVALID_CODE = -1
    -} UProperty;
    -
    -/**
    - * Data for enumerated Unicode general category types.
    - * See http://www.unicode.org/Public/UNIDATA/UnicodeData.html .
    - * @stable ICU 2.0
    - */
    -typedef enum UCharCategory
    -{
    - /** See note !!. Comments of the form "Cn" are read by genpname. */
    -
    - /** Non-category for unassigned and non-character code points. @stable ICU 2.0 */
    - U_UNASSIGNED = 0,
    - /** Cn "Other, Not Assigned (no characters in [UnicodeData.txt] have this property)" (same as U_UNASSIGNED!) @stable ICU 2.0 */
    - U_GENERAL_OTHER_TYPES = 0,
    - /** Lu @stable ICU 2.0 */
    - U_UPPERCASE_LETTER = 1,
    - /** Ll @stable ICU 2.0 */
    - U_LOWERCASE_LETTER = 2,
    - /** Lt @stable ICU 2.0 */
    - U_TITLECASE_LETTER = 3,
    - /** Lm @stable ICU 2.0 */
    - U_MODIFIER_LETTER = 4,
    - /** Lo @stable ICU 2.0 */
    - U_OTHER_LETTER = 5,
    - /** Mn @stable ICU 2.0 */
    - U_NON_SPACING_MARK = 6,
    - /** Me @stable ICU 2.0 */
    - U_ENCLOSING_MARK = 7,
    - /** Mc @stable ICU 2.0 */
    - U_COMBINING_SPACING_MARK = 8,
    - /** Nd @stable ICU 2.0 */
    - U_DECIMAL_DIGIT_NUMBER = 9,
    - /** Nl @stable ICU 2.0 */
    - U_LETTER_NUMBER = 10,
    - /** No @stable ICU 2.0 */
    - U_OTHER_NUMBER = 11,
    - /** Zs @stable ICU 2.0 */
    - U_SPACE_SEPARATOR = 12,
    - /** Zl @stable ICU 2.0 */
    - U_LINE_SEPARATOR = 13,
    - /** Zp @stable ICU 2.0 */
    - U_PARAGRAPH_SEPARATOR = 14,
    - /** Cc @stable ICU 2.0 */
    - U_CONTROL_CHAR = 15,
    - /** Cf @stable ICU 2.0 */
    - U_FORMAT_CHAR = 16,
    - /** Co @stable ICU 2.0 */
    - U_PRIVATE_USE_CHAR = 17,
    - /** Cs @stable ICU 2.0 */
    - U_SURROGATE = 18,
    - /** Pd @stable ICU 2.0 */
    - U_DASH_PUNCTUATION = 19,
    - /** Ps @stable ICU 2.0 */
    - U_START_PUNCTUATION = 20,
    - /** Pe @stable ICU 2.0 */
    - U_END_PUNCTUATION = 21,
    - /** Pc @stable ICU 2.0 */
    - U_CONNECTOR_PUNCTUATION = 22,
    - /** Po @stable ICU 2.0 */
    - U_OTHER_PUNCTUATION = 23,
    - /** Sm @stable ICU 2.0 */
    - U_MATH_SYMBOL = 24,
    - /** Sc @stable ICU 2.0 */
    - U_CURRENCY_SYMBOL = 25,
    - /** Sk @stable ICU 2.0 */
    - U_MODIFIER_SYMBOL = 26,
    - /** So @stable ICU 2.0 */
    - U_OTHER_SYMBOL = 27,
    - /** Pi @stable ICU 2.0 */
    - U_INITIAL_PUNCTUATION = 28,
    - /** Pf @stable ICU 2.0 */
    - U_FINAL_PUNCTUATION = 29,
    - /** One higher than the last enum UCharCategory constant. @stable ICU 2.0 */
    - U_CHAR_CATEGORY_COUNT
    -} UCharCategory;
    -
    -/**
    - * U_GC_XX_MASK constants are bit flags corresponding to Unicode
    - * general category values.
    - * For each category, the nth bit is set if the numeric value of the
    - * corresponding UCharCategory constant is n.
    - *
    - * There are also some U_GC_Y_MASK constants for groups of general categories
    - * like L for all letter categories.
    - *
    - * @see u_charType
    - * @see U_GET_GC_MASK
    - * @see UCharCategory
    - * @stable ICU 2.1
    - */
    -#define U_GC_CN_MASK U_MASK(U_GENERAL_OTHER_TYPES)
    -
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_LU_MASK U_MASK(U_UPPERCASE_LETTER)
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_LL_MASK U_MASK(U_LOWERCASE_LETTER)
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_LT_MASK U_MASK(U_TITLECASE_LETTER)
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_LM_MASK U_MASK(U_MODIFIER_LETTER)
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_LO_MASK U_MASK(U_OTHER_LETTER)
    -
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_MN_MASK U_MASK(U_NON_SPACING_MARK)
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_ME_MASK U_MASK(U_ENCLOSING_MARK)
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_MC_MASK U_MASK(U_COMBINING_SPACING_MARK)
    -
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_ND_MASK U_MASK(U_DECIMAL_DIGIT_NUMBER)
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_NL_MASK U_MASK(U_LETTER_NUMBER)
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_NO_MASK U_MASK(U_OTHER_NUMBER)
    -
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_ZS_MASK U_MASK(U_SPACE_SEPARATOR)
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_ZL_MASK U_MASK(U_LINE_SEPARATOR)
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_ZP_MASK U_MASK(U_PARAGRAPH_SEPARATOR)
    -
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_CC_MASK U_MASK(U_CONTROL_CHAR)
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_CF_MASK U_MASK(U_FORMAT_CHAR)
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_CO_MASK U_MASK(U_PRIVATE_USE_CHAR)
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_CS_MASK U_MASK(U_SURROGATE)
    -
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_PD_MASK U_MASK(U_DASH_PUNCTUATION)
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_PS_MASK U_MASK(U_START_PUNCTUATION)
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_PE_MASK U_MASK(U_END_PUNCTUATION)
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_PC_MASK U_MASK(U_CONNECTOR_PUNCTUATION)
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_PO_MASK U_MASK(U_OTHER_PUNCTUATION)
    -
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_SM_MASK U_MASK(U_MATH_SYMBOL)
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_SC_MASK U_MASK(U_CURRENCY_SYMBOL)
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_SK_MASK U_MASK(U_MODIFIER_SYMBOL)
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_SO_MASK U_MASK(U_OTHER_SYMBOL)
    -
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_PI_MASK U_MASK(U_INITIAL_PUNCTUATION)
    -/** Mask constant for a UCharCategory. @stable ICU 2.1 */
    -#define U_GC_PF_MASK U_MASK(U_FINAL_PUNCTUATION)
    -
    -
    -/** Mask constant for multiple UCharCategory bits (L Letters). @stable ICU 2.1 */
    -#define U_GC_L_MASK \
    - (U_GC_LU_MASK|U_GC_LL_MASK|U_GC_LT_MASK|U_GC_LM_MASK|U_GC_LO_MASK)
    -
    -/** Mask constant for multiple UCharCategory bits (LC Cased Letters). @stable ICU 2.1 */
    -#define U_GC_LC_MASK \
    - (U_GC_LU_MASK|U_GC_LL_MASK|U_GC_LT_MASK)
    -
    -/** Mask constant for multiple UCharCategory bits (M Marks). @stable ICU 2.1 */
    -#define U_GC_M_MASK (U_GC_MN_MASK|U_GC_ME_MASK|U_GC_MC_MASK)
    -
    -/** Mask constant for multiple UCharCategory bits (N Numbers). @stable ICU 2.1 */
    -#define U_GC_N_MASK (U_GC_ND_MASK|U_GC_NL_MASK|U_GC_NO_MASK)
    -
    -/** Mask constant for multiple UCharCategory bits (Z Separators). @stable ICU 2.1 */
    -#define U_GC_Z_MASK (U_GC_ZS_MASK|U_GC_ZL_MASK|U_GC_ZP_MASK)
    -
    -/** Mask constant for multiple UCharCategory bits (C Others). @stable ICU 2.1 */
    -#define U_GC_C_MASK \
    - (U_GC_CN_MASK|U_GC_CC_MASK|U_GC_CF_MASK|U_GC_CO_MASK|U_GC_CS_MASK)
    -
    -/** Mask constant for multiple UCharCategory bits (P Punctuation). @stable ICU 2.1 */
    -#define U_GC_P_MASK \
    - (U_GC_PD_MASK|U_GC_PS_MASK|U_GC_PE_MASK|U_GC_PC_MASK|U_GC_PO_MASK| \
    - U_GC_PI_MASK|U_GC_PF_MASK)
    -
    -/** Mask constant for multiple UCharCategory bits (S Symbols). @stable ICU 2.1 */
    -#define U_GC_S_MASK (U_GC_SM_MASK|U_GC_SC_MASK|U_GC_SK_MASK|U_GC_SO_MASK)
    -
    -/**
    - * This specifies the language directional property of a character set.
    - * @stable ICU 2.0
    - */
    -typedef enum UCharDirection {
    - /** See note !!. Comments of the form "EN" are read by genpname. */
    -
    - /** L @stable ICU 2.0 */
    - U_LEFT_TO_RIGHT = 0,
    - /** R @stable ICU 2.0 */
    - U_RIGHT_TO_LEFT = 1,
    - /** EN @stable ICU 2.0 */
    - U_EUROPEAN_NUMBER = 2,
    - /** ES @stable ICU 2.0 */
    - U_EUROPEAN_NUMBER_SEPARATOR = 3,
    - /** ET @stable ICU 2.0 */
    - U_EUROPEAN_NUMBER_TERMINATOR = 4,
    - /** AN @stable ICU 2.0 */
    - U_ARABIC_NUMBER = 5,
    - /** CS @stable ICU 2.0 */
    - U_COMMON_NUMBER_SEPARATOR = 6,
    - /** B @stable ICU 2.0 */
    - U_BLOCK_SEPARATOR = 7,
    - /** S @stable ICU 2.0 */
    - U_SEGMENT_SEPARATOR = 8,
    - /** WS @stable ICU 2.0 */
    - U_WHITE_SPACE_NEUTRAL = 9,
    - /** ON @stable ICU 2.0 */
    - U_OTHER_NEUTRAL = 10,
    - /** LRE @stable ICU 2.0 */
    - U_LEFT_TO_RIGHT_EMBEDDING = 11,
    - /** LRO @stable ICU 2.0 */
    - U_LEFT_TO_RIGHT_OVERRIDE = 12,
    - /** AL @stable ICU 2.0 */
    - U_RIGHT_TO_LEFT_ARABIC = 13,
    - /** RLE @stable ICU 2.0 */
    - U_RIGHT_TO_LEFT_EMBEDDING = 14,
    - /** RLO @stable ICU 2.0 */
    - U_RIGHT_TO_LEFT_OVERRIDE = 15,
    - /** PDF @stable ICU 2.0 */
    - U_POP_DIRECTIONAL_FORMAT = 16,
    - /** NSM @stable ICU 2.0 */
    - U_DIR_NON_SPACING_MARK = 17,
    - /** BN @stable ICU 2.0 */
    - U_BOUNDARY_NEUTRAL = 18,
    - /** @stable ICU 2.0 */
    - U_CHAR_DIRECTION_COUNT
    -} UCharDirection;
    -
    -/**
    - * Constants for Unicode blocks, see the Unicode Data file Blocks.txt
    - * @stable ICU 2.0
    - */
    -enum UBlockCode {
    -
    - /** New No_Block value in Unicode 4. @stable ICU 2.6 */
    - UBLOCK_NO_BLOCK = 0, /*[none]*/ /* Special range indicating No_Block */
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_BASIC_LATIN = 1, /*[0000]*/ /*See note !!*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_LATIN_1_SUPPLEMENT=2, /*[0080]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_LATIN_EXTENDED_A =3, /*[0100]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_LATIN_EXTENDED_B =4, /*[0180]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_IPA_EXTENSIONS =5, /*[0250]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_SPACING_MODIFIER_LETTERS =6, /*[02B0]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_COMBINING_DIACRITICAL_MARKS =7, /*[0300]*/
    -
    - /**
    - * Unicode 3.2 renames this block to "Greek and Coptic".
    - * @stable ICU 2.0
    - */
    - UBLOCK_GREEK =8, /*[0370]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_CYRILLIC =9, /*[0400]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_ARMENIAN =10, /*[0530]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_HEBREW =11, /*[0590]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_ARABIC =12, /*[0600]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_SYRIAC =13, /*[0700]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_THAANA =14, /*[0780]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_DEVANAGARI =15, /*[0900]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_BENGALI =16, /*[0980]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_GURMUKHI =17, /*[0A00]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_GUJARATI =18, /*[0A80]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_ORIYA =19, /*[0B00]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_TAMIL =20, /*[0B80]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_TELUGU =21, /*[0C00]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_KANNADA =22, /*[0C80]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_MALAYALAM =23, /*[0D00]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_SINHALA =24, /*[0D80]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_THAI =25, /*[0E00]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_LAO =26, /*[0E80]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_TIBETAN =27, /*[0F00]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_MYANMAR =28, /*[1000]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_GEORGIAN =29, /*[10A0]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_HANGUL_JAMO =30, /*[1100]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_ETHIOPIC =31, /*[1200]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_CHEROKEE =32, /*[13A0]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS =33, /*[1400]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_OGHAM =34, /*[1680]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_RUNIC =35, /*[16A0]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_KHMER =36, /*[1780]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_MONGOLIAN =37, /*[1800]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_LATIN_EXTENDED_ADDITIONAL =38, /*[1E00]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_GREEK_EXTENDED =39, /*[1F00]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_GENERAL_PUNCTUATION =40, /*[2000]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_SUPERSCRIPTS_AND_SUBSCRIPTS =41, /*[2070]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_CURRENCY_SYMBOLS =42, /*[20A0]*/
    -
    - /**
    - * Unicode 3.2 renames this block to "Combining Diacritical Marks for Symbols".
    - * @stable ICU 2.0
    - */
    - UBLOCK_COMBINING_MARKS_FOR_SYMBOLS =43, /*[20D0]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_LETTERLIKE_SYMBOLS =44, /*[2100]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_NUMBER_FORMS =45, /*[2150]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_ARROWS =46, /*[2190]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_MATHEMATICAL_OPERATORS =47, /*[2200]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_MISCELLANEOUS_TECHNICAL =48, /*[2300]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_CONTROL_PICTURES =49, /*[2400]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_OPTICAL_CHARACTER_RECOGNITION =50, /*[2440]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_ENCLOSED_ALPHANUMERICS =51, /*[2460]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_BOX_DRAWING =52, /*[2500]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_BLOCK_ELEMENTS =53, /*[2580]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_GEOMETRIC_SHAPES =54, /*[25A0]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_MISCELLANEOUS_SYMBOLS =55, /*[2600]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_DINGBATS =56, /*[2700]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_BRAILLE_PATTERNS =57, /*[2800]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_CJK_RADICALS_SUPPLEMENT =58, /*[2E80]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_KANGXI_RADICALS =59, /*[2F00]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_IDEOGRAPHIC_DESCRIPTION_CHARACTERS =60, /*[2FF0]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_CJK_SYMBOLS_AND_PUNCTUATION =61, /*[3000]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_HIRAGANA =62, /*[3040]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_KATAKANA =63, /*[30A0]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_BOPOMOFO =64, /*[3100]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_HANGUL_COMPATIBILITY_JAMO =65, /*[3130]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_KANBUN =66, /*[3190]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_BOPOMOFO_EXTENDED =67, /*[31A0]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_ENCLOSED_CJK_LETTERS_AND_MONTHS =68, /*[3200]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_CJK_COMPATIBILITY =69, /*[3300]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A =70, /*[3400]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_CJK_UNIFIED_IDEOGRAPHS =71, /*[4E00]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_YI_SYLLABLES =72, /*[A000]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_YI_RADICALS =73, /*[A490]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_HANGUL_SYLLABLES =74, /*[AC00]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_HIGH_SURROGATES =75, /*[D800]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_HIGH_PRIVATE_USE_SURROGATES =76, /*[DB80]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_LOW_SURROGATES =77, /*[DC00]*/
    -
    - /**
    - * Same as UBLOCK_PRIVATE_USE_AREA.
    - * Until Unicode 3.1.1, the corresponding block name was "Private Use",
    - * and multiple code point ranges had this block.
    - * Unicode 3.2 renames the block for the BMP PUA to "Private Use Area" and
    - * adds separate blocks for the supplementary PUAs.
    - *
    - * @stable ICU 2.0
    - */
    - UBLOCK_PRIVATE_USE = 78,
    - /**
    - * Same as UBLOCK_PRIVATE_USE.
    - * Until Unicode 3.1.1, the corresponding block name was "Private Use",
    - * and multiple code point ranges had this block.
    - * Unicode 3.2 renames the block for the BMP PUA to "Private Use Area" and
    - * adds separate blocks for the supplementary PUAs.
    - *
    - * @stable ICU 2.0
    - */
    - UBLOCK_PRIVATE_USE_AREA =UBLOCK_PRIVATE_USE, /*[E000]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS =79, /*[F900]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_ALPHABETIC_PRESENTATION_FORMS =80, /*[FB00]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_ARABIC_PRESENTATION_FORMS_A =81, /*[FB50]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_COMBINING_HALF_MARKS =82, /*[FE20]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_CJK_COMPATIBILITY_FORMS =83, /*[FE30]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_SMALL_FORM_VARIANTS =84, /*[FE50]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_ARABIC_PRESENTATION_FORMS_B =85, /*[FE70]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_SPECIALS =86, /*[FFF0]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_HALFWIDTH_AND_FULLWIDTH_FORMS =87, /*[FF00]*/
    -
    - /* New blocks in Unicode 3.1 */
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_OLD_ITALIC = 88 , /*[10300]*/
    - /** @stable ICU 2.0 */
    - UBLOCK_GOTHIC = 89 , /*[10330]*/
    - /** @stable ICU 2.0 */
    - UBLOCK_DESERET = 90 , /*[10400]*/
    - /** @stable ICU 2.0 */
    - UBLOCK_BYZANTINE_MUSICAL_SYMBOLS = 91 , /*[1D000]*/
    - /** @stable ICU 2.0 */
    - UBLOCK_MUSICAL_SYMBOLS = 92 , /*[1D100]*/
    - /** @stable ICU 2.0 */
    - UBLOCK_MATHEMATICAL_ALPHANUMERIC_SYMBOLS = 93 , /*[1D400]*/
    - /** @stable ICU 2.0 */
    - UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B = 94 , /*[20000]*/
    - /** @stable ICU 2.0 */
    - UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT = 95 , /*[2F800]*/
    - /** @stable ICU 2.0 */
    - UBLOCK_TAGS = 96, /*[E0000]*/
    -
    - /* New blocks in Unicode 3.2 */
    -
    - /**
    - * Unicode 4.0.1 renames the "Cyrillic Supplementary" block to "Cyrillic Supplement".
    - * @stable ICU 2.2
    - */
    - UBLOCK_CYRILLIC_SUPPLEMENTARY = 97,
    - /** @stable ICU 3.0 */
    - UBLOCK_CYRILLIC_SUPPLEMENT = UBLOCK_CYRILLIC_SUPPLEMENTARY, /*[0500]*/
    - /** @stable ICU 2.2 */
    - UBLOCK_TAGALOG = 98, /*[1700]*/
    - /** @stable ICU 2.2 */
    - UBLOCK_HANUNOO = 99, /*[1720]*/
    - /** @stable ICU 2.2 */
    - UBLOCK_BUHID = 100, /*[1740]*/
    - /** @stable ICU 2.2 */
    - UBLOCK_TAGBANWA = 101, /*[1760]*/
    - /** @stable ICU 2.2 */
    - UBLOCK_MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A = 102, /*[27C0]*/
    - /** @stable ICU 2.2 */
    - UBLOCK_SUPPLEMENTAL_ARROWS_A = 103, /*[27F0]*/
    - /** @stable ICU 2.2 */
    - UBLOCK_SUPPLEMENTAL_ARROWS_B = 104, /*[2900]*/
    - /** @stable ICU 2.2 */
    - UBLOCK_MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B = 105, /*[2980]*/
    - /** @stable ICU 2.2 */
    - UBLOCK_SUPPLEMENTAL_MATHEMATICAL_OPERATORS = 106, /*[2A00]*/
    - /** @stable ICU 2.2 */
    - UBLOCK_KATAKANA_PHONETIC_EXTENSIONS = 107, /*[31F0]*/
    - /** @stable ICU 2.2 */
    - UBLOCK_VARIATION_SELECTORS = 108, /*[FE00]*/
    - /** @stable ICU 2.2 */
    - UBLOCK_SUPPLEMENTARY_PRIVATE_USE_AREA_A = 109, /*[F0000]*/
    - /** @stable ICU 2.2 */
    - UBLOCK_SUPPLEMENTARY_PRIVATE_USE_AREA_B = 110, /*[100000]*/
    -
    - /* New blocks in Unicode 4 */
    -
    - /** @stable ICU 2.6 */
    - UBLOCK_LIMBU = 111, /*[1900]*/
    - /** @stable ICU 2.6 */
    - UBLOCK_TAI_LE = 112, /*[1950]*/
    - /** @stable ICU 2.6 */
    - UBLOCK_KHMER_SYMBOLS = 113, /*[19E0]*/
    - /** @stable ICU 2.6 */
    - UBLOCK_PHONETIC_EXTENSIONS = 114, /*[1D00]*/
    - /** @stable ICU 2.6 */
    - UBLOCK_MISCELLANEOUS_SYMBOLS_AND_ARROWS = 115, /*[2B00]*/
    - /** @stable ICU 2.6 */
    - UBLOCK_YIJING_HEXAGRAM_SYMBOLS = 116, /*[4DC0]*/
    - /** @stable ICU 2.6 */
    - UBLOCK_LINEAR_B_SYLLABARY = 117, /*[10000]*/
    - /** @stable ICU 2.6 */
    - UBLOCK_LINEAR_B_IDEOGRAMS = 118, /*[10080]*/
    - /** @stable ICU 2.6 */
    - UBLOCK_AEGEAN_NUMBERS = 119, /*[10100]*/
    - /** @stable ICU 2.6 */
    - UBLOCK_UGARITIC = 120, /*[10380]*/
    - /** @stable ICU 2.6 */
    - UBLOCK_SHAVIAN = 121, /*[10450]*/
    - /** @stable ICU 2.6 */
    - UBLOCK_OSMANYA = 122, /*[10480]*/
    - /** @stable ICU 2.6 */
    - UBLOCK_CYPRIOT_SYLLABARY = 123, /*[10800]*/
    - /** @stable ICU 2.6 */
    - UBLOCK_TAI_XUAN_JING_SYMBOLS = 124, /*[1D300]*/
    - /** @stable ICU 2.6 */
    - UBLOCK_VARIATION_SELECTORS_SUPPLEMENT = 125, /*[E0100]*/
    -
    - /* New blocks in Unicode 4.1 */
    -
    - /** @stable ICU 3.4 */
    - UBLOCK_ANCIENT_GREEK_MUSICAL_NOTATION = 126, /*[1D200]*/
    - /** @stable ICU 3.4 */
    - UBLOCK_ANCIENT_GREEK_NUMBERS = 127, /*[10140]*/
    - /** @stable ICU 3.4 */
    - UBLOCK_ARABIC_SUPPLEMENT = 128, /*[0750]*/
    - /** @stable ICU 3.4 */
    - UBLOCK_BUGINESE = 129, /*[1A00]*/
    - /** @stable ICU 3.4 */
    - UBLOCK_CJK_STROKES = 130, /*[31C0]*/
    - /** @stable ICU 3.4 */
    - UBLOCK_COMBINING_DIACRITICAL_MARKS_SUPPLEMENT = 131, /*[1DC0]*/
    - /** @stable ICU 3.4 */
    - UBLOCK_COPTIC = 132, /*[2C80]*/
    - /** @stable ICU 3.4 */
    - UBLOCK_ETHIOPIC_EXTENDED = 133, /*[2D80]*/
    - /** @stable ICU 3.4 */
    - UBLOCK_ETHIOPIC_SUPPLEMENT = 134, /*[1380]*/
    - /** @stable ICU 3.4 */
    - UBLOCK_GEORGIAN_SUPPLEMENT = 135, /*[2D00]*/
    - /** @stable ICU 3.4 */
    - UBLOCK_GLAGOLITIC = 136, /*[2C00]*/
    - /** @stable ICU 3.4 */
    - UBLOCK_KHAROSHTHI = 137, /*[10A00]*/
    - /** @stable ICU 3.4 */
    - UBLOCK_MODIFIER_TONE_LETTERS = 138, /*[A700]*/
    - /** @stable ICU 3.4 */
    - UBLOCK_NEW_TAI_LUE = 139, /*[1980]*/
    - /** @stable ICU 3.4 */
    - UBLOCK_OLD_PERSIAN = 140, /*[103A0]*/
    - /** @stable ICU 3.4 */
    - UBLOCK_PHONETIC_EXTENSIONS_SUPPLEMENT = 141, /*[1D80]*/
    - /** @stable ICU 3.4 */
    - UBLOCK_SUPPLEMENTAL_PUNCTUATION = 142, /*[2E00]*/
    - /** @stable ICU 3.4 */
    - UBLOCK_SYLOTI_NAGRI = 143, /*[A800]*/
    - /** @stable ICU 3.4 */
    - UBLOCK_TIFINAGH = 144, /*[2D30]*/
    - /** @stable ICU 3.4 */
    - UBLOCK_VERTICAL_FORMS = 145, /*[FE10]*/
    -
    - /* New blocks in Unicode 5.0 */
    -
    - /** @stable ICU 3.6 */
    - UBLOCK_NKO = 146, /*[07C0]*/
    - /** @stable ICU 3.6 */
    - UBLOCK_BALINESE = 147, /*[1B00]*/
    - /** @stable ICU 3.6 */
    - UBLOCK_LATIN_EXTENDED_C = 148, /*[2C60]*/
    - /** @stable ICU 3.6 */
    - UBLOCK_LATIN_EXTENDED_D = 149, /*[A720]*/
    - /** @stable ICU 3.6 */
    - UBLOCK_PHAGS_PA = 150, /*[A840]*/
    - /** @stable ICU 3.6 */
    - UBLOCK_PHOENICIAN = 151, /*[10900]*/
    - /** @stable ICU 3.6 */
    - UBLOCK_CUNEIFORM = 152, /*[12000]*/
    - /** @stable ICU 3.6 */
    - UBLOCK_CUNEIFORM_NUMBERS_AND_PUNCTUATION = 153, /*[12400]*/
    - /** @stable ICU 3.6 */
    - UBLOCK_COUNTING_ROD_NUMERALS = 154, /*[1D360]*/
    -
    - /* New blocks in Unicode 5.1 */
    -
    - /** @draft ICU 4.0 */
    - UBLOCK_SUNDANESE = 155, /*[1B80]*/
    - /** @draft ICU 4.0 */
    - UBLOCK_LEPCHA = 156, /*[1C00]*/
    - /** @draft ICU 4.0 */
    - UBLOCK_OL_CHIKI = 157, /*[1C50]*/
    - /** @draft ICU 4.0 */
    - UBLOCK_CYRILLIC_EXTENDED_A = 158, /*[2DE0]*/
    - /** @draft ICU 4.0 */
    - UBLOCK_VAI = 159, /*[A500]*/
    - /** @draft ICU 4.0 */
    - UBLOCK_CYRILLIC_EXTENDED_B = 160, /*[A640]*/
    - /** @draft ICU 4.0 */
    - UBLOCK_SAURASHTRA = 161, /*[A880]*/
    - /** @draft ICU 4.0 */
    - UBLOCK_KAYAH_LI = 162, /*[A900]*/
    - /** @draft ICU 4.0 */
    - UBLOCK_REJANG = 163, /*[A930]*/
    - /** @draft ICU 4.0 */
    - UBLOCK_CHAM = 164, /*[AA00]*/
    - /** @draft ICU 4.0 */
    - UBLOCK_ANCIENT_SYMBOLS = 165, /*[10190]*/
    - /** @draft ICU 4.0 */
    - UBLOCK_PHAISTOS_DISC = 166, /*[101D0]*/
    - /** @draft ICU 4.0 */
    - UBLOCK_LYCIAN = 167, /*[10280]*/
    - /** @draft ICU 4.0 */
    - UBLOCK_CARIAN = 168, /*[102A0]*/
    - /** @draft ICU 4.0 */
    - UBLOCK_LYDIAN = 169, /*[10920]*/
    - /** @draft ICU 4.0 */
    - UBLOCK_MAHJONG_TILES = 170, /*[1F000]*/
    - /** @draft ICU 4.0 */
    - UBLOCK_DOMINO_TILES = 171, /*[1F030]*/
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_COUNT = 172,
    -
    - /** @stable ICU 2.0 */
    - UBLOCK_INVALID_CODE=-1
    -};
    -
    -/** @stable ICU 2.0 */
    -typedef enum UBlockCode UBlockCode;
    -
    -/**
    - * East Asian Width constants.
    - *
    - * @see UCHAR_EAST_ASIAN_WIDTH
    - * @see u_getIntPropertyValue
    - * @stable ICU 2.2
    - */
    -typedef enum UEastAsianWidth {
    - U_EA_NEUTRAL, /*[N]*/ /*See note !!*/
    - U_EA_AMBIGUOUS, /*[A]*/
    - U_EA_HALFWIDTH, /*[H]*/
    - U_EA_FULLWIDTH, /*[F]*/
    - U_EA_NARROW, /*[Na]*/
    - U_EA_WIDE, /*[W]*/
    - U_EA_COUNT
    -} UEastAsianWidth;
    -/*
    - * Implementation note:
    - * Keep UEastAsianWidth constant values in sync with names list in genprops/props2.c.
    - */
    -
    -/**
    - * Selector constants for u_charName().
    - * u_charName() returns the "modern" name of a
    - * Unicode character; or the name that was defined in
    - * Unicode version 1.0, before the Unicode standard merged
    - * with ISO-10646; or an "extended" name that gives each
    - * Unicode code point a unique name.
    - *
    - * @see u_charName
    - * @stable ICU 2.0
    - */
    -typedef enum UCharNameChoice {
    - U_UNICODE_CHAR_NAME,
    - U_UNICODE_10_CHAR_NAME,
    - U_EXTENDED_CHAR_NAME,
    - U_CHAR_NAME_CHOICE_COUNT
    -} UCharNameChoice;
    -
    -/**
    - * Selector constants for u_getPropertyName() and
    - * u_getPropertyValueName(). These selectors are used to choose which
    - * name is returned for a given property or value. All properties and
    - * values have a long name. Most have a short name, but some do not.
    - * Unicode allows for additional names, beyond the long and short
    - * name, which would be indicated by U_LONG_PROPERTY_NAME + i, where
    - * i=1, 2,...
    - *
    - * @see u_getPropertyName()
    - * @see u_getPropertyValueName()
    - * @stable ICU 2.4
    - */
    -typedef enum UPropertyNameChoice {
    - U_SHORT_PROPERTY_NAME,
    - U_LONG_PROPERTY_NAME,
    - U_PROPERTY_NAME_CHOICE_COUNT
    -} UPropertyNameChoice;
    -
    -/**
    - * Decomposition Type constants.
    - *
    - * @see UCHAR_DECOMPOSITION_TYPE
    - * @stable ICU 2.2
    - */
    -typedef enum UDecompositionType {
    - U_DT_NONE, /*[none]*/ /*See note !!*/
    - U_DT_CANONICAL, /*[can]*/
    - U_DT_COMPAT, /*[com]*/
    - U_DT_CIRCLE, /*[enc]*/
    - U_DT_FINAL, /*[fin]*/
    - U_DT_FONT, /*[font]*/
    - U_DT_FRACTION, /*[fra]*/
    - U_DT_INITIAL, /*[init]*/
    - U_DT_ISOLATED, /*[iso]*/
    - U_DT_MEDIAL, /*[med]*/
    - U_DT_NARROW, /*[nar]*/
    - U_DT_NOBREAK, /*[nb]*/
    - U_DT_SMALL, /*[sml]*/
    - U_DT_SQUARE, /*[sqr]*/
    - U_DT_SUB, /*[sub]*/
    - U_DT_SUPER, /*[sup]*/
    - U_DT_VERTICAL, /*[vert]*/
    - U_DT_WIDE, /*[wide]*/
    - U_DT_COUNT /* 18 */
    -} UDecompositionType;
    -
    -/**
    - * Joining Type constants.
    - *
    - * @see UCHAR_JOINING_TYPE
    - * @stable ICU 2.2
    - */
    -typedef enum UJoiningType {
    - U_JT_NON_JOINING, /*[U]*/ /*See note !!*/
    - U_JT_JOIN_CAUSING, /*[C]*/
    - U_JT_DUAL_JOINING, /*[D]*/
    - U_JT_LEFT_JOINING, /*[L]*/
    - U_JT_RIGHT_JOINING, /*[R]*/
    - U_JT_TRANSPARENT, /*[T]*/
    - U_JT_COUNT /* 6 */
    -} UJoiningType;
    -
    -/**
    - * Joining Group constants.
    - *
    - * @see UCHAR_JOINING_GROUP
    - * @stable ICU 2.2
    - */
    -typedef enum UJoiningGroup {
    - U_JG_NO_JOINING_GROUP,
    - U_JG_AIN,
    - U_JG_ALAPH,
    - U_JG_ALEF,
    - U_JG_BEH,
    - U_JG_BETH,
    - U_JG_DAL,
    - U_JG_DALATH_RISH,
    - U_JG_E,
    - U_JG_FEH,
    - U_JG_FINAL_SEMKATH,
    - U_JG_GAF,
    - U_JG_GAMAL,
    - U_JG_HAH,
    - U_JG_HAMZA_ON_HEH_GOAL,
    - U_JG_HE,
    - U_JG_HEH,
    - U_JG_HEH_GOAL,
    - U_JG_HETH,
    - U_JG_KAF,
    - U_JG_KAPH,
    - U_JG_KNOTTED_HEH,
    - U_JG_LAM,
    - U_JG_LAMADH,
    - U_JG_MEEM,
    - U_JG_MIM,
    - U_JG_NOON,
    - U_JG_NUN,
    - U_JG_PE,
    - U_JG_QAF,
    - U_JG_QAPH,
    - U_JG_REH,
    - U_JG_REVERSED_PE,
    - U_JG_SAD,
    - U_JG_SADHE,
    - U_JG_SEEN,
    - U_JG_SEMKATH,
    - U_JG_SHIN,
    - U_JG_SWASH_KAF,
    - U_JG_SYRIAC_WAW,
    - U_JG_TAH,
    - U_JG_TAW,
    - U_JG_TEH_MARBUTA,
    - U_JG_TETH,
    - U_JG_WAW,
    - U_JG_YEH,
    - U_JG_YEH_BARREE,
    - U_JG_YEH_WITH_TAIL,
    - U_JG_YUDH,
    - U_JG_YUDH_HE,
    - U_JG_ZAIN,
    - U_JG_FE, /**< @stable ICU 2.6 */
    - U_JG_KHAPH, /**< @stable ICU 2.6 */
    - U_JG_ZHAIN, /**< @stable ICU 2.6 */
    - U_JG_BURUSHASKI_YEH_BARREE, /**< @draft ICU 4.0 */
    - U_JG_COUNT
    -} UJoiningGroup;
    -
    -/**
    - * Grapheme Cluster Break constants.
    - *
    - * @see UCHAR_GRAPHEME_CLUSTER_BREAK
    - * @stable ICU 3.4
    - */
    -typedef enum UGraphemeClusterBreak {
    - U_GCB_OTHER = 0, /*[XX]*/ /*See note !!*/
    - U_GCB_CONTROL = 1, /*[CN]*/
    - U_GCB_CR = 2, /*[CR]*/
    - U_GCB_EXTEND = 3, /*[EX]*/
    - U_GCB_L = 4, /*[L]*/
    - U_GCB_LF = 5, /*[LF]*/
    - U_GCB_LV = 6, /*[LV]*/
    - U_GCB_LVT = 7, /*[LVT]*/
    - U_GCB_T = 8, /*[T]*/
    - U_GCB_V = 9, /*[V]*/
    - U_GCB_SPACING_MARK = 10, /*[SM]*/ /* from here on: new in Unicode 5.1/ICU 4.0 */
    - U_GCB_PREPEND = 11, /*[PP]*/
    - U_GCB_COUNT = 12
    -} UGraphemeClusterBreak;
    -
    -/**
    - * Word Break constants.
    - * (UWordBreak is a pre-existing enum type in ubrk.h for word break status tags.)
    - *
    - * @see UCHAR_WORD_BREAK
    - * @stable ICU 3.4
    - */
    -typedef enum UWordBreakValues {
    - U_WB_OTHER = 0, /*[XX]*/ /*See note !!*/
    - U_WB_ALETTER = 1, /*[LE]*/
    - U_WB_FORMAT = 2, /*[FO]*/
    - U_WB_KATAKANA = 3, /*[KA]*/
    - U_WB_MIDLETTER = 4, /*[ML]*/
    - U_WB_MIDNUM = 5, /*[MN]*/
    - U_WB_NUMERIC = 6, /*[NU]*/
    - U_WB_EXTENDNUMLET = 7, /*[EX]*/
    - U_WB_CR = 8, /*[CR]*/ /* from here on: new in Unicode 5.1/ICU 4.0 */
    - U_WB_EXTEND = 9, /*[Extend]*/
    - U_WB_LF = 10, /*[LF]*/
    - U_WB_MIDNUMLET =11, /*[MB]*/
    - U_WB_NEWLINE =12, /*[NL]*/
    - U_WB_COUNT = 13
    -} UWordBreakValues;
    -
    -/**
    - * Sentence Break constants.
    - *
    - * @see UCHAR_SENTENCE_BREAK
    - * @stable ICU 3.4
    - */
    -typedef enum USentenceBreak {
    - U_SB_OTHER = 0, /*[XX]*/ /*See note !!*/
    - U_SB_ATERM = 1, /*[AT]*/
    - U_SB_CLOSE = 2, /*[CL]*/
    - U_SB_FORMAT = 3, /*[FO]*/
    - U_SB_LOWER = 4, /*[LO]*/
    - U_SB_NUMERIC = 5, /*[NU]*/
    - U_SB_OLETTER = 6, /*[LE]*/
    - U_SB_SEP = 7, /*[SE]*/
    - U_SB_SP = 8, /*[SP]*/
    - U_SB_STERM = 9, /*[ST]*/
    - U_SB_UPPER = 10, /*[UP]*/
    - U_SB_CR = 11, /*[CR]*/ /* from here on: new in Unicode 5.1/ICU 4.0 */
    - U_SB_EXTEND = 12, /*[EX]*/
    - U_SB_LF = 13, /*[LF]*/
    - U_SB_SCONTINUE = 14, /*[SC]*/
    - U_SB_COUNT = 15
    -} USentenceBreak;
    -
    -/**
    - * Line Break constants.
    - *
    - * @see UCHAR_LINE_BREAK
    - * @stable ICU 2.2
    - */
    -typedef enum ULineBreak {
    - U_LB_UNKNOWN = 0, /*[XX]*/ /*See note !!*/
    - U_LB_AMBIGUOUS = 1, /*[AI]*/
    - U_LB_ALPHABETIC = 2, /*[AL]*/
    - U_LB_BREAK_BOTH = 3, /*[B2]*/
    - U_LB_BREAK_AFTER = 4, /*[BA]*/
    - U_LB_BREAK_BEFORE = 5, /*[BB]*/
    - U_LB_MANDATORY_BREAK = 6, /*[BK]*/
    - U_LB_CONTINGENT_BREAK = 7, /*[CB]*/
    - U_LB_CLOSE_PUNCTUATION = 8, /*[CL]*/
    - U_LB_COMBINING_MARK = 9, /*[CM]*/
    - U_LB_CARRIAGE_RETURN = 10, /*[CR]*/
    - U_LB_EXCLAMATION = 11, /*[EX]*/
    - U_LB_GLUE = 12, /*[GL]*/
    - U_LB_HYPHEN = 13, /*[HY]*/
    - U_LB_IDEOGRAPHIC = 14, /*[ID]*/
    - U_LB_INSEPERABLE = 15,
    - /** Renamed from the misspelled "inseperable" in Unicode 4.0.1/ICU 3.0 @stable ICU 3.0 */
    - U_LB_INSEPARABLE=U_LB_INSEPERABLE,/*[IN]*/
    - U_LB_INFIX_NUMERIC = 16, /*[IS]*/
    - U_LB_LINE_FEED = 17, /*[LF]*/
    - U_LB_NONSTARTER = 18, /*[NS]*/
    - U_LB_NUMERIC = 19, /*[NU]*/
    - U_LB_OPEN_PUNCTUATION = 20, /*[OP]*/
    - U_LB_POSTFIX_NUMERIC = 21, /*[PO]*/
    - U_LB_PREFIX_NUMERIC = 22, /*[PR]*/
    - U_LB_QUOTATION = 23, /*[QU]*/
    - U_LB_COMPLEX_CONTEXT = 24, /*[SA]*/
    - U_LB_SURROGATE = 25, /*[SG]*/
    - U_LB_SPACE = 26, /*[SP]*/
    - U_LB_BREAK_SYMBOLS = 27, /*[SY]*/
    - U_LB_ZWSPACE = 28, /*[ZW]*/
    - U_LB_NEXT_LINE = 29, /*[NL]*/ /* from here on: new in Unicode 4/ICU 2.6 */
    - U_LB_WORD_JOINER = 30, /*[WJ]*/
    - U_LB_H2 = 31, /*[H2]*/ /* from here on: new in Unicode 4.1/ICU 3.4 */
    - U_LB_H3 = 32, /*[H3]*/
    - U_LB_JL = 33, /*[JL]*/
    - U_LB_JT = 34, /*[JT]*/
    - U_LB_JV = 35, /*[JV]*/
    - U_LB_COUNT = 36
    -} ULineBreak;
    -
    -/**
    - * Numeric Type constants.
    - *
    - * @see UCHAR_NUMERIC_TYPE
    - * @stable ICU 2.2
    - */
    -typedef enum UNumericType {
    - U_NT_NONE, /*[None]*/ /*See note !!*/
    - U_NT_DECIMAL, /*[de]*/
    - U_NT_DIGIT, /*[di]*/
    - U_NT_NUMERIC, /*[nu]*/
    - U_NT_COUNT
    -} UNumericType;
    -
    -/**
    - * Hangul Syllable Type constants.
    - *
    - * @see UCHAR_HANGUL_SYLLABLE_TYPE
    - * @stable ICU 2.6
    - */
    -typedef enum UHangulSyllableType {
    - U_HST_NOT_APPLICABLE, /*[NA]*/ /*See note !!*/
    - U_HST_LEADING_JAMO, /*[L]*/
    - U_HST_VOWEL_JAMO, /*[V]*/
    - U_HST_TRAILING_JAMO, /*[T]*/
    - U_HST_LV_SYLLABLE, /*[LV]*/
    - U_HST_LVT_SYLLABLE, /*[LVT]*/
    - U_HST_COUNT
    -} UHangulSyllableType;
    -
    -/**
    - * Check a binary Unicode property for a code point.
    - *
    - * Unicode, especially in version 3.2, defines many more properties than the
    - * original set in UnicodeData.txt.
    - *
    - * The properties APIs are intended to reflect Unicode properties as defined
    - * in the Unicode Character Database (UCD) and Unicode Technical Reports (UTR).
    - * For details about the properties see http://www.unicode.org/ucd/ .
    - * For names of Unicode properties see the UCD file PropertyAliases.txt.
    - *
    - * Important: If ICU is built with UCD files from Unicode versions below 3.2,
    - * then properties marked with "new in Unicode 3.2" are not or not fully available.
    - *
    - * @param c Code point to test.
    - * @param which UProperty selector constant, identifies which binary property to check.
    - * Must be UCHAR_BINARY_START<=which<UCHAR_BINARY_LIMIT.
    - * @return TRUE or FALSE according to the binary Unicode property value for c.
    - * Also FALSE if 'which' is out of bounds or if the Unicode version
    - * does not have data for the property at all, or not for this code point.
    - *
    - * @see UProperty
    - * @see u_getIntPropertyValue
    - * @see u_getUnicodeVersion
    - * @stable ICU 2.1
    - */
    -U_STABLE UBool U_EXPORT2
    -u_hasBinaryProperty(UChar32 c, UProperty which);
    -
    -/**
    - * Check if a code point has the Alphabetic Unicode property.
    - * Same as u_hasBinaryProperty(c, UCHAR_ALPHABETIC).
    - * This is different from u_isalpha!
    - * @param c Code point to test
    - * @return true if the code point has the Alphabetic Unicode property, false otherwise
    - *
    - * @see UCHAR_ALPHABETIC
    - * @see u_isalpha
    - * @see u_hasBinaryProperty
    - * @stable ICU 2.1
    - */
    -U_STABLE UBool U_EXPORT2
    -u_isUAlphabetic(UChar32 c);
    -
    -/**
    - * Check if a code point has the Lowercase Unicode property.
    - * Same as u_hasBinaryProperty(c, UCHAR_LOWERCASE).
    - * This is different from u_islower!
    - * @param c Code point to test
    - * @return true if the code point has the Lowercase Unicode property, false otherwise
    - *
    - * @see UCHAR_LOWERCASE
    - * @see u_islower
    - * @see u_hasBinaryProperty
    - * @stable ICU 2.1
    - */
    -U_STABLE UBool U_EXPORT2
    -u_isULowercase(UChar32 c);
    -
    -/**
    - * Check if a code point has the Uppercase Unicode property.
    - * Same as u_hasBinaryProperty(c, UCHAR_UPPERCASE).
    - * This is different from u_isupper!
    - * @param c Code point to test
    - * @return true if the code point has the Uppercase Unicode property, false otherwise
    - *
    - * @see UCHAR_UPPERCASE
    - * @see u_isupper
    - * @see u_hasBinaryProperty
    - * @stable ICU 2.1
    - */
    -U_STABLE UBool U_EXPORT2
    -u_isUUppercase(UChar32 c);
    -
    -/**
    - * Check if a code point has the White_Space Unicode property.
    - * Same as u_hasBinaryProperty(c, UCHAR_WHITE_SPACE).
    - * This is different from both u_isspace and u_isWhitespace!
    - *
    - * Note: There are several ICU whitespace functions; please see the uchar.h
    - * file documentation for a detailed comparison.
    - *
    - * @param c Code point to test
    - * @return true if the code point has the White_Space Unicode property, false otherwise.
    - *
    - * @see UCHAR_WHITE_SPACE
    - * @see u_isWhitespace
    - * @see u_isspace
    - * @see u_isJavaSpaceChar
    - * @see u_hasBinaryProperty
    - * @stable ICU 2.1
    - */
    -U_STABLE UBool U_EXPORT2
    -u_isUWhiteSpace(UChar32 c);
    -
    -/**
    - * Get the property value for an enumerated or integer Unicode property for a code point.
    - * Also returns binary and mask property values.
    - *
    - * Unicode, especially in version 3.2, defines many more properties than the
    - * original set in UnicodeData.txt.
    - *
    - * The properties APIs are intended to reflect Unicode properties as defined
    - * in the Unicode Character Database (UCD) and Unicode Technical Reports (UTR).
    - * For details about the properties see http://www.unicode.org/ .
    - * For names of Unicode properties see the UCD file PropertyAliases.txt.
    - *
    - * Sample usage:
    - * UEastAsianWidth ea=(UEastAsianWidth)u_getIntPropertyValue(c, UCHAR_EAST_ASIAN_WIDTH);
    - * UBool b=(UBool)u_getIntPropertyValue(c, UCHAR_IDEOGRAPHIC);
    - *
    - * @param c Code point to test.
    - * @param which UProperty selector constant, identifies which property to check.
    - * Must be UCHAR_BINARY_START<=which<UCHAR_BINARY_LIMIT
    - * or UCHAR_INT_START<=which<UCHAR_INT_LIMIT
    - * or UCHAR_MASK_START<=which<UCHAR_MASK_LIMIT.
    - * @return Numeric value that is directly the property value or,
    - * for enumerated properties, corresponds to the numeric value of the enumerated
    - * constant of the respective property value enumeration type
    - * (cast to enum type if necessary).
    - * Returns 0 or 1 (for FALSE/TRUE) for binary Unicode properties.
    - * Returns a bit-mask for mask properties.
    - * Returns 0 if 'which' is out of bounds or if the Unicode version
    - * does not have data for the property at all, or not for this code point.
    - *
    - * @see UProperty
    - * @see u_hasBinaryProperty
    - * @see u_getIntPropertyMinValue
    - * @see u_getIntPropertyMaxValue
    - * @see u_getUnicodeVersion
    - * @stable ICU 2.2
    - */
    -U_STABLE int32_t U_EXPORT2
    -u_getIntPropertyValue(UChar32 c, UProperty which);
    -
    -/**
    - * Get the minimum value for an enumerated/integer/binary Unicode property.
    - * Can be used together with u_getIntPropertyMaxValue
    - * to allocate arrays of UnicodeSet or similar.
    - *
    - * @param which UProperty selector constant, identifies which binary property to check.
    - * Must be UCHAR_BINARY_START<=which<UCHAR_BINARY_LIMIT
    - * or UCHAR_INT_START<=which<UCHAR_INT_LIMIT.
    - * @return Minimum value returned by u_getIntPropertyValue for a Unicode property.
    - * 0 if the property selector is out of range.
    - *
    - * @see UProperty
    - * @see u_hasBinaryProperty
    - * @see u_getUnicodeVersion
    - * @see u_getIntPropertyMaxValue
    - * @see u_getIntPropertyValue
    - * @stable ICU 2.2
    - */
    -U_STABLE int32_t U_EXPORT2
    -u_getIntPropertyMinValue(UProperty which);
    -
    -/**
    - * Get the maximum value for an enumerated/integer/binary Unicode property.
    - * Can be used together with u_getIntPropertyMinValue
    - * to allocate arrays of UnicodeSet or similar.
    - *
    - * Examples for min/max values (for Unicode 3.2):
    - *
    - * - UCHAR_BIDI_CLASS: 0/18 (U_LEFT_TO_RIGHT/U_BOUNDARY_NEUTRAL)
    - * - UCHAR_SCRIPT: 0/45 (USCRIPT_COMMON/USCRIPT_TAGBANWA)
    - * - UCHAR_IDEOGRAPHIC: 0/1 (FALSE/TRUE)
    - *
    - * For undefined UProperty constant values, min/max values will be 0/-1.
    - *
    - * @param which UProperty selector constant, identifies which binary property to check.
    - * Must be UCHAR_BINARY_START<=which<UCHAR_BINARY_LIMIT
    - * or UCHAR_INT_START<=which<UCHAR_INT_LIMIT.
    - * @return Maximum value returned by u_getIntPropertyValue for a Unicode property.
    - * <=0 if the property selector is out of range.
    - *
    - * @see UProperty
    - * @see u_hasBinaryProperty
    - * @see u_getUnicodeVersion
    - * @see u_getIntPropertyMaxValue
    - * @see u_getIntPropertyValue
    - * @stable ICU 2.2
    - */
    -U_STABLE int32_t U_EXPORT2
    -u_getIntPropertyMaxValue(UProperty which);
    -
    -/**
    - * Get the numeric value for a Unicode code point as defined in the
    - * Unicode Character Database.
    - *
    - * A "double" return type is necessary because
    - * some numeric values are fractions, negative, or too large for int32_t.
    - *
    - * For characters without any numeric values in the Unicode Character Database,
    - * this function will return U_NO_NUMERIC_VALUE.
    - *
    - * Similar to java.lang.Character.getNumericValue(), but u_getNumericValue()
    - * also supports negative values, large values, and fractions,
    - * while Java's getNumericValue() returns values 10..35 for ASCII letters.
    - *
    - * @param c Code point to get the numeric value for.
    - * @return Numeric value of c, or U_NO_NUMERIC_VALUE if none is defined.
    - *
    - * @see U_NO_NUMERIC_VALUE
    - * @stable ICU 2.2
    - */
    -U_STABLE double U_EXPORT2
    -u_getNumericValue(UChar32 c);
    -
    -/**
    - * Special value that is returned by u_getNumericValue when
    - * no numeric value is defined for a code point.
    - *
    - * @see u_getNumericValue
    - * @stable ICU 2.2
    - */
    -#define U_NO_NUMERIC_VALUE ((double)-123456789.)
    -
    -/**
    - * Determines whether the specified code point has the general category "Ll"
    - * (lowercase letter).
    - *
    - * Same as java.lang.Character.isLowerCase().
    - *
    - * This misses some characters that are also lowercase but
    - * have a different general category value.
    - * In order to include those, use UCHAR_LOWERCASE.
    - *
    - * In addition to being equivalent to a Java function, this also serves
    - * as a C/POSIX migration function.
    - * See the comments about C/POSIX character classification functions in the
    - * documentation at the top of this header file.
    - *
    - * @param c the code point to be tested
    - * @return TRUE if the code point is an Ll lowercase letter
    - *
    - * @see UCHAR_LOWERCASE
    - * @see u_isupper
    - * @see u_istitle
    - * @stable ICU 2.0
    - */
    -U_STABLE UBool U_EXPORT2
    -u_islower(UChar32 c);
    -
    -/**
    - * Determines whether the specified code point has the general category "Lu"
    - * (uppercase letter).
    - *
    - * Same as java.lang.Character.isUpperCase().
    - *
    - * This misses some characters that are also uppercase but
    - * have a different general category value.
    - * In order to include those, use UCHAR_UPPERCASE.
    - *
    - * In addition to being equivalent to a Java function, this also serves
    - * as a C/POSIX migration function.
    - * See the comments about C/POSIX character classification functions in the
    - * documentation at the top of this header file.
    - *
    - * @param c the code point to be tested
    - * @return TRUE if the code point is an Lu uppercase letter
    - *
    - * @see UCHAR_UPPERCASE
    - * @see u_islower
    - * @see u_istitle
    - * @see u_tolower
    - * @stable ICU 2.0
    - */
    -U_STABLE UBool U_EXPORT2
    -u_isupper(UChar32 c);
    -
    -/**
    - * Determines whether the specified code point is a titlecase letter.
    - * True for general category "Lt" (titlecase letter).
    - *
    - * Same as java.lang.Character.isTitleCase().
    - *
    - * @param c the code point to be tested
    - * @return TRUE if the code point is an Lt titlecase letter
    - *
    - * @see u_isupper
    - * @see u_islower
    - * @see u_totitle
    - * @stable ICU 2.0
    - */
    -U_STABLE UBool U_EXPORT2
    -u_istitle(UChar32 c);
    -
    -/**
    - * Determines whether the specified code point is a digit character according to Java.
    - * True for characters with general category "Nd" (decimal digit numbers).
    - * Beginning with Unicode 4, this is the same as
    - * testing for the Numeric_Type of Decimal.
    - *
    - * Same as java.lang.Character.isDigit().
    - *
    - * In addition to being equivalent to a Java function, this also serves
    - * as a C/POSIX migration function.
    - * See the comments about C/POSIX character classification functions in the
    - * documentation at the top of this header file.
    - *
    - * @param c the code point to be tested
    - * @return TRUE if the code point is a digit character according to Character.isDigit()
    - *
    - * @stable ICU 2.0
    - */
    -U_STABLE UBool U_EXPORT2
    -u_isdigit(UChar32 c);
    -
    -/**
    - * Determines whether the specified code point is a letter character.
    - * True for general categories "L" (letters).
    - *
    - * Same as java.lang.Character.isLetter().
    - *
    - * In addition to being equivalent to a Java function, this also serves
    - * as a C/POSIX migration function.
    - * See the comments about C/POSIX character classification functions in the
    - * documentation at the top of this header file.
    - *
    - * @param c the code point to be tested
    - * @return TRUE if the code point is a letter character
    - *
    - * @see u_isdigit
    - * @see u_isalnum
    - * @stable ICU 2.0
    - */
    -U_STABLE UBool U_EXPORT2
    -u_isalpha(UChar32 c);
    -
    -/**
    - * Determines whether the specified code point is an alphanumeric character
    - * (letter or digit) according to Java.
    - * True for characters with general categories
    - * "L" (letters) and "Nd" (decimal digit numbers).
    - *
    - * Same as java.lang.Character.isLetterOrDigit().
    - *
    - * In addition to being equivalent to a Java function, this also serves
    - * as a C/POSIX migration function.
    - * See the comments about C/POSIX character classification functions in the
    - * documentation at the top of this header file.
    - *
    - * @param c the code point to be tested
    - * @return TRUE if the code point is an alphanumeric character according to Character.isLetterOrDigit()
    - *
    - * @stable ICU 2.0
    - */
    -U_STABLE UBool U_EXPORT2
    -u_isalnum(UChar32 c);
    -
    -/**
    - * Determines whether the specified code point is a hexadecimal digit.
    - * This is equivalent to u_digit(c, 16)>=0.
    - * True for characters with general category "Nd" (decimal digit numbers)
    - * as well as Latin letters a-f and A-F in both ASCII and Fullwidth ASCII.
    - * (That is, for letters with code points
    - * 0041..0046, 0061..0066, FF21..FF26, FF41..FF46.)
    - *
    - * In order to narrow the definition of hexadecimal digits to only ASCII
    - * characters, use (c<=0x7f && u_isxdigit(c)).
    - *
    - * This is a C/POSIX migration function.
    - * See the comments about C/POSIX character classification functions in the
    - * documentation at the top of this header file.
    - *
    - * @param c the code point to be tested
    - * @return TRUE if the code point is a hexadecimal digit
    - *
    - * @stable ICU 2.6
    - */
    -U_STABLE UBool U_EXPORT2
    -u_isxdigit(UChar32 c);
    -
    -/**
    - * Determines whether the specified code point is a punctuation character.
    - * True for characters with general categories "P" (punctuation).
    - *
    - * This is a C/POSIX migration function.
    - * See the comments about C/POSIX character classification functions in the
    - * documentation at the top of this header file.
    - *
    - * @param c the code point to be tested
    - * @return TRUE if the code point is a punctuation character
    - *
    - * @stable ICU 2.6
    - */
    -U_STABLE UBool U_EXPORT2
    -u_ispunct(UChar32 c);
    -
    -/**
    - * Determines whether the specified code point is a "graphic" character
    - * (printable, excluding spaces).
    - * TRUE for all characters except those with general categories
    - * "Cc" (control codes), "Cf" (format controls), "Cs" (surrogates),
    - * "Cn" (unassigned), and "Z" (separators).
    - *
    - * This is a C/POSIX migration function.
    - * See the comments about C/POSIX character classification functions in the
    - * documentation at the top of this header file.
    - *
    - * @param c the code point to be tested
    - * @return TRUE if the code point is a "graphic" character
    - *
    - * @stable ICU 2.6
    - */
    -U_STABLE UBool U_EXPORT2
    -u_isgraph(UChar32 c);
    -
    -/**
    - * Determines whether the specified code point is a "blank" or "horizontal space",
    - * a character that visibly separates words on a line.
    - * The following are equivalent definitions:
    - *
    - * TRUE for Unicode White_Space characters except for "vertical space controls"
    - * where "vertical space controls" are the following characters:
    - * U+000A (LF) U+000B (VT) U+000C (FF) U+000D (CR) U+0085 (NEL) U+2028 (LS) U+2029 (PS)
    - *
    - * same as
    - *
    - * TRUE for U+0009 (TAB) and characters with general category "Zs" (space separators)
    - * except Zero Width Space (ZWSP, U+200B).
    - *
    - * Note: There are several ICU whitespace functions; please see the uchar.h
    - * file documentation for a detailed comparison.
    - *
    - * This is a C/POSIX migration function.
    - * See the comments about C/POSIX character classification functions in the
    - * documentation at the top of this header file.
    - *
    - * @param c the code point to be tested
    - * @return TRUE if the code point is a "blank"
    - *
    - * @stable ICU 2.6
    - */
    -U_STABLE UBool U_EXPORT2
    -u_isblank(UChar32 c);
    -
    -/**
    - * Determines whether the specified code point is "defined",
    - * which usually means that it is assigned a character.
    - * True for general categories other than "Cn" (other, not assigned),
    - * i.e., true for all code points mentioned in UnicodeData.txt.
    - *
    - * Note that non-character code points (e.g., U+FDD0) are not "defined"
    - * (they are Cn), but surrogate code points are "defined" (Cs).
    - *
    - * Same as java.lang.Character.isDefined().
    - *
    - * @param c the code point to be tested
    - * @return TRUE if the code point is assigned a character
    - *
    - * @see u_isdigit
    - * @see u_isalpha
    - * @see u_isalnum
    - * @see u_isupper
    - * @see u_islower
    - * @see u_istitle
    - * @stable ICU 2.0
    - */
    -U_STABLE UBool U_EXPORT2
    -u_isdefined(UChar32 c);
    -
    -/**
    - * Determines if the specified character is a space character or not.
    - *
    - * Note: There are several ICU whitespace functions; please see the uchar.h
    - * file documentation for a detailed comparison.
    - *
    - * This is a C/POSIX migration function.
    - * See the comments about C/POSIX character classification functions in the
    - * documentation at the top of this header file.
    - *
    - * @param c the character to be tested
    - * @return true if the character is a space character; false otherwise.
    - *
    - * @see u_isJavaSpaceChar
    - * @see u_isWhitespace
    - * @see u_isUWhiteSpace
    - * @stable ICU 2.0
    - */
    -U_STABLE UBool U_EXPORT2
    -u_isspace(UChar32 c);
    -
    -/**
    - * Determine if the specified code point is a space character according to Java.
    - * True for characters with general categories "Z" (separators),
    - * which does not include control codes (e.g., TAB or Line Feed).
    - *
    - * Same as java.lang.Character.isSpaceChar().
    - *
    - * Note: There are several ICU whitespace functions; please see the uchar.h
    - * file documentation for a detailed comparison.
    - *
    - * @param c the code point to be tested
    - * @return TRUE if the code point is a space character according to Character.isSpaceChar()
    - *
    - * @see u_isspace
    - * @see u_isWhitespace
    - * @see u_isUWhiteSpace
    - * @stable ICU 2.6
    - */
    -U_STABLE UBool U_EXPORT2
    -u_isJavaSpaceChar(UChar32 c);
    -
    -/**
    - * Determines if the specified code point is a whitespace character according to Java/ICU.
    - * A character is considered to be a Java whitespace character if and only
    - * if it satisfies one of the following criteria:
    - *
    - * - It is a Unicode separator (categories "Z"), but is not
    - * a no-break space (U+00A0 NBSP or U+2007 Figure Space or U+202F Narrow NBSP).
    - * - It is U+0009 HORIZONTAL TABULATION.
    - * - It is U+000A LINE FEED.
    - * - It is U+000B VERTICAL TABULATION.
    - * - It is U+000C FORM FEED.
    - * - It is U+000D CARRIAGE RETURN.
    - * - It is U+001C FILE SEPARATOR.
    - * - It is U+001D GROUP SEPARATOR.
    - * - It is U+001E RECORD SEPARATOR.
    - * - It is U+001F UNIT SEPARATOR.
    - * - It is U+0085 NEXT LINE.
    - *
    - * Same as java.lang.Character.isWhitespace() except that Java omits U+0085.
    - *
    - * Note: There are several ICU whitespace functions; please see the uchar.h
    - * file documentation for a detailed comparison.
    - *
    - * @param c the code point to be tested
    - * @return TRUE if the code point is a whitespace character according to Java/ICU
    - *
    - * @see u_isspace
    - * @see u_isJavaSpaceChar
    - * @see u_isUWhiteSpace
    - * @stable ICU 2.0
    - */
    -U_STABLE UBool U_EXPORT2
    -u_isWhitespace(UChar32 c);
    -
    -/**
    - * Determines whether the specified code point is a control character
    - * (as defined by this function).
    - * A control character is one of the following:
    - * - ISO 8-bit control character (U+0000..U+001f and U+007f..U+009f)
    - * - U_CONTROL_CHAR (Cc)
    - * - U_FORMAT_CHAR (Cf)
    - * - U_LINE_SEPARATOR (Zl)
    - * - U_PARAGRAPH_SEPARATOR (Zp)
    - *
    - * This is a C/POSIX migration function.
    - * See the comments about C/POSIX character classification functions in the
    - * documentation at the top of this header file.
    - *
    - * @param c the code point to be tested
    - * @return TRUE if the code point is a control character
    - *
    - * @see UCHAR_DEFAULT_IGNORABLE_CODE_POINT
    - * @see u_isprint
    - * @stable ICU 2.0
    - */
    -U_STABLE UBool U_EXPORT2
    -u_iscntrl(UChar32 c);
    -
    -/**
    - * Determines whether the specified code point is an ISO control code.
    - * True for U+0000..U+001f and U+007f..U+009f (general category "Cc").
    - *
    - * Same as java.lang.Character.isISOControl().
    - *
    - * @param c the code point to be tested
    - * @return TRUE if the code point is an ISO control code
    - *
    - * @see u_iscntrl
    - * @stable ICU 2.6
    - */
    -U_STABLE UBool U_EXPORT2
    -u_isISOControl(UChar32 c);
    -
    -/**
    - * Determines whether the specified code point is a printable character.
    - * True for general categories <em>other</em> than "C" (controls).
    - *
    - * This is a C/POSIX migration function.
    - * See the comments about C/POSIX character classification functions in the
    - * documentation at the top of this header file.
    - *
    - * @param c the code point to be tested
    - * @return TRUE if the code point is a printable character
    - *
    - * @see UCHAR_DEFAULT_IGNORABLE_CODE_POINT
    - * @see u_iscntrl
    - * @stable ICU 2.0
    - */
    -U_STABLE UBool U_EXPORT2
    -u_isprint(UChar32 c);
    -
    -/**
    - * Determines whether the specified code point is a base character.
    - * True for general categories "L" (letters), "N" (numbers),
    - * "Mc" (spacing combining marks), and "Me" (enclosing marks).
    - *
    - * Note that this is different from the Unicode definition in
    - * chapter 3.5, conformance clause D13,
    - * which defines base characters to be all characters (not Cn)
    - * that do not graphically combine with preceding characters (M)
    - * and that are neither control (Cc) or format (Cf) characters.
    - *
    - * @param c the code point to be tested
    - * @return TRUE if the code point is a base character according to this function
    - *
    - * @see u_isalpha
    - * @see u_isdigit
    - * @stable ICU 2.0
    - */
    -U_STABLE UBool U_EXPORT2
    -u_isbase(UChar32 c);
    -
    -/**
    - * Returns the bidirectional category value for the code point,
    - * which is used in the Unicode bidirectional algorithm
    - * (UAX #9 http://www.unicode.org/reports/tr9/).
    - * Note that some <em>unassigned</em> code points have bidi values
    - * of R or AL because they are in blocks that are reserved
    - * for Right-To-Left scripts.
    - *
    - * Same as java.lang.Character.getDirectionality()
    - *
    - * @param c the code point to be tested
    - * @return the bidirectional category (UCharDirection) value
    - *
    - * @see UCharDirection
    - * @stable ICU 2.0
    - */
    -U_STABLE UCharDirection U_EXPORT2
    -u_charDirection(UChar32 c);
    -
    -/**
    - * Determines whether the code point has the Bidi_Mirrored property.
    - * This property is set for characters that are commonly used in
    - * Right-To-Left contexts and need to be displayed with a "mirrored"
    - * glyph.
    - *
    - * Same as java.lang.Character.isMirrored().
    - * Same as UCHAR_BIDI_MIRRORED
    - *
    - * @param c the code point to be tested
    - * @return TRUE if the character has the Bidi_Mirrored property
    - *
    - * @see UCHAR_BIDI_MIRRORED
    - * @stable ICU 2.0
    - */
    -U_STABLE UBool U_EXPORT2
    -u_isMirrored(UChar32 c);
    -
    -/**
    - * Maps the specified character to a "mirror-image" character.
    - * For characters with the Bidi_Mirrored property, implementations
    - * sometimes need a "poor man's" mapping to another Unicode
    - * character (code point) such that the default glyph may serve
    - * as the mirror-image of the default glyph of the specified
    - * character. This is useful for text conversion to and from
    - * codepages with visual order, and for displays without glyph
    - * selecetion capabilities.
    - *
    - * @param c the code point to be mapped
    - * @return another Unicode code point that may serve as a mirror-image
    - * substitute, or c itself if there is no such mapping or c
    - * does not have the Bidi_Mirrored property
    - *
    - * @see UCHAR_BIDI_MIRRORED
    - * @see u_isMirrored
    - * @stable ICU 2.0
    - */
    -U_STABLE UChar32 U_EXPORT2
    -u_charMirror(UChar32 c);
    -
    -/**
    - * Returns the general category value for the code point.
    - *
    - * Same as java.lang.Character.getType().
    - *
    - * @param c the code point to be tested
    - * @return the general category (UCharCategory) value
    - *
    - * @see UCharCategory
    - * @stable ICU 2.0
    - */
    -U_STABLE int8_t U_EXPORT2
    -u_charType(UChar32 c);
    -
    -/**
    - * Get a single-bit bit set for the general category of a character.
    - * This bit set can be compared bitwise with U_GC_SM_MASK, U_GC_L_MASK, etc.
    - * Same as U_MASK(u_charType(c)).
    - *
    - * @param c the code point to be tested
    - * @return a single-bit mask corresponding to the general category (UCharCategory) value
    - *
    - * @see u_charType
    - * @see UCharCategory
    - * @see U_GC_CN_MASK
    - * @stable ICU 2.1
    - */
    -#define U_GET_GC_MASK(c) U_MASK(u_charType(c))
    -
    -/**
    - * Callback from u_enumCharTypes(), is called for each contiguous range
    - * of code points c (where start<=c<limit)
    - * with the same Unicode general category ("character type").
    - *
    - * The callback function can stop the enumeration by returning FALSE.
    - *
    - * @param context an opaque pointer, as passed into utrie_enum()
    - * @param start the first code point in a contiguous range with value
    - * @param limit one past the last code point in a contiguous range with value
    - * @param type the general category for all code points in [start..limit[
    - * @return FALSE to stop the enumeration
    - *
    - * @stable ICU 2.1
    - * @see UCharCategory
    - * @see u_enumCharTypes
    - */
    -typedef UBool U_CALLCONV
    -UCharEnumTypeRange(const void *context, UChar32 start, UChar32 limit, UCharCategory type);
    -
    -/**
    - * Enumerate efficiently all code points with their Unicode general categories.
    - *
    - * This is useful for building data structures (e.g., UnicodeSet's),
    - * for enumerating all assigned code points (type!=U_UNASSIGNED), etc.
    - *
    - * For each contiguous range of code points with a given general category ("character type"),
    - * the UCharEnumTypeRange function is called.
    - * Adjacent ranges have different types.
    - * The Unicode Standard guarantees that the numeric value of the type is 0..31.
    - *
    - * @param enumRange a pointer to a function that is called for each contiguous range
    - * of code points with the same general category
    - * @param context an opaque pointer that is passed on to the callback function
    - *
    - * @stable ICU 2.1
    - * @see UCharCategory
    - * @see UCharEnumTypeRange
    - */
    -U_STABLE void U_EXPORT2
    -u_enumCharTypes(UCharEnumTypeRange *enumRange, const void *context);
    -
    -#if !UCONFIG_NO_NORMALIZATION
    -
    -/**
    - * Returns the combining class of the code point as specified in UnicodeData.txt.
    - *
    - * @param c the code point of the character
    - * @return the combining class of the character
    - * @stable ICU 2.0
    - */
    -U_STABLE uint8_t U_EXPORT2
    -u_getCombiningClass(UChar32 c);
    -
    -#endif
    -
    -/**
    - * Returns the decimal digit value of a decimal digit character.
    - * Such characters have the general category "Nd" (decimal digit numbers)
    - * and a Numeric_Type of Decimal.
    - *
    - * Unlike ICU releases before 2.6, no digit values are returned for any
    - * Han characters because Han number characters are often used with a special
    - * Chinese-style number format (with characters for powers of 10 in between)
    - * instead of in decimal-positional notation.
    - * Unicode 4 explicitly assigns Han number characters the Numeric_Type
    - * Numeric instead of Decimal.
    - * See Jitterbug 1483 for more details.
    - *
    - * Use u_getIntPropertyValue(c, UCHAR_NUMERIC_TYPE) and u_getNumericValue()
    - * for complete numeric Unicode properties.
    - *
    - * @param c the code point for which to get the decimal digit value
    - * @return the decimal digit value of c,
    - * or -1 if c is not a decimal digit character
    - *
    - * @see u_getNumericValue
    - * @stable ICU 2.0
    - */
    -U_STABLE int32_t U_EXPORT2
    -u_charDigitValue(UChar32 c);
    -
    -/**
    - * Returns the Unicode allocation block that contains the character.
    - *
    - * @param c the code point to be tested
    - * @return the block value (UBlockCode) for c
    - *
    - * @see UBlockCode
    - * @stable ICU 2.0
    - */
    -U_STABLE UBlockCode U_EXPORT2
    -ublock_getCode(UChar32 c);
    -
    -/**
    - * Retrieve the name of a Unicode character.
    - * Depending on <code>nameChoice</code>, the character name written
    - * into the buffer is the "modern" name or the name that was defined
    - * in Unicode version 1.0.
    - * The name contains only "invariant" characters
    - * like A-Z, 0-9, space, and '-'.
    - * Unicode 1.0 names are only retrieved if they are different from the modern
    - * names and if the data file contains the data for them. gennames may or may
    - * not be called with a command line option to include 1.0 names in unames.dat.
    - *
    - * @param code The character (code point) for which to get the name.
    - * It must be <code>0<=code<=0x10ffff</code>.
    - * @param nameChoice Selector for which name to get.
    - * @param buffer Destination address for copying the name.
    - * The name will always be zero-terminated.
    - *

    <TRUNCATED>
  • Benoitc at Feb 13, 2014 at 6:14 pm
    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/rbnf.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/rbnf.h b/apps/couch_collate/platform/osx/icu/unicode/rbnf.h
    deleted file mode 100644
    index 030565e..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/rbnf.h
    +++ /dev/null
    @@ -1,1049 +0,0 @@
    -/*
    -*******************************************************************************
    -* Copyright (C) 1997-2006, International Business Machines Corporation and others.
    -* All Rights Reserved.
    -*******************************************************************************
    -*/
    -
    -#ifndef RBNF_H
    -#define RBNF_H
    -
    -#include "unicode/utypes.h"
    -
    -/**
    - * \file
    - * \brief C++ API: Rule Based Number Format
    - */
    -
    -/**
    - * \def U_HAVE_RBNF
    - * This will be 0 if RBNF support is not included in ICU
    - * and 1 if it is.
    - *
    - * @stable ICU 2.4
    - */
    -#if UCONFIG_NO_FORMATTING
    -#define U_HAVE_RBNF 0
    -#else
    -#define U_HAVE_RBNF 1
    -
    -#include "unicode/coll.h"
    -#include "unicode/dcfmtsym.h"
    -#include "unicode/fmtable.h"
    -#include "unicode/locid.h"
    -#include "unicode/numfmt.h"
    -#include "unicode/unistr.h"
    -#include "unicode/strenum.h"
    -
    -U_NAMESPACE_BEGIN
    -
    -class NFRuleSet;
    -class LocalizationInfo;
    -
    -/**
    - * Tags for the predefined rulesets.
    - *
    - * @stable ICU 2.2
    - */
    -enum URBNFRuleSetTag {
    - URBNF_SPELLOUT,
    - URBNF_ORDINAL,
    - URBNF_DURATION,
    - URBNF_COUNT
    -};
    -
    -#if UCONFIG_NO_COLLATION
    -class Collator;
    -#endif
    -
    -/**
    - * The RuleBasedNumberFormat class formats numbers according to a set of rules. This number formatter is
    - * typically used for spelling out numeric values in words (e.g., 25,3476 as
    - * &quot;twenty-five thousand three hundred seventy-six&quot; or &quot;vingt-cinq mille trois
    - * cents soixante-seize&quot; or
    - * &quot;f&uuml;nfundzwanzigtausenddreihundertsechsundsiebzig&quot;), but can also be used for
    - * other complicated formatting tasks, such as formatting a number of seconds as hours,
    - * minutes and seconds (e.g., 3,730 as &quot;1:02:10&quot;).
    - *
    - * <p>The resources contain three predefined formatters for each locale: spellout, which
    - * spells out a value in words (123 is &quot;one hundred twenty-three&quot;); ordinal, which
    - * appends an ordinal suffix to the end of a numeral (123 is &quot;123rd&quot;); and
    - * duration, which shows a duration in seconds as hours, minutes, and seconds (123 is
    - * &quot;2:03&quot;).&nbsp; The client can also define more specialized <tt>RuleBasedNumberFormat</tt>s
    - * by supplying programmer-defined rule sets.</p>
    - *
    - * <p>The behavior of a <tt>RuleBasedNumberFormat</tt> is specified by a textual description
    - * that is either passed to the constructor as a <tt>String</tt> or loaded from a resource
    - * bundle. In its simplest form, the description consists of a semicolon-delimited list of <em>rules.</em>
    - * Each rule has a string of output text and a value or range of values it is applicable to.
    - * In a typical spellout rule set, the first twenty rules are the words for the numbers from
    - * 0 to 19:</p>
    - *
    - * <pre>zero; one; two; three; four; five; six; seven; eight; nine;
    - * ten; eleven; twelve; thirteen; fourteen; fifteen; sixteen; seventeen; eighteen; nineteen;</pre>
    - *
    - * <p>For larger numbers, we can use the preceding set of rules to format the ones place, and
    - * we only have to supply the words for the multiples of 10:</p>
    - *
    - * <pre> 20: twenty[-&gt;&gt;];
    - * 30: thirty[-&gt;&gt;];
    - * 40: forty[-&gt;&gt;];
    - * 50: fifty[-&gt;&gt;];
    - * 60: sixty[-&gt;&gt;];
    - * 70: seventy[-&gt;&gt;];
    - * 80: eighty[-&gt;&gt;];
    - * 90: ninety[-&gt;&gt;];</pre>
    - *
    - * <p>In these rules, the <em>base value</em> is spelled out explicitly and set off from the
    - * rule's output text with a colon. The rules are in a sorted list, and a rule is applicable
    - * to all numbers from its own base value to one less than the next rule's base value. The
    - * &quot;&gt;&gt;&quot; token is called a <em>substitution</em> and tells the fomatter to
    - * isolate the number's ones digit, format it using this same set of rules, and place the
    - * result at the position of the &quot;&gt;&gt;&quot; token. Text in brackets is omitted if
    - * the number being formatted is an even multiple of 10 (the hyphen is a literal hyphen; 24
    - * is &quot;twenty-four,&quot; not &quot;twenty four&quot;).</p>
    - *
    - * <p>For even larger numbers, we can actually look up several parts of the number in the
    - * list:</p>
    - *
    - * <pre>100: &lt;&lt; hundred[ &gt;&gt;];</pre>
    - *
    - * <p>The &quot;&lt;&lt;&quot; represents a new kind of substitution. The &lt;&lt; isolates
    - * the hundreds digit (and any digits to its left), formats it using this same rule set, and
    - * places the result where the &quot;&lt;&lt;&quot; was. Notice also that the meaning of
    - * &gt;&gt; has changed: it now refers to both the tens and the ones digits. The meaning of
    - * both substitutions depends on the rule's base value. The base value determines the rule's <em>divisor,</em>
    - * which is the highest power of 10 that is less than or equal to the base value (the user
    - * can change this). To fill in the substitutions, the formatter divides the number being
    - * formatted by the divisor. The integral quotient is used to fill in the &lt;&lt;
    - * substitution, and the remainder is used to fill in the &gt;&gt; substitution. The meaning
    - * of the brackets changes similarly: text in brackets is omitted if the value being
    - * formatted is an even multiple of the rule's divisor. The rules are applied recursively, so
    - * if a substitution is filled in with text that includes another substitution, that
    - * substitution is also filled in.</p>
    - *
    - * <p>This rule covers values up to 999, at which point we add another rule:</p>
    - *
    - * <pre>1000: &lt;&lt; thousand[ &gt;&gt;];</pre>
    - *
    - * <p>Again, the meanings of the brackets and substitution tokens shift because the rule's
    - * base value is a higher power of 10, changing the rule's divisor. This rule can actually be
    - * used all the way up to 999,999. This allows us to finish out the rules as follows:</p>
    - *
    - * <pre> 1,000,000: &lt;&lt; million[ &gt;&gt;];
    - * 1,000,000,000: &lt;&lt; billion[ &gt;&gt;];
    - * 1,000,000,000,000: &lt;&lt; trillion[ &gt;&gt;];
    - * 1,000,000,000,000,000: OUT OF RANGE!;</pre>
    - *
    - * <p>Commas, periods, and spaces can be used in the base values to improve legibility and
    - * are ignored by the rule parser. The last rule in the list is customarily treated as an
    - * &quot;overflow rule,&quot; applying to everything from its base value on up, and often (as
    - * in this example) being used to print out an error message or default representation.
    - * Notice also that the size of the major groupings in large numbers is controlled by the
    - * spacing of the rules: because in English we group numbers by thousand, the higher rules
    - * are separated from each other by a factor of 1,000.</p>
    - *
    - * <p>To see how these rules actually work in practice, consider the following example:
    - * Formatting 25,430 with this rule set would work like this:</p>
    - *
    - * <table border="0" width="100%">
    - * <tr>
    - * <td><strong>&lt;&lt; thousand &gt;&gt;</strong></td>
    - * <td>[the rule whose base value is 1,000 is applicable to 25,340]</td>
    - * </tr>
    - * <tr>
    - * <td><strong>twenty-&gt;&gt;</strong> thousand &gt;&gt;</td>
    - * <td>[25,340 over 1,000 is 25. The rule for 20 applies.]</td>
    - * </tr>
    - * <tr>
    - * <td>twenty-<strong>five</strong> thousand &gt;&gt;</td>
    - * <td>[25 mod 10 is 5. The rule for 5 is &quot;five.&quot;</td>
    - * </tr>
    - * <tr>
    - * <td>twenty-five thousand <strong>&lt;&lt; hundred &gt;&gt;</strong></td>
    - * <td>[25,340 mod 1,000 is 340. The rule for 100 applies.]</td>
    - * </tr>
    - * <tr>
    - * <td>twenty-five thousand <strong>three</strong> hundred &gt;&gt;</td>
    - * <td>[340 over 100 is 3. The rule for 3 is &quot;three.&quot;]</td>
    - * </tr>
    - * <tr>
    - * <td>twenty-five thousand three hundred <strong>forty</strong></td>
    - * <td>[340 mod 100 is 40. The rule for 40 applies. Since 40 divides
    - * evenly by 10, the hyphen and substitution in the brackets are omitted.]</td>
    - * </tr>
    - * </table>
    - *
    - * <p>The above syntax suffices only to format positive integers. To format negative numbers,
    - * we add a special rule:</p>
    - *
    - * <pre>-x: minus &gt;&gt;;</pre>
    - *
    - * <p>This is called a <em>negative-number rule,</em> and is identified by &quot;-x&quot;
    - * where the base value would be. This rule is used to format all negative numbers. the
    - * &gt;&gt; token here means &quot;find the number's absolute value, format it with these
    - * rules, and put the result here.&quot;</p>
    - *
    - * <p>We also add a special rule called a <em>fraction rule </em>for numbers with fractional
    - * parts:</p>
    - *
    - * <pre>x.x: &lt;&lt; point &gt;&gt;;</pre>
    - *
    - * <p>This rule is used for all positive non-integers (negative non-integers pass through the
    - * negative-number rule first and then through this rule). Here, the &lt;&lt; token refers to
    - * the number's integral part, and the &gt;&gt; to the number's fractional part. The
    - * fractional part is formatted as a series of single-digit numbers (e.g., 123.456 would be
    - * formatted as &quot;one hundred twenty-three point four five six&quot;).</p>
    - *
    - * <p>To see how this rule syntax is applied to various languages, examine the resource data.</p>
    - *
    - * <p>There is actually much more flexibility built into the rule language than the
    - * description above shows. A formatter may own multiple rule sets, which can be selected by
    - * the caller, and which can use each other to fill in their substitutions. Substitutions can
    - * also be filled in with digits, using a DecimalFormat object. There is syntax that can be
    - * used to alter a rule's divisor in various ways. And there is provision for much more
    - * flexible fraction handling. A complete description of the rule syntax follows:</p>
    - *
    - * <hr>
    - *
    - * <p>The description of a <tt>RuleBasedNumberFormat</tt>'s behavior consists of one or more <em>rule
    - * sets.</em> Each rule set consists of a name, a colon, and a list of <em>rules.</em> A rule
    - * set name must begin with a % sign. Rule sets with names that begin with a single % sign
    - * are <em>public:</em> the caller can specify that they be used to format and parse numbers.
    - * Rule sets with names that begin with %% are <em>private:</em> they exist only for the use
    - * of other rule sets. If a formatter only has one rule set, the name may be omitted.</p>
    - *
    - * <p>The user can also specify a special &quot;rule set&quot; named <tt>%%lenient-parse</tt>.
    - * The body of <tt>%%lenient-parse</tt> isn't a set of number-formatting rules, but a <tt>RuleBasedCollator</tt>
    - * description which is used to define equivalences for lenient parsing. For more information
    - * on the syntax, see <tt>RuleBasedCollator</tt>. For more information on lenient parsing,
    - * see <tt>setLenientParse()</tt>. <em>Note:</em> symbols that have syntactic meaning
    - * in collation rules, such as '&amp;', have no particular meaning when appearing outside
    - * of the <tt>lenient-parse</tt> rule set.</p>
    - *
    - * <p>The body of a rule set consists of an ordered, semicolon-delimited list of <em>rules.</em>
    - * Internally, every rule has a base value, a divisor, rule text, and zero, one, or two <em>substitutions.</em>
    - * These parameters are controlled by the description syntax, which consists of a <em>rule
    - * descriptor,</em> a colon, and a <em>rule body.</em></p>
    - *
    - * <p>A rule descriptor can take one of the following forms (text in <em>italics</em> is the
    - * name of a token):</p>
    - *
    - * <table border="0" width="100%">
    - * <tr>
    - * <td><em>bv</em>:</td>
    - * <td><em>bv</em> specifies the rule's base value. <em>bv</em> is a decimal
    - * number expressed using ASCII digits. <em>bv</em> may contain spaces, period, and commas,
    - * which are ignored. The rule's divisor is the highest power of 10 less than or equal to
    - * the base value.</td>
    - * </tr>
    - * <tr>
    - * <td><em>bv</em>/<em>rad</em>:</td>
    - * <td><em>bv</em> specifies the rule's base value. The rule's divisor is the
    - * highest power of <em>rad</em> less than or equal to the base value.</td>
    - * </tr>
    - * <tr>
    - * <td><em>bv</em>&gt;:</td>
    - * <td><em>bv</em> specifies the rule's base value. To calculate the divisor,
    - * let the radix be 10, and the exponent be the highest exponent of the radix that yields a
    - * result less than or equal to the base value. Every &gt; character after the base value
    - * decreases the exponent by 1. If the exponent is positive or 0, the divisor is the radix
    - * raised to the power of the exponent; otherwise, the divisor is 1.</td>
    - * </tr>
    - * <tr>
    - * <td><em>bv</em>/<em>rad</em>&gt;:</td>
    - * <td><em>bv</em> specifies the rule's base value. To calculate the divisor,
    - * let the radix be <em>rad</em>, and the exponent be the highest exponent of the radix that
    - * yields a result less than or equal to the base value. Every &gt; character after the radix
    - * decreases the exponent by 1. If the exponent is positive or 0, the divisor is the radix
    - * raised to the power of the exponent; otherwise, the divisor is 1.</td>
    - * </tr>
    - * <tr>
    - * <td>-x:</td>
    - * <td>The rule is a negative-number rule.</td>
    - * </tr>
    - * <tr>
    - * <td>x.x:</td>
    - * <td>The rule is an <em>improper fraction rule.</em></td>
    - * </tr>
    - * <tr>
    - * <td>0.x:</td>
    - * <td>The rule is a <em>proper fraction rule.</em></td>
    - * </tr>
    - * <tr>
    - * <td>x.0:</td>
    - * <td>The rule is a <em>master rule.</em></td>
    - * </tr>
    - * <tr>
    - * <td><em>nothing</em></td>
    - * <td>If the rule's rule descriptor is left out, the base value is one plus the
    - * preceding rule's base value (or zero if this is the first rule in the list) in a normal
    - * rule set.&nbsp; In a fraction rule set, the base value is the same as the preceding rule's
    - * base value.</td>
    - * </tr>
    - * </table>
    - *
    - * <p>A rule set may be either a regular rule set or a <em>fraction rule set,</em> depending
    - * on whether it is used to format a number's integral part (or the whole number) or a
    - * number's fractional part. Using a rule set to format a rule's fractional part makes it a
    - * fraction rule set.</p>
    - *
    - * <p>Which rule is used to format a number is defined according to one of the following
    - * algorithms: If the rule set is a regular rule set, do the following:
    - *
    - * <ul>
    - * <li>If the rule set includes a master rule (and the number was passed in as a <tt>double</tt>),
    - * use the master rule.&nbsp; (If the number being formatted was passed in as a <tt>long</tt>,
    - * the master rule is ignored.)</li>
    - * <li>If the number is negative, use the negative-number rule.</li>
    - * <li>If the number has a fractional part and is greater than 1, use the improper fraction
    - * rule.</li>
    - * <li>If the number has a fractional part and is between 0 and 1, use the proper fraction
    - * rule.</li>
    - * <li>Binary-search the rule list for the rule with the highest base value less than or equal
    - * to the number. If that rule has two substitutions, its base value is not an even multiple
    - * of its divisor, and the number <em>is</em> an even multiple of the rule's divisor, use the
    - * rule that precedes it in the rule list. Otherwise, use the rule itself.</li>
    - * </ul>
    - *
    - * <p>If the rule set is a fraction rule set, do the following:
    - *
    - * <ul>
    - * <li>Ignore negative-number and fraction rules.</li>
    - * <li>For each rule in the list, multiply the number being formatted (which will always be
    - * between 0 and 1) by the rule's base value. Keep track of the distance between the result
    - * the nearest integer.</li>
    - * <li>Use the rule that produced the result closest to zero in the above calculation. In the
    - * event of a tie or a direct hit, use the first matching rule encountered. (The idea here is
    - * to try each rule's base value as a possible denominator of a fraction. Whichever
    - * denominator produces the fraction closest in value to the number being formatted wins.) If
    - * the rule following the matching rule has the same base value, use it if the numerator of
    - * the fraction is anything other than 1; if the numerator is 1, use the original matching
    - * rule. (This is to allow singular and plural forms of the rule text without a lot of extra
    - * hassle.)</li>
    - * </ul>
    - *
    - * <p>A rule's body consists of a string of characters terminated by a semicolon. The rule
    - * may include zero, one, or two <em>substitution tokens,</em> and a range of text in
    - * brackets. The brackets denote optional text (and may also include one or both
    - * substitutions). The exact meanings of the substitution tokens, and under what conditions
    - * optional text is omitted, depend on the syntax of the substitution token and the context.
    - * The rest of the text in a rule body is literal text that is output when the rule matches
    - * the number being formatted.</p>
    - *
    - * <p>A substitution token begins and ends with a <em>token character.</em> The token
    - * character and the context together specify a mathematical operation to be performed on the
    - * number being formatted. An optional <em>substitution descriptor </em>specifies how the
    - * value resulting from that operation is used to fill in the substitution. The position of
    - * the substitution token in the rule body specifies the location of the resultant text in
    - * the original rule text.</p>
    - *
    - * <p>The meanings of the substitution token characters are as follows:</p>
    - *
    - * <table border="0" width="100%">
    - * <tr>
    - * <td>&gt;&gt;</td>
    - * <td>in normal rule</td>
    - * <td>Divide the number by the rule's divisor and format the remainder</td>
    - * </tr>
    - * <tr>
    - * <td></td>
    - * <td>in negative-number rule</td>
    - * <td>Find the absolute value of the number and format the result</td>
    - * </tr>
    - * <tr>
    - * <td></td>
    - * <td>in fraction or master rule</td>
    - * <td>Isolate the number's fractional part and format it.</td>
    - * </tr>
    - * <tr>
    - * <td></td>
    - * <td>in rule in fraction rule set</td>
    - * <td>Not allowed.</td>
    - * </tr>
    - * <tr>
    - * <td>&gt;&gt;&gt;</td>
    - * <td>in normal rule</td>
    - * <td>Divide the number by the rule's divisor and format the remainder,
    - * but bypass the normal rule-selection process and just use the
    - * rule that precedes this one in this rule list.</td>
    - * </tr>
    - * <tr>
    - * <td></td>
    - * <td>in all other rules</td>
    - * <td>Not allowed.</td>
    - * </tr>
    - * <tr>
    - * <td>&lt;&lt;</td>
    - * <td>in normal rule</td>
    - * <td>Divide the number by the rule's divisor and format the quotient</td>
    - * </tr>
    - * <tr>
    - * <td></td>
    - * <td>in negative-number rule</td>
    - * <td>Not allowed.</td>
    - * </tr>
    - * <tr>
    - * <td></td>
    - * <td>in fraction or master rule</td>
    - * <td>Isolate the number's integral part and format it.</td>
    - * </tr>
    - * <tr>
    - * <td></td>
    - * <td>in rule in fraction rule set</td>
    - * <td>Multiply the number by the rule's base value and format the result.</td>
    - * </tr>
    - * <tr>
    - * <td>==</td>
    - * <td>in all rule sets</td>
    - * <td>Format the number unchanged</td>
    - * </tr>
    - * <tr>
    - * <td>[]</td>
    - * <td>in normal rule</td>
    - * <td>Omit the optional text if the number is an even multiple of the rule's divisor</td>
    - * </tr>
    - * <tr>
    - * <td></td>
    - * <td>in negative-number rule</td>
    - * <td>Not allowed.</td>
    - * </tr>
    - * <tr>
    - * <td></td>
    - * <td>in improper-fraction rule</td>
    - * <td>Omit the optional text if the number is between 0 and 1 (same as specifying both an
    - * x.x rule and a 0.x rule)</td>
    - * </tr>
    - * <tr>
    - * <td></td>
    - * <td>in master rule</td>
    - * <td>Omit the optional text if the number is an integer (same as specifying both an x.x
    - * rule and an x.0 rule)</td>
    - * </tr>
    - * <tr>
    - * <td></td>
    - * <td>in proper-fraction rule</td>
    - * <td>Not allowed.</td>
    - * </tr>
    - * <tr>
    - * <td></td>
    - * <td>in rule in fraction rule set</td>
    - * <td>Omit the optional text if multiplying the number by the rule's base value yields 1.</td>
    - * </tr>
    - * </table>
    - *
    - * <p>The substitution descriptor (i.e., the text between the token characters) may take one
    - * of three forms:</p>
    - *
    - * <table border="0" width="100%">
    - * <tr>
    - * <td>a rule set name</td>
    - * <td>Perform the mathematical operation on the number, and format the result using the
    - * named rule set.</td>
    - * </tr>
    - * <tr>
    - * <td>a DecimalFormat pattern</td>
    - * <td>Perform the mathematical operation on the number, and format the result using a
    - * DecimalFormat with the specified pattern.&nbsp; The pattern must begin with 0 or #.</td>
    - * </tr>
    - * <tr>
    - * <td>nothing</td>
    - * <td>Perform the mathematical operation on the number, and format the result using the rule
    - * set containing the current rule, except:
    - * <ul>
    - * <li>You can't have an empty substitution descriptor with a == substitution.</li>
    - * <li>If you omit the substitution descriptor in a &gt;&gt; substitution in a fraction rule,
    - * format the result one digit at a time using the rule set containing the current rule.</li>
    - * <li>If you omit the substitution descriptor in a &lt;&lt; substitution in a rule in a
    - * fraction rule set, format the result using the default rule set for this formatter.</li>
    - * </ul>
    - * </td>
    - * </tr>
    - * </table>
    - *
    - * <p>Whitespace is ignored between a rule set name and a rule set body, between a rule
    - * descriptor and a rule body, or between rules. If a rule body begins with an apostrophe,
    - * the apostrophe is ignored, but all text after it becomes significant (this is how you can
    - * have a rule's rule text begin with whitespace). There is no escape function: the semicolon
    - * is not allowed in rule set names or in rule text, and the colon is not allowed in rule set
    - * names. The characters beginning a substitution token are always treated as the beginning
    - * of a substitution token.</p>
    - *
    - * <p>See the resource data and the demo program for annotated examples of real rule sets
    - * using these features.</p>
    - *
    - * <p><em>User subclasses are not supported.</em> While clients may write
    - * subclasses, such code will not necessarily work and will not be
    - * guaranteed to work stably from release to release.
    - *
    - * <p><b>Localizations</b></p>
    - * <p>Constructors are available that allow the specification of localizations for the
    - * public rule sets (and also allow more control over what public rule sets are available).
    - * Localization data is represented as a textual description. The description represents
    - * an array of arrays of string. The first element is an array of the public rule set names,
    - * each of these must be one of the public rule set names that appear in the rules. Only
    - * names in this array will be treated as public rule set names by the API. Each subsequent
    - * element is an array of localizations of these names. The first element of one of these
    - * subarrays is the locale name, and the remaining elements are localizations of the
    - * public rule set names, in the same order as they were listed in the first arrray.</p>
    - * <p>In the syntax, angle brackets '<', '>' are used to delimit the arrays, and comma ',' is used
    - * to separate elements of an array. Whitespace is ignored, unless quoted.</p>
    - * <p>For example:<pre>
    - * < < %foo, %bar, %baz >,
    - * < en, Foo, Bar, Baz >,
    - * < fr, 'le Foo', 'le Bar', 'le Baz' >
    - * < zh, \\u7532, \\u4e59, \\u4e19 > >
    - * </pre></p>
    - * @author Richard Gillam
    - * @see NumberFormat
    - * @see DecimalFormat
    - * @stable ICU 2.0
    - */
    -class U_I18N_API RuleBasedNumberFormat : public NumberFormat {
    -public:
    -
    - //-----------------------------------------------------------------------
    - // constructors
    - //-----------------------------------------------------------------------
    -
    - /**
    - * Creates a RuleBasedNumberFormat that behaves according to the description
    - * passed in. The formatter uses the default locale.
    - * @param rules A description of the formatter's desired behavior.
    - * See the class documentation for a complete explanation of the description
    - * syntax.
    - * @param perror The parse error if an error was encountered.
    - * @param status The status indicating whether the constructor succeeded.
    - * @stable ICU 3.2
    - */
    - RuleBasedNumberFormat(const UnicodeString& rules, UParseError& perror, UErrorCode& status);
    -
    - /**
    - * Creates a RuleBasedNumberFormat that behaves according to the description
    - * passed in. The formatter uses the default locale.
    - * <p>
    - * The localizations data provides information about the public
    - * rule sets and their localized display names for different
    - * locales. The first element in the list is an array of the names
    - * of the public rule sets. The first element in this array is
    - * the initial default ruleset. The remaining elements in the
    - * list are arrays of localizations of the names of the public
    - * rule sets. Each of these is one longer than the initial array,
    - * with the first String being the ULocale ID, and the remaining
    - * Strings being the localizations of the rule set names, in the
    - * same order as the initial array. Arrays are NULL-terminated.
    - * @param rules A description of the formatter's desired behavior.
    - * See the class documentation for a complete explanation of the description
    - * syntax.
    - * @param localizations the localization information.
    - * names in the description. These will be copied by the constructor.
    - * @param perror The parse error if an error was encountered.
    - * @param status The status indicating whether the constructor succeeded.
    - * @stable ICU 3.2
    - */
    - RuleBasedNumberFormat(const UnicodeString& rules, const UnicodeString& localizations,
    - UParseError& perror, UErrorCode& status);
    -
    - /**
    - * Creates a RuleBasedNumberFormat that behaves according to the rules
    - * passed in. The formatter uses the specified locale to determine the
    - * characters to use when formatting numerals, and to define equivalences
    - * for lenient parsing.
    - * @param rules The formatter rules.
    - * See the class documentation for a complete explanation of the rule
    - * syntax.
    - * @param locale A locale that governs which characters are used for
    - * formatting values in numerals and which characters are equivalent in
    - * lenient parsing.
    - * @param perror The parse error if an error was encountered.
    - * @param status The status indicating whether the constructor succeeded.
    - * @stable ICU 2.0
    - */
    - RuleBasedNumberFormat(const UnicodeString& rules, const Locale& locale,
    - UParseError& perror, UErrorCode& status);
    -
    - /**
    - * Creates a RuleBasedNumberFormat that behaves according to the description
    - * passed in. The formatter uses the default locale.
    - * <p>
    - * The localizations data provides information about the public
    - * rule sets and their localized display names for different
    - * locales. The first element in the list is an array of the names
    - * of the public rule sets. The first element in this array is
    - * the initial default ruleset. The remaining elements in the
    - * list are arrays of localizations of the names of the public
    - * rule sets. Each of these is one longer than the initial array,
    - * with the first String being the ULocale ID, and the remaining
    - * Strings being the localizations of the rule set names, in the
    - * same order as the initial array. Arrays are NULL-terminated.
    - * @param rules A description of the formatter's desired behavior.
    - * See the class documentation for a complete explanation of the description
    - * syntax.
    - * @param localizations a list of localizations for the rule set
    - * names in the description. These will be copied by the constructor.
    - * @param locale A locale that governs which characters are used for
    - * formatting values in numerals and which characters are equivalent in
    - * lenient parsing.
    - * @param perror The parse error if an error was encountered.
    - * @param status The status indicating whether the constructor succeeded.
    - * @stable ICU 3.2
    - */
    - RuleBasedNumberFormat(const UnicodeString& rules, const UnicodeString& localizations,
    - const Locale& locale, UParseError& perror, UErrorCode& status);
    -
    - /**
    - * Creates a RuleBasedNumberFormat from a predefined ruleset. The selector
    - * code choosed among three possible predefined formats: spellout, ordinal,
    - * and duration.
    - * @param tag A selector code specifying which kind of formatter to create for that
    - * locale. There are three legal values: URBNF_SPELLOUT, which creates a formatter that
    - * spells out a value in words in the desired language, URBNF_ORDINAL, which attaches
    - * an ordinal suffix from the desired language to the end of a number (e.g. "123rd"),
    - * and URBNF_DURATION, which formats a duration in seconds as hours, minutes, and seconds.
    - * @param locale The locale for the formatter.
    - * @param status The status indicating whether the constructor succeeded.
    - * @stable ICU 2.0
    - */
    - RuleBasedNumberFormat(URBNFRuleSetTag tag, const Locale& locale, UErrorCode& status);
    -
    - //-----------------------------------------------------------------------
    - // boilerplate
    - //-----------------------------------------------------------------------
    -
    - /**
    - * Copy constructor
    - * @param rhs the object to be copied from.
    - * @stable ICU 2.6
    - */
    - RuleBasedNumberFormat(const RuleBasedNumberFormat& rhs);
    -
    - /**
    - * Assignment operator
    - * @param rhs the object to be copied from.
    - * @stable ICU 2.6
    - */
    - RuleBasedNumberFormat& operator=(const RuleBasedNumberFormat& rhs);
    -
    - /**
    - * Release memory allocated for a RuleBasedNumberFormat when you are finished with it.
    - * @stable ICU 2.6
    - */
    - virtual ~RuleBasedNumberFormat();
    -
    - /**
    - * Clone this object polymorphically. The caller is responsible
    - * for deleting the result when done.
    - * @return A copy of the object.
    - * @stable ICU 2.6
    - */
    - virtual Format* clone(void) const;
    -
    - /**
    - * Return true if the given Format objects are semantically equal.
    - * Objects of different subclasses are considered unequal.
    - * @param other the object to be compared with.
    - * @return true if the given Format objects are semantically equal.
    - * @stable ICU 2.6
    - */
    - virtual UBool operator==(const Format& other) const;
    -
    -//-----------------------------------------------------------------------
    -// public API functions
    -//-----------------------------------------------------------------------
    -
    - /**
    - * return the rules that were provided to the RuleBasedNumberFormat.
    - * @return the result String that was passed in
    - * @stable ICU 2.0
    - */
    - virtual UnicodeString getRules() const;
    -
    - /**
    - * Return the number of public rule set names.
    - * @return the number of public rule set names.
    - * @stable ICU 2.0
    - */
    - virtual int32_t getNumberOfRuleSetNames() const;
    -
    - /**
    - * Return the name of the index'th public ruleSet. If index is not valid,
    - * the function returns null.
    - * @param index the index of the ruleset
    - * @return the name of the index'th public ruleSet.
    - * @stable ICU 2.0
    - */
    - virtual UnicodeString getRuleSetName(int32_t index) const;
    -
    - /**
    - * Return the number of locales for which we have localized rule set display names.
    - * @return the number of locales for which we have localized rule set display names.
    - * @stable ICU 3.2
    - */
    - virtual int32_t getNumberOfRuleSetDisplayNameLocales(void) const;
    -
    - /**
    - * Return the index'th display name locale.
    - * @param index the index of the locale
    - * @param status set to a failure code when this function fails
    - * @return the locale
    - * @see #getNumberOfRuleSetDisplayNameLocales
    - * @stable ICU 3.2
    - */
    - virtual Locale getRuleSetDisplayNameLocale(int32_t index, UErrorCode& status) const;
    -
    - /**
    - * Return the rule set display names for the provided locale. These are in the same order
    - * as those returned by getRuleSetName. The locale is matched against the locales for
    - * which there is display name data, using normal fallback rules. If no locale matches,
    - * the default display names are returned. (These are the internal rule set names minus
    - * the leading '%'.)
    - * @param index the index of the rule set
    - * @param locale the locale (returned by getRuleSetDisplayNameLocales) for which the localized
    - * display name is desired
    - * @return the display name for the given index, which might be bogus if there is an error
    - * @see #getRuleSetName
    - * @stable ICU 3.2
    - */
    - virtual UnicodeString getRuleSetDisplayName(int32_t index,
    - const Locale& locale = Locale::getDefault());
    -
    - /**
    - * Return the rule set display name for the provided rule set and locale.
    - * The locale is matched against the locales for which there is display name data, using
    - * normal fallback rules. If no locale matches, the default display name is returned.
    - * @return the display name for the rule set
    - * @stable ICU 3.2
    - * @see #getRuleSetDisplayName
    - */
    - virtual UnicodeString getRuleSetDisplayName(const UnicodeString& ruleSetName,
    - const Locale& locale = Locale::getDefault());
    -
    - /**
    - * Formats the specified 32-bit number using the default ruleset.
    - * @param number The number to format.
    - * @param toAppendTo the string that will hold the (appended) result
    - * @param pos the fieldposition
    - * @return A textual representation of the number.
    - * @stable ICU 2.0
    - */
    - virtual UnicodeString& format(int32_t number,
    - UnicodeString& toAppendTo,
    - FieldPosition& pos) const;
    -
    - /**
    - * Formats the specified 64-bit number using the default ruleset.
    - * @param number The number to format.
    - * @param toAppendTo the string that will hold the (appended) result
    - * @param pos the fieldposition
    - * @return A textual representation of the number.
    - * @stable ICU 2.1
    - */
    - virtual UnicodeString& format(int64_t number,
    - UnicodeString& toAppendTo,
    - FieldPosition& pos) const;
    - /**
    - * Formats the specified number using the default ruleset.
    - * @param number The number to format.
    - * @param toAppendTo the string that will hold the (appended) result
    - * @param pos the fieldposition
    - * @return A textual representation of the number.
    - * @stable ICU 2.0
    - */
    - virtual UnicodeString& format(double number,
    - UnicodeString& toAppendTo,
    - FieldPosition& pos) const;
    -
    - /**
    - * Formats the specified number using the named ruleset.
    - * @param number The number to format.
    - * @param ruleSetName The name of the rule set to format the number with.
    - * This must be the name of a valid public rule set for this formatter.
    - * @param toAppendTo the string that will hold the (appended) result
    - * @param pos the fieldposition
    - * @param status the status
    - * @return A textual representation of the number.
    - * @stable ICU 2.0
    - */
    - virtual UnicodeString& format(int32_t number,
    - const UnicodeString& ruleSetName,
    - UnicodeString& toAppendTo,
    - FieldPosition& pos,
    - UErrorCode& status) const;
    - /**
    - * Formats the specified 64-bit number using the named ruleset.
    - * @param number The number to format.
    - * @param ruleSetName The name of the rule set to format the number with.
    - * This must be the name of a valid public rule set for this formatter.
    - * @param toAppendTo the string that will hold the (appended) result
    - * @param pos the fieldposition
    - * @param status the status
    - * @return A textual representation of the number.
    - * @stable ICU 2.1
    - */
    - virtual UnicodeString& format(int64_t number,
    - const UnicodeString& ruleSetName,
    - UnicodeString& toAppendTo,
    - FieldPosition& pos,
    - UErrorCode& status) const;
    - /**
    - * Formats the specified number using the named ruleset.
    - * @param number The number to format.
    - * @param ruleSetName The name of the rule set to format the number with.
    - * This must be the name of a valid public rule set for this formatter.
    - * @param toAppendTo the string that will hold the (appended) result
    - * @param pos the fieldposition
    - * @param status the status
    - * @return A textual representation of the number.
    - * @stable ICU 2.0
    - */
    - virtual UnicodeString& format(double number,
    - const UnicodeString& ruleSetName,
    - UnicodeString& toAppendTo,
    - FieldPosition& pos,
    - UErrorCode& status) const;
    -
    - /**
    - * Formats the specified number using the default ruleset.
    - * @param obj The number to format.
    - * @param toAppendTo the string that will hold the (appended) result
    - * @param pos the fieldposition
    - * @param status the status
    - * @return A textual representation of the number.
    - * @stable ICU 2.0
    - */
    - virtual UnicodeString& format(const Formattable& obj,
    - UnicodeString& toAppendTo,
    - FieldPosition& pos,
    - UErrorCode& status) const;
    - /**
    - * Redeclared Format method.
    - * @param obj the object to be formatted.
    - * @param result Output param which will receive the formatted string.
    - * @param status Output param set to success/failure code
    - * @return A reference to 'result'.
    - * @stable ICU 2.0
    - */
    - UnicodeString& format(const Formattable& obj,
    - UnicodeString& result,
    - UErrorCode& status) const;
    -
    - /**
    - * Redeclared NumberFormat method.
    - * @param number the double value to be formatted.
    - * @param output Output param which will receive the formatted string.
    - * @return A reference to 'output'.
    - * @stable ICU 2.0
    - */
    - UnicodeString& format(double number,
    - UnicodeString& output) const;
    -
    - /**
    - * Redeclared NumberFormat method.
    - * @param number the long value to be formatted.
    - * @param output Output param which will receive the formatted string.
    - * @return A reference to 'output'.
    - * @stable ICU 2.0
    - */
    - UnicodeString& format(int32_t number,
    - UnicodeString& output) const;
    -
    - /**
    - * Parses the specfied string, beginning at the specified position, according
    - * to this formatter's rules. This will match the string against all of the
    - * formatter's public rule sets and return the value corresponding to the longest
    - * parseable substring. This function's behavior is affected by the lenient
    - * parse mode.
    - * @param text The string to parse
    - * @param result the result of the parse, either a double or a long.
    - * @param parsePosition On entry, contains the position of the first character
    - * in "text" to examine. On exit, has been updated to contain the position
    - * of the first character in "text" that wasn't consumed by the parse.
    - * @see #setLenient
    - * @stable ICU 2.0
    - */
    - virtual void parse(const UnicodeString& text,
    - Formattable& result,
    - ParsePosition& parsePosition) const;
    -
    -
    - /**
    - * Redeclared Format method.
    - * @param text The string to parse
    - * @param result the result of the parse, either a double or a long.
    - * @param status Output param set to failure code when a problem occurs.
    - * @stable ICU 2.0
    - */
    - virtual inline void parse(const UnicodeString& text,
    - Formattable& result,
    - UErrorCode& status) const;
    -
    -#if !UCONFIG_NO_COLLATION
    -
    - /**
    - * Turns lenient parse mode on and off.
    - *
    - * When in lenient parse mode, the formatter uses a Collator for parsing the text.
    - * Only primary differences are treated as significant. This means that case
    - * differences, accent differences, alternate spellings of the same letter
    - * (e.g., ae and a-umlaut in German), ignorable characters, etc. are ignored in
    - * matching the text. In many cases, numerals will be accepted in place of words
    - * or phrases as well.
    - *
    - * For example, all of the following will correctly parse as 255 in English in
    - * lenient-parse mode:
    - * <br>"two hundred fifty-five"
    - * <br>"two hundred fifty five"
    - * <br>"TWO HUNDRED FIFTY-FIVE"
    - * <br>"twohundredfiftyfive"
    - * <br>"2 hundred fifty-5"
    - *
    - * The Collator used is determined by the locale that was
    - * passed to this object on construction. The description passed to this object
    - * on construction may supply additional collation rules that are appended to the
    - * end of the default collator for the locale, enabling additional equivalences
    - * (such as adding more ignorable characters or permitting spelled-out version of
    - * symbols; see the demo program for examples).
    - *
    - * It's important to emphasize that even strict parsing is relatively lenient: it
    - * will accept some text that it won't produce as output. In English, for example,
    - * it will correctly parse "two hundred zero" and "fifteen hundred".
    - *
    - * @param enabled If true, turns lenient-parse mode on; if false, turns it off.
    - * @see RuleBasedCollator
    - * @stable ICU 2.0
    - */
    - virtual void setLenient(UBool enabled);
    -
    - /**
    - * Returns true if lenient-parse mode is turned on. Lenient parsing is off
    - * by default.
    - * @return true if lenient-parse mode is turned on.
    - * @see #setLenient
    - * @stable ICU 2.0
    - */
    - virtual inline UBool isLenient(void) const;
    -
    -#endif
    -
    - /**
    - * Override the default rule set to use. If ruleSetName is null, reset
    - * to the initial default rule set. If the rule set is not a public rule set name,
    - * U_ILLEGAL_ARGUMENT_ERROR is returned in status.
    - * @param ruleSetName the name of the rule set, or null to reset the initial default.
    - * @param status set to failure code when a problem occurs.
    - * @stable ICU 2.6
    - */
    - virtual void setDefaultRuleSet(const UnicodeString& ruleSetName, UErrorCode& status);
    -
    - /**
    - * Return the name of the current default rule set. If the current rule set is
    - * not public, returns a bogus (and empty) UnicodeString.
    - * @return the name of the current default rule set
    - * @stable ICU 3.0
    - */
    - virtual UnicodeString getDefaultRuleSetName() const;
    -
    -public:
    - /**
    - * ICU "poor man's RTTI", returns a UClassID for this class.
    - *
    - * @stable ICU 2.8
    - */
    - static UClassID U_EXPORT2 getStaticClassID(void);
    -
    - /**
    - * ICU "poor man's RTTI", returns a UClassID for the actual class.
    - *
    - * @stable ICU 2.8
    - */
    - virtual UClassID getDynamicClassID(void) const;
    -
    -private:
    - RuleBasedNumberFormat(); // default constructor not implemented
    -
    - // this will ref the localizations if they are not NULL
    - // caller must deref to get adoption
    - RuleBasedNumberFormat(const UnicodeString& description, LocalizationInfo* localizations,
    - const Locale& locale, UParseError& perror, UErrorCode& status);
    -
    - void init(const UnicodeString& rules, LocalizationInfo* localizations, UParseError& perror, UErrorCode& status);
    - void dispose();
    - void stripWhitespace(UnicodeString& src);
    - void initDefaultRuleSet();
    - void format(double number, NFRuleSet& ruleSet);
    - NFRuleSet* findRuleSet(const UnicodeString& name, UErrorCode& status) const;
    -
    - /* friend access */
    - friend class NFSubstitution;
    - friend class NFRule;
    - friend class FractionalPartSubstitution;
    -
    - inline NFRuleSet * getDefaultRuleSet() const;
    - Collator * getCollator() const;
    - DecimalFormatSymbols * getDecimalFormatSymbols() const;
    -
    -private:
    - NFRuleSet **ruleSets;
    - NFRuleSet *defaultRuleSet;
    - Locale locale;
    - Collator* collator;
    - DecimalFormatSymbols* decimalFormatSymbols;
    - UBool lenient;
    - UnicodeString* lenientParseRules;
    - LocalizationInfo* localizations;
    -};
    -
    -// ---------------
    -
    -inline UnicodeString&
    -RuleBasedNumberFormat::format(const Formattable& obj,
    - UnicodeString& result,
    - UErrorCode& status) const
    -{
    - // Don't use Format:: - use immediate base class only,
    - // in case immediate base modifies behavior later.
    - // dlf - the above comment is bogus, if there were a reason to modify
    - // it, it would be virtual, and there's no reason because it is
    - // a one-line macro in NumberFormat anyway, just like this one.
    - return NumberFormat::format(obj, result, status);
    -}
    -
    -inline UnicodeString&
    -RuleBasedNumberFormat::format(double number, UnicodeString& output) const {
    - FieldPosition pos(0);
    - return format(number, output, pos);
    -}
    -
    -inline UnicodeString&
    -RuleBasedNumberFormat::format(int32_t number, UnicodeString& output) const {
    - FieldPosition pos(0);
    - return format(number, output, pos);
    -}
    -
    -inline void
    -RuleBasedNumberFormat::parse(const UnicodeString& text, Formattable& result, UErrorCode& status) const
    -{
    - NumberFormat::parse(text, result, status);
    -}
    -
    -#if !UCONFIG_NO_COLLATION
    -
    -inline UBool
    -RuleBasedNumberFormat::isLenient(void) const {
    - return lenient;
    -}
    -
    -#endif
    -
    -inline NFRuleSet*
    -RuleBasedNumberFormat::getDefaultRuleSet() const {
    - return defaultRuleSet;
    -}
    -
    -U_NAMESPACE_END
    -
    -/* U_HAVE_RBNF */
    -#endif
    -
    -/* RBNF_H */
    -#endif

    http://git-wip-us.apache.org/repos/asf/couchdb/blob/81332b78/apps/couch_collate/platform/osx/icu/unicode/rbtz.h
    ----------------------------------------------------------------------
    diff --git a/apps/couch_collate/platform/osx/icu/unicode/rbtz.h b/apps/couch_collate/platform/osx/icu/unicode/rbtz.h
    deleted file mode 100644
    index 78215f3..0000000
    --- a/apps/couch_collate/platform/osx/icu/unicode/rbtz.h
    +++ /dev/null
    @@ -1,361 +0,0 @@
    -/*
    -*******************************************************************************
    -* Copyright (C) 2007-2008, International Business Machines Corporation and *
    -* others. All Rights Reserved. *
    -*******************************************************************************
    -*/
    -#ifndef RBTZ_H
    -#define RBTZ_H
    -
    -#include "unicode/utypes.h"
    -
    -/**
    - * \file
    - * \brief C++ API: Rule based customizable time zone
    - */
    -
    -#if !UCONFIG_NO_FORMATTING
    -
    -#include "unicode/basictz.h"
    -#include "unicode/unistr.h"
    -
    -U_NAMESPACE_BEGIN
    -
    -// forward declaration
    -class UVector;
    -struct Transition;
    -
    -/**
    - * a BasicTimeZone subclass implemented in terms of InitialTimeZoneRule and TimeZoneRule instances
    - * @see BasicTimeZone
    - * @see InitialTimeZoneRule
    - * @see TimeZoneRule
    - */
    -class U_I18N_API RuleBasedTimeZone : public BasicTimeZone {
    -public:
    - /**
    - * Constructs a <code>RuleBasedTimeZone</code> object with the ID and the
    - * <code>InitialTimeZoneRule</code>. The input <code>InitialTimeZoneRule</code>
    - * is adopted by this <code>RuleBasedTimeZone</code>, thus the caller must not
    - * delete it.
    - * @param id The time zone ID.
    - * @param initialRule The initial time zone rule.
    - * @stable ICU 4.0
    - */
    - RuleBasedTimeZone(const UnicodeString& id, InitialTimeZoneRule* initialRule);
    -
    - /**
    - * Copy constructor.
    - * @param source The RuleBasedTimeZone object to be copied.
    - * @stable ICU 4.0
    - */
    - RuleBasedTimeZone(const RuleBasedTimeZone& source);
    -
    - /**
    - * Destructor.
    - * @stable ICU 4.0
    - */
    - virtual ~RuleBasedTimeZone();
    -
    - /**
    - * Assignment operator.
    - * @param right The object to be copied.
    - * @stable ICU 4.0
    - */
    - RuleBasedTimeZone& operator=(const RuleBasedTimeZone& right);
    -
    - /**
    - * Return true if the given <code>TimeZone</code> objects are
    - * semantically equal. Objects of different subclasses are considered unequal.
    - * @param that The object to be compared with.
    - * @return true if the given <code>TimeZone</code> objects are
    - *semantically equal.
    - * @stable ICU 4.0
    - */
    - virtual UBool operator==(const TimeZone& that) const;
    -
    - /**
    - * Return true if the given <code>TimeZone</code> objects are
    - * semantically unequal. Objects of different subclasses are considered unequal.
    - * @param that The object to be compared with.
    - * @return true if the given <code>TimeZone</code> objects are
    - * semantically unequal.
    - * @stable ICU 4.0
    - */
    - virtual UBool operator!=(const TimeZone& that) const;
    -
    - /**
    - * Adds the <code>TimeZoneRule</code> which represents time transitions.
    - * The <code>TimeZoneRule</code> must have start times, that is, the result
    - * of isTransitionRule() must be true. Otherwise, U_ILLEGAL_ARGUMENT_ERROR
    - * is set to the error code.
    - * The input <code>TimeZoneRule</code> is adopted by this
    - * <code>RuleBasedTimeZone</code> on successful completion of this method,
    - * thus, the caller must not delete it when no error is returned.
    - * After all rules are added, the caller must call complete() method to
    - * make this <code>RuleBasedTimeZone</code> ready to handle common time
    - * zone functions.
    - * @param rule The <code>TimeZoneRule</code>.
    - * @param status Output param to filled in with a success or an error.
    - * @stable ICU 4.0
    - */
    - void addTransitionRule(TimeZoneRule* rule, UErrorCode& status);
    -
    - /**
    - * Makes the <code>TimeZoneRule</code> ready to handle actual timezone
    - * calcuation APIs. This method collects time zone rules specified
    - * by the caller via the constructor and addTransitionRule() and
    - * builds internal structure for making the object ready to support
    - * time zone APIs such as getOffset(), getNextTransition() and others.
    - * @param status Output param to filled in with a success or an error.
    - * @stable ICU 4.0
    - */
    - void complete(UErrorCode& status);
    -
    - /**
    - * Clones TimeZone objects polymorphically. Clients are responsible for deleting
    - * the TimeZone object cloned.
    - *
    - * @return A new copy of this TimeZone object.
    - * @stable ICU 4.0
    - */
    - virtual TimeZone* clone(void) const;
    -
    - /**
    - * Returns the TimeZone's adjusted GMT offset (i.e., the number of milliseconds to add
    - * to GMT to get local time in this time zone, taking daylight savings time into
    - * account) as of a particular reference date. The reference date is used to determine
    - * whether daylight savings time is in effect and needs to be figured into the offset
    - * that is returned (in other words, what is the adjusted GMT offset in this time zone
    - * at this particular date and time?). For the time zones produced by createTimeZone(),
    - * the reference data is specified according to the Gregorian calendar, and the date
    - * and time fields are local standard time.
    - *
    - * <p>Note: Don't call this method. Instead, call the getOffset(UDate...) overload,
    - * which returns both the raw and the DST offset for a given time. This method
    - * is retained only for backward compatibility.
    - *
    - * @param era The reference date's era
    - * @param year The reference date's year
    - * @param month The reference date's month (0-based; 0 is January)
    - * @param day The reference date's day-in-month (1-based)
    - * @param dayOfWeek The reference date's day-of-week (1-based; 1 is Sunday)
    - * @param millis The reference date's milliseconds in day, local standard time
    - * @param status Output param to filled in with a success or an error.
    - * @return The offset in milliseconds to add to GMT to get local time.
    - * @stable ICU 4.0
    - */
    - virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
    - uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const;
    -
    - /**
    - * Gets the time zone offset, for current date, modified in case of
    - * daylight savings. This is the offset to add *to* UTC to get local time.
    - *
    - * <p>Note: Don't call this method. Instead, call the getOffset(UDate...) overload,
    - * which returns both the raw and the DST offset for a given time. This method
    - * is retained only for backward compatibility.
    - *
    - * @param era The reference date's era
    - * @param year The reference date's year
    - * @param month The reference date's month (0-based; 0 is January)
    - * @param day The reference date's day-in-month (1-based)
    - * @param dayOfWeek The reference date's day-of-week (1-based; 1 is Sunday)
    - * @param millis The reference date's milliseconds in day, local standard time
    - * @param monthLength The length of the given month in days.
    - * @param status Output param to filled in with a success or an error.
    - * @return The offset in milliseconds to add to GMT to get local time.
    - * @stable ICU 4.0
    - */
    - virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
    - uint8_t dayOfWeek, int32_t millis,
    - int32_t monthLength, UErrorCode& status) const;
    -
    - /**
    - * Returns the time zone raw and GMT offset for the given moment
    - * in time. Upon return, local-millis = GMT-millis + rawOffset +
    - * dstOffset. All computations are performed in the proleptic
    - * Gregorian calendar. The default implementation in the TimeZone
    - * class delegates to the 8-argument getOffset().
    - *
    - * @param date moment in time for which to return offsets, in
    - * units of milliseconds from January 1, 1970 0:00 GMT, either GMT
    - * time or local wall time, depending on `local'.
    - * @param local if true, `date' is local wall time; otherwise it
    - * is in GMT time.
    - * @param rawOffset output parameter to receive the raw offset, that
    - * is, the offset not including DST adjustments
    - * @param dstOffset output parameter to receive the DST offset,
    - * that is, the offset to be added to `rawOffset' to obtain the
    - * total offset between local and GMT time. If DST is not in
    - * effect, this value is zero; otherwise it is a positive value,
    - * typically one hour.
    - * @param ec input-output error code
    - * @stable ICU 4.0
    - */
    - virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
    - int32_t& dstOffset, UErrorCode& ec) const;
    -
    - /**
    - * Sets the TimeZone's raw GMT offset (i.e., the number of milliseconds to add
    - * to GMT to get local time, before taking daylight savings time into account).
    - *
    - * @param offsetMillis The new raw GMT offset for this time zone.
    - * @stable ICU 4.0
    - */
    - virtual void setRawOffset(int32_t offsetMillis);
    -
    - /**
    - * Returns the TimeZone's raw GMT offset (i.e., the number of milliseconds to add
    - * to GMT to get local time, before taking daylight savings time into account).
    - *
    - * @return The TimeZone's raw GMT offset.
    - * @stable ICU 4.0
    - */
    - virtual int32_t getRawOffset(void) const;
    -
    - /**
    - * Queries if this time zone uses daylight savings time.
    - * @return true if this time zone uses daylight savings time,
    - * false, otherwise.
    - * @stable ICU 4.0
    - */
    - virtual UBool useDaylightTime(void) const;
    -
    - /**
    - * Queries if the given date is in daylight savings time in
    - * this time zone.
    - * This method is wasteful since it creates a new GregorianCalendar and
    - * deletes it each time it is called. This is a deprecated method
    - * and provided only for Java compatibility.
    - *
    - * @param date the given UDate.
    - * @param status Output param filled in with success/error code.
    - * @return true if the given date is in daylight savings time,
    - * false, otherwise.
    - * @deprecated ICU 2.4. Use Calendar::inDaylightTime() instead.
    - */
    - virtual UBool inDaylightTime(UDate date, UErrorCode& status) const;
    -
    - /**
    - * Returns true if this zone has the same rule and offset as another zone.
    - * That is, if this zone differs only in ID, if at all.
    - * @param other the <code>TimeZone</code> object to be compared with
    - * @return true if the given zone is the same as this one,
    - * with the possible exception of the ID
    - * @stable ICU 4.0
    - */
    - virtual UBool hasSameRules(const TimeZone& other) const;
    -
    - /**
    - * Gets the first time zone transition after the base time.
    - * @param base The base time.
    - * @param inclusive Whether the base time is inclusive or not.
    - * @param result Receives the first transition after the base time.
    - * @return TRUE if the transition is found.
    - * @stable ICU 4.0
    - */
    - virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/;
    -
    - /**
    - * Gets the most recent time zone transition before the base time.
    - * @param base The base time.
    - * @param inclusive Whether the base time is inclusive or not.
    - * @param result Receives the most recent transition before the base time.
    - * @return TRUE if the transition is found.
    - * @stable ICU 4.0
    - */
    - virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/;
    -
    - /**
    - * Returns the number of <code>TimeZoneRule</code>s which represents time transitions,
    - * for this time zone, that is, all <code>TimeZoneRule</code>s for this time zone except
    - * <code>InitialTimeZoneRule</code>. The return value range is 0 or any positive value.
    - * @param status Receives error status code.
    - * @return The number of <code>TimeZoneRule</code>s representing time transitions.
    - * @stable ICU 4.0
    - */
    - virtual int32_t countTransitionRules(UErrorCode& status) /*const*/;
    -
    - /**
    - * Gets the <code>InitialTimeZoneRule</code> and the set of <code>TimeZoneRule</code>
    - * which represent time transitions for this time zone. On successful return,
    - * the argument initial points to non-NULL <code>InitialTimeZoneRule</code> and
    - * the array trsrules is filled with 0 or multiple <code>TimeZoneRule</code>
    - * instances up to the size specified by trscount. The results are referencing the
    - * rule instance held by this time zone instance. Therefore, after this time zone
    - * is destructed, they are no longer available.
    - * @param initial Receives the initial timezone rule
    - * @param trsrules Receives the timezone transition rules
    - * @param trscount On input, specify the size of the array 'transitions' receiving
    - * the timezone transition rules. On output, actual number of
    - * rules filled in the array will be set.
    - * @param status Receives error status code.
    - * @stable ICU 4.0
    - */
    - virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
    - const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) /*const*/;
    -
    - /**
    - * Get time zone offsets from local wall time.
    - * @internal
    - */
    - virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
    - int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) /*const*/;
    -
    -private:
    - void deleteRules(void);
    - void deleteTransitions(void);
    - UVector* copyRules(UVector* source);
    - TimeZoneRule* findRuleInFinal(UDate date, UBool local,
    - int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const;
    - UBool findNext(UDate base, UBool inclusive, UDate& time, TimeZoneRule*& from, TimeZoneRule*& to) const;
    - UBool findPrev(UDate base, UBool inclusive, UDate& time, TimeZoneRule*& from, TimeZoneRule*& to) const;
    - int32_t getLocalDelta(int32_t rawBefore, int32_t dstBefore, int32_t rawAfter, int32_t dstAfter,
    - int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const;
    - UDate getTransitionTime(Transition* transition, UBool local,
    - int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const;
    - void getOffsetInternal(UDate date, UBool local, int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt,
    - int32_t& rawOffset, int32_t& dstOffset, UErrorCode& ec) const;
    -
    - InitialTimeZoneRule *fInitialRule;
    - UVector *fHistoricRules;
    - UVector *fFinalRules;
    - UVector *fHistoricTransitions;
    - UBool fUpToDate;
    -
    -public:
    - /**
    - * Return the class ID for this class. This is useful only for comparing to
    - * a return value from getDynamicClassID(). For example:
    - * <pre>
    - * . Base* polymorphic_pointer = createPolymorphicObject();
    - * . if (polymorphic_pointer->getDynamicClassID() ==
    - * . erived::getStaticClassID()) ...
    - * </pre>
    - * @return The class ID for all objects of this class.
    - * @stable ICU 4.0
    - */
    - static UClassID U_EXPORT2 getStaticClassID(vo